Непристойный Троян.

В общем, с этим трояном все было понятно с самого начала: он что-то скачивает из сети.

Но по каким-то причинам (одна из них — обнаружение Каспером как P2P-Worm.Win32.Socks.s) я решил его «разобрать».

Ниже под катом приведены технические подробности открытия трояна.

Внимание, здесь несколько слов без цензуры и много технических подробностей! Сегодня на столе лежит файл Services.exe размером чуть менее 20 000 байт. Не запаковано, написано на какой-то версии ВК.

После обработки файла IDA останавливается на WinMain. И в WinMain мы сразу видим: .

text:00403444 нажмите ebp .

text:00403445 мов ebp, esp .

text:00403447 нажмите 0FFFFFFFFh .

text:00403449 сдвиг смещения unk_404140 .

text:0040344E сдвиг смещения loc_403540 .

text:00403453 mov eax, большой fs:0 .

text:00403459 нажмите eax .

text:0040345A mov big fs:0, esp .

text:00403461 нажмите ecx .

text:00403462 нажмите ecx .

text:00403463 суб esp, 10h .

text:00403466 нажмите ebx .

text:00403467 нажмите esi .

text:00403468 нажмите редактирование .

text:00403469 mov [ebp+var_18], esp .

text:0040346C и [ebp+var_4], 0 .

text:00403470 и dword ptr [ebp+Time+4], 0 .

text:00403474 mov eax, dword ptr [ebp+Time+4] .

text:00403477 mov dword ptr [eax], 0DFADBABEh .

text:0040347D или [ebp+var_4], 0FFFFFFFFh .

text:00403481 jmp loc_40352B … .

text:0040352B loc_40352B:; ССЫЛКА НА КОД: WinMain(x,x,x,x)+3D .

text:0040352B mov ecx, [ebp+var_10] .

text:0040352E mov big fs:0, ecx .

text:00403535 поп-эди .

text:00403536 поп-эси .

text:00403537 поп ebx .

text:00403538 уйти .

text:00403539 возврат через 10 часов .

text:00403539 _WinMain@16 endp Но давайте обратим внимание на код, начинающийся с адреса 0x403470 — очевидная попытка доступа к адресу 0x000000! В этот момент вызывается обработчик SEH, и в результате управление передается туда, где оно должно быть.

Подобный трюк используется как минимум еще раз в WinMain. Но WinMain приготовил еще пару сюрпризов, например, управление передается следующему коду: .

text:00401EA3 loc_401EA3:; ССЫЛКА КОД: WinMain(x,x,x,x):loc_4034C9 .

text:00401EA3 нажмите ebp .

text:00401EA4 мов ebp, esp .

text:00401EA6 нажмите 0FFFFFFFFh .

text:00401EA8 сдвиг смещения unk_404120 .

text:00401EAD сдвиг смещения loc_403540 .

text:00401EB2 mov eax, большой fs:0 .

text:00401EB8 push eax .

text:00401EB9 mov big fs:0, esp .

text:00401EC0 push ecx .

text:00401EC1 push ecx .

text:00401EC2 push ecx .

text:00401EC3 нажмите ebx .

text:00401EC4 push esi .

text:00401EC5 нажмите редактирование .

text:00401EC6 mov [ebp-18h], esp .

text:00401EC9 и двойное слово ptr [ebp-4], 0 .

text:00401ECD mov eax, 1 .

текст:00401ECD; — .

text:00401ED2 dw 3F0Fh .

text:00401ED4 дд 45C70B07h, 0FFFFFFFCch, 0FC4D83FFh, 6A14EBFFh, 8BC35801h .

text:00401ED4 дд 6580E865h, 4D8300E7h, 458AFFFCh, 0B002EBE7h, 0F04D8B01h .

text:00401ED4 дд 0D8964h, 5F000000h, 0C3C95B5Eh Неверный код операции.

Олли в этот момент напрочь отказывается переходить к следующей инструкции.

То есть у нас есть своего рода антиотладочная техника.

И последняя хитрость — обнаружение VMWare, которое быстро и легко определяется с помощью следующей инструкции: .

text:00401F34 mov eax, 'VMXh' .

text:00401F39 mov ebx, 8685D465h .

text:00401F3E mov ecx, 0Ач .

text:00401F43 mov dx, 5658h .

text:00401F47 в eax, dx По сути, WinMain выполняет две функции: усложняет жизнь исследователю и передает (если все как надо) управление полезной нагрузке.

Через WinMain не шел, но в самом начале перенес EIP напрямую в PayLoad. Сначала троянец, как обычно, готовит данные для своей грязной работы: расшифровывает все строки и узнает адреса нужных API-функций (LoadLibrary + GetProcAddress, причем не в цикле).

Шифрование строки представляет собой XOR с одним байтом, хотя ключ везде разный.

Алгоритм легко узнаваем: .

text:0040100E loc_40100E:; КОД XREF: decryptXor+37 j .

text:0040100E mov eax, [ebp+pos] .

text:00401011 вкл.

eax .

text:00401012 mov [ebp+pos], eax .

текст:00401015 .

text:00401015 loc_401015:; ССЫЛКА КОДА: decryptXor+C j .

text:00401015 push [ebp+lpString]; lpString .

text:00401018 вызов ds:lstrlenA .

text:0040101E cmp [ebp+pos], eax .

text:00401021 короткий jge loc_401039 .

text:00401023 mov eax, [ebp+lpString] .

text:00401026 добавить eax, [ebp+pos] .

text:00401029 movsx eax, байт ptr [eax] .

text:0040102C xor eax, [ebp+ключ] .

text:0040102F mov ecx, [ebp+lpString] .

text:00401032 добавить ecx, [ebp+pos] .

text:00401035 mov [ecx], al .

text:00401037 короткий jmp loc_40100E В Delphi, кстати, такая функция расшифровки заняла бы две страницы.

Вот почему я не люблю Delphi. Далее идет вызов WSAStartup — подготовка к работе с Windows Sockets, попытка удалить файл c:\stop (именно по имени этого файла однозначно идентифицируется троянец), подготовка строк, содержащих необходимые пути.

Интересен следующий момент: троянец открывает свой файл на чтение, перемещает позицию чтения на 0x43 байта и читает оттуда 8 байт. Я смотрю на это место в HIEW. Упс! Да, у нас здесь заголовок, измененный ВРУЧНУЮ! 0x43 — это только начало строки «Эта программа.

», и здесь у нас есть load\0. Следующим шагом нашей программы будет вычисление некой уникальной строки на основе пути к системному каталогу Windows и серийного номера диска.

Теперь троянец будет проверять наличие в системе двух файлов: %Windows%\system32\drivers\services.exe и svchost.exe в каталоге текущего пользователя.



Когда троянец не установлен в системе, он переключается на очень интересный код. Сначала из строки (!) посредством собственной реализации функции atoi получается число, которое затем умножается на 1000, и полученный результат передается в функцию Sleep, то есть осуществляется регулируемая задержка.

Существует задержка, прежде чем троянец получит аргументы командной строки, соберет их все вместе и передаст WinExec. Это вызывает подозрения, что троянец может быть прописан как программа по умолчанию для открытия файлов! Отсутствие аргументов обрабатывается корректно.

Прежде чем совершить деструктивные действия, троянец проверяет наличие мьютекса в системе и, если мьютекс уже есть, прекращает свою работу.

Если братьев нет, он создает два потока, один из которых в цикле проверяет наличие файла c:\stop (если он существует, то завершает процесс), а второй осуществляет работу с сетью.

Последний штрих — извлечение файла ftp34.dll из вашего тела (шифрование XOR, ключ — 1 байт) в каталог пользователя и каталог системы с последующей его загрузкой.

Чтобы усложнить жизнь пользователю, дата создания этих файлов будет такой же, как и у системных.

Сетевая активность.

Вся работа с сетью сосредоточена в одном из потоков трояна.

В том же потоке троянец копирует себя в %Windows%\system32\drivers\services.exe, файл svchost.exe в каталоге текущего пользователя и файл userinit.exe в «Автозагрузку» главного меню Windows (и также редактирует дату).

(В этот момент я по глупости позволил трояну выйти из-под контроля и пришлось восстанавливать систему из образа).

Регистрируется в реестре минимум в 5 местах.

И, как я и ожидал, она прописана как программа по умолчанию для открытия EXE-файлов.



Тег в начало ThreadProc ставить не буду, опять тупо и цинично подменю EIP на его начало :-)

Так что насчет сети? Предпринята попытка запросить URL-адрес типа site.com/shl/?&v=load&lid=1033. Whois сообщает, что контактное мыло этого сайта находится на mail.ru, а IP-адрес принадлежит российскому хостеру.

Что передается в URL? «загрузка» — это именно тот кусок, который был извлечен из шапки сайта, а 1033 — это идентификатор языка системы.

Если вы зайдете на site.com/shl/ в браузере, вы увидите изображение и форму входа.



Непристойный Троян.

" alt="Непристойный троян.

">

Это логотип! Я установил shttpd на Venda и зарегистрировал 127.0.0.1 для site.com в etc/hosts. Но есть проблема: Shttpd плохо работает с URL-адресами, содержащими "?" справляется.



Решается проблема просто: скачиваем с сервера нужный файл с помощью wget, переименовываем его в shl.txt и перед вызовом InternetReadFile от трояна патчим URL в памяти, чтобы он стал site.com/shl.txt.

Теперь сервер отдаст файл, а троянец его примет.

Сначала я подумал, что трояну нужна эта страница, чтобы как-то отправить логин и пароль.

Но все оказалось проще: троянец ищет строку «метод формы» и, если она существует, продолжает загрузку.

На этот раз файл скачивается с URL site.com/shl/manda.phpЭns=1&id=1212312124, где id — уникальный номер (подробнее о получении см.

выше).

Но у меня почему-то этот файл не скачался :-( Возможно на сервере стоит блокировка по IP, кто знает. Но на работе файл скачался.

Там список URL в открытом виде.

Код такой довольно просто, и становится понятно, что с указанных URL-адресов скачиваются файлы и запускаются их на исполнение, делается это из отдельного потока.

Полученные результаты.

Касперс ошибся с названием, и я еще раз убедился, что такие файлы - это как минимум Downloaders. Авторы трояна - русскоязычные товарищи, которые продают троян.

Менее 20% кода подробно не анализировалось, но судя по описанию на сайте авторов, а также текстовым строкам, Троянец способен собирать адреса электронной почты для спам-рассылок.

Библиотека ftp34.dll, скорее всего, используется для перехвата паролей FTP. Я думаю, что смогу подробно разобраться во всем остальном на работе.

Вот он что, троян "залупко" :-) ОБНОВЛЯТЬ Продолжение

"> vilgeforce.habrahabr.ru/blog/44145.html



Теги: #информационная безопасность #вирусы #Антивирусная защита #реверс-инжиниринг
Вместе с данным постом часто просматривают: