Не впервые злоумышленники атакуют игровую индустрию, компрометируют разработчиков, добавляют бэкдоры в среду сборки игр, а затем распространяют вредоносное ПО под видом легитимного. В апреле 2013 года «Лаборатория Касперского» сообщала о подобном инциденте. Эта атака приписана кибергруппе, названной Winnti.
Недавно внимание специалистов ESET привлекли новые атаки на цепочки поставок. Две игры и одна игровая платформа были скомпрометированы для внедрения бэкдора. Эти атаки нацелены на Азию и игровую индустрию, за ними снова стоит группа Winnti.
Три кейса, один бэкдор
Несмотря на разные конфигурации вредоносного ПО, три скомпрометированных программных продукта включали один и тот же код бэкдора и запускались с использованием идентичного механизма. Сейчас в двух продуктах бэкдоров нет, но один все еще распространяется в троянизированной версии – по иронии, эта игра называется Infestation («заражение»), ее выпускает тайская компания Electronics Extreme. Мы пытаемся связаться с разработчиком с начала февраля, но пока безрезультатно.
Разберем, как внедряется вредоносная полезная нагрузка, а затем рассмотрим детально бэкдор.
Внедрение полезной нагрузки
Код полезной нагрузки запускается во время выполнения троянизированного исполняемого файла. Сразу после РЕ entry point стандартный вызов инициализации C Runtime (__scrt_common_main_seh
на рисунке ниже) перехватывается для запуска вредоносной полезной нагрузки раньше чего-либо еще (рисунок 2). Это может указывать на то, что злоумышленники изменили конфигурацию сборки, а не сам исходный код.
Рисунок 1. Чистая точка входа в исполняемый файл
Рисунок 2. Точка входа скомпрометированного исполняемого файла
Код, добавленный к исполняемому файлу, расшифровывает и запускает бэкдор в оперативной памяти, прежде чем возобновить нормальное выполнение кода инициализации C Runtime и последующего кода хост-приложения. Встроенная полезная нагрузка имеет особую структуру, показанную на рисунке ниже, которую интерпретирует добавленный код распаковки.
Рисунок 3. Структура встроенной полезной нагрузки
В ее составе ключ RC4 (зашифрованный XOR с 0x37), который используется для расшифровки имени файла и встроенного файла DLL.
Вредоносная полезная нагрузка
Фактическая вредоносная полезная нагрузка содержит всего 17 Кбайт кода и данных.
Конфигурация
Данные конфигурации, представленные на рисунке ниже, представляют собой список строк, разделенных пробелами.
Рисунок 4. Данные конфигурации полезной нагрузки
Конфигурация состоит из четырех полей:
- URL управляющего C&C-сервера.
- Переменная (t), используемая для определения времени ожидания в миллисекундах перед продолжением выполнения. Время ожидания выбирается в диапазоне от 2/3 до 5/3 t случайным образом.
- Строка, идентифицирующая кампанию.
- Список имен исполняемых файлов, разделенный точкой с запятой. Если какой-либо из них работает, бэкдор останавливает его выполнение.
Мы идентифицировали пять версий полезной нагрузки:
В первых трех вариантах код не перекомпилирован, но данные конфигурации были отредактированы в самом DLL-файле. Остальная часть содержимого является побайтовой копией.
Инфраструктура C&C
Имена доменов выбраны таким образом, чтобы иметь сходство с сайтами разработчиков скомпрометированных приложений. Домен верхнего уровня настроен на перенаправление на соответствующий легитимный сайт с помощью сервиса Namecheap, в то время как субдомен указывает на вредоносный C&C-сервер.
На момент написания поста ни один из доменов не доступен, C&C-серверы не отвечают.
Отчет об исследовании
Идентификатор бота генерируется из МАС-адреса машины. Бэкдор передает на C&C-сервер информацию о машине, включая имя пользователя, имя компьютера, версию Windows и язык системы, а затем ожидает команды. Данные шифруются XOR с помощью ключа “*&b0i0rong2Y7un1
” и кодируются base64. Данные, полученные с C&C-сервера, шифруются с использованием того же ключа.
Команды
Простой бэкдор поддерживает только четыре команды, которые могут использоваться атакующими:
— DownUrlFile
— DownRunUrlFile
— RunUrlBinInMem
— UnInstall
Названия команд говорят сами за себя. Они позволяют атакующим запускать дополнительные исполняемые файлы с заданного URL.
Возможно, последняя команда менее очевидна. UnInstall
не удаляет вредоносную программу из системы. В конце концов, она встроена в легитимный исполняемый файл, который еще будет запускаться. Вместо удаления чего-либо, команда отключает вредоносный код, задавая значение 1 для ключа реестра:
HKCUSOFTWAREMicrosoftWindowsCurrentVersionImageFlag
После запуска полезной нагрузки запрашивается значение из реестра и, если оно задано, выполнение отменяется. Возможно, атакующие пытаются снизить нагрузку на свои C&C-серверы, избегая обратных вызовов от жертв, не представляющих интереса.
Второй этап
По данным телеметрии, одна из полезных нагрузок второго этапа, отправляемых жертвам, Win64/Winnti.BN. Насколько мы можем судить, дроппер этой вредоносной программы загружается через НТТРS с api.goallbandungtravel[.]com
. Мы видели, что он устанавливался как служба Windows и как DLL в C:WindowsSystem32
, используя следующие имена файла:
— cscsrv.dll
— dwmsvc.dll
— iassrv.dll
— mprsvc.dll
— nlasrv.dll
— powfsvc.dll
— racsvc.dll
— slcsvc.dll
— snmpsvc.dll
— sspisvc.dll
Образцы, которые мы проанализировали, были достаточно большими – около 60 Мбайт. Однако это только видимость, поскольку реальный размер или РЕ файл – от 63 до 72 Кбайт, в зависимости от версии. К вредоносным файлам просто добавляется множество чистых. Вероятно, это делает компонент, сбрасывающий и устанавливающий вредоносную службу.
После запуска службы она добавляет к своему пути DLL расширение .mui
и расшифровывает его с помощью RC5. Расшифрованный файл MUI содержит независимый от позиции код со смещением 0. Ключ RC5 получен из серийного номера жесткого диска и строки “f@Ukd!rCto R$.
”. Мы не смогли получить ни файлы MUI, ни код, который их устанавливает в первую очередь. Таким образом, точное назначение вредоносного сервиса нам неизвестно.
Последние версии вредоносного ПО включают механизм автообновления с использованием C&C-сервера http://checkin.travelsanignacio[.]com
. Этот сервер обслуживал последнюю версию файлов MUI, зашифрованных статическим ключом RC5. В ходе нашего исследования этот C&C-сервер не отвечал.
Цели
Начнем с тех, на кого точно не нацелена кампания. В начале полезной нагрузки вредоносная программа проверяет, является ли язык системы русским или китайским (см. на рисунке ниже). В случае положительного ответа программа прекращает работу. Обойти это исключение невозможно – атакующим принципиально не интересны компьютеры с этими языковыми настройками.
Рисунок 5. Проверка языка до запуска полезной нагрузки
Статистика распространения
Согласно телеметрии, большинство заражений пришлось на Азию, прежде всего, Таиланд. С учетом популярности скомпрометированного приложения, которое все еще распространяется разработчиком, неудивительно, если число жертв исчисляется десятками и сотнями тысяч.
Вывод
Атаки на цепочки поставок сложно обнаружить на стороне пользователя. Невозможно проанализировать весь запускаемый софт, а также все рекомендуемые обновления. Пользователь по умолчанию доверяет разработчикам и предполагает, что их файлы не содержат вредоносного кода. Вероятно, именно поэтому несколько кибергрупп нацеливают атаки на поставщиков ПО – компрометация позволит создать ботнет, размер которого сопоставим с популярностью троянизированного софта. У этой тактики есть и обратная сторона – когда схема будет раскрыта, атакующие потеряют контроль над ботнетом, и пользователи смогут очистить систему, установив очередное обновление.
Мотивы кибергруппы Winnti в настоящий момент неизвестны. Возможно, атакующие ищут финансовую выгоду или же планируют использовать ботнет как часть более масштабной операции.
Продукты ESET детектируют угрозу как Win32/HackedApp.Winnti.A, Win32/HackedApp.Winnti.B, полезную нагрузку – как Win32/Winnti.AG, второй этап – как Win64/Winnti.BN.
Индикаторы компрометации доступны по ссылке.
Автор: esetnod32