Введение
Во время одного из расследований команда по реагированию на инциденты ИБ (экспертный центр безопасности Positive Technologies — PT Expert Security Center, PT ESC) выявила хакерский инструментарий, использующий Telegram для управления бэкдорами. Для проникновения и перемещения по сети злоумышленники применяли как уже известные вредоносные программы, в частности Impacket, Mimikatz, инструменты для туннелирования сетевого трафика (Chisel1, dnscat22, Gost3 и т. д.), так и новые, пока не особо распространенные вредоносы — небольшие RAT (remote access trojan), использующие Telegram API для выгрузки данных. Анализ вредоносов проведен командой исследования киберугроз (PT ESC).
Дроппер TgRAT
На первом этапе дроппер проверяет параметры (аргументы), с которыми был запущен: это влияет на промежуточный этап персиста. Если входные аргументы есть, начинается этап add_payload (назван по имени основной функции, его выполняющей), если нет, то происходят инициализация и закрепление. Дроппер:
- устанавливает себя в автозагрузке с параметром " -install=false " (рис. 1);
- формирует имя файла с полезной нагрузкой (производится парсинг пути и имени текущего процесса, модификация данного пути с подстановкой имени полезной нагрузки, которая вшита в код);
- расшифровывает бинарные данные, содержащиеся в теле программы, с помощью алгоритма AES в режиме CTR (вектор инициализации вшит в тело программы);
- записывает расшифрованные данные в файл и передает управление полезной нагрузке.
![Закрепление дроппера](https://www.ptsecurity.com/upload/corporate/ru-ru/images/pt-esc/tgrat/img1.png)
Бэкдор TgRAT
Анализ показал, что файл с полезной нагрузкой представляет собой небольшой RAT, использующий Telegram в качестве контрольного сервера. Сервером является закрытая группа в мессенджере, коммуникация осуществляется с помощью Telegram API (библиотека github.com/wrwrabbit/telegram-bot-api-go). Мы видели несколько модификаций этого ВПО, отличающихся архитектурой; тем не менее, функциональность у них идентичная.
В самом начале своей работы RAT проверяет имя узла, на котором он запущен. Если имя не совпадает со значением, жестко вшитым в тело программы, ВПО завершает свою работу. Таким образом, очевидно, что вредонос написан целенаправленно под конкретные компьютеры.
Токен и ID чата для коммуникации могут быть считаны из файла с именем token.sys, который должен лежать в каталоге с вредоносом. В случае если файла нет, ВПО использует те токен и ID, которые содержатся в коде (рис. 2).
![Формирование параметров коммуникации](https://www.ptsecurity.com/upload/corporate/ru-ru/images/pt-esc/tgrat/img2.png)
После установки соединения ВПО получает имена команд и аргументы (при необходимости).
Отдельно стоит рассмотреть формат хранения и исполнения команд. На этапе инициализации необходимых параметров, переменных и библиотек, ВПО формирует структуру данных определенного вида, идентичную map (рис. 3).
![Формат хранения указателей на функции — обработчики команд](https://www.ptsecurity.com/upload/corporate/ru-ru/images/pt-esc/tgrat/img3.png)
Эта структура хранит, кроме служебных полей, указатели на функции, которые будут отвечать за выполнение команд. Она используется для маппинга имени команды, которое приходит с управляющего сервера (Telegram-чата) на функцию.
ВПО получает имя команды, после чего, используя методы доступа к вышеописанной структуре, получает адрес функции-обработчика (на рис. 4 переменная pfn_CmdFunc_handler). Затем производится ее вызов.
![Получение адреса функции-обработчика и ее вызов](https://www.ptsecurity.com/upload/corporate/ru-ru/images/pt-esc/tgrat/img4.png)
Изучение кода инициализации структуры с адресами функций и их именами значительно облегчило выявление типов команд, которые ВПО выполняет:
- получение информации о зараженном компьютере (пример на рис. 5);
- подключение (bind) к определенной группе в Telegram, служебное сообщение об ошибке подключения;
- самозавершение (kill <PID>);
- сохранение сообщения в виде файла;
- самообновление;
- запуск шелла;
- выполнение команды в шелле и сохранение результата в виде файла;
- запуск процесса;
- сон в течение определенного времени;
- перезапуск бота;
- скачивание файла;
- снимок экрана.
![Собираемая информация](https://www.ptsecurity.com/upload/corporate/ru-ru/images/pt-esc/tgrat/img5.png)
Выводы
Даже несмотря на то, что хакеры используют легитимные протоколы для управления своими инструментами и для выгрузки данных, эту атаку можно с легкостью выявить при минимальном уровне мониторинга трафика. Чтобы защититься от нее, необходимо:
- Покрывать антивирусными средствами защиты все узлы, включая серверы: хакеры вполне успешно продолжают использовать обычные, прекрасно знакомые любому антивирусу утилиты.
- Наблюдать за трафиком с серверов в интернете на периметре: в большинстве инфраструктур трафик с внутренних серверов на Telegram-серверы — история ненормальная.
- Наблюдать за трафиком внутри сети: при таком подходе можно выявлять сетевые туннели и нестандартное общение между серверами.