Бот Gootkit относится к числу тех вредоносных программ, которые редко удостаиваются пристального внимания исследователей. Виной тому не слишком широкое распространение и отсутствие уникальных особенностей, которые могли бы выгодно выделить зловред на общем фоне.
В интернете, в том числе и на Securelist, можно найти ранние упоминания Gootkit в контексте вредоносных программ — в качестве компонента ботов и троянцев, — но впервые детальный анализ бота Gootkit был опубликован исследователями около двух лет назад. Это была первая попытка описать бота как самостоятельную вредоносную программу, зловред был обозначен как «новый многофункциональный бэкдор». Авторы исследования высказали предположения о заимствовании функциональности бота у других троянцев, а также дали описание некоторых ключевых особенностей Gootkit.
В сентябре 2016 года мы обнаружили новую версию Gootkit, которая имела характерную и легко узнаваемую особенность – дополнительную проверку переменной окружения «crackme» в теле загрузчика. В ранних версиях эта особенность отсутствовала. Но что не менее интересно, в ходе исследования нам удалось получить доступ к C&C серверу бота, включая полное дерево каталогов и файлов, а также их содержимое.
Заражение
Как и раньше, бот Gootkit написан на NodeJS и загружается на компьютер жертвы через цепочку даунлоадеров. Основное назначение бота также не изменилось – кража банковских данных. Новая версия Gootkit, найденная в сентябре, нацелена в первую очередь на клиентов европейских банков – немецких, французских, итальянских, голландских, польских и т.д.
Основные способы распространения троянца — это спам-рассылки с вредоносными вложениями и веб-сайты, содержащие эксплойты на зараженных страницах (Rig Exploit Kit). В письмах во вложении содержался первичный даунлоадер небольшого размера Trojan-Banker.Win32.Tuhkit, который после запуска выгружал основной загрузчик c C&C сервера. Тот, в свою очередь, загружал Gootkit.
Примеры зараженных страниц, использованных для распространения троянца
В ходе исследования нами было обнаружено огромное количество вариантов первичных загрузчиков, использовавшихся для распространения троянца, — значительная их часть детектируется как Trojan.Win32.Yakes. Были среди загрузчиков и чрезвычайно странные, как тот, что представлен рисунке ниже – в его коде было прямо написано, что зловред предназначен для загрузки Gootkit.
Участок кода одного из первичных даунлоадеров
Gootkit в некоторых версиях также способен обеспечить запуск основного тела с правами администратора в обход UAC. Для этого основной загрузчик формировал файл SDB и регистрировал его в системе с помощью утилиты sdbinst.exe, после чего запускал бота с повышенными правами без нотификации пользователя.
Проверка «crackme»
Особенность новой версии Gootkit — проверка переменной окружения «crackme» в теле загрузчика. Она работает следующим образом: значение переменной сравнивается с фиксированной константой – в случае, если значения не совпадают, бот начинает проверять, не запущен ли он в виртуальной среде.
Проверка глобальной переменной в теле загрузчика
Для этого, как и в предыдущих версиях, бот проверяет переменную «trustedcomp».
Проверка на запуск на виртуальной машине в теле бота
Основное тело троянца
Основной файл зловреда включает в себя скрипты и интерпретатор NodeJS. В распакованном виде скрипты выглядят следующим образом:
Скрипты на NodeJS, образующие основное тело троянца
Представленные на снимке скрипты образуют именно основное тело троянца. Суммарно Gootkit включает около сотни различных скриптов, но они носят скорее утилитарный характер (промежуточные обработчики данных, библиотеки для сетевого взаимодействия, обертки над стандартными классами и структурами, кодировщики и т.д.) и не представляют интереса.
Сам зловред передается в зашифрованном и запакованном виде. Шифруется Gootkit простым сложением по модулю с раундовым ключом, распаковка осуществляется стандартными WinAPI. На рисунке ниже представлены первые 255 байт передаваемых данных.
Запакованное тело троянца
Первые три DWORD обозначают размер полученных, распакованных и запакованных данных соответственно. Легко убедиться, что после вычета третьего DWORD из первого у нас остается двенадцать байт – как раз размер этих переменных.
Кража денег
Перехват пользовательских данных осуществляется стандартно, с помощью внедрения веб-инжектов в HTTPS-трафик (примеры самих инжектов даны ниже). После отправки данных на сервер C&C, они обрабатываются парсерами, ассоциированными каждый с сайтом определенного банка.
Участок кода одного из парсеров
Взаимодействие с C&C
В рассматриваемой версии Gootkit адрес для получения основного тела троянца и адрес C&C сервера совпадают; в ранних версиях они могли различаться. Для формирования запроса троянец использует «личный» User-Agent – в отсутствии его любые запросы будут отклонены.
Уникальный User-Agent GootKit
Взаимодействие с C&C сводится к обмену фиксированным набором команд, среди которых основными являются:
- Запрос списка доступных троянцу файлов (P_FS:FS_READDIR);
- Получение этих файлов (P_FS:FS_GETFILE/FS_GET_MULTIPLEFILES);
- Обновление для бота (P_FS: FS_GETFILE);
- Получение снимка экрана (P_SPYWARE:SP_SCREENSHOT);
- Выгрузка списка процессов (P_SPYWARE:SP_PROCESSLIST);
- Завершение процесса (P_SPYWARE:SP_PROCESSKILL);
- Загрузка модулей (P_FS: FS_GETFILE);
- Получение инжектов (P_ SPYWARE:SP_SPYWARE_CONFIG).
Основные команды и подкоманды бота
Сами адреса C&C в количестве двух-трех жестко зашиты в тело загрузчика, а также могут сохранятся в реестре. В зависимости от типа запроса, тело пакета может меняться, но всегда включает в себя следующие переменные:
- Размер пакета, плюс восемь;
- Контрольное число, сложенное по модулю с константой;
- Тип команды;
- Поддтип команды.
В представленном на рисунке ниже примере C&C запрашивает регистрационную информацию у бота при первом запуске.
Запрос от C&C и пример переменных
Ответ в данном случае будет включать в себя подробную информацию о зараженном компьютере, в том числе:
- Параметры сетевого адаптера;
- Характеристики процессора, объем оперативной памяти;
- Имя пользователя, имя компьютера.
Вне зависимости от типа запроса, данные от C&C к боту и обратно передаются в формате protobuf.
При выгрузке основного тела адрес, к которому обращается загрузчик, как правило, оканчивается следующими строками:
- /rbody32;
- /rbody64;
- /rbody320.
«А ларчик просто открывался»
Благодаря использованию ошибки конфигурации, распространенной среди управляющих серверов ботнетов, нам удалось на одном из C&C получить полное дерево каталогов и файлов, а также их содержимое.
Содержимое сервера ботнета
Содержимое сервера представляет из себя набор парсеров для различных банковских сайтов – с их помощью, используя пользовательские данные, осуществляется кража денег со счетов, плюс нотификация через Jabber. Украденные данные хранятся в виде списка текстовых файлов, где в качестве имени файла фигурирует IP зараженного компьютера.
Краденные данные и логи на сервере ботнета
Пример краденных данных в одном их текстовых файлов
Прочие данные (трансферы, логи) также хранятся в виде текстовых файлов.
Логи парсера
Анализ веб-инжектов бота, а также логов парсеров, показал, что в первую очередь злоумышленники нацелены на клиентов немецких и французских банков.
Распределение веб-инжектов по доменным зонам
Выдержки из логов парсеров
Анализ содержимого сервера и парсеров также не оставил сомнений в знании автором ботнета русского языка. Обратите внимание на комментарии на рисунке ниже.
Участок скрипта с комментариями автора
Кроме того, Gootkit, наиболее вероятно, находится в одних руках – в продаже его нет и вне зависимости от модификации даунлодеров и вариантов административных панелей, код на NodeJS, представляющий основное тело зловреда, всегда один и тот же.
Примеры веб-инжекта Gootkit
Заключение
Gootkit относятся к разряду крайне живучих, пусть и не слишком популярных, троянцев. За счет своей малой распространённости новые версии троянца могут находиться вне поля зрения аналитиков на протяжении длительного времени.
Стоит также упомянуть, что использование в качестве платформы для разработки NodeJS пусть и накладывает ряд ограничений, все же обеспечивает значительную гибкость возможностей и простоту изменения и разработки при создании новых модификаций троянца.
Троянец Gootkit, а также все сопутствующие компоненты детектируются продуктами «Лаборатории Касперского» как:
- Trojan-Banker.Win32.Tuhkit (первичный загрузчик, распространяемый в письме);
- Trojan.Win32.Yakes (некоторые модификации основного даунлоадера);
- HEUR:Trojan.Win32.Generic (основное тело бота, некоторые варианты загрузчика).
MD5
1c89a85c1a268f6abb34fb857f5b1b6f
7521e82162ed175ad68582dd233ab1ae
9339dcb3571dda122b71fb80de55d0d6
b13378ad831a1e4e60536b6a3d155c42
9ba9f48cda9db950feb4fbe10f61353c
Внутри управляющего сервера Gootkit