Positive Technologies
PT Expert Security Center

ShadowPad: новая активность группировки Winnti

Скачать в PDF

ShadowPad: новая активность группировки Winnti

Скачать в PDF

Содержание

Введение

В марте 2020 года, в ходе исследования угроз информационной безопасности, специалисты 1 PT Eхреrt Security Center обнаружили неизвестный ранее бэкдор и назвали его xDll, по оригинальному названию в коде. В результате ошибки конфигурации контрольного сервера некоторые из папок сервера стали доступны извне. На сервере были обнаружены новые образцы:

  • ShadowPad;
  • неизвестного ранее Python-бэкдора;
  • утилиты для развития атаки;
  • зашифрованного бэкдора xDll.

ShadowPad используется группой Winnti (APT41, BARIUM, AXIOM), которая активна по меньшей мере с 2012 года. Группа происходит из Китая 2. Ключевые интересы группы — это шпионаж и получение финансовой выгоды. Основной арсенал группы состоит из ВПО собственной разработки. Winnti использует сложные методы атак, в числе которых supply chain и watering hole. Группа точно знает, кто их жертва: она очень осторожно развивает атаку и только после детального анализа зараженной системы загружает основной инструментарий. Группа атакует страны по всему миру: Россию, США, Японию, Южную Корею, Германию, Монголию, Белоруссию, Индию, Бразилию. Преимущественно нацелена на следующие отрасли:

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

Первая атака с использованием ShadowPad была зафиксирована в 2017 году 3. Бэкдор часто применяется в атаках типа supply chain (такими, к примеру, были взломы CCleaner 4 и ASUS 5). Последний отчет об активности группы Winnti с использованием ShadowPad был выпущен компанией ESET в январе 2020 года 6. Связей с нынешней инфраструктурой нам обнаружить не удалось. Однако в ходе исследования мы обнаружили пересечения новой инфраструктуры ShadowPad с инфраструктурой других групп, что может говорить о причастности группы Winnti к другим атакам, об организаторах и участниках которых не было известно ранее.

Этот отчет посвящен детальному анализу новой сетевой инфраструктуры, связанной с ShadowPad, новым образцам ВПО группы Winnti, а также анализу связей с другими атаками, за которыми может стоять данная группа (см. раздел 1.2).

1. Исследование сетевой инфраструктуры

1.1. Обнаружение ShadowPad

Поначалу, при анализе бэкдора xDll (см. раздел 2.2), явной принадлежности к какой-либо APTгруппе обнаружить не удалось. Образец имел крайне интересный контрольный сервер www. g00gle_jp.dynamic-dns[.]net, что потенциально могло говорить об атаках на Японию. Исследуя сетевую инфраструктуру и разыскивая аналогичные образцы, мы обнаружили несколько доменов со схожим названием.

Рисунок 1. Сетевая инфраструктура группы Winnti на начальном этапе анализа

Названия доменов позволяют предположить, что атаки идут еще и на Южную Корею, Монголию, Россию и США. При дальнейшем исследовании инфраструктуры мы обнаружили несколько простых неизвестных нам загрузчиков (см. раздел 2.1), которые обращаются на связанные контрольные серверы и в ответ должны получить полезную нагрузку, зашифрованную с помощью операции XOR на ключе 0x37. Найденный загрузчик мы назвали SkinnyD (Skinny Downloader) из-за его малого размера и скудной функциональности. По структуре URL и некоторым строкам SkinnyD был очень похож на бэкдор xDll.

Рисунок 2. Структура открытых папок на обнаруженном сервере

Поначалу мы не смогли получить полезную нагрузку для SkinnyD, так как все контрольные серверы были неактивны. Но через некоторое время нам удалось обнаружить новые образцы бэкдора xDll. При анализе одного из них мы нашли открытые папки на его контрольном сервере. Файл с названием x.jpg — это бэкдор xDll, зашифрованный с помощью операции XOR на ключе 0x37. Это дает право предполагать, что xDll является полезной нагрузкой для SkinnyD.

Самым интересным на сервере оказалось содержимое папки cache.

Рисунок 3. Содержимое папки cache
Рисунок 4. Пример строк из журнала (подробное описание значений параметров см. в разборе xDll)

В ней находятся данные о жертвах и ВПО, которое загружается на зараженный компьютер. В названии файла жертвы ставится MD5-хеш-сумма от MAC-адреса зараженного компьютера, который присылает xDll, а в содержимом можно увидеть последнее время соединения с контрольным сервером. По тому, как меняется вторая часть названия файла с ВПО, можно предположить, что в него ставится серверное время в наносекундах, однако оно не является верным: оно относит нас в далекий март 1990 года. Почему был взят такой период времени, нам неизвестно.

В файлах с ВПО мы обнаружили ShadowPad, неизвестный ранее Pythonбэкдор и утилиты для развития атаки. Детальный анализ ВПО и утилит представлен в разделе 2.

С различной периодичностью 7 злоумышленники запрашивают через бэкдор xDll информацию с зараженных компьютеров. Она сохраняется в файл list.gif.

Здесь стоит заметить, что в тех образцах xDll, которые есть у нас, в поле «Domain» присылается именно название домена, в котором находится зараженный компьютер. Однако в журнале практически у всех компьютеров стоит SID пользователя, от имени которого запущен xDll. Возможно, это ошибка в коде определенной версии xDll, так как никакой полезной информации для злоумышленника это значение не несет.

Углубившись в сетевую инфраструктуру, мы обнаружили, что на многих серверах установлена одна и та же цепочка из SSL-сертификатов со следующими параметрами:

  • Корневой: C=CN, ST=myprovince, L=mycity, O=myorganization, OU=mygroup, CN=myCA, SHA1=0a71519 f5549b21510410cdf4a85701489676ddb
  • Основной: C=CN, ST=myprovince, L=mycity, O=myorganization, OU=mygroup, CN=myServer, SHA1=2d2 d79c478e92a7de25e661ff1a68de0833 b9d9b
Рисунок 5. Параметры SSL-сертификата

Такой сертификат встречался в нескольких исследованиях, посвященных атакам с применением ShadowPad.

Первое — это исследование атаки на CCleaner в 2017 году. В нем эксперты Avast раскрыли некоторые подробности 8 той атаки. И на одном из скриншотов в этом документе можно увидеть такой же сертификат, что и в нынешних атаках.

Второе — доклад специалистов из FireEye на конференции Code Blue 2019 о кибератаках на Японию 9. В одной из атак специалисты обнаружили использование POISONPLUG (наименование ShadowPad, которое использует компания FireEye). При анализе инфраструктуры они обнаружили такой же сертификат на контрольных серверах ShadowPad.

Рисунок 6. Слайд из презентации FireEye

Поиск серверов с таким сертификатом помог нам выявить не только новые образцы и контрольные серверы ShadowPad, но и пересечения с другими атаками, которые ранее никак не связывались с Winnti (см. раздел 1.2).

В результате нам удалось найти более 150 IP-адресов с таким сертификатом или на которых он был установлен ранее, из них 24 были активными на момент написания статьи, — и 147 доменов, которые связаны с этими адресами. Для доменов мы обнаружили ВПО, связанное с Winnti.

За время исследования инфраструктуры домены группы переезжали с одного IP-адреса на другой множество раз, и это говорит об активной фазе атаки.

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

Такую историю с сертификатами мы наблюдали и при исследовании активности группы TaskMasters 10. В какой-то момент злоумышленники начали устанавливать на свои серверы самоподписанные сертификаты с одинаковыми метаданными, что в итоге и помогло обнаружить их инфраструктуру.

Ниже представлено распределение обнаруженных нами IP-адресов по местоположению.

Рисунок 7. Геолокация контрольных серверов

Около половины серверов группировки находятся в Гонконге. IP-адреса распределены по 45 уникальным провайдерам, при этом более половины серверов сконцентрированы на IP-адресах шести провайдеров, пять из которых находятся в Азии — в Гонконге, Китае, Южной Корее.

1.2. Пересечения с другими группами

1.2.1. TA459

В 2017 году компания Proofpoint выпустила отчет об атаках на Россию и Белоруссию с использованием ZeroT и PlugX 11. В отчете встречается домен yandax[.]net, который косвенно относился к инфраструктуре той атаки: этот домен находился на том же IP-адресе, что и один из серверов PlugX.

Рисунок 8. Данные регистранта домена yandax[.]net

За последние несколько лет на адрес dophfg@yahoo[.]com было зарегистрировано еще несколько доменов.

Рисунок 9. Домены с аналогичными WHOIS-данными

Исследуя инфраструктуру ShadowPad, мы наткнулись на активные серверы, которые связаны с двумя доменами из указанной выше группы — www.ertufg[.]com и www.ncdle[.]net. На этих серверах также находился типичный для ShadowPad SSL-сертификат. К тому же мы обнаружили образцы ShadowPad, которые соединяются с этими доменами. Один из них имел относительно старое время компиляции — июль 2017 года. Однако, судя по всему, оно ложное, так как контрольный сервер для него был зарегистрирован в августе 2018 года. Он также маскируется под компонент Bluetooth Stack для Windows компании Toshiba и имеет имя TosBtKbd.dll.

Рисунок 10. Структура доменов, связанных с ShadowPad

Здесь можно сделать еще одно предположение. Все тот же домен yandax[.]net в данных WHOIS изначально имел совершенно другой почтовые адрес — fjknge@yahoo[.]com. На этот адрес также зарегистрирован один из контрольных серверов NetTraveler — riaru[.]net. Атаки с использованием этого домена проводились на страны СНГ и Европы и были описаны исследователями из компании Proofpoint 12. В данном случае не исключен факт переиспользования инфраструктуры другой группой для маскировки своей активности. Но все же область этих атак, страны и отрасли, в значительной мере пересекается с областью интересов группы Winnti. Все это отдельные случаи косвенного пересечения, однако можно предположить, что за всеми атаками стоит одна группа.

1.2.2. Bisonal

На одном из IP-адресов инфраструктуры ShadowPad мы обнаружили домены, которые использовались при атаках с использованием Bisonal RAT в 2015—2020 годах.

Рисунок 11. Домены ShadowPad и Bisonal на одном IP-адресе

Также удалось обнаружить семпл Bisonal, связанный непосредственно с новой инфраструктурой ShadowPad.

Рисунок 12. Bisonal и инфраструктура ShadowPad

В ходе изучения этой связи мы наткнулись на презентацию 13 японского исследователя из NTT Security Хадзимэ Такаи (англ. Hajime Takai) с конференции JSAC 2020. В ней исследователь рассказывает об атаке на Японию, в цепочке которой присутствует xDll, загружающий Bisonal на зараженный компьютер.

Рисунок 13. Слайд из исследования Хадзимэ Такаи

Хадзимэ Такаи связывает эту атаку с кампанией Bitter Biscuit, о которой писали исследователи из Unit42 14. В той атаке также применялся Bisonal. Инструментарий для развития атаки, который был обнаружен Хадзимэ Такаи, практически полностью идентичен обнаруженному нами на сервере с ShadowPad, вплоть до соответствия некоторых хеш-сумм (см. раздел 2).

За атаками с применением Bisonal, как считают исследователи 15, стоит группа Tonto team. Атаки группы сконцентрированы преимущественно на трех странах — России, Южной Корее, Японии. Группа атакует правительственные организации, военные структуры, финансовые и промышленные предприятия. Все это тоже попадает в сферу интересов группы Winnti. А в связи с новыми подробностями об использовании Bisonal в связке с xDll и пересечении сетевых инфраструктур можно предположить, что за атаками с использованием Bisonal стоит группа Winnti.

1.3. Жертвы

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

Рисунок 14. Карта с часовыми поясами жертв

Большинство стран, находящихся в часовых поясах, отмеченных на карте, точно укладываются в область интересов группы Winnti.

Некоторые скомпрометированные организации нам удалось идентифицировать:

  • университет в США,
  • аудиторская компания в Голландии,
  • две строительные компании — одна в России, другая в Китае,
  • пять фирм — разработчиков ПО: одна в Германии, четыре в России.
  • Все потенциальные жертвы были уведомлены по линии национальных CERT.

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

1.4. Активность

Активность на сервере (сбор информации с жертв и появление новых утилит) происходила вне рабочего времени относительно тех часовых поясов, в которых находились жертвы: у некоторых был вечер, а у кого-то ранее утро. Такая тактика характерна для Winnti. Группа действовала так же при компрометации CCleaner, о чем писал Avast.

2. Анализ ВПО и инструментов

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

Рисунок 15. Схема доставки полезной нагрузки

Анализ времени компиляции найденных нами образцов ВПО показал соответствие с рабочим временем в часовом поясе UTC+8, в котором находятся Китай и Гонконг

Рисунок 16. Время компиляции ВПО в UTC+0
Рисунок 17. Время компиляции ВПО в UTС+8

2.1. Анализ SkinnyD

SkinnyD (Skinny Downloader) является простым загрузчиком. Он содержит в себе несколько адресов контрольных серверов, которые он последовательно перебирает.

Загрузка следующей стадии осуществляется с помощью GET-запроса на управляющий сервер по специальному URL-адресу, который генерируется согласно форматной строке, жестко прописанной в коде ВПО.

Рисунок 18. Форматная строка для URL

Получаемые с контрольного сервера данные ВПО проверяет следующим образом:

  • данные должны быть размером больше чем 0x2800 байт,
  • данные должны начинаться с байтов «4D 5A» (MZ).

Загруженный бинарный файл расшифровывается с помощью XOR и загружается с помощью техники рефлективной загрузки PE. После того как бинарный файл загружен, управление передается на экспортируемый символ «MyCode».

ВПО закрепляется на зараженном компьютере через ключ Environment\UserInitMprLogonScript 16.

Рисунок 19. Код закрепения в системе

В исследуемых экземплярах SkinnyD обнаружен интересный артефакт, связывающий его с xDll. Это строка «3853ed273b89687». Она не используется загрузчиком, возможно это артефакт билдера.

2.2. Анализ xDll

2.2.1. Дроппер

Дроппер представляет собой исполняемый файл, написанный на языке C и скомпилированный в среде разработки Microsoft Visual Studio. Имеет правдоподобную дату компиляции: 11.02.2020 09:54:40.

Рисунок 20. Общая информация о дроппере

Содержит полезную нагрузку в виде бэкдора xDll в секции data.

Рисунок 21. Еще один исполняемый файл в дроппере

Дроппер извлекает данные в объеме 59 392 байт и пытается записать их по одному из путей:

  • %windir%\Device.exe
  • %windir%\system32\browseui.dll

Затем копирует себя в каталог %windir%\DeviceServe.exe и создает сервис с именем VService, тем самым обеспечивая автозапуск в качестве службы.

Рисунок 22. Установка сервиса

После запуска сервис создает отдельный поток, в котором запускает полезную нагрузку.

Рисунок 23. Запуск полезной нагрузки

Стоит заметить, что запуск другого варианта полезной нагрузки в виде DLL-библиотеки (browseui.dll) не предусмотрен.

2.2.2. Бэкдор xDll

Бэкдор представляет собой исполняемый файл, написанный на языке C++ и скомпилированный в среде разработки Microsoft Visual Studio с использованием библиотеки MFC. Также имеет правдоподобную дату компиляции: 10.02.2020 18:14:37.

Рисунок 24. Общая информация о полезной нагрузке

Создает отдельный поток, в котором происходят все полезные действия.

В начале работы выполняет разведку в системе и собирает пользовательскую информацию:

  • имя компьютера;
  • IP-адрес;
  • кодовую страницу OEM;
  • MAC-адрес (позднее от полученного значения вычисляется MD5-хеш-сумма, которая будет использоваться при взаимодействии с управляющим сервером);
Рисунок 25. Получение MAC-адреса
  • версию ОС;
Рисунок 26. Получение версии ОС
  • заданный идентификатор «sssss» (вероятно, характеризует данную версию бэкдора);
  • информацию о том, является ли пользователь администратором;
Рисунок 27. Проверка прав
  • находится ли в виртуальном окружении;
Рисунок 28. Проверка окружения
  • домен и имя пользователя;
Рисунок 29. Получение домена и имени пользователя
  • информацию о процессоре;
Рисунок 30. Получение информации о процессоре
  • информацию об оперативной памяти;
Рисунок 31. Получение информации об оперативной памяти
  • о языке системы.
Рисунок 32. Получение информации о языке системы

Затем бэкдор расшифровывает адреса управляющего сервера. В данном случае их два, но они совпадают: www.oseupdate.dns-dns[.]com. В теле бэкдора задан третий адрес (127.0.0.1), который замещается расшифрованным.

Рисунок 33. Расшифровка адреса контрольного сервера

После получения адреса управляющего сервера отправляется GET-запрос в следующем формате:hxxp://{host}:{port}/{uri}?type=1&hash={md5}&time={current_time}, где:

  • host — адрес командного сервера;
  • port — 80-й порт;
  • uri — строка «news.php»;
  • md5 — хеш-сумма MAC-адреса (вероятно, идентификатор жертвы);
  • current_time — текущее время в системе.

Вот как это выглядит:

Рисунок 34. Пример запроса к серверу

Стоит отметить, что используется заданное значение поля HTTP-заголовка User-Agent:

Рисунок 35. Встроенный User-Agent

В ответ от сервера ожидается символ «1». Если нужный ответ приходит, отправляется POSTзапрос с базовой информацией о системе в формате JSON:

  • хеш-сумма MAC-адреса,
  • имя компьютера,
  • IP-адрес,
  • версия ОС,
  • имя домена,
  • заданный идентификатор «sssss»,
  • кодовая страница OEM.

Пример запроса:

Рисунок 36. Отправка информации о системе

Стоит заметить, что формат JSON некорректен. Кроме того, пропущено значение поля In_IP. Вероятно, предполагалось, что будут определены как внутренний IP-адрес, так и внешний. Но логика определения внешнего адреса в данном варианте xDll еще не реализована. Еще одна характерная деталь: заданное значение поля HTTP-заголовка Referer: post_info. Значение поля HTTP-заголовка User-Agent также выбирается другое:

Следом запускается цикл обработки команд, поступающих от командного сервера. Для этого бэкдор отправляет GET-запрос, формат которого совпадает с описанным выше. Единственное отличие: значение параметра type: вместо «1» теперь значение «2».

В ответе от сервера ожидается строчная латинская буква (от a до z). В таблице ниже приведены команды и соответствующие действия.

Команда Действие

c

Собрать и отправить информацию о подключенных томах в системе

d

Собрать и отправить содержимое папок

e

Получить файл от сервера, сохранить в системе и отправить отчет об успехе

f

Запустить указанный файл средствами ShellExecuteA и отправить отчет об успехе

g

Удалить указанный файл средствами ShellExecuteA и отправить отчет об успехе

h

Загрузить указанный файл на сервер

j

Собрать и отправить список процессов в системе

k

Завершить указанный процесс и отправить отчет об успехе

l

Выполнить команду средствами cmd.exe и отправить вывод

m

Продолжить коммуникацию с cmd.exe. Выполнение дальнейших команд

n

Собрать и отправить список служб в системе

o

Отправить всю информацию, полученную в результате разведки

q

То же, что для команды d

u

Начать всю коммуникацию с командным сервером заново

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

Рисунок 37. Пример команды на загрузку файла

Следом запрашивается файл и возвращается его содержимое:

Рисунок 38. Содержимое файла, отправленное на сервер

Затем отправляется отчет об успешной загрузке:

Рисунок 39. Отчет об успешной загрузке файла

Вновь обратите внимание на характерное значение поля Referer: upfile, а также тип передаваемых данных (image/pjpeg — изображение) и имя передаваемого файла: {md5}.gif (используется хеш-сумма MAC-адреса).

Отметим, что в случае обработки команды по сбору листинга папки (команда d) запятая не является разделителем. Вместо этого ожидается, что путь до каталога начинается со второго символа: например, «d|C:\Users».

Рисунок 40. Листинг папки

Данные передаются в формате JSON, причем в этот раз форматирование корректно.

Ниже пример отправки информации, полученной в результате анализа системы (команда o).

Рисунок 41. Отправка информации о системе

Данные вновь передаются в формате JSON, но с меньшим числом ключей.

Шаблоны JSON-строки заданы в бэкдоре, а сама строка формируется конкатенацией, без использования специальных библиотек.

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

Рисунок 42. Результат команды на исполнение кода

2.3. ShadowPad

Как ранее указывалось, на одном из серверов xDll мы обнаружили открытые папки, в одной из которых находился ShadowPad. Особых различий с предыдущими версиями мы не выявили, поэтому ниже представлен краткий анализ свежей версии.

2.3.1. Загрузчик ShadowPad и обфускация

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

Рисунок 43. Цикл расшифрования основного модуля

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

Рисунок 44. Обфускация, используемая в загрузчике

Данный тип обфускации встречался в предыдущих версиях ShadowPad и заключается во вставке определенных байтов в различные участки кода, которые предварительно обозначены двумя противоположными условными переходами, указывающими на один и тот же адрес. Чтобы избавиться от данной обфускации, необходимо заменить указанные байты (например, на операционный код nop).

После получения необходимых адресов API-функций и размещения в памяти необходимых участков кода управление передается на этап установки бэкдора.

2.3.2. Модули ShadowPad

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

Рисунок 45. Вызовы функций расшифрования и декомпрессии встроенных в бэкдор модулей
Название модуля ID Время компиляции
Root 5E6909BA GMT: Wednesday, 11 March 2020 г., 15:54:34
Plugins 5E69097C GMT: Wednesday, 11 March 2020 г., 15:53:32
Online 5E690988 GMT: Wednesday, 11 March 2020 г., 15:53:44
Config 5E690982 GMT: Wednesday, 11 March 2020 г., 15:53:38
Install 5E69099F GMT: Wednesday, 11 March 2020 г., 15:54:07
DNS 5E690909 GMT: Wednesday, 11 March 2020 г., 15:51:37

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

Рисунок 46. Расположение времени сборки в заголовке шеллкода

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

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

Рисунок 47. Код расшифровки строк в ShadowPad
Рисунок 48. Пример обфускации вызова API-функции
Рисунок 49. Деобфусцированные вызовы на примере модуля Install

Для закрепления на компьютере бэкдор копирует себя в папку C:\ProgramData\ALGS\ с именем Algs.exe, после чего создает службу с таким же именем.

Рисунок 50. Созданная для закрепления служба

После закрепления ВПО запускает новый процесс svchost.exe, после чего внедряет в него свой код и передает ему управление.

Рисунок 51. Код создания процесса и внедрения в него

2.3.3. Конфигурация ShadowPad

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

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

Рисунок 52. Расшифрованная конфигурация ВПО

2.3.4. Сетевой протокол

Формат пакетов, использовавшийся во всех версиях ShadowPad, остался неизменным 17. Формирование пакетов, отправляемых на сервер, характеризуется тем, что тело пакета и его заголовок генерируются отдельно друг от друга. После их конкатенации (без какого-либо дополнения) пакет накрывается алгоритмом шифрования, логика которого близка к логике используемых для дешифрования основного модуля и строк внутри бэкдора. Реализация алгоритма представлена на рис. 53.

Рисунок 53. Код шифрования пакета, используемый при обмене с сервером управления

Шифрованные пакеты, принимаемые от сервера, имеют достаточно простую структуру (на примере Init-пакета):

Рисунок 54. Структура пакета ShadowPad

2.4. Python-бэкдор

Данный бэкдор был обнаружен на сервере в формате py2exe. Бэкдор написан на Python 2.7 и в начале имеет конфигурационные переменные.

Может выполнять удаленно три команды:

  • «CMDCMD» — выполнить через cmd.exe;
  • «UPFILECMD» — загрузить файл на сервер;
  • «DOWNFILECMD» — скачать файл с сервера.

Команду «ONLINECMD» бэкдор выполняет сразу после запуска: это сбор информации о системе с последующей отправкой на сервер.

Рисунок 55. Конфигурация бэкдора
Рисунок 56. Команды на сбор информации о системе

Бэкдор имеет функцию закрепления через реестр:

После закрепления и сбора информации о системе происходит упаковка данных и их загрузка на управляющий сервер. Взаимодействие с сервером происходит через TCP-сокеты:

Перед отправкой данные дополняются некоторыми значениями, сжимаются ZLIB и кодируются в Base64.

Рисунок 57. Алгоритм упаковки данных

В коде на рис. 55:

  • Flag — значение, инициализируемое при старте бэкдора;
Рисунок 58. Инициализация параметра flag
  • Key — значение из конфигурационные изменения;
  • Cmd — выполненная команда из конфигурационных переменных;
  • Data — собранные данные.

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

Рисунок 59. Формирование финального пакета данных
Рисунок 60. Пример сформированных данных

После отправки изначальных данных о системе бэкдор переходит в бесконечный цикл и ждет команду от сервера.

Рисунок 61. Основной цикл

2.5. Утилиты

На сервере мы также обнаружили утилиты для lateral movement. Большинство из них опенсорсные, доступны на GitHub и изначально написаны на Python, но сконвертированы в PE. На сервере имелись:

  • утилиты 18 для проверки наличия уязвимости MS17-010 и ее эксплуатации;
  • утилита LaZagne 19 для сбора паролей;
  • утилита 20 get_lsass для дампа паролей на x64-системах;
  • NBTScan;
  • утилита DomainInfo для сбора информации о домене.

В утилите для проверки MS17-010 есть небольшое изменение: злоумышленники добавили возможность проверять целую подсеть.

Рисунок 62. Модифицированная утилита для проверки MS17-010

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

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

  • имя компьютера;
  • имена пользователей компьютера, разбитые по группам;
  • имя домена;
  • имя группы, в которую входит текущий пользователь;
  • имена групп, которые есть в домене;
  • имена пользователей каждой группы.

Вся информация собирается легитимным способом с помощью API-функций библиотеки Netapi32.dll и сохраняется в папку с утилитой в формате XML.

Интересно, что утилита скомпилирована в 2014 году на версии Microsoft Visual Studio 2005 года и имеет PDB «e:\Visual Studio 2005\Projects\DomainInfo\Release\Domain05.pdb».

Заключение

Мы проанализировали инфраструктуру группы Winnti, и можем заключить, что активность в ней идет с начала 2019 года. В настоящее время эта инфраструктура только разрастается, что говорит об активных действиях Winnti. По нашим данным, группа уже скомпрометировала более 50 компьютеров, и некоторые из которых них могут послужить «плацдармом» для последующих, более серьезных атак. Группа добавила в свой арсенал несколько новых видов ВПО — SkinnyD, xDll, Python-бэкдор. Мы обнаружили несколько важных связей между нынешней инфраструктурой Winnti и другими крупными атаками, к которым в прошлом группа могла иметь непосредственное отношение. Резко возросшая активность группы также может быть связана с эпидемией коронавируса. Многие компании отправили своих сотрудников на удаленную работу, и при этом, по нашим данным 21, 80% сотрудников используют для работы домашние компьютеры. Получается, что многие работники находятся вне досягаемости корпоративных средств защиты и политик безопасности. Это делает их очень уязвимой мишенью.

Мы продолжаем отслеживать активность группы Winnti и не ожидаем, что группа будет снижать свою активность. Через некоторое время мы, возможно, столкнемся с новой атакой, подобной взлому CCleaner и ASUS.

IOCs

MD5 SHA-1 SHA-256

SkinnyD

ec2377cbd3065b4d751a791a22bd302c cdd78ccd274705f6c94b6640c968e90972597865 1d59968304f26651526a27dabd2780006ebd14925c9e00093acfa2443a223675
3fff50f9ea582848b8a5db05c88f526e ea11d0d950481676282cee20c5eb24fc71878bcc b5227a12185a6fef8bb99ac87eefba7787bbf75ff9c99bdc855a52539b805d2e
55186de70b2d5587625749a12df8b607 858d866c5faa965fa9fbe41c8484a88fe0c612eb d81ba465fe59e7d600f7ab0e8161246a5badd8ae2c3084f76442fb49f6585e95

Бэкдор xDll

9f01cb61f342f599a013c3e19d359ab4 b63bfdfb7f267e9fbf1c19be65093d857696f3b0 169c24f0ad3969fe99ff2bf205ead067222781a88d735378f41a9822c620a535
a2d552ed07ad15427f36d23da0f3a5d3 1858a80c8cff38d7871286a437c502233e027ab0 59759bbdfc1a37626d99dd260e298a1285ff006035ab83b7a37561e2884fd471
60ddb540da1aefee1e14f12578eafda8 8d16bc28cef6760ecf69543a14d29ba041307957 87a57f5bb976644fce146e62ee54f3e53096f37f24884d312ab92198eb1e6549
7a4c8e876af7d30206b851c01dbda734 4cff1af90c69cc123ecafe8081e3c486a890d500 06d20fb5894c291fca07021800e7e529371372abff6db310c0cbc100cf9ad9f9
3d760b6fc84571c928bed835863fc302 adcf9ade7a4dc14b7bf656e86ea15766b843e3b6 8ac21275d0db7f3e990551f343e16ac105d6a513810ff71934de4855999cc9c5
278eb1f415d67da27b2e35ec35254684 7d30043210c8be2f642c449b92fe810a8c81f3f8 a77613cbb7e914796433bf344614e0c469e32a1d52fbaf3df174bf521a3fc6b7
007f35e233a25877835955bdd5dd3660 c1ec5a34b30990d9197c8010441c39d390109c75 aa7b1d13a96f90bf539455f25ef138d5e09e27b7da6bf7f0c2e48821d98cf476
f2b37be311738a54aa5373f3a45bbde2 5e350480787827c19c7bee4833c91d72d0e032a0 ece7f411ed1897304ca822b37d6480ff0b9505c8e307ef152fef8ed183b001c5

ShadowPad

82118134e674fe403907c9b93c4dc7be 5e29d9e4be79b5d1d7e606ba59a910cdd840203b 2c2b1d9b34df9364fd91a6551890b0fdc58a7e681713c682221a674d1116089a
d5cf8f4c8c908553d57872ab39742c75 bc2ef2e2232bce6be5bb0333da6f101f45ca6277 319a06a39e5a1394710ec917f281a546d850386e80fdb56238456b68d5207a99
eccb14cb5a9f17356ad23aa61d358b11 ef8951613ccca06f35b10f87dc11cf5543c727dd 3ff1cf65dff231f05bd54df3fecad2545b159094ce59ce4bf4c668c904d2a5d7
349382749444e8f63e7f4dc0d8acf75d 223f24eadc6e3a48d9cf9799e3e390a4a4015fdb 63a74b66685fb94d685cfdfadd10917c805239ea079b9431bb5e9c8a58e0ea4b
ed4481a9b50529bfa098c4c530e4198e f6e4d7eb5e3a7ae4c94bb8626f79cc27b776d665 79f0e0a0f9c79a9206b9c2af222f026c384d3e0d761b0b42815453991bc05294
85b0b8ec05bd6be508b97fd397a9fc20 4e60f31e386ec4f478f04b48458e49ef781b04d0 831212d40c5120824508a645e54bf1b86f3be0cd19f87b8067e8b2fdea5c844e
6e3ce4dc5f739c5ba7878dd4275bb1f5 09a3b4823a4d82b72888e185c8b23b13c22885c3 85b0ada2836c76cc49b886dfe59d950a073e9d6d761581075bf904238306e8c4
05751ea487d99aefea72d96a958140d7 2092a0557dcece4b4a32040b1bc09f9606aa1a1c 9984d5b554b8dbfeffdb374e1c8eaf74af7109a0e6b924b00ad5b878d0188895
b9082bce17059a5789a8a092bbcdbe26 a570deda43eb424cc3578ba00b4d42d40044bd00 be7b1f7f0b73b77fc8fe4c109ae5a675cc9f3f6c16d3a1d7b2a9c6ba5a52ef9a
14d546b1af2329b46c004b5ed37a3bc2 07ef26c53b62c4b38c4ff4b6186bda07a2ff40cb bb28528e76649fb72e069b15a76f7c6ef520ae727408b3439856880a4488aa1f
988ebf6fec017ec24f24427ac29cc525 0eec24a56d093e715047a626b911278a218927d2 d7786504a09ae35a75818c686b6299870e91d646bdf20609fbee0d86c94a5ff5
e6aa938be4b70c79d297936887a1d9a3 8cf60c047ee8d742a7a91626535c64bc6d7b580e ec801e3baa02c7ad36a9b06512ac106d30ab3a2207a7cb1e543fbd076995d43d
964be19e477b57d85aceb7648e2c105d 6c8ab56853218f28ac11c16b050ad589ea14bafe 9843ceaca2b9173d3a1f9b24ba85180a40884dbf78dd7298b0c57008fa36e33d
7bb16d5c48eb8179f8dafe306fc7e2c2 6bfdee276207d9b738b5e51f72e4852e3bda92d2 f7231082241d9e332b45307e180f20e11041f59196715749c6a79a8be17fcdc0

Bisonal

5e25dfdf79dfc0542a2db424b1196894 3bf3cd0f3817cf9481944536c0c65d8a809e6d4a e114dd78f9acafcf7e93efe1c9e68a29e4fe52c4830431a4aa5457927bef7c5e

Python-бэкдор

c86099486519947a53689e1a0ac8326d 817a88c07fe6d102961a994681c6674f89e2f28e 77e4a1f6eb95b9763cf13803aba0058ac0bcada8ee8b8f746963f2db8ce2e21f

get_lsass

802312f75c4e4214eb7a638aecc48741 af421b1f5a08499e130d24f448f6d79f7c76af2b 8eb40114581fe9dc8d3da71ea407adfb871805902b72040d10f711a1de750bfd

DomainInfo

22dfdcddd4f4da04b9ef7d10b27d84bc 619d32ea81e64d0af0a3e2a69f803cfe9941884b aad5ca66cfd5f0d1ffd4cccaa199de844b4074d02544521afc757e075739c4b0

MS17-010 checker

96c2d3af9e3c2216cd9c9342f82e6cf9 397f60d933a3aa030fac5c1255b2eb1944831fb2 af3ec84a79dc58d0a449416b4cf8eb5f7fd39c2cf084f6b16ee05abe4a968f12

MS17-010 exploiter

2b2ed478cde45a5a1fc23564b72d0dc8 a7d6fbbfb2d9d77b8cf079102fb2940bbf968985 e3768ad2b2e505453e64fe0f18cb47b2fe62d184ac7925f73e792d374ba630aa

Файловые индикаторы

Сетевые индикаторы

SkinnyD

80.245.105.102

xDll

www.yandex2unitedstated.dns05.com

www.oseupdate.dns-dns.com

www.yandex2unitedstated.dynamic-dns.net

g00gle_jp.dynamic-dns.net

hotmail.pop-corps.com

www.yandex2unitedstated.dynamic-dns.net

ShadowPad

www.ncdle.net

www.ertufg.com

info.kavlabonline.com

ttareyice.jkub.com

unaecry.zzux.com

filename.onedumb.com

www.yandex2unitedstated.dns04.com

www.trendupdate.dns05.com

Bisonal

www.g00gleru.wikaba.com

Python backdoor

daum.pop-corps.com

Связанные домены

agent.my-homeip.net freemusic.zzux.com pop-corps.com
alombok.yourtrap.com gaiusjuliuscaesar.dynamicdns.biz microsoft-update.pop-corps.com
application.dns04.com ggpage.jetos.com microsoft_update.pop-corps.com
arjuna.dynamicdns.biz gkonsultan.mrslove.com rama.longmusic.com
arjuna.serveusers.com gmarket.system-ns.org redfish.misecure.com
artoriapendragon.itemdb.com googlewizard.ocry.com regulations.vizvaz.com
backup.myftp.info hardenvscurry.my-router.de robinhood.longmusic.com
billythekid.x24hr.com help.kavlabonline.com server.serveusers.com
bluecat.mefound.com hosenw.ns02.info serviceonline.otzo.com
bradamante.longmusic.com host.adobe-online.com thebatfixed.zyns.com
cindustry.faqserv.com hpcloud.dynserv.org tunnel.itsaol.com
cuchulainn.mrbonus.com ibarakidoji.mrbasic.com uacmoscow.com
daum.xxuz.com indian.authorizeddns.us update.wmiprvse.com
depth.toh.info inthefa.bigmoney.biz videoservice.dnset.com
describe.toh.info jaguarman.longmusic.com waswides.isasecret.com
developman.ocry.com jeannedarcarcher.zyns.com webhost.2waky.com
dnsdhcp.dhcp.biz letstweet.toh.info webmail_gov_mn.pop-corps.com
economics.onemore1m.com lezone.jetos.com xindex.ocry.com
ecoronavirus.almostmy.com likeme.myddns.com yandex.mrface.com
email_gov_mn.pop-corps.com medusa.americanunfinished.com yandex.pop-corps.com
ereshkigal.longmusic.com modibest.sytes.net www.alombok.yourtrap.com
eshown.itemdb.com movie2016.zzux.com www.arjuna.dynamicdns.biz
facegooglebook.mrbasic.com msdn.ezua.com www.asagamifujino.dns05.com
fackb00k2us.dynamic-dns.net myflbook.myz.info www.billythekid.x24hr.com
fergusmacroich.ddns.info mynews.myftp.biz www.bradamante.longmusic.com
fornex.uacmoscow.com nadvocacy.mrbasic.com www.cuchulainn.mrbonus.com
frankenstein.compress.to nikolatesla.x24hr.com www.daum.xxuz.com
free2015.longmusic.com notepc.ezua.com www.david.got-game.org
freedomain.otzo.com npomail.ocry.com www.facebook2us.dynamic-dns.net
freemusic.xxuz.com ntripoli.www1.biz www.nthere.ourhobby.com
www.facegooglebook.mrbasic.com odanobunaga.dns04.com www.odanobunaga.dns04.com
www.fackb00k2us.dynamic-dns.net point.linkpc.net www.officescan_update.mypop3.org
www.fergusmacroich.ddns.info www.googlewizard.ocry.com www.program.ddns.info
www.frankenstein.compress.to www.hosenw.ns02.info www.robinhood.longmusic.com
www.free2015.longmusic.com www.ibarakidoji.mrbasic.com www.siegfried.dynamic-dns.net
www.freedomain.otzo.com www.inthefa.bigmoney.biz www.stade653.dns04.com
www.g00gle_kr.dns05.com www.jaguarman.longmusic.com www.uacmoscow.com
www.g00gle_mn.dynamic-dns.net www.jeannedarcarcher.zyns.com www.webhost.2waky.com
www.g0ogle_mn.dynamic-dns.net www.likeme.myddns.com www.xindex.ocry.com
www.ggpage.jetos.com www.medusa.americanunfinished.com www.yandex.mrface.com
www.gkonsultan.mrslove.com www.microsoft-update.pop-corps.com www.yandex.pop-corps.com
www.goog1e_kr.dns04.com www.msdn.ezua.com www.yandex2unitedstated.2waky.com
  www.nikolatesla.x24hr.com  
  www.nmbthg.com  
  www.npomail.ocry.com  

MITRE

ID Name Description

Initial Access

T1566.001 Spear-phishing Attachment Winnti рассылает фишинговые письма с вредоносными вложениями

Execution

T1204.002 User Execution: Malicious File Winnti пытается заставить пользователей запускать вредоносные вложения, доставляемые по электронной почте
T1569.002 System Services: Service Execution Дроппер группы Winnti создаёт новую службу на зараженной машине для выполнения xDll

Persistence

T1547.001 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder Winnti закрепляется на зараженной машине через ветку реестра с параметрами автозагрузки
T1543.003 Create or Modify System Process: Windows Service Winnti закрепляется на зараженной машине через создание новых сервисов

Defense evasion

T1140 Deobfuscate/Decode Files or Information Winnti использует собственный алгоритм для дешифровки полезной нагрузки
T1055 Process Injection ShadowPad инжекстится в процесс wmplayer.exe
T1574.002 Hijack Execution Flow: DLL Side-Loading Winnti использует легитимные утилиты для загрузки Shadowpad через DLL Side-Loading
T1564.001 Hide Artifacts: Hidden Files and Directories В некоторых случаях Winnti хранит свое ВПО в скрытых папках по пути «C:\ProgramData»
T1027 Obfuscated Files or Information Группа Winnti использует различные обфускторы для своего ВПО, например VMProtect
T027.001 Software Packing Winnti использует собственный упаковщик для Shadowpad

Credential Access

T1555 Credentials from Password Stores Winnti использует утилиту LaZagne для получения паролей из различных хранилищ
T1003.001 OS Credential Dumping: LSASS Memory Winnti использует утилиту get_lsass для получения паролей

Discovery

T1087.001 Credentials from Password Stores Winnti использует утилиту LaZagne для получения паролей из различных хранилищ
T1087.002 Account Discovery: Domain Account Группа Winnti собирает информацию о пользователях домена
T1069.002 Permission Groups Discovery: Domain Groups Группа Winnti собирает информацию о доменных группах

Collection

T1056.001 Input Capture: Keylogging В ShadowPad имеется модуль keylogger
T1113 Screen Capture В ShadowPad имеется модуль делающий скриншоты

Command And Control

T1043 Commonly Used Port ВПО группы Winnti использует стандартные порты для соединения с С2: 80, 443
T1071.001 Application Layer Protocol: Web Protocols ВПО группы Winnti использует стандартные протоколы для соединения с С2: HTTP и HTTPS
T1095 Non-Application Layer Protoco ShadowPad моет использовать UDP или TCP для соединения с С2
T1113 Screen Capture В ShadowPad имеется модуль делающий скриншоты

 

  1. twitter.com/Vishnyak0v/status/1239908264831311872
  2. securelist.com/winnti-more-than-just-a-game/37029/
  3. securelist.com/shadowpad-in-corporate-networks/81432/
  4. blog.avast.com/update-ccleaner-attackers-entered-via-teamviewer
  5. securelist.com/operation-shadowhammer-a-high-profile-supply-chain-attack/90380/ 
  6. www.welivesecurity.com/2020/01/31/winnti-group-targeting-universities-hong-kong/
  7. Период запроса колебался от нескольких дней до нескольких недель
  8. blog.avast.com/update-ccleaner-attackers-entered-via-teamviewe
  9. www.slideshare.net/codeblue_jp/cb19-cyber-threat-landscape-in-japan-revealing-threat-in-the-shadow-by-chi-en-shen-ashley- oleg-bondarenko
  10. www.ptsecurity.com/upload/corporate/ru-ru/analytics/Operation-Taskmasters-2019-rus.pdf
  11. www.proofpoint.com/us/threat-insight/post/APT-targets-russia-belarus-zerot-plugx
  12. www.proofpoint.com/us/threat-insight/post/nettraveler-apt-targets-russian-european-interests
  13. jsac.jpcert.or.jp/archive/2020/pdf/JSAC2020_3_takai_jp.pdf
  14. unit42.paloaltonetworks.com/unit42-bisonal-malware-used-attacks-russia-south-korea/
  15. blog.talosintelligence.com/2020/03/bisonal-10-years-of-play.html
  16. attack.mitre.org/techniques/T1037/
  17. media.kasperskycontenthub.com/wp-content/uploads/sites/43/2017/08/07172148/ShadowPad_technical_description_PDF.pdf
  18. github.com/worawit/MS17-010/blob/master/checker.py
  19. github.com/AlessandroZ/LaZagne
  20. github.com/3gstudent/Homework-of-C-Language/blob/master/sekurlsa-wdigest.cpp
  21. www.ptsecurity.com/ru-ru/research/analytics/remote-work-in-russia-and-the-cis-2020/