4 minute read

Привет Emotet! Исследуем вредоносный документ Excel

Исследуем вредоносный документ с вновь набирающим популярность трояном Emotet.

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

Статья выходит довольно обширная, в связи с этим, будет состоять из двух частей, т.к. здесь я постараюсь доступно изложить исследование вредоносного документа формата Excel (такие документы сегодня используются в фишинговых кампаниях по всему миру для заражения трояном Emotet), а после исследования вредоносного документа решим задание от cyberdefenders.org, в котором нам предложат поковырять дамп оперативной памяти, с уже зараженного хоста, давайте приступать.

Часть 1

Практиковаться будем на довольно свежем сэмпле от 03.11.2022г., который загрузим c https://bazaar.abuse.ch/.(рисунок 1).

1

По статистике мы видим, что количество сэмплов, связанных с данным вредоносом особенно выросло в последнее время.

2

Итак, давайте начнем исследование. Будем проводить работу, используя образ REMnux, т.к. данный образ уже содержит много полезных утилит и изолированную ОС Windows 10 с предустановленным MS Office. Распакуем файл и воспользуемся утилитами для исследования MS Office документов из пакета oletools от Didier Stevens. Утилита oileid показывает, что в файле содержится только XLM Macros (Рисунок 3)

3

Olevba дает нам более полную картину (рисунок 4) и показывает, что есть функция Auto_Open типа AutoExec, это означает, что код функции выполняется сразу после открытия документа. Также есть «подозрительные» слова: Hex, Windows etc. Часто во вредоносных файлах попадаются слова: xor, base64, shell и другие.

4

Не будем оставлять без внимания и информацию выше от olevba (до таблицы на Рисунке 4), в которой видно, что 6 листов (sheet) скрыты от глаз любопытных пользователей, т.е. имеют атрибут hidden.

5

Еще обратим внимание, что содержимое листов 1-5 собирается в G13 на 6 листе в формуле (рисунок 6). Вся эта информация нам понадобится.

6

Напоследок, давайте пройдемся утилитой strings, возможно нам удастся найти что-нибудь интересное сразу? (Рисунок 7) strings -a Emotet.xls

7

Мы видим популярную функцию URLDownloadToFile (Win API) для загрузки файлов со сторонних ресурсов и сами ресурсы. (метод strings далеко не всегда работает, т.к. зачастую приходится прежде деобфусцировать код, а иногда и расшифровать перед анализом).

Пришла пора идти в Windows (рисунок 8). Здесь мы наблюдаем самую обычную картинку от злоумышленников, с просьбой разместить файл по определенному пути (разумеется, это не предупреждение от MS Office), крайне рекомендую при открытии файлов внимательно изучать текст ошибок (если такие будут), ведь зачастую это просто VBA макросы или другие трюки, а не настоящие ошибки от MS Office или Windows, и злоумышленники умудряются там допускать грамматические ошибки и совершать опечатки (человеческий фактор). В будущих статьях с разбором фишинга у некоторых APT группировок это проявляется, подробно опишу как это выглядит.

8

Следующим этапом давайте сделаем видимыми остальные листы с 1 по 6: ПКМ sheet -> «Show».(рис 9)

9

На каждом из 6 скрытых листов установлен пароль, чтобы его снять, перейдём в режим разработчика Alt+F11, ctrl +G (внизу появится окно Immediate) и ПКМ на листе с паролем -> Insert Module и вводим код для брутфорса пароля от листа (ниже):

Sub PasswordBreaker()

'Breaks worksheet password protection.

Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
Dim Str As String
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
Str = Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Debug.Print Str
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub

Исполняем код (F5) и в окне Immediate наблюдаем пароль от листа на рисунке 10.

10

К остальным 5 листам пароль подходит: ПКМ -> снять защиту – вводим пароль и наблюдаем с виду чистые листы, но выделив содержимое: ctrl +A и изменив цвет шрифта на черный увидим текст разбросанный по листам и ячейкам. Внимательный читатель наверняка помнит, что на 6 листе в ячейке G13 (рисунок 6 данной статьи) всё добро собирается воедино, следовательно там будем смотреть. Для этого развернём свернутый столбец G на рисунке 11.

11

Как мы видим здесь код, необходимый для загрузки вредоносного ПО на хост со сторонних вредоносных ресурсов.

И запуска ВПО в режиме silence - regsrv32.exe /S из директории выше : =EXEC(“C:\Windows\System32\regsvr32.exe /S ..\oxnvN.ooccxx”)

Мы рассмотрели интересный и довольно простой способ сокрытия данных при заражении вредоносным ПО и нашли некоторые IoC’и. В других статьях познакомимся с куда более интересными методами, которые используют иностранные APT группировки для обфускации кода и доставки вредоносных файлов.

Во второй части статьи попрактикуемся на примере расследования инцидента в дампе оперативной памяти, зараженного трояном Emotet от cyberdefenders.org, речь пойдет о скрытых процессах и их поиске.

Updated: