Привет, Хабр! На связи снова команда UserGate uFactor, и мы продолжаем делиться нашими исследованиями в области кибербезопасности. В прошлом материале мы рассказали о двух сценариях атаки: об атаке через LNK-файлы с применением криптографических методов и о многоступенчатой загрузке через BAT-файлы. В этот раз разберем атаку, основанную на фишинговой рассылке вредоносного программного обеспечения DarkWatchman (Buhtrap).

Рисунок 1. Пример содержимого фишинговой рассылки
Рисунок 1. Пример содержимого фишинговой рассылки

В первую очередь необходимо определить почтовый сервер отправителя и соотнести его с электронным адресом на предмет подмены (spoofing). Для этого необходимо просмотреть заголовок электронного письма. Это можно сделать стандартными средствами Outlook (открыть EML-файл в Outlook, затем нажать «Файл» → «Свойства») или воспользоваться специализированными программами.

Рисунок 2. Фрагмент заголовка электронного письма
Рисунок 2. Фрагмент заголовка электронного письма

Мы видим, что рассылка распространяется с почтового сервера ponyexpress.website и соответствует электронному адресу отправителя, IP-адрес — 195.19.93.148. Далее можно получить информацию об этом IP-адресе. На рисунке 3 представлены сведения, полученные при помощи интернет-ресурса AbuseIPDB.

Рисунок 3. Сведения об IP-адресе почтового сервера
Рисунок 3. Сведения об IP-адресе почтового сервера

К электронному письму приложен файл — это ZIP-архив, содержащий ВПО DarkWatchman. Исследуемый образец DarkWatchman — это SFX-архив, который содержит сценарий инсталляции и основной вредоносный модуль, написанный на JavaScript. В ресурсах добавлена иконка, имитирующая PDF-файлы, по умолчанию включено «Скрывать расширение для зарегистрированных типов файлов» — это позволяет вводить пользователя в заблуждение.

Рисунок 4. Визуальное отображение ВПО при стандартных параметрах проводника Windows
Рисунок 4. Визуальное отображение ВПО при стандартных параметрах проводника Windows

Посмотреть ресурсы исполняемого файла можно при помощи программы ProcessHacker.

Рисунок 5. Сведения о ресурсах, содержащихся в ВПО, полученные при помощи ProcessHacker
Рисунок 5. Сведения о ресурсах, содержащихся в ВПО, полученные при помощи ProcessHacker

Получить сведения о файле (о компиляторе, языке программирования, используемом для написания ПО, и других параметрах) можно при помощи Detect It Easy, PE-bear и пр.

Рисунок 6. Сведения о файле, полученные при помощи Detect It Easy
Рисунок 6. Сведения о файле, полученные при помощи Detect It Easy

Для анализа ВПО, упакованного в SFX-архив, можно воспользоваться WinRAR и открыть архив с его помощью.

Рисунок 7. Сведения о содержимом SFX-архива
Рисунок 7. Сведения о содержимом SFX-архива

На рисунке 7 в правой части можно увидеть сценарий, который будет выполнен при запуске ВПО. Сценарий указывает на следующее: добавляются исключения для системного диска при помощи PowerShell и осуществляется запуск файла 4157934657 при помощи wscript. Так как wscript отвечает за запуск скриптовых сценариев (например, VBS, JavaScript и т. п.), можно предположить, что файл 4157934657 является скриптовым сценарием. Извлечем его из архива и проанализируем.

Рисунок 8. Фрагмент содержимого файла 4157934657
Рисунок 8. Фрагмент содержимого файла 4157934657
Рисунок 9. Фрагмент содержимого файла 4157934657
Рисунок 9. Фрагмент содержимого файла 4157934657

Метод сокрытия строк реализован через XOR-операции. Для анализа можно воспользоваться, например, онлайн-компилятором и поэтапно исследовать строки.

Сначала проанализируем часть скрипта, где вычисляется ключ для расшифровки основного модуля. Фрагмент представлен на рисунке 10.

Рисунок 10. Фрагмент кода
Рисунок 10. Фрагмент кода

Для расшифровки воспользуемся интернет-ресурсом OneCompiler. На рисунке 11 представлен метод, используемый для расшифровки (в левой части), и полученные строки (в правой).

Рисунок 11. Получение строк при помощи OneCompiler, первый этап
Рисунок 11. Получение строк при помощи OneCompiler, первый этап

Теперь поправим скрипт, записав полученные строки.

Рисунок 12. Преобразование фрагмента в удобочитаемый код
Рисунок 12. Преобразование фрагмента в удобочитаемый код

Далее преобразуем вредоносный скрипт для расшифровки основного модуля, содержащегося в переменной var i1a0a864a = "db460075cc43160ac6420b6edb460075df42150acf460130f24c172c..."; (см. рис. 8 и 9). Расшифровывать будем также при помощи OneCompiler.

Рисунок 13. Преобразованный скрипт и расшифровка
Рисунок 13. Преобразованный скрипт и расшифровка

Для удобства восприятия скопируем полученный код в de4js.

Рисунок 14. Используем de4js для удобного чтения
Рисунок 14. Используем de4js для удобного чтения
Рисунок 15. Фрагмент кода основного вредоносного модуля
Рисунок 15. Фрагмент кода основного вредоносного модуля

Анализ кода показал, что ВПО многофункционально. Наиболее интересными являются алгоритм генерации доменов (domain generation algorithm) и использование DynamicWrapperX.

Рисунок 16. Фрагмент кода функции алгоритма генерации домена
Рисунок 16. Фрагмент кода функции алгоритма генерации домена

Было бы более правильным сказать, что речь идет о генерации URL, так как, хотя изменения и касаются домена, по итогам работы алгоритма будет сгенерирован новый URL. Алгоритм выглядит следующим образом:

import js2py

url_prefix = 'https://'

url_zones = ['.online', '.store', '.site', '.fun', '.space', '.shop']

url_suffix = '/index.php'

default_salt = '2d187a42'

domains = ['bd0baba4', '101ff85d', 'c87cecad', '00712ceb', 'cffab9dc', '3725284b', 'b695ecf2', 'b21851ce', 'b6c98b7a', 'b9ef072b', '5acc6ea7', 'b390342d', '975d38de', '75d7f08b', '13c9e43f', '9e3b6298', '7dd00d3e', '1f07839e', 'c06f244e', 'ae70386a']

outdomainsold = []

outdomainsnews = []

oldurl = []

 

 

gmt_date = input('input your data (expample: Mon,23Dec2024) for today date, just press Enter: ')

if gmt_date == '':

 from datetime import datetime

 d = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')

 da = d.split(' ')

 if len(da) > 3:

  gmt_date = da[0] + da[1] + da[2] + da[3]

 

salt = input('if your know new salt, enter or skip press Enter: ')

if salt == '':

 salt = default_salt

 

def int2hex32(s):

 r = hex(s)[2:]

 while len(r) < 8:

  r = '0' + r

 return r

# В функции используется оригинальная функция из JavaScript-кода, так как Python не умеет работать с такими побитовыми сдвигами (>>>)

def crc32(input_string):

 fj = "function crc32(r) {for (var a, o = [], c = 0; c < 256; c++) {a = c;for (var f = 0; f < 8; f++) a = 1 & a ? 8590457354 ^ a >>> 1 : a >>> 1;o[c] = a}for (var n = -1, t = 0; t < r.length; t++) n = n >>> 8 ^ o[255 & (n ^ r.charCodeAt(t))];return (-1 ^ n) >>> 0};"

 crc = js2py.eval_js(fj)

 return crc(input_string)

 

def get_current_domains(salt):

 for domain in domains:

  outdomainsold.append(domain)

 for i in range(100):

  out = int2hex32(crc32(gmt_date + salt + str(i)))

  outdomainsnews.append(out)

 

def get_actually_url():

 current_domains = get_current_domains(salt)

 print("URL HardCore: ")

 for i in outdomainsold:

  for zone in url_zones:

   url = url_prefix + i + zone + url_suffix

   oldurl.append(url)

 print(oldurl)

 print("URL YOUR Date Choice: ")

 for i in outdomainsnews:

  for zone in url_zones:

   url = url_prefix + i + zone + url_suffix

   print(url)

 

get_actually_url()

Также ВПО умеет работать с WinAPI при помощи DynamicWrapperX с использованием dynwrapx.dll. Суть алгоритма: в ответе командного сервера могут быть дополнительные модули; ВПО выделяет память в процессе, записывает в нее команды (код) от командного сервера и исполняет их при помощи WinAPI.

Рисунок 17. Вызов функции исполнения полезной нагрузки от командного сервера
Рисунок 17. Вызов функции исполнения полезной нагрузки от командного сервера
Рисунок 18. Работа с WinAPI, исполнение нового потока (полезная нагрузка)
Рисунок 18. Работа с WinAPI, исполнение нового потока (полезная нагрузка)
Рисунок 19. Регистрация dynwrapx.dll для работы с WinAPI
Рисунок 19. Регистрация dynwrapx.dll для работы с WinAPI

Заключение

Вредонос DarkWatchman обладает широкой функциональностью, среди его возможностей:

  • очистка журналов событий;

  • удаление теневых копий;

  • использование планировщика заданий для автозагрузки;

  • очистка истории браузеров (Chrome, Yandex, Firefox, Edge);

  • загрузка и исполнение файлов;

  • работа с командной строкой;

  • кейлоггер.

Атака с использованием DarkWatchman, как и многие подобные атаки, начинается с фишингового письма, вложение в котором скрывает свою истинную природу. Основной модуль выполняется за счет сценария, размещенного в замаскированном SFX-архиве. Для избежания детектирования автоматизированными СЗИ и усложнения статического анализа DarkWatchman использует XOR-шифрование строк. Для стабильного сетевого взаимодействия используется генератор доменных имен. И конечно, все это дополняется большим набором функций для взаимодействия с оператором.

# Mail server

195.19.93.148

# Mail Sender

mail@ponyexpress.website

# REG

HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\fjhsfgds

HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\<[0-9a-f]{9}>

# C&C – закрепленные в коде

'https://bd0baba4[.]online/index[.]php'

'https://bd0baba4[.]store/index[.]php'

'https://bd0baba4[.]site/index[.]php'

'https://bd0baba4[.]fun/index[.]php'

'https://bd0baba4[.]space/index[.]php'

'https://bd0baba4[.]shop/index[.]php'

'https://101ff85d[.]online/index[.]php'

'https://101ff85d[.]store/index[.]php'

'https://101ff85d[.]site/index[.]php'

'https://101ff85d[.]fun/index[.]php'

'https://101ff85d[.]space/index[.]php'

'https://101ff85d[.]shop/index[.]php'

'https://c87cecad[.]online/index[.]php'

'https://c87cecad[.]store/index[.]php'

'https://c87cecad[.]site/index[.]php'

'https://c87cecad[.]fun/index[.]php'

'https://c87cecad[.]space/index[.]php'

'https://c87cecad[.]shop/index[.]php'

'https://00712ceb[.]online/index[.]php'

'https://00712ceb[.]store/index[.]php'

'https://00712ceb[.]site/index[.]php'

'https://00712ceb[.]fun/index[.]php'

'https://00712ceb[.]space/index[.]php'

'https://00712ceb[.]shop/index[.]php'

'https://cffab9dc[.]online/index[.]php'

'https://cffab9dc[.]store/index[.]php'

'https://cffab9dc[.]site/index[.]php'

'https://cffab9dc[.]fun/index[.]php'

'https://cffab9dc[.]space/index[.]php'

'https://cffab9dc[.]shop/index[.]php'

'https://3725284b[.]online/index[.]php'

'https://3725284b[.]store/index[.]php'

'https://3725284b[.]site/index[.]php'

'https://3725284b[.]fun/index[.]php'

'https://3725284b[.]space/index[.]php'

'https://3725284b[.]shop/index[.]php'

'https://b695ecf2[.]online/index[.]php'

'https://b695ecf2[.]store/index[.]php'

'https://b695ecf2[.]site/index[.]php'

'https://b695ecf2[.]fun/index[.]php'

'https://b695ecf2[.]space/index[.]php'

'https://b695ecf2[.]shop/index[.]php'

'https://b21851ce[.]online/index[.]php'

'https://b21851ce[.]store/index[.]php'

'https://b21851ce[.]site/index[.]php'

'https://b21851ce[.]fun/index[.]php'

'https://b21851ce[.]space/index[.]php'

'https://b21851ce[.]shop/index[.]php'

'https://b6c98b7a[.]online/index[.]php'

'https://b6c98b7a[.]store/index[.]php'

'https://b6c98b7a[.]site/index[.]php'

'https://b6c98b7a[.]fun/index[.]php'

'https://b6c98b7a[.]space/index[.]php'

'https://b6c98b7a[.]shop/index[.]php'

'https://b9ef072b[.]online/index[.]php'

'https://b9ef072b[.]store/index[.]php'

'https://b9ef072b[.]site/index[.]php'

'https://b9ef072b[.]fun/index[.]php'

'https://b9ef072b[.]space/index[.]php'

'https://b9ef072b[.]shop/index[.]php'

'https://5acc6ea7[.]online/index[.]php'

'https://5acc6ea7[.]store/index[.]php'

'https://5acc6ea7[.]site/index[.]php'

'https://5acc6ea7[.]fun/index[.]php'

'https://5acc6ea7[.]space/index[.]php'

'https://5acc6ea7[.]shop/index[.]php'

'https://b390342d[.]online/index[.]php'

'https://b390342d[.]store/index[.]php'

'https://b390342d[.]site/index[.]php'

'https://b390342d[.]fun/index[.]php'

'https://b390342d[.]space/index[.]php'

'https://b390342d[.]shop/index[.]php'

'https://975d38de[.]online/index[.]php'

'https://975d38de[.]store/index[.]php'

'https://975d38de[.]site/index[.]php'

'https://975d38de[.]fun/index[.]php'

'https://975d38de[.]space/index[.]php'

'https://975d38de[.]shop/index[.]php'

'https://75d7f08b[.]online/index[.]php'

'https://75d7f08b[.]store/index[.]php'

'https://75d7f08b[.]site/index[.]php'

'https://75d7f08b[.]fun/index[.]php'

'https://75d7f08b[.]space/index[.]php'

'https://75d7f08b[.]shop/index[.]php'

'https://13c9e43f[.]online/index[.]php'

'https://13c9e43f[.]store/index[.]php'

'https://13c9e43f[.]site/index[.]php'

'https://13c9e43f[.]fun/index[.]php'

'https://13c9e43f[.]space/index[.]php'

'https://13c9e43f[.]shop/index[.]php'

'https://9e3b6298[.]online/index[.]php'

'https://9e3b6298[.]store/index[.]php'

'https://9e3b6298[.]site/index[.]php'

'https://9e3b6298[.]fun/index[.]php'

'https://9e3b6298[.]space/index[.]php'

'https://9e3b6298[.]shop/index[.]php'

'https://7dd00d3e[.]online/index[.]php'

'https://7dd00d3e[.]store/index[.]php'

'https://7dd00d3e[.]site/index[.]php'

'https://7dd00d3e[.]fun/index[.]php'

'https://7dd00d3e[.]space/index[.]php'

'https://7dd00d3e[.]shop/index[.]php'

'https://1f07839e[.]online/index[.]php'

'https://1f07839e[.]store/index[.]php'

'https://1f07839e[.]site/index[.]php'

'https://1f07839e[.]fun/index[.]php'

'https://1f07839e[.]space/index[.]php'

'https://1f07839e[.]shop/index[.]php'

'https://c06f244e[.]online/index[.]php'

'https://c06f244e[.]store/index[.]php'

'https://c06f244e[.]site/index[.]php'

'https://c06f244e[.]fun/index[.]php'

'https://c06f244e[.]space/index[.]php'

'https://c06f244e[.]shop/index[.]php'

'https://ae70386a[.]online/index[.]php'

'https://ae70386a[.]store/index[.]php'

'https://ae70386a[.]site/index[.]php'

'https://ae70386a[.]fun/index[.]php'

'https://ae70386a[.]space/index[.]php'

'https://ae70386a[.]shop/index[.]php'

HASH

----------------------------------

 

 

4157934657

 

e45e91d6a776d4d4c5a39bd13a01704d

566a5b9328874ba747be4f5b331277ce15ae5898

99b6062a9dabf81011e569495d0b31e7b3cdb049d73fe34ab72615ff8d1f8d39

 

----------------------------------

 

 

cerodedu.ads

 

cbaca0553f9a13f9b540a55a5cc03bab

20253b3300fb0ec9c6e56e95b4cf080c78c41719

022f581ce15b4f8ce63fd9ba218b865d48124bda1518eb3b7155d461a3bffc37

 

----------------------------------

 

 

esadiftwin.dm

 

f1eec66e15aff1fcf23dbafa9f8e205b

2e7c0312a98fafb886c583bc29e1fabe11ed3cb8

caf6f4f4c11e65163472ca48f72a6beaee20a4ac66cd419bef4c7b726602409b

 

----------------------------------

 

 

fautmand.pi

 

3440632fa1b3837fce0e3bb4f1910138

0c6f8f0de2a14542f68ab23fb20460ecdccf7c5c

dc293682142759dbec88d19d536df5c17b18789af0a44bdd4879f3371bd88751

 

----------------------------------

 

 

gacittled.re

 

7f8b6c929cea9b45a73a4cb6f4ad030a

3d32cf65fa7b26bcfdbe85892cc5f384c21c63db

a436cc567334682957eed5fc80e8e4575be169c58032458dad97a7fd6d7deab6

 

----------------------------------

 

 

loffin.sot

 

47b1c1b01bc866c7dcecc2f283ab3396

72578e3adfa3119bffae602a5df951e9a09d97e2

bef60c4f17b8a8ee3d5ad732f43104d2f4c3a3045fb437f703b99705d3b3af55

 

----------------------------------

 

 

nitryporm.ly

 

93e39c7275a7377ff837992141789593

40e0d90a868166cd36c896b6be389acbfa8a1cdc

b61900a4208a9aed35dcdd706fbf0bab417abfeaef6aa1c8fca7f68575a14ef2

 

----------------------------------

 

 

nsdothry.nti

 

ff13c0e958d09c467b594d61706be4e7

f27768b2685fcd5ca2ab7f880bbf502871ed37ba

20612c0e26b5a25efc22ccb5b44e4f1b7dd152a846073d1881d3c04089039907

 

----------------------------------

 

 

nslisfil.yli

 

2e85e26f1bcf5f1672a53daf39f2a168

61e4ac99d32b5b8207584ebf87c70b6d9b4cc902

de0f099a6f7bde71538999345e8fd460ff173efdd0e521024700a13253a1a706

 

----------------------------------

 

 

rtwir.cu

 

782dc802d8efd2b75bef589a20c94024

5fe4ec6bdbd579068831a822e86670e2160d2147

e80dc7946e566ddc3f84e10e83d276cc69cc8ff7040bd0cd8e99c8f8306cfb8f

 

----------------------------------

 

 

stnestsh.opl

 

5812e9a2bfdc59a34a6b5aeb7a2fdb3a

42706bf6f6bcfac6c3b25057a86a7385fb393720

09c18ecb453e89a205cc6e5e5032a85139a2a034c1b39a85be7ba23e147e4bb8

 

----------------------------------

 

 

Накладная №55-0780-2219.exe

 

22ce5e4c54352d99f9dc0326591b6526

af47d787e78812184270d4fda2c5abd9efbbfdba

d1348d73eafbcd78a584ce7c57542331061bbd44d2b425644e92d01368ad6862

 

----------------------------------

 

 

Накладная №55-0780-2219.zip

 

2ad2f698bc13114796a44392a0f82012

523ec8ed85b2eadd08662bc7fb67653e2456c9af

5654faf2d7d2bf6e8fcca0ff5bf12d10c284503632cbc964466cc810ded31571

Комментарии (0)