В общем, с этим трояном все было понятно с самого начала: он что-то скачивает из сети.
Но по каким-то причинам (одна из них — обнаружение Каспером как 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
Теги: #информационная безопасность #вирусы #Антивирусная защита #реверс-инжиниринг
-
Самый Быстрый Конвертер Dvd В Mp4
19 Dec, 24 -
Черная Оптимизация На Примере Mail.ru
19 Dec, 24 -
Как Работает Concurrenthashmap
19 Dec, 24 -
Конкурс Дизайна Пк Следующего Поколения
19 Dec, 24