Pull to refresh

Вирусный анализ на примере — исследуем Trojan-Downloader.Win32.Zanoza.ab

Reading time 5 min
Views 25K
Вы когда-нибудь задумывались о том, какова судьба вируса, пойманного антивирусными компаниями? О том, что происходит с ним ещё до добавления сигнатур в базу? А конкретнее, о вирусном анализе. Может показаться, что самому заниматься вирусным анализом сложно, ненужно и опасно, но на самом деле это совершенно не так. Лишние умения никогда не повредят, да и полезно, иногда, посмотреть перед запуском, что из себя представляет скачанный с интернета исполняемый файл. Для начала работы сгодятся любые знания ассемблера, отладчик с дизассемблером и виртуальная машина на выбор.

Образцы вирусов для анализа можно, конечно, поискать самостоятельно в интернете, но мы с Вами для начала пойдём другим путём. Огромную коллекцию уже готовых для анализа вирусов можно взять на сайте vx.netlux.org. Первым приглянувшимся мне вирусом стал Trojan-Downloader.Win32.Zanoza.ab. Его подробнейшим анализом мы сейчас и займёмся. Кстати, неплохие описания вирусов можно посмотреть на сайте securelist.com.



Первым, что бросается в глаза, является размер файла — всего 1 901 байт. Можно подумать, что из-за малого размера весь функционал вируса будет виден как на ладони, но не будем торопиться. Убедимся в любом 16-ричном редакторе, что файл является исполняемым файлом Windows (по сигнатурам MZ и PE), и загрузим его в любой отладчик-дизассемблер. Картина открывается не радостная:

image


Мало того, что все секции и заголовки собраны в одну кучу, так и файл, очевидно, чем-то запакован. Далее можно пойти двумя путями. Первый – вручную трассировать программу до обнаружения точки входа и дальнейшее снятие дампа (новичку не рекомендуется). Второй более простой — попробовать определить упаковщик программы и распаковать её автоматически. Пойдём вторым путём. Загружаем программу в PIED:

image


Нам повезло, PIED успешно обнаружил упаковщик FSG. Скачиваем любой автоматический распаковщик FSG и успешно снимаем один слой защиты (например, Unfsg2.0):

image


Снова загрузим программу в отладчик-дизассемблер. Мы увидим ещё один слой защиты:

image


Да, взору открылась полная бессмыслица. Однако можно быть уверенным, что мы на правильном пути. Это вполне нормальный исполняемый код, только немного обфусцированный. Причём плохо обфусцированный: пригладитесь, код просто разбавлен ничего не делающими командами nop и ничего не значащими push reg и pop reg. Пролистаем программу немного вниз и увидим главный расшифровывающий цикл:

image


Трассируем программу вот до этого места:

image


И попадаем на уже полностью расшифрованный код программы (не забудьте обновить окно отладчика для корректного отображения команд):

image


Теперь снимем полученный дамп любым доступным Вам инструментом. Наконец, нам открылся некоторый функционал вируса:

image


Тут начинается непосредственный анализ. Первым делом при запуске вирус вызывает процедуру, расположенную по адресу 0х401128. Нетрудно догадаться, что эта функция создаёт командный файл с именем «c.bat», следующего содержания:

image


Идём дальше. После создания bat-файла программа запускает его на исполнение. Начинается крутиться бесконечный цикл попытки удаления файлов chkdsk*.exe, а так же самого исходного файла, путь к которому был бережно передан сценарию через параметр командной строки. Мы увидим на экране множество сменяющих друг друга окон консоли. Теперь идёт самое интересное. Вирус порождает дочерний процесс svсhost.exe в приостановленном состоянии и записывает в него код размером 764 байта, расположенный начиная со смещения 0х401180. Очевидно, что исполняемый файл svсhost.exe был выбран с целью обхода некоторых не особо интеллектуальных файрволов и антивирусов, а также и для того, чтобы пользователь случайно не завершил работающий процесс вируса. Куда же вирус производит инжект? Программист решил особо не напрягаться и просто перезаписал код, на который указывает точка входа исполняемого файла. Как он определил нужный адрес? Вирус банально подгрузил в своё адресное пространство образ svhost.exe функцией LoadLibraryEx. А после этого уже легко определил нужный адрес по стандартным смещениям исполняемого файла Windows (данный участок кода расположен по адресам 0x4010A6 — 0x4010AC). Итак, инжект осуществлён и данному исполняемому файлу осталось лишь передать эстафету приостановленному процессу sсvhost.exе. Возникает вопрос, как исследовать заражённый процесс? Можно, конечно вручную выделить нужный код и затем отдельно его анализировать, но при этом его функциональность и работоспособность могут сильно пострадать. Я не долго думал и решил запустить все это на виртуальной машине и сдампить svсhost.exe во время его работы. Итак, трассируем основную программу до вызова ResumeThread, открываем ProcessExplorer:

image


И находим PID нужного нам процесса (в принципе, можно было узнать PID ещё в отладчике, ну да ладно). Переводим 1356 из 10 в 16-ричную систему, получим 0х54С. Далее запускаем LordPE и пытаемся снять дамп с процесса:

image


Видим, что у нас недостаточно прав для этого действия из-за того, что процесс уже отлаживается другой программой. Т.к. мы работаем в окружении виртуальной машины, то можно просто продолжить выполнение основной программы, после чего беспрепятственно снять нужный нам дамп. Внимание!!! Этот шаг совершается на Ваш страх и риск!!! У меня всё прошло благополучно, и я получил готовый для анализа заражённый файл svhost.exe:

image


Мы опять видим цикл расшифровки:

XOR BYTE PTR DS:[EBX-5],0хB1
INC EBX
LOOPD SHORT 0х100251D

Если данную программу запустить на выполнение, то она вылетит с ошибкой, т.к. в секцию кода запись запрещена. Немного подумаем: раз с процесса был снят дамп во время работы, то цикл расшифровки уже завершился. И теперь при запуске программа будет пытаться себя уже зашифровать. Этого нам не надо, поэтому для дальнейшего анализа занопим весь цикл расшифровки. К этому моменту мы уже намного продвинулись, не так ли? Трассируем в виртуальной машине дальше:

image


Видим цикл, расположенный по адресам 0х10255С-0х1002587. Его предназначение – определение адресов жизненно важных для работы кода WinAPI функций. Само сравнение имён происходит в данном месте:

image


После определения нужных адресов WinAPI функций мы сталкиваемся ещё с одним слоем защиты. Заражённая программа вызывает функцию VirtualAlloc для выделения дополнительной области памяти, в которую копируется ещё один слой вредоносного кода, передача управления на который производится с помощью команды JMP EAX:

image


Наконец, нам открылся сам функционал вируса. Вредоносный код подгружает стандартную динамическую библиотеку «urlmon.dll» с целью использования функции URLDownlodToFile, после чего с её помощью производится непосредственная загрузка файлов chkdsk*.exe. Вот момент загрузки файла:

image


Здесь происходит выполнение загруженного файла:

image


А вот и завершение процесса:

image


Отметим так же интересные ссылки для дальнейшего анализа:

00270204 68 74 74 70 3A 2F 2F 77 77 77 2E 79 76 6F 6E 2D www.yvon-
00270214 70 75 62 6C 69 63 69 64 61 64 2E 63 6F 6D 2F 69 publicidad.com/i
00270224 6D 61 67 65 73 2F 69 6D 61 67 65 73 2E 70 68 70 mages/images.php
00270234 3F 77 3D 31 26 65 3D 32 00 68 74 74 70 3A 2F 2F ?w=1&e=2.http://
00270244 77 77 77 2E 79 76 6F 6E 2D 70 75 62 6C 69 63 69 www.yvon-publici
00270254 64 61 64 2E 63 6F 6D 2F 69 6D 61 67 65 73 2F 69 dad.com/images/i
00270264 6D 61 67 65 73 2E 70 68 70 3F 77 3D 32 26 65 3D mages.php?w=2&e=
00270274 32 00 68 74 74 70 3A 2F 2F 77 77 77 2E 79 76 6F 2.http://www.yvo
00270284 6E 2D 70 75 62 6C 69 63 69 64 61 64 2E 63 6F 6D n-publicidad.com
00270294 2F 69 6D 61 67 65 73 2F 69 6D 61 67 65 73 2E 70 /images/images.p
002702A4 68 70 3F 77 3D 33 26 65 3D 32 00 68 74 74 70 3A hp?w=3&e=2.http:
002702B4 2F 2F 77 77 77 2E 79 76 6F 6E 2D 70 75 62 6C 69 //www.yvon-publi
002702C4 63 69 64 61 64 2E 63 6F 6D 2F 69 6D 61 67 65 73 cidad.com/images
002702D4 2F 69 6D 61 67 65 73 2E 70 68 70 3F 77 3D 34 26 /images.php?w=4&

Время подвести итоги: анализируемая программа без ведома пользователя загружает из интернета файлы неизвестного содержания и запускает их на исполнение. Вот, собственно, и всё, что данное вредоносное ПО умеет делать, поэтому его можно отнести к категории Trojan-Downloader-ов. Как видите, анализ вредоносного ПО оказался не таким уж и сложным, хотя мы и столкнулись с достаточно большим количеством слоёв защиты. Удачи Вам в вирусном анализе!
Tags:
Hubs:
+80
Comments 30
Comments Comments 30

Articles