Злоумышленники используют Linux/Moose для компрометации Linux-embedded систем, часть 2
В прошлой части нашего анализа вредоносной программы Linux/Moose мы детально остановились на общих схемах ее работы, статистике использования прокси, а также привели информацию о механизме поиска новых роутеров для заражения. В этой части мы более подробно остановимся на механизме заражения роутеров, а также рассмотрим реализацию прокси, с помощью которой операторы ботнета используют скомпрометированный роутер как туннель для передачи трафика.
В отличие от других сообщений, которыми бот обменивается с C&C-сервером в формате специального бинарного протокола с использованием порта с номером 81, для уведомления сервера о найденной цели для заражения используется стандартный протокол HTTP на тот же самый порт. Ниже приведен скриншот такого сообщения.Рис. Бот посылает на C&C-сервер сообщение об обнаружении цели для заражения.
Формат строки отправляемых ботом данных представлен ниже.
Видно, что в форматной строке присутствуют три части:
обфусцированный IP-адрес; порядок байт, используемый в ОС (0 для big-endian и 1 для little-endian); тип сканирования IP-адресов, при котором был обнаружен хост (0 для сканирования прилежащих к внешнему IP-адресу роутера адресов и 1 для произвольно выбираемых адресов). В строке формата, IP-адрес обфусцирован путем применения операции XOR с фиксированным ключом. Он может быть приведен в нормальный вид с использованием следующего фрагмента кода на Python (p- параметр строки запроса GET).
Если поток сканера открытых портов не может обнаружить на удаленной системе открытый 10073-й порт, он пытается подключиться к порту Telnet (23-й порт) на том же IP-адресе. Далее, в случае присутствия открытого порта, он будет пытаться выполнить вход путем перебора (bruteforce) различных комбинаций паролей, которые он получил от конфигурационного C&C-сервера. В случае успешного входа, он сообщит об этом на отчетный C&C-сервер. В противном случае он переходит к следующему IP-адресу.
В случае успешного входа, Moose отправляет на сервер отчет в следующем формате.
Рис. Пример реального сообщения, отправляемого на С&C-сервер.
Ответ сервера на этот отчет выглядит следующим образом.
После успешного входа по Telnet начинается процесс заражения. На картинке ниже представлен общий вид этого процесса.
Рис. Общая схема процесса заражения устройств Linux/Moose.
Используя подключение по Telnet, Moose собирает информацию о жертве. Эта информация отправляется на отчетный C&C-сервер с использованием бинарного протокола (1). Отчетный C&C-сервер возвращает набор обфусцированных команд обратно боту (2). Бот расшифровывает команды, полученные от C&C-сервера (3), а затем исполняет их на устройстве жертвы через подключение по Telnet. Обычно команды используются для выполнения функции типа «загрузить и выполнить». В зависимости от того, какой статус будет возвращен системой жертвы после исполнения команды, команда может быть выполнена повторно до получения статуса успешного выполнения OK. Получение такой команды свидетельствует об успешном запуске на удаленном устройстве вредоносной программы. Ниже представлен фрагмент взаимодействия бота с заражаемым устройством по Telnet. Команды отправляются ботом автоматически без участия оператора ботнета.Рис. Выполняемые ботом команды на заражаемой системе.
Бот выполняет следующие команды:
Получает доступ к командной строке (shell) на заражаемом устройстве. Проверяет выполнение команды echo. Получает список запущенных процессов (ps) для проверки своего присутствия в системе и присутствия других вредоносных программ. Проверяет присутствие команды chmod. Получает содержимое /proc/cpuinfo. На этом этапе Moose все еще не заразил удаленную систему. Он отправляет сообщение на отчетный C&C-сервер, в котором содержится полученная по Telnet информация о жертве.
Ниже представлено битовое поле (см. таблицу выше), которое характеризует состояние зараженной системы (Информация о жертве).
Отчетный C&C-сервер отвечает обфусцированными командами, для их исполнения в системе жертвы.
На втором этапе заражения системы, Linux/Moose расшифровывает пакет команд из сообщения C&C-сервера и пытается их исполнить в Telnet. Мы наблюдали в использовании только команды типа «загрузить и исполнить», но сама архитектура является гибкой и позволяет злоумышленникам исполнить любую нужную им команду. Одна из таких команд приведена ниже, инструмент wget используется для загрузки на устройство вредоносного содержимого.
Рис. Загрузка и исполнение вредоносного файла на компьютере жертвы.
Злоумышленники используют и другой подход для исполнения вредоносного кода в системе, для этого в определенный файл записывается вывод команды echo, которой на вход поступили бинарные данные (исполняемый код).
Рис. Загрузка и исполнение вредоносного файла на компьютере жертвы.
На этом этапе устройство уже заражено вредоносной программой. Далее, Linux/Moose может получить дополнительные параметры конфигурации с C&C-сервера и продолжит свою вредоносную активность на устройстве.
Такой двухэтапный механизм заражения позволяет отчетному C&C-серверу передать боту именно тот тип исполняемого ELF-файла, который будет соответствовать типу заражаемой архитектуры, поскольку на первом этапе бот передает серверу информацию о типе окружения устройства. Это также дает преимущество операторам в добавлении возможности по компрометации новой платформы без обновления всего ботнета. Для этого C&C-серверу достаточно указать необходимый файл.
Ниже приведены флаги конфигурации, которыми C&C-сервер может настраивать бот.
Еще три параметра требуют более подробного объяснения: cnccfg_flag_hijackdns, cnccfg_hijackdns1_ip, cnccfg_hijackdns2_ip. Они используются для установки вредоносной конфигурации DNS роутера. Если первый флаг активирован, следующие команды будут исполнены ботом в консоли Telnet перед входом в командный интерпретатор.
Видно, что вредоносная программа пытается перезаписать адреса легитимных DNS-серверов, используемых роутером, на вредоносные адреса. Различные типы роутеров поддерживают разные пользовательские интерфейсы или команды (text-based user interfaces), поэтому бот исполняет несколько таких команд. Такие производители роутеров как TP-Link, Zyxel, Zhone, и Netgear поддерживают, по крайней мере, одну из таких команд. Бот не предусматривает обработку различных ситуаций при исполнении команд, вместо этого он просто продолжает исполнение вне зависимости от успешности выполнения вышеупомянутых DNS hijacking операций.
Обход брандмауэров
Одним из самых интересных аспектов Linux/Moose является его способность заражать компьютеры внутри сети, при этом обходя защиту устаревших брандмауэров. Для этого используется два различных механизма: первый полагается на слабые настройки брандмауэра, а второй на NAT traversal.
Как мы уже указывали ранее, боту известен публичный IP-адрес роутера, который был им скомпрометирован. Затем этот IP-адрес используется как основа для дальнейшего сканирования близких к нему по диапазону IP-адресов с открытым Telnet-портом для заражения устройств в той же подсети. Бот перебирает различные IP-адреса внутри той же подсети внешнего адреса роутера с маской /15. Это позволяет боту эффективно обходить брандмауэры и позволять червю распространять копии своего тела.
Рис. Схема компрометации устройств в той же подсети или в Интернете.
На схеме выше видно, что операторы фокусируются на сканировании диапазона IP-адресов, близких к адресу роутера. Линиями черного цвета отмечены сетевое подключение, а желтыми сетевое взаимодействие. Указанные шаги расписаны ниже.
Бот в зараженном роутере пытается заразить другое устройство в глобальной сети, но его попытки пресекаются брандмауэром. Бот в зараженном роутере пытается заразить устройство в глобальной сети и успешно обходит брандмауэр из-за тех слабых настроек безопасности, которые в нем используются. Бот в зараженном роутере имеет больше шансов на успех при заражении других роутеров из той же ISP подсети, если его брандмауэр позволяет подключение к роутерам по Telnet из той же подсети. В процессе нашего мониторинга зараженного роутера мы заметили, что доступ по Telnet к новым устройствам был в 3 раза более успешен в том случае, когда бот использовал сканирование IP-адресов, близко расположенных к адресу роутера, чем в случае сканирования произвольных адресов в глобальной сети. По нашему мнению, такая тенденция объясняется использованием NAT и присутствием роутеров со слабыми настройками. Это неудивительно, учитывая сложность современных сетей и того количества правил, которое должно быть настроено у брандмауэров, которые их обслуживают. Кроме того, исследование правил брандмауэров специалистом по имени Avishai Wool демонстрирует явную зависимость между сложностью и количеством правил брандмауэров и тем количеством ошибок, которое допускается при их конфигурировании. В исследовании указывается, что предоставление открытого доступа по Telnet является одной из распространенных ошибок.Вредоносная программа также запускает дополнительный поток, который сканирует диапазоны адресов на каждом IP-интерфейсе, представленном в системе, при этом избегая адресов с подсетью /32 и специальных адресов типа обратной петли (127.0.0.1).
Рис. Проверка адреса обратной петли.
Рис. Проверка маски подсети.
Как было указано на схеме выше, в случае присутствия одного из неправильно настроенных брандмауэров, который контролирует вход в локальную ISP- сеть (LAN), Moose может заразить один из роутеров в этой сети. После его успешного заражения, этот новый зараженный роутер запускает свой процесс сканирования новых жертв, что существенно повышает его шансы на успех в данной сети, поскольку правила брандмауэра по отношению к своему трафику значительно ниже чем к внешнему.
Такой тип автоматического проникновения в сеть (pivoting) является весьма интересным по следующим причинам:
Некоторые сети оставляют внутри самой сети слабые настройки защиты для брандмауэров, в отличие от их настроек при работе вовне. Роутеры можно представить, как узлы или вершины графа сети Интернет. Доступ к одной вершине прокладывает путь к множеству последующих. Все типы сетей могут быть идентифицированы операторами ботнета: различные сторонние производители, бизнес-партнеры, частные облака, extranet, и т. д. Серверы поставщиков сетевого оборудования также традиционно управляются через Telnet. Домашние роутеры и другие устройства, как правило, возвращаются к заводским настройкам самим пользователем, что делает их более уязвимыми с настройками безопасности по умолчанию, даже если Интернет-провайдер изменил их на необходимые перед передачей клиенту. NAT traversalДругой интересной особенностью вредоносной программы, которая относится к сетевому проникновению (network penetration), является реализация функции NAT Traversal. Для этого бот использует протоколы Session Traversal Utilities for NAT (STUN) и Traversal Using Relays around NAT (TURN), которые позволяют транслировать сетевые пакеты из локальной сети, стоящей за NAT, за ее пределы.
Конфигурационный C&C-сервер предоставляет боту необходимую информацию для передачи сетевых пакетов за пределы NAT: публичный адрес роутера и адрес сервера ретрансляции (relay C&C server). В течение нашего исследования, IP-адрес сервера ретрансляции всегда был одним: 93.190.140.221. Ниже указаны значения конфигурации бота, которые влияют на выполнение функции NAT Traversal.
В случае использования ботом функции NAT Traversal, он создает два потока исполнения, которые будут взаимодействовать с C&C-сервером ретрансляции. Сама операция передачи пакетов (ретрансляция) запрашивается ботом у C&C-сервера через короткие промежутки времени (параметр cnccfg_relaycnc_sleep). На такой запрос сервер отвечает парой или набором пар IP_адрес-порт.
Первый пакет, который отправляет бот на C&C-сервер ретрансляции, является жестко зашитым в теле вредоносной программе.
Ответ сервера имеет следующую структуру.
Ниже указаны команды операции NAT traversal, которые бот может обработать.
Ниже указан пример такого ответа.
Режим работы, который запрашивается C&C-сервером ретрансляции, например, туннелирование TCP (TCP Tunnel), 0. Удаленный порт туннеля (сетевой порядок байт), 80. Удаленный адрес IP-туннеля (сетевой порядок байт), 192.168.1.1. Далее, бот подключается к адресу назначения туннеля. После успешного подключения, один из потоков бота будет поддерживать два сокета, которые будут обслуживать передачу трафика к C&C-серверу ретрансляции и от него.Рис. Туннелирование NAT traversal в действии.
Такое туннелирование позволяет операторам ботнета иметь доступ к зараженному роутеру, даже в случае его недоступности из глобальной сети из-за настроек брандмауэра или NAT. Наше исследование этой угрозы показало, что механизм туннелирования используется ботом для мошеннических действий в социальных сетях, о которых мы рассказывали ранее. Мы часто наблюдали ответ от сервера со статусом TCP-reset (RST), а также команды типа Sleep.
Организация прокси
Одним из первых действий, которое выполняет Linux/Moose, является создание входящего порта 10073 для получения входящих прокси-подключений. Присутствие такого открытого порта на роутере свидетельствует о компрометации устройства, чем и пользуется бот, когда пытается найти и заразить новые устройства. Когда бот обратиться к этому открытому порту на другом устройстве, это приведет к «рукопожатию» TCP (TCP handshake) без передачи полезных данных. Ниже указан код Moose, который специализируется на обработке входящих подключений и проверки IP-адресов на предмет принадлежности к «белому списку» разрешенных для подключения.
Рис. Проверка IP-адреса в списке разрешенных для подключения.
Функция is_in_whitelist выполняет проверку IP-адреса источника подключения в «белом списке», который был предоставлен конфигурационным C&C-сервером ранее. В случае присутствия адреса в этом списке, дескриптор сокета с параметрами передается отдельному потоку для дальнейшей обработки.
Рабочий поток прокси сервера отвечает за обработку прокси-подключений для IP-адресов из белого списка. После подключения, прокси-сервер (бот) читает из сокета один байт, который регламентирует используемый протокол или функцию.
Все эти вышеперечисленные протоколы являются классическими для организации прокси-подключения, т. е. для ситуации, когда кто-то пытается скрытно использовать ресурс скомпрометированного устройства или компьютера для генерации трафика. Поскольку, в данном случае, IP-адрес устройства имеет хорошую репутацию, злоумышленники используют его для выполнения таких операций как генерация кликов рекламы, рассылка спама, выполнение мошеннических действий в социальных сервисах. В конечном итоге, этот IP-адрес потеряет свою положительную репутацию и будет занесен в черный список, что приведет к расследованию такой ситуации.
Вредоносная программа использует стандартную реализацию протокола SOCKS 4. Он позволяет организовать TCP-туннелирование трафика от зараженного устройства к хосту, который был указан параметром конфигурации. После первоначального рукопожатия, трафик будет прозрачно передаваться в обоих направлениях между зараженным устройством и сервером (хостом) с другой стороны.
Рис. Пример туннелирования SOCKS 4.
Видно, что на первом этапе (1) происходит т. н. SOCKS exchange, когда боту сообщают об используемом протоколе. Как только бот (прокси-сервер) отвечает статусом успешного подключения (0×5A), тогда прокси-клиент (оператор ботнета) отправляет HTTP-запрос к целевому серверу (2) для первичного проксирования на зараженном роутере. В ответ на этот запрос, бот возвращает ответ, который был получен от сервера назначения (Instagram) (3). В этом случае запрос был на перевод подключения в безопасный режим HTTPS через поле Location HTTP-протокола.
Протокол SOCKS 4 использовался злоумышленниками чаще всех остальных.
Другая версия протокола — SOCKS 5, также используется для организации TCP-туннеля между сервером и хостом. Moose реализует эту версию протокола не полностью и поддерживает только один метод аутентификации под названием «No authentication». Такая частичная поддержка протокола является достаточной для операторов, так как они уже используют метод белого списка для предотвращения подключения к боту нежелательных клиентов. Использование такого подхода позволяет поддерживать широкий спектр различных клиентских приложений.
Бот также содержит реализацию еще одного протокола для прокси — HTTP/1.1. Код реализации этого протокола просматривает HTTP-заголовки, обращается к хосту назначения, подключается к нему и отправляет полученные данные обратно клиенту. Он также обрабатывает метод CONNECT в случае его присутствия при использовании безопасной версии протокола — HTTPS.
Рис. Проверка метода CONNECT.
Нужно отметить, что конфигурационный C&C-сервер отправляет боту белый список конфигурации IP-адресов, который включает в себя специальные флаги, установка такого флага разрешает IP-адресу использовать прокси-подключение на порты с номерами 25 (SMTP), 465 (SMTPS), 587 (submission). Для большинства IP-адресов этот флаг сброшен.
Очевидно, что описанные выше механизмы позволяют оператору ботнета использовать положительную репутацию IP-адресов скомпрометированных устройств весьма гибким и незаметным способом.
Функции сниффера
Linux/Moose содержит в себе возможности сниффера, т. е. может прослушивать трафик, проходящий через роутер. Такая функция включается двумя различными флагами конфигурации: cnccfg_flag_scanner_sniffer и cnccfg_flag_thd_sniffer. В случае активности этих флагов, вредоносная программа создает отдельный поток исполнения для каждого сетевого интерфейса, который получил, по крайней мере, 101 пакет. Такая проверка выполняется для того, чтобы избежать создания потоков для интерфейсов, через которые не проходит трафик.
Поток, выполняющий работу по прослушиванию трафика, является довольно простым. Он создает raw-сокет и устанавливает сетевой интерфейс в режим promiscuous захвата всех пакетов. После этого, в цикле выполняется функция recvfrom для чтения данных из сокета.
Рис. Прослушивание сетевого трафика.
Вредоносную программу интересуют только TCP-пакеты, в которых она осуществляет поиск различных строк, указанных операторами через параметр конфигурации snfcfg_id_needle, которые были отправлены боту конфигурационным C&C-серверу. Проанализированные нами образцы были сконфигурированы на поиск следующих строк:
twll= twid= LOGIN_INFO= c_user= ds_user_id= SAPISID= APISID= PLAY_ACTIVE_ACCOUNT= Как уже поминалось ранее, эти строки представляют из себя данные файлов HTTP cookie, которые относятся к веб-сайтам социальных сервисов.Как только бот обнаружит указанные данные, весь сетевой пакет, включая, заголовки Ethernet, IP, TCP, а также данные пакета отправляются на отчетный C&C-сервер в обфусцированном виде. Формат такого сообщения указан ниже.
Сервер отвечает пакетом со следующей структурой.