Как стать автором
Обновить

Вирусная стеганография

Время на прочтение5 мин
Количество просмотров3.6K
Для начала — пара вводных замечаний. Замечание первое: в связи с заштопанной правой рукой печатать мне неудобно, посему опечатки могут быть. Замечание второе: для кого-то все ниженаписанное может не быть в новинку, но что уж поделать! Зато остальным, надеюсь, будет интересно. Поехали!

Многие пользователи считают файрволлы и фильтры траффика надежной защитой от вирусов. В общем, настроить эти средства можно так, чтобы существенно усложнить жизнь вирусам, но это будет довольно непростой проблемой. О паре моментов, с которыми придется столкнуться я и расскажу. Под катом, как всегда, много технических подробностей, кода и местами бессвязных мыслей.

На вскрытии — Trojan.DownLoad.921 по нашей, DrWeb'овской терминологии.

Файл имеет размер 20992 байта, упакован UPX. Является DLL с двумя экспортируемыми функциями: ClearAV и DoWork. Написан, по информации от PEiD, на VC 6-й версии.

Отпечаток лапы
Интересная особенность трояна в коде, находящимся в начале некоторых функций:
.text:10004490
.text:10004490 ; BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
.text:10004490 _DllMain@12: ; CODE XREF: DllEntryPoint+4Bp
.text:10004490 push ebp
.text:10004491 mov ebp, esp
.text:10004493 sub esp, 108h
.text:10004499 push esi
.text:1000449A push edi
.text:1000449B nop
.text:1000449C nop
.text:1000449D clc
.text:1000449E jnb short near ptr loc_100044A0+1
.text:100044A0
.text:100044A0 loc_100044A0: ; CODE XREF: .text:1000449Ej
.text:100044A0 call near ptr loc_1000468C+1
.text:100044A5 add cl, ch
.text:100044A7 pop edx


Или более понятным образом:
.text:10004490
.text:10004490 ; BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
.text:10004490 _DllMain@12: ; CODE XREF: DllEntryPoint+4Bp
.text:10004490 push ebp
.text:10004491 mov ebp, esp
.text:10004493 sub esp, 108h
.text:10004499 push esi
.text:1000449A push edi
.text:1000449B nop
.text:1000449C nop
.text:1000449D clc
.text:1000449E jnb short loc_100044A1
.text:1000449E ; — .text:100044A0 db 0E8h ; ш
.text:100044A1 ; — .text:100044A1
.text:100044A1 loc_100044A1: ; CODE XREF: .text:1000449Ej
.text:100044A1 call loc_100044A7
.text:100044A1 ; — .text:100044A6 db 0E9h ; щ
.text:100044A7 ; — .text:100044A7
.text:100044A7 loc_100044A7: ; CODE XREF: .text:loc_100044A1j
.text:100044A7 pop edx


Условный переход (в данном случае по адресу 1000449E) всегда выполняется, то есть вместо call имеем jnb + call. Довольно характерный «отпечаток пальца», который, думаю, служит для усложнения анализа. Но IDA позволяет легко работать с таким кодом.

Жертвы
После выполнения startup-кода, троян проверяет, какой же процесс его загрузил. Удовлетворят трояна только процессы с именами flashget.exe, Thunder.exe, QQMusic.exe, QQLive.exe, QQDownload.exe, svchost.exe, explorer.exe. По именам программ понятно, что троян нацелен, в первую очередь, на китайских пользователей. Если загрузившее DLL приложение удовлетворяет трояна, то производится создание нового потока приложения, содержащего полезную нагрузку. Дальнейшие действия выполняются уже в новом потоке.

Payload
Активная дейстельность трояна начинается с расшифровки URLа (алгоритм расшифровки не разбирал) и загрузке файла с адреса server.com/logo1.gif в файл с именем package.tmp во временном каталоге текущего пользователя. Загружаемый файл действительно является gif-рисунком, но при просмотре его в Hiew внутри виден EXE-файл! Имеет место стеганография — сокрытие самого факта передачи чего-то лишнего. Попытка скачать файл (как и все остальные скачиваемые файлы) производится 5 раз с паузами в 20 секунд. В скачанном файле последние 4 байта — смещение «трояновской» информации от начала файла, которая включает в себя длину EXE файла. Извлекается встроенный файл во временный каталог текущего пользователя. После успешного извлечения файла вызывается DeleteUrlCacheEntry, думаю, для скрытия того факта, что загружался файл. Аналогичным образом скачиваются файлы server.com/logo2.gif, server.com/logo3.gif и server.com/logo4.gif. Суммарный объем — около 860 Кб!
После того, как файлы будут скачаны, производится совершенно непонятная операция: производится получение MAC-адреса сетевой карты и сравнение его с 2 жестко зашитыми адресами. Причем сравнивается адрес целиком, а не только производитель. И зашиты адреса не VMWare-карт. Единственная логичная мысль — защита авторов от своего детища. Получение же MAC-адреса производится зверским путем — через вызов ipconfig /all с разбором ответа! Как бы то ни было, даже если MAC-адреса совпадут, троян не завершит работы, он просто пропустит кусок кода.
Если MAC-адреса не совпали, производится поиск окна. Судя по всему, ищется окно QQ2006 — китайского аналога ICQ. Правда, поиск ведется по полному заголовку (вклюячающему и номер билда), что, возможно, является ошибкой авторов. Если окно найдено, управление передается на тот же код, что и при совпадении MAC-адресов. Иначе производится загрузка и сохранение файлa server2.cn/logo.gif (процесс аналогичен вышеописанному).
После этого производится попытка запуска извлеченных из GIF-файлов фрагментов, извлеченный из server2.cn/logo.gif файл не запускается. Успешнсоть запуска не проверяется, но при неудаче попыток будет довольно много.

Вирусный апгрейд
Затем производится загрузка файла server.com/xin/version.gif, представляющего собой ini-файл. В нем содержится номер версии, которая считывается и сравнивается с версией трояна, жестко зашитой в его теле. Если INI-файл успешно загружен и версия в нем больше, чем у трояна, будет загружен файл server.com/xin/update.gif (а вот это уже нормальный EXE-файл).
В конце работы производится обращение к устройству MAYASYS. Предположительно, скачанный в процедуре обновления файл имеет к этому устройству непосредственное отношение.

Прочие функции
ClearAV, предположительно, скрывает некие процессы, одновременно взаимодействуя с устройством MAYASYS (которого у меня, понятно дело, в системе небыло). Какие именно процессы должны быть скрыты — не понятно, потому что троян запускался не в тех условиях, на которые он расчитан.
Дальнейшие действия функции ясны из ее названия: она убивает работающие антивирусы: каспера, Rising Personal FireWall, Symantec (кажется его) и еще совершенно непонятный антивирус (а может и вирус :-).
Функция DoWork вызывает ClearAV, а потом производит Inject в процесс explorer.exe

Противостояние файрволлам
Наиболее очевидный способ защиты от троянов — запрет на передачу данных всем приложениям, кроме явно указанных. Но тут он не сработает: троян является DLL и расчитан на загрузку из svchost и explorer. И если запрет на сетевую активность для explorer — это еще можно понять, то вот svchost запрещать — дурное дело. Настает черед фильтрации по портам: троян хочет 80-й, а svchost обычно может без него обойтись. Остается еще QQ, которая также может загрузить трояна в память. Особенностей сетевой работы этого софта я не знаю, но смело предположу, что использует он 80-й порт. Оппа, приехали: запрет на порт и приложение уже не поставить. А если смотреть на запрашиваемые файлы, все будет довольно безобидно — gif-картинки. Нужна фильтрация содержимого, да и то непростая. Простым способом фильтр обойден, что и требовалось показать. Более серьезные способы обхода фильтров описаны в одной из статей Криса Касперски. Настоятельно, кстати, рекомендую читать все статьи его авторства ;-)

Заключение
На анализ попал троян, являющийся частью комплекса вредоносных программ. В него, я считаю, должны входить как минимум драйвер устройства MAYASYS и дроппер, который скидывает анализируемую DLL на диск и прописывает ее в систему. В дальнейшем, именно драйвер и дроппер были найдены. Довольно простым и бесхитростным способом троян обходит файрволлы, которые защитить могут далеко не от всякой заразы.
Неясные моменты: действительно ли функция ClearAV выполняет функции руткита? Зачем проверяются MAC-адреса? Какое именно окно ищет троян? Зачем загружаются файлы, которые никогда не запускаются?
Теги:
Хабы:
+50
Комментарии56

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн