На польском портале ZaufanaTrzeciaStrona.pl, посвященном кибербезопасности, не так давно появилась новость об успешных атаках на польские банки (версия на английском здесь). Инцидент был охарактеризован как «серьезнейший». Данные подтвердили Symantec и BAE Systems. Список жертв пополнили учреждения из Мексики и Уругвая, а также другие цели по всему миру.
В этих атаках немало интересного – от целей и векторов заражения до особенностей вредоносных исполняемых файлов. Если первые два аспекта уже изучены, то вредоносный код не был детально исследован. В этом посте мы проведем технический анализ зловреда.
Канал распространения
По данным ZaufanaTrzeciaStrona.pl, хакеры провели серию атак типа watering hole – заражение сайтов, которые посещают потенциальные жертвы. Скомпрометированный сайт перенаправляет пользователя на зараженную страницу с эксплойтом. В Польше отправной точкой выступал официальный сайт Комиссии по финансовому надзору (Komisji Nadzoru Finansowego).
По нашим данным, в Мексике с той же целью использовался сайт аналогичного ведомства (Национальной комиссии по банковской системе и ценным бумагам – Comisión Nacional Bancaria y de Valores). К сожалению, эта информация пока не подтверждена сервисами веб-трекинга или самим учреждением. Тем не менее, мы предполагаем, что перенаправление производилось с этого сайта:
Этап 1: Инъекция
Если эксплойт-кит успешно доставил троян, на компьютере жертвы исполняется вредоносная нагрузка – 64-битное консольное приложение. В отличие от инъекции, описанной BAE Systems, программа ожидает указания одного из трех аргументов: -l, -e или –a (раздел 2 на рисунке ниже).
В то время как параметр -l имеет то же значение, оставшиеся два необходимы для распаковки ресурсов следующего этапа (раздел 4) и для автозапуска одного из них как сервиса (раздел 5):
В разделе 5 инъекция пытается изменить конфигурацию системного сервиса, чтобы установить загрузчик как сервис. Конфигурация предназначена для автоматического запуска менеджером управления сервисами во время включения системы. Для этого нужны права администратора.
На первом этапе атаки угроза скрывает себя не так тщательно, как на последующих. Она даже содержит пространное заявление, предоставляющее информацию о статусе исполнения (в данном случае, об извлечении зашифрованных ресурсов; при этом информация об отладке, включая названия исходных функций, отсутствует).
Инъекция использует динамическую загрузку API вместо функций Windows в таблице импорта (подробнее об этом – в отчете компании Novetta Operation Blockbuster о группе хакеров Lazarus, страница 34). Раздел 3 на изображении выше демонстрирует оболочку этой функции, запускающей одну системную библиотеку за другой.
Похоже, что хакеры обозначают второй этап как «загрузчик», а третий, содержащий основной функционал вредоносного ПО – как «модуль». Загрузчик дешифруется, в то время как модуль извлекается и устанавливается без изменений. С целью маскировки файлы заимствуют время создания из системы shlwapi.dll.
Интересная особенность алгоритма шифрования – сравнительно новый потоковый шифр Spritz, напоминающий RC4. Реализация Spritz в языках программирования С и Python уже доступна, она соответствует следующему распакованному коду из инъекции:
Этап 2: Загрузчик
Угроза скрывает присутствие в зараженной системе. Загрузчик защищен платной утилитой Enigma Protector, модуль хранится зашифрованным. Как мы и ожидали, хакеры используют незарегистрированную копию 64-битной Enigma v1.31 – странно было бы рассчитывать, что квалифицированный автор допустит элементарную ошибку и поставит под угрозу раскрытия свою личность, используя официально зарегистрированную копию. (Напротив, использование взломанного или пиратского ПО, если оно доступно, не является необычным.) Хакеры, планирующие построить ботнет, как правило, не используют коммерческие архиваторы, поскольку часть антивирусных вендоров определяет их по вирусной сигнатуре. Следовательно, это ограничивает потенциальный размер ботнета. Но в случае целевой атаки в использовании такой защиты есть преимущества. Одно из них – восстановление исходного двоичного кода (каким он был до процесса маскировки) проще, чем когда-либо.
Создается впечатление, что угрозе подвержены только 64-битные версии Windows. Впечатление ошибочное, поскольку 32-битные модификации вредоносного ПО также обнаружены на компьютерах в пострадавших учреждениях. Несмотря на схожую структуру, 32-битная версия – не просто компиляция 64-битной, она немного отличается: стадии инъекции и загрузчика объединены в один этап, используется классическое шифрование RC4 вместо Spritz, модуль этого этапа хранится в системном реестре, а не в файловой системе. Версия используемого протектора Enigma – 3.7 с лицензией единой разработки, она явно используется для защиты двоичного кода 11 января 2017 года.
Этап 3: Модуль
Третий и завершающий этап – сравнительно большой модуль (около 730 Кб), который содержит основные функции вредоносной программы: взаимодействие с управляющим C&C сервером и получение команд операторов (хакеров). Модуль внедряет себя во все текущие сессии в скомпрометированной системе Windows.
В верхней строке представлены разные части бинарного кода: секции кода выделены голубым, секции данных – серо-желтым. Голубой цвет (в отличие от темно-голубого) – код, статистически связанный с существующими библиотеками. Помимо обычной среды выполнения С, мы обнаружили связь с кроссплатформенной библиотекой передачи файлов с открытым исходным кодом libcurl (версия 7.47.1, дата выпуска – 8 февраля 2016 года), а также с фрагментами кода проектов OpenSSL и XUnzip. Цветовой эффект в строке не генерируется автоматически, в этом случае нам нужно было явным образом отметить части, которые мы считаем связанными кодом библиотеки, и мы импортировали все имена функций. Темно-голубые разделы – код, написанный атакующими.
В модуле закодирован только один URL. Обмен данными шифруется. Мы не зафиксировали какое-либо взаимодействие, поскольку в период проведения анализа удаленный сервер не отвечал. Модуль поддерживает достаточно команд, чтобы можно классифицировать его как троян удаленного доступа. Набор команд следующий: “SLEP”, “HIBN”, “DRIV”, “DIR”, “DIRP”, “CHDR”, “RUN”, “RUNX”, “DEL”, “WIPE”, “MOVE”, “FTIM”, “NEWF”, “DOWN”, “ZDWN”, “UPLD”, “PVEW”, “PKIL”, “CMDL”, “DIE”, “GCFG”, “SCFG”, “TCON”, “PEEX”, “PEIN”. Назначение большинства команд очевидно: SLEP – перейти в режим ожидания, PKIL – уничтожить процесс, UPLD – скрытно выводить данные, DOWN – скачать, DEL – удалить файл и т.д. Не исключено, что исходные функции libcurl были адаптированы к задачам хакеров. Однако libcurl – это масштабный проект с сотнями участников, десятками тысяч строк кода и сотнями версий. Проверка и анализ осуществляется в настоящее время.
Инструментарий, напоминающий Lazarus
Исследователи из BAE Systems описывают 32-битную инъекцию, защищенную Enigma, следующим образом: «После распаковки ПО сбрасывает версию известной вредоносной программы, напоминающей часть инструментария группы хакеров Lazarus». Это подтверждают специалисты Symantec: «Некоторые строки кода имеют сходство с вредоносными программами кибергруппы Lazarus». Связь подтверждает и отчет компании Novetta, в частности, уже упомянутая динамическая загрузка API. На основе этих свидетельств мы охарактеризовали ключевые свойства вредоносного инструментария атакующих следующим образом:
- Многоступенчатое вредоносное ПО, которое исполняется каскадом.
- Начальный этап – консольное приложение, которое ожидает, как минимум, одного параметра.
- WINAPI загружаются автоматически.
- Потоковый шифр RC4 или другой подобный алгоритм с длинным ключом, который используется для дешифрования на следующем этапе.
- Следующий этап(ы) – DLL библиотеки, которые загружаются как сервис с типом запуска SERVICE_AUTO_START (требуются права администратора).
Наши данные показывают недавнюю активность in-the-wild различных программ типа Lazarus. Тем не менее, чтобы представить четкую картину инцидента, нужно время для сбора дополнительной информации.
Странное открытие
В ходе исследования мы обнаружили интересный образец этого семейства вредоносного ПО. Это консольное приложение fdsvc.exe, ожидающее четырех параметров (сверяем со списком характеристик – 2), которое исполняется многоэтапно (1). Более того, приложение декодирует следующий этап при помощи RC4 с 32-битным ключом (4). Два свойства из списка выше (3 и 5) отсутствуют. С другой стороны, инструмент внедряет полезную нагрузку во все выполняющиеся сессии Windows. Полезная нагрузка статистически связана с libcurl v7.49.1.
Еще одна интересная особенность – команды хакера на финальном этапе. Используются команды «на русском» — написанные транслитом с кириллицы, но мало похожие на работу русскоговорящего автора.
Этот образец в очередной раз напоминает о том, как важно соблюдать осторожность с определением языковой принадлежности атакующих. Подобные «приманки» на ломаном русском вполне могут быть инсценировкой. Не вдаваясь в подробности филологического характера, можно вспомнить, что авторы вредоносного ПО чаще всего используют для обозначения команд числа или сокращения на латинице. Команда из 12 букв – это, как минимум, непрактично.
Заключение
Рассматривая образцы, рискнем предположить, что это не повторное использование кода, существовавшего задолго до атак на польские банки, и не забытый или остановленный проект. Более того, на протяжении многих недель мы наблюдали появление вредоносных программ, напоминающих «наши» образцы.
Хакеров, стоящих за инцидентом, отличает высокая квалификация, поэтому ИБ-специалистам финансовых учреждений расслабляться не рекомендуется. Здесь, кстати, надо напомнить о 50%-ной скидке при переходе на антивирусные продукты ESET с решений других производителей – подробнее по ссылке.
Таблица образцов и индикаторы
Образцы, использующиеся в атаках:
Вредоносное ПО с транслитом в коде:
Автор: ESET NOD32