В конце сентября компания Palo Alto опубликовала отчет о деятельности отдела Unit42, в котором среди прочего шла речь о вредоносной программе PYLOT. Мы фиксируем атаки с использованием этого бэкдора еще с 2015 года и называем его Travle. Так совпало, что «Лаборатория Касперского» недавно участвовала в расследовании успешной атаки с применением Travle, в ходе которого мы тщательно проанализировали этот зловред. Результаты анализа уже готовы, и мы публикуем их здесь, чтобы дополнить исследование Palo Alto.
Технические данные
MD5 | РАЗМЕР | КОМПОНОВЩИК | ДАТА КОМПИЛЯЦИИ |
7643335D06BAEC5A14C95A393592EA3F | 164352 | 11.0 | 14.10.2016, 06:21:07 |
Образец Travle, обнаруженный во время расследования, представлял собой DLL с одной экспортируемой функцией (MSOProtect). Вредоносная программа получила имя Travle из-за следующей строки в ранних образцах этого семейства: «Travle Path Failed!». Позднее опечатку исправили и в новых версиях уже присутствовала строка «Travel Path Failed!«. Мы считаем, что Travle может быть преемником семейства NetTraveler.
Прежде всего, в составе целевых фишинговых атак мы нашли множество вредоносных документов, имена которых предполагают русскоязычные цели, с зашифрованными исполняемыми файлами внутри:
Этот метод шифрования уже давно и хорошо известен — изначально с его помощью злоумышленники маскировали в документах с эксплойтами бэкдор Enfal. Вскоре в подобных документах после расшифровки мы стали находить не только Enfal, но и Travle, а еще позднее обнаружился и зловред Microcin. Домены C2-серверов Travle часто пересекаются с доменами Enfal. Что касается NetTraveler, в какой-то момент образцы Enfal начали использовать тот же метод шифрования для хранения в своем теле веб-адреса C2, который использовался в NetTraveler:
Таким образом, очевидно, что все эти бэкдоры — Enfal, NetTraveler, Travle и Microcin — связаны друг с другом и, предположительно, созданы злоумышленниками, говорящими на китайском.
Вредоносная программа запускается путем инициализации следующих переменных:
%TEMP%\KB287640\ — локальная зона выгрузки вредоносной программы;
%TEMP%\KB887209\ — хранилище плагинов;
<место установки зловреда>\~KB178495.DAT — путь к файлу конфигурации.
Удивительно, но эти пути одинаковы во всех образцах этого семейства. При отсутствии файла конфигурации Travle считывает параметры по умолчанию со своего ресурса RAW_DATA. Параметры хранятся в зашифрованной форме. Вот код дешифровки:
for (i = size — 1; i > 1; —i)
buf[i] ^= buf[i — 2]
Для хранилища блока конфигурации используется следующий формат:
Смещение | Размер | Значение |
0 | 0x81 | Домен C2 |
0x102 | 0x81 | URL-путь C2 |
0x204 | 2 | Порт C2 (не используется) |
0x206 | 0xB | Не используется |
0x21C | 0xB | Идентификатор образца |
0x232 | 0x401 | Первый ключ RC4 бота |
0xA34 | 0x401 | Второй ключ RC4 бота |
0x1238 | 2 | Не используется |
Описанный образец хранит следующие данные конфигурации:
Поле | Значение |
Домен C2 | remember123321.com |
URL-путь C2 | /zzw/ash.py |
Идентификатор образца | MjdfS0584 |
Первый ключ RC4 | mffAFe4bgaadbAzpoYRf |
Второй ключ RC4 | mffAFe4bgaadbAzpoYRf |
Бэкдор Travle начинает обмен данными с C2-сервером с отправки собранной информации о целевой операционной системе в POST-запросе HTTP на веб-адрес, сформированный из C2-домена и указанного в параметрах пути. Отправляемая информация включает следующие данные:
- идентификатор пользователя (на базе имени и IP-адреса компьютера);
- имя компьютера;
- раскладка клавиатуры;
- версия ОС;
- IP-адрес;
- MAC-адрес.
Как только C2-сервер получает первый пакет, он отправляет в ответ блок данных со следующей информацией:
- URL-путь для получения команд;
- URL-путь для отчетов о результатах выполнения команд;
- URL-путь для скачивания файлов с C2;
- URL-путь для отправки файлов на C2;
- второй серверный ключ RC4;
- первый серверный ключ RC4;
- идентификатор C2.
После получения этого пакета Travle ждет дополнительных команд с сервера.
Шифрование обмена данными
Алгоритм шифрования зависит от типа передаваемого объекта. Существуют три возможных варианта.
- Данные
- Данные шифруются по стандарту Base64.
- Получившаяся строка прикрепляется к заголовку размером 0x58 байт.
- Получившийся буфер шифруется с помощью RC4, при этом используется первый серверный ключ RC4.
- Получившийся буфер шифруется по стандарту Base64.
- Список строк
- Каждая строка шифруется с помощью RC4, при этом используется второй серверный ключ RC4.
- Получившийся буфер шифруется по стандарту Base64.
- Все строки, ранее зашифрованные по стандарту Base64, сливаются в одну строку с разделителем «\r\n».
- Получившаяся строка прикрепляется к заголовку размером 0x54 байта.
- Получившийся буфер шифруется с помощью RC4, при этом используется первый серверный ключ RC4.
- Получившийся буфер шифруется по стандарту Base64.
- Файл
- Сжимается с помощью LZO.
- Получившийся архив шифруется со вторым серверным ключом RC4.
Формат сообщения
Для передаваемых данных используется следующий заголовок:
Смещение (байты) | Размер (байты) | Описание |
0 | 0x14 | Случайный набор байтов |
0x14 | 4 | Тип данных / порядковый номер команды |
0x18 | 4 | Нулевое значение / идентификатор команды |
0x1C | 4 | Размер данных |
0x20 | 0x14 | Идентификатор образца |
0x34 | 0x24 | Идентификатор пользователя |
0x58 | Размер данных | Данные |
Файл отправляется на C2-сервер в запросе POST в виде составного содержимого (multipart) с разделителем kdncia987231875123nnm. Все обнаруженные нами образцы Travle используют это значение.
Типы сообщений: от бота к C2
Идентификатор команды указан при смещении 0x18 в заголовке.
Используются следующие технические сообщения:
ID | Описание | Содержимое данных |
1 | Информация об ОС | Информация об ОС |
2 | Запрос первой команды | Нулевое значение |
3 | Запрос списка команд | Нулевое значение |
4 | Команда успешно выполнена | Информация о выполнении команды или имени передаваемого файла |
5 | Сбой выполнения команды | Информация об ошибке |
Используются следующие оперативные сообщения:
ID | Описание | Содержимое данных |
1 | Бот отправляет список файлов из запрошенного каталога | Список файлов |
11 | Бот отправляет содержимое запрошенного файла | Содержимое файла |
Типы сообщений: от C2 к боту
Ответ на POST-запросы бота:
ID | Описание | Содержимое данных |
0 | Информация о C2 | Список параметров C2 |
1 | Команды | Список команд |
В случае, если бот прислал GET-запрос на файл, то сервер возвращает запрошенный файл.
Общий обмен данными между ботом и C2
Взаимодействие с C2-сервером включает два этапа:
Первый этап (автоматический, без вмешательства оператора) включает:
- отправку информации об ОС;
- получение информации о C2;
- отправку запроса первой команды;
- получение команды с порядковым номером 1 и первым аргументом «*»;
- отправку запроса следующей команды.
Второй этап (выполняется оператором) включает:
- отправку команды боту;
- отправку файлов боту;
- отправку результатов выполненных команд C2.
Команды: основные функции бота
Номер | Аргументы | Действие |
Сканирование файловой системы | ||
1 | Путь | Если значение аргумента «Путь» не равно «*», бот собирает список файлов и папок в указанном каталоге с датой создания в пределах указанных значений, а также файлов с атрибутом «Зашифрованный». Если значение аргумента «Путь» равно «*», поиск файлов и папок осуществляется по всей файловой системе. В любом случае используется рекурсивный поиск. |
Начальная дата | ||
Конечная дата | ||
Выполнение процесса | ||
2 | Путь к командному или исполняемому файлу | Бот исполняет указанный командный файл или программу с переданными аргументами. |
Аргументы командной строки | ||
Тест на наличие файла | ||
4 | Имя файла | Бот проверяет, существует ли указанный файл. |
Удаление файла | ||
3 | Имя файла | Бот удаляет файл. |
Переименование файла | ||
5 | Старое имя файла | Бот переименовывает файл. |
Новое имя файла | ||
Перемещение файла | ||
6 | Старый путь | Бот перемещает файл. |
Новый путь | ||
Создание новой конфигурации | ||
7 | Содержимое новой конфигурации | Бот создает файл с новой конфигурацией. |
Обработка файла в пакетном режиме | ||
48 | Сценарий пакетной обработки | Бот отправляет C2 запрос GET для скачивания определенного файла. Вместе с файлом возвращается сценарий пакетной обработки. Полученный файл и сценарий пакетной обработки сохраняются в файлы. Сценарий выполняется с переданным им аргументом — имя скачанного файла. |
Путь к файлу | ||
Запуск сценария пакетной обработки | ||
49 | Сценарий пакетной обработки | Бот получает BAT-файл и исполняет его. |
Скачивание файла | ||
16 | Путь к файлу | Бот отправляет запрос GET для скачивания файла. Файл сохраняется с указанным именем и в указанном расположении. |
Отправка файла | ||
17 | Путь к файлу | Бот отправляет содержимое запрашиваемого файла в сообщении POST. |
Скачивание и запуск плагина | ||
32 | Имя плагина | Бот отправляет запрос GET для скачивания плагина (DLL). Плагин сохраняется в файловой системе и запускается с использованием API-функции LoadLibrary. |
Аргумент плагина | ||
Выгрузка плагина | ||
33 | Имя плагина | Бот выгружает библиотеку плагина из памяти. |
Удаление плагина | ||
34 | Имя плагина | Бот выгружает библиотеку плагина из памяти и удаляет файл плагина. |
Загрузка и запуск плагина | ||
35 | Имя плагина | Бот загружает плагин в память с указанным параметром. |
Аргумент плагина |
Плагины
К сожалению, нам не удалось получить плагины с сервера C2, но, проанализировав код Travle, мы можем вкратце описать способы их обработки.
При обработке плагинов используются команды 32–35. По результатам анализа всех образцов Travle мы выяснили, что не каждая разновидность Travle может работать с плагинами.
Каждая библиотека плагина сохраняется в виде файла и загружается с использованием API-функции LoadLibrary. Библиотека должна экспортировать три функции: GetPluginInfo, Starting и FreeMemory. Эти функции вызываются по одной на этапе загрузки DLL. Когда бэкдор Travle должен выгрузить библиотеку плагина, она вызывает API-функцию FreeLibrary.
Во всех проанализированных образцах Travle плагины хранятся в одном и том же каталоге: %TEMP%\KB887209\.
Заключение
Злоумышленники, ответственные за атаки Travle, действовали на протяжении последних нескольких лет, и, судя по всему, их не волнует, что их могут отследить антивирусные компании. Обычно модификации и новые дополнения к арсеналу этих хакеров обнаруживают и отслеживают очень быстро. Но тот факт, что на протяжении всех этих лет у них не было необходимости менять тактические методы и приемы, говорит о том, что им не обязательно усложнять применяемые инструменты для достижения своих целей. Что еще хуже, эти бэкдоры используются преимущественно в регионе СНГ против правительственных организаций, организаций и компаний так или иначе связанных с вооруженными силами и разработкой вооружений, компаний, занимающихся исследованиями в сфере высоких технологий. Это говорит о том, что даже организациям такого уровня предстоит пройти долгий путь, чтобы внедрить передовые методы информационной безопасности и эффективно противостоять целевым атакам.
Наши решения определяют образцы Travle со следующими вердиктами:
Trojan.Win32.Tpyn.*
Trojan.Win32.TravNet.*
Trojan-Spy.Win32.TravNet.*
HEUR:Trojan.Win32.Generic
HEUR:Trojan.Win32.TravNet.gen
HEUR:Backdoor.Win32.NetTraveler.gen
Более подробные сведения о Travle APT доступны подписчикам аналитических отчетов «Лаборатории Касперского». Контактные данные: intelreports@kaspersky.com
Бэкдор Travle, он же PYLOT, атакует русскоязычные цели
Кирилл
А где методы распространения? Как защититься?