Ошибка Резидента

Недавно я получил письмо примерно следующего содержания:

Уважаемый X. Мы очень заинтересованы в Вашей кандидатуре, поэтому не прочь узнать друг друга поближе.

Сначала вам необходимо скачать нашу форму корпоративного резюме summary.exe, заполнить ее и отправить нам обратно.

С уважением, сетевые злодеи.

Что характерно, ссылка на резюме была написана именно так.

резюме.

exe (не нажимайте, ссылка есть для примера).

Они вообще есть или что? Скачайте и посмотрите.

Размер файла 159744 байта и на первый взгляд упакован.

Касперский знает программу под названием " Троян.

Win32.Srizbi.v ".

Ида ужасно ругается на испорченный импортный стол.

Это и понятно — ясно видно, что файл запакован.



Ошибка резидента

Код (синий участок) занимает около пяти процентов от размера программы, но данных очень много.

Эти данные, скорее всего, представляют собой упакованный код. Особенно пугают названия сегментов: «_67D&NEk&» или «_uoeWPJ3» вместо чего-то привычного типа «.

code».

Точка входа не где-то в начале файла, а в какой-то заднице.

Пробуем пару распознавателей упаковщиков, типа PEID — безрезультатно, они с этим упаковщиком не знакомы.

Поэтому сразу переходим к активным действиям.

Мы не будем анализировать, как упакована программа.

Раз уж она умеет распаковывать вещи, давайте позволим ей сделать это самой.

(Этот случай оказался довольно простым; в других случаях запуск программы может привести к ужасным вещам).

Загружаем файл в отладчик, ставим точку останова на CreateFile. Это логично, не так ли? Любая вредоносная программа должна его использовать, верно? (На самом деле, здесь мы можем допустить несколько больших ошибок.

Например, если бы программа использовала «родную» функцию ZwCreateFile, которая находится уровнем ниже CreateFile).

.

и запустить его на исполнение.

Здесь нас ждет сюрприз номер 1. Проходит 15-20 секунд (!), прежде чем выполнение останавливается на входе в CreateFile. Судя по всему, программа была упакована и перепакована вдоль и поперёк и не один раз.

Мы старались изо всех сил, если не сказать больше.

Остановившись у входа в CreateFile, посмотрите на имя открываемого файла:

 kernel32!CreateFileA:
 7c801a24 8bff            mov     edi,edi
 0:000> da poi(esp+4)
 0012fe70  "C:\WINDOWS\system32\drivers\gran"
 0012fe90  "de48.sys"
Водитель! Эта штука пахнет руткитами.

Пока программа стоит, делаем дамп чем-то вроде PE Tools, и проверяем его в дизассемблере.

Он до сих пор ругается, теперь уже на ИАТ, но это несмертельно.

В отладчике смотрим стек вызовов, находим откуда была вызвана функция, возвращаемся в дизассемблер, находим этот код. Вызов CreateFile выглядит примерно так

 call ds:42C1C8
что нам ни о чем не говорит. Поэтому с помощью команды dds в Windbg находим адреса реальных функций, и вручную передаем их в работу (коих не так много, около двадцати).

Теперь у нас есть имена вызываемых функций (как если бы таблица импорта была восстановлена вручную), и мы можем анализировать код в дизассемблере.

Он получается очень простой, линейный, почти без ответвлений.

Приведу полный код основной функции: ; Атрибуты: кадр на основе bp Main_40164F процесс рядом var_32C= двойное слово ptr -32Ch String1= байтовая точка -228h Windir= байтовый параметр -124h var_20= двойное слово ptr -20h нажать ebp мов эбп, особенно суб esp, 32Ch позвоните unxor_401040 вызовите SetupImports_401248 вызовите ds:GetTickCount_0 mov ds:TickCount_42C1AC, eax нажмите 104ч ; uSize Леа Эакс, [ebp+Windir] нажмите eax ; lpBuffer вызовите ds:GetWindowsDirectoryA Леа Эакс, [ebp+Windir] нажмите eax Леа Еакс, [ebp+String1] нажмите eax вызовите ds:lstrcpyA Леа Экс, [ebp+Windir] нажмите eax Леа Еакс, [ebp+var_32C] нажмите eax вызовите ds:lstrcpyA нажмите ds:lpString2 Леа Еакс, [ebp+var_20] нажмите eax вызовите ds:lstrcpyA нажмите ds: dword_42C16C Леа Экс, [ebp+Windir] нажмите eax вызовите ds:lstrcatA Леа Экс, [ebp+Windir] нажмите eax вызовите ExtractDriver_4015E4 Леа Еакс, [ebp+var_20] нажмите eax Леа Экс, [ebp+Windir] нажмите eax вызовите LoadDriver_4014CB добавить esp, 0Ch позвони KillMySelf_40139F позвоните CleanUp_401000 оставлять ретн Main_40164F конечная точка Как видите, все просто.

Сначала подготавливаются строки, затем восстанавливается импорт, после чего драйвер извлекается из тела программы, сохраняется в папке с драйверами и загружается.

 ADVAPI32!CreateServiceA:
 77e37071 6a30            push    30h
 0:000> da poi(esp+8)
 0012ff74  "grande48"
Здесь хотелось бы напомнить об одном простом, но очень эффективном способе борьбы с такого рода заразой.

Достаточно запретить себе запись в системные каталоги и большинство вирусов просто не будут работать.

На этапе загрузки драйверов нас ждет второй сюрприз.

Он не загружается.

Можно часами сидеть и ждать с отладчиком в руках вызова этого долгожданного IoCreateDevice, но этот момент не наступает. После нескольких часов безуспешных попыток загрузить драйвер оказывается, что он сделан для Windows 2000! Поэтому большинство пользователей Windows, использующих XP, не боятся этой инфекции.

Вполне возможно, что так себя ведет только эта модификация, поэтому точно сказать не могу.

Кстати о водителе.

Размер 167936. Определяется Касперским как Rootkit.Win32.Agent.aih. Внутри него содержится много разного кода, который рассылает спам.

Помимо прочего, он содержит IP-адрес сервера управления: 208.66.195.172. Судя по всему, это колокейшн, а сам сервер арендован.

Не очень понятно, правда, как можно арендовать сервер для управления ботнетом) А может сервер легальный, просто на него был встроен вредоносный код, и админы его пропустили.

В общем, здесь все туманно.

Давай вернемся.

Функция KillMySelf создает bat-файл _it.bat в папке Temp и затем запускает его:

 kernel32!CreateFileA:
 7c801a24 8bff            mov     edi,edi
 0:000> da poi(esp+4)
 0012fb58  "C:\DOCUME~1\dev\LOCALS~1\Temp\_i"
 0012fb78  "t.bat"
Вот его полный текст:
:abc del "C:\sandbox\Trojan.Win32.Srizbi.v\resume.exe.txt" если существует "C:\sandbox\Trojan.Win32.Srizbi.v\resume.exe.txt", перейдите к abc rmdir "C:\sandbox\Trojan.Win32.Srizbi.v" del "C:\DOCUME~1\dev\LOCALS~1\Temp\_it.bat"
То есть пытается удалить программу, папку, в которой она находится, и наконец себя.



Заключение

Srizbi — не троян, а носитель настоящего вредоносного ПО.

Его цель — как можно быстрее (хотя и медленно) выгрузить из своего организма настоящий вирус, запустить его на исполнение, а затем исчезнуть, оставив минимум следов.

Его код прост и необъёмен, и новичкам (таким как я:) разобраться в нём довольно легко.

Из-за глупой ошибки вся работа Srizbi.v идет насмарку: он не проверяет версию операционной системы на соответствие имеющемуся в ней драйверу.

В результате система просто отказывается загружать драйвера.

Полезно заглянуть в драйвера; существует руткит, который скрывает файлы, ключи реестра, сетевые подключения и прослушивающие порты.

Теги: #вирусы #информационная безопасность

Вместе с данным постом часто просматривают: