Zeus Trojan

ob00m

VIP member
Messages
583
Reputation
99
Reaction score
166
Points
43
Zeus Trojan

Сегодня посмотрим такую вещь как бот и назвается этот бот ZeuS.

Бот сам по себе выполняет работу всеми известного Nuclear, т.е. грабит формы, юрл-редирект и прочие зловредные фичи по сбору паролей и аккаунтов пользователей. Помимо функционала нуклеара он также выполняет и функции собственно бота. Количеством комманд бот не блещет, но этого вполне достаточно чтобы загрузить на комп любой софт, а также угробить всю ОС. Да-да, в наборе комманд есть убийство всего компа, весьма приятная фича если кто-нибудь захватит контроль над панелью управления.

1. Импорт

Запустив под отладчиком найденный ехе, видим маленький стаб, который распаковывает еще один маленький стаб, который уже вконец распаковывает весь ехе и запускает его на выполнение. Перво-на-перво бот восстанавливает весь импорт нужный ему для плохих дел, тут все стандартно и обычно, поэтому нет смысла рассказывать снова.

2. Прятки в системной директории

После восстановления импорта бот копирует себя в системную директорию, и... неужели я дождался этого момента, изменяет дату своего ехе на дату из ntdll что собственно равно дате установки системы. И поэтому мой любимый способ поиска вирусов по дате файла жестко обламывается. Но ничего, напишу пару тулз и снова пущусь в бой :). А пока продолжим наш бот смотреть.

3. Контроль "ужезапущенности"

Также это чудоюдо создает мьютексы с префиксом __SYSTEM__ дабы запудрить мозг всяким там глупым реверсерам, ну и для контроля запущен ли уже бот или нет еще. Создать мьютекс кстати можно функцией CreateMutex, а открыть OpenMutex. Бот частенько открывает этот мьютекс для проверок.

4. Облегчение жизни

Чтобы не парить себе мозги всякими там слешами в конце пути, автор бота заюзал функции shlwapi такие например как PathCombineW. Применяется она для соединения пути, например, C:\Windows и имени файла, например, explorer.exe, чтобы в итоге получить вполне приемлемый путь, в данном случае C:\Windows\explorer.exe

5. Автозапуск

После копирования себя в системную папку бот начинает заботится об автозапуске. К счастью фанатазия автора ушла за пределы Run ветки реестра и остановилась на Winlogon\Userinit. В этом параметре по идее указывается процесс для инициализации рабочего стола и прочих юзерких забав типа автозапуска, но винлогон решили сделать настолько гибким, что написав через запятую много процессов, все это много и запустится. Туда и прописывается этот бот. А у вас что там прописано? :)

6. Продолжение пряток

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

7. Основной цикл

В основном цикле (не совсем уж основной но уже поближе) мы ищем жертву для OpenProcess\CreateRemoteThread. Если таковых находятся то инжектимся, нет так нет. После инжектов ожидается подключение по пайпу, через который вероятно происходит обмен инфой между внедеренными кодами. Сам же ехе после инжекта и установки связи решает завершить свой процесс, чтобы не палится в списке процессов.

8. Тырилка паролей

Еще до инжекта в процессы бот сохраняет содержимое протектед сторейжда, в котором находятся пароли юзера. Как это сделано было подробно рассказано в статье про снетч, реализация ZeuS'а не слишком отличается от реализации снетча. Экспорт ведется с паролем "pass".

9. Функционал

9.1. Граббер форм

Благодаря тому что бот инжектится во все нужные процессы, становится легко перехватить любые данные отправляемые через интернет, и для этого не нужны никакие сокеты или драйвера перехватчики. В боте реализован хук на wininet.dll, которую использует многочисленное число браузеров, и в их числе популярный ИЕ. При помощи созданных универсальных функций бот успешно обрабатывает любые запросы и может выдирать любые post данные.

9.2. Url редирект

Опять же находясь в теле нужного процесса, бот может подменить юрл по которому будет отправлен запрос. Помимо перехватов бот также может добавить запись в /drivers/etc/hosts, где хранятся пары домен-ип. Все это дает возможность создания фейк сайтов и перехват всех данных пользователя. Разумеется такие приемы сделаны не для того чтобы спереть чей-то емеил акк, все намного интереснее - банки америки, да и вообще банки стремятся сделать жизнь их клиентов намного проще и удобнее, и в итоге дают доступ к их счету через интернет. Ну а бот, настроенный на всякие такие банки, успешно собирает всю необходимую информацию для логина в банковский аакаунт и для перевода денег на любой счет.

9.3. Анти виртуальная клавиатура

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

9.4. Поиск файлов

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

9.5. Прокси

На борту бота присутствует сокс и хттп прокси сервера. Для их использования естественно необходимо иметь внешний ип, и разрешение фаерволла. Но так как большинство фаерволлов не позволяют открыть порты для прослушки в браузерах, эта фича остается под сомнением.

9.6. Кража сертификатов

Кража сертификатов из локального хранилища выполнена посредством специальных функций библиотеки crypt32.dll. Это CertOpenSystemStoreW, CertEnumCertificatesInStore и им подбные. Документация на них естественно присутствует в мсдн и готова к прочтению любым программистом :)

10. Работа из под лимитированной записи.

Для успешного функционирования даже в лимитированной учетной записи виндовс применяются различные махинации с InitializeSecurityDescriptor, SetSecurityDescriptor, CreateProcessAsUserW, OpenProcessToken. Что дает некие намеки на обход лимитов учетной записи.

Код следующий:
.cxyjir:00409D1E call ds:GetCurrentProcessId

.cxyjir:00409D24 test byte ptr [ebp+arg_0], 1

.cxyjir:00409D28 mov dword ptr ds:byte_40EC28+10h, eax

.cxyjir:00409D2D mov eax, dword ptr ds:byte_40ED2C+4

.cxyjir:00409D32 mov dword ptr ds:byte_40EC28+14h, eax

.cxyjir:00409D37 jz short loc_409D58

.cxyjir:00409D39 mov eax, dword ptr ds:unk_40EBAC

.cxyjir:00409D3E push dword ptr [eax+7Ch] ; lpProcName

.cxyjir:00409D41 push dword ptr ds:byte_40ED90+10h ; hModule

.cxyjir:00409D47 call ds:GetProcAddress

.cxyjir:00409D4D cmp eax, ebx

.cxyjir:00409D4F jz short loc_409D58

.cxyjir:00409D51 push 8007h

.cxyjir:00409D56 call eax ; unk_40EBAC

.cxyjir:00409D58

.cxyjir:00409D58 loc_409D58: ; CODE XREF: sub_409C6E+C9j

.cxyjir:00409D58 ; sub_409C6E+E1j

.cxyjir:00409D58 xor edi, edi

.cxyjir:00409D5A inc edi

.cxyjir:00409D5B push edi ; dwRevision

.cxyjir:00409D5C mov esi, offset pSecurityDescriptor

.cxyjir:00409D61 push esi ; pSecurityDescriptor

.cxyjir:00409D62 call ds:InitializeSecurityDescriptor

.cxyjir:00409D68 push ebx ; bDaclDefaulted

.cxyjir:00409D69 push ebx ; pDacl

.cxyjir:00409D6A push edi ; bDaclPresent

.cxyjir:00409D6B push esi ; pSecurityDescriptor

.cxyjir:00409D6C call ds:SetSecurityDescriptorDacl

.cxyjir:00409D72 lea eax, [ebp+hObject]

.cxyjir:00409D75 push eax ; TokenHandle

.cxyjir:00409D76 push 28h ; DesiredAccess

.cxyjir:00409D78 push ds:hProcess ; ProcessHandle

.cxyjir:00409D7E mov ds:MutexAttributes, 0Ch

.cxyjir:00409D88 mov ds:dword_40EF24, esi

.cxyjir:00409D8E mov ds:dword_40EF28, ebx

.cxyjir:00409D94 call ds:OpenProcessToken

; Open the access token associated with a process

.cxyjir:00409D9A test eax, eax

.cxyjir:00409D9C jz short loc_409DFC

.cxyjir:00409D9E lea eax, [ebp+Luid]

.cxyjir:00409DA1 push eax ; lpLuid

.cxyjir:00409DA2 mov eax, dword ptr ds:unk_40EBAC

.cxyjir:00409DA7 push dword ptr [eax+80h] ; lpName

.cxyjir:00409DAD push ebx ; lpSystemName

.cxyjir:00409DAE call ds:LookupPrivilegeValueW

.cxyjir:00409DB4 test eax, eax

.cxyjir:00409DB6 jz short loc_409DF3

.cxyjir:00409DB8 mov eax, [ebp+Luid.LowPart]

.cxyjir:00409DBB push ebx ; ReturnLength

.cxyjir:00409DBC mov [ebp+NewState.Privileges.Luid.LowPart], eax

.cxyjir:00409DBF mov eax, [ebp+Luid.HighPart]

.cxyjir:00409DC2 push ebx ; PreviousState

.cxyjir:00409DC3 push 10h ; BufferLength

.cxyjir:00409DC5 mov [ebp+NewState.Privileges.Luid.HighPart], eax

.cxyjir:00409DC8 lea eax, [ebp+NewState]

.cxyjir:00409DCB push eax ; NewState

.cxyjir:00409DCC push ebx ; DisableAllPrivileges

.cxyjir:00409DCD push [ebp+hObject] ; TokenHandle

.cxyjir:00409DD0 mov [ebp+NewState.PrivilegeCount], edi

.cxyjir:00409DD3 mov [ebp+NewState.Privileges.Attributes], 2

.cxyjir:00409DDA call ds:AdjustTokenPrivileges

; Enable/disable privileges in the specified access token

.cxyjir:00409DE0 call ds:GetLastError

.cxyjir:00409DE6 cmp eax, 514h

.cxyjir:00409DEB jnz short loc_409DF3

.cxyjir:00409DED or ds:dword_40EC9C, edi

.cxyjir:00409DF3

.cxyjir:00409DF3 loc_409DF3: ; CODE XREF: sub_409C6E+148j

.cxyjir:00409DF3 ; sub_409C6E+17Dj

.cxyjir:00409DF3 push [ebp+hObject] ; hObject

.cxyjir:00409DF6 call ds:CloseHandle

.cxyjir:00409DFC

.cxyjir:00409DFC loc_409DFC: ; CODE XREF: sub_409C6E+12Ej

.cxyjir:00409DFC call ds:GetUserDefaultUILanguage

.cxyjir:00409E02 mov word ptr ds:dword_40EC24, ax

11. Остальное

В целом сам код производит хорошее впечатление, везде GetLastError и прочие проверки. Перед удалением файлов, например, выставляются атрибуты "архивный", что предотвращает от ошибок удаления реад-онли файлов.

Итого, хороший функционал, хороший код, хорошо прячется, маленький размер и хорошо жмется. Но, мало функций как бота, лишь загрузка и исполнение ехе, да никому не нужное уничтожение ос. Из "приватных" технологий возможно лишь обход ограничений лимитированной записи, а остальное можно найти в учебниках по программированию и мсдн. Инжекты в процессы наверняка будут жестоко палится проактивкой, что сводит на нет все функции.

© хз :)
 
Last edited:
Top