РУТКИТЫ
ФСБ ЛОМАЕТ ЯДРО LINUX!
Что, гои, отняли семерку, а с десяткой противно, да?
УК РФ Статья 273. Создание, использование и распространение вредоносных компьютерных программ
Руткит (англ. rootkit, то есть «набор root-а») — набор программных средств (например, исполняемых файлов, скриптов, конфигурационных файлов), обеспечивающих:
маскировку объектов (процессов, файлов, каталогов, драйверов);
управление (событиями, происходящими в системе);
сбор данных (параметров системы).
Термин Rootkit исторически пришёл из мира UNIX, и под этим термином понимается набор утилит или специальный модуль ядра, которые злоумышленник устанавливает на взломанной им компьютерной системе сразу после получения прав суперпользователя. Этот набор, как правило, включает в себя разнообразные утилиты для «заметания следов» вторжения в систему, делает незаметными снифферы, сканеры, кейлоггеры, троянские программы, замещающие основные утилиты UNIX (в случае не ядерного руткита). Rootkit позволяет взломщику закрепиться во взломанной системе и скрыть следы своей деятельности путём скрытия файлов, процессов, а также самого присутствия руткита в системе.
- википедия
_______________________________________
Далее следует неполный перевод доклада ФБР о руткитах ФСБ под Unix системы. Некоторые фрагменты опущены по причине и без того совершенной невозможности читать для пользователя, но могут быть переведены в подробностях *и обсуждены* в этой теме если кому-то это нужно. Я настоятельно советую дочитать хотя бы резюме и введение. ФБР разумеется мелет чушь про то, что это якобы "для вмешательства в выборы", это полная чушь. Linux не принадлежит ни Штатам, ни их кандидатам. И знаменитые участники зверских педофильных оргий pizzafate не отдавали никакого особого предпочтения Unix системам. Это то же самое, как говорить, что бесконечные заказы на госзакупках на оказание услуг по деанонимизации пользователей тор направлены на "слежку за американцами". Если это ПО попадает в руки не обычных приколистов, а евреев ФСБ, от него страдаем мы, а не какие-то другие евреи.
От себя хочу добавить.
НИКОГДА не пренебрегайте обновлениями Unix-подобной системы. Выучите команды для конкретно вашей Unix обновления и полного апгрейда системы и набирайте их каждый день перед тем, как начать работу. Для тех, кому сложно писать, напишите их один раз и сохраните в .sh скрипт, запускайте его и выполняйте в терминале каждый раз перед тем, как начать любую работу на компьютере.
Агентство национальной безопасности
Федеральное бюро расследований
Российская ГРУ 85 ГЦСДеплои Ранее Неизвестные вредоносные программы Дроворуб
"
Резюме
Российский генеральный штаб Главного разведывательного управления (ГРУ) 85-го Главного спецсервисного центра (ГЦСС) войсковой части 26165 в рамках шпионских операций в среде Linux®systems, называемого "Дроворуб", занимается развёртыванием ранее не раскрытых вредоносных программ для Linux®-систем. Вредоносная кибернетическая деятельность в рамках GTsSS ранее приписывалась частному сектору с использованием имен Fancy Bear, APT28, Strontium и ряда других идентификаторов. (Министерство юстиции, 2018) (Washington Post, 2018) (CrowdStrike, 2016) В данной публикации приведена справочная информация о Drovorub, атрибуция его использования в GTsSS, подробная техническая информация о вредоносном ПО Drovorub, руководство по обнаружению Drovorub на зараженных системах, а также рекомендации по его снижению. ...
Drovorub - это инструментарий вредоносного программного обеспечения для Linux, состоящий из имплантата в сочетании с руткитом модуля ядра, инструмента для передачи и перенаправления файлов и сервера командования и управления (C2). При развертывании на машине-жертве имплант (клиент) Дроворуб обеспечивает возможность прямого взаимодействия с инфраструктурой С2, контролируемой агентами; возможность загрузки и выгрузки файлов; выполнение произвольных команд от имени пользователя "root"; и переадресацию сетевого трафика на другие хосты в сети.
Ряд технологий комплементарного обнаружения эффективно выявляют активность вредоносного ПО "Дроворуб". Однако модуль "Дроворуб-ядро" представляет проблему для крупномасштабного обнаружения на хосте, поскольку скрывает артефакты Дроворуба от средств, обычно используемых для реагирования в реальном времени. В то время как проверка пакетов на границах сети может быть использована для обнаружения Drovorub в сетях, методы на базе хоста включают зондирование, продукты безопасности, реагирование в реальном времени, анализ памяти и анализ носителей (образов дисков). Специальное руководство по запуску Volatility®, зондированию поведения при скрытии файлов, Snort®rules и Yara®rules включено в описание данного руководства.
Чтобы предотвратить заражение системы с невозможностью последующего обнаружения Дроворуба, системные администраторы должны обновить ядро Linux 3.7 или более позднюю версию, чтобы в полной мере воспользоваться преимуществами принудительного применения подписей ядра. Кроме того, владельцам систем рекомендуется настроить системы так, чтобы в них загружались только модули с действительной цифровой подписью, что затруднит внедрение в систему вредоносного модуля ядра.
Введение
Что такое Дроворуб? Дроворуб - это инструментарий вредоносного ПО для Linux, состоящий из имплантата в сочетании с руткитом модуля ядра, инструмента для передачи файлов и переадресации портов, а также сервера для команд и управления (C2). При развертывании на машине-жертве имплант (клиент) Дроворуб предоставляет возможность прямого взаимодействия с управляемой агентом инфраструктурой C2 (T1071.0011); возможность загрузки и выгрузки файлов (T1041); выполнение произвольных команд от имени пользователя "root" (T1059.004); а также переадресацию сетевого трафика на другие хосты в сети (T1090). Модуль ядра rootkit использует различные средства для сокрытия себя и имплантата на зараженных устройствах (T1014), и продолжает работу через перезагрузку зараженной машины, если только в режиме "Full" или "Thorough" не включена безопасная загрузка по UEFI. Несмотря на это укрытие, эффективные методы обнаружения и стратегии смягчения последствий описываются ниже.
Пакет вредоносных программ Drovorub состоит из четырех отдельных исполняемых компонентов: Дроворуб-агент, Дроворуб-клиент, Дроворуб-сервер и модуль Дроворуб-ядро. Связь между компонентами осуществляется через JSON через WebSockets. (Fette & Melnikov, 2011)
Дроворуб-агент, Дроворуб-клиент и Дроворуб-сервер требуют конфигурационные файлы и открытый ключ RSA (для Дроворуб-агента и U/OO/160679-20| PP-20-0714| август 2020 Rev 1.02Rev 1.02Rev 85th GTsSS представляет изначально открытый Drovorub Malware Дроворуб-клиент) или закрытый ключ (для Дроворуб-сервера) для связи. Краткий обзор каждого компонента представлен ниже.
Дроворуб-сервер
Дроворуб-сервер, установленный на инфраструктуре, управляемой актерами, обеспечивает С2 для Дроворуб-клиента и Дроворуб-агента. Дроворуб-сервер использует базу данных MySQL для управления соединением Дроворуб-клиента(ов) и Дроворуб-агента(ов). В базе данных хранятся данные, используемые для регистрации, аутентификации и постановки задач Drovorub-агента и Drovorub-клиента.
Дроворуб-клиент .
Компонент "Дроворуб-клиент" устанавливается на целевые конечные точки агентом. Этот компонент получает команды со своего удаленного Drovorub-сервера и предлагает передачу файлов к/от жертвы, переадресацию портов и возможности удаленного управления shell. Кроме того, Drovorub-клиент упакован с модулем ядра Drovorub, который обеспечивает скрытую функциональность на основе руткитов для скрытия клиента и модуля ядра.
Модуль ядра Drovorub
Модуль Drovorub-kernel реализует базовый функционал для сокрытия себя и различных артефактов из пользовательского пространства, включая заданные файлы и каталоги, сетевые порты и сеансы, процесс Дроворуб-клиент и дочерние процессы Дроворуб-клиента.
Дроворуб-агент
Дроворуб-агент, скорее всего, будет установлен на хостах с доступом в Интернет или на управляемой актерами инфраструктуре. Исполняемый модуль Drovorub-agent получает команды от сконфигурированного сервера Drovorub. Этот компонент включает в себя большую часть той же функциональности, что и Drovorub-клиент, за исключением возможности удаленного доступа к shell. Кроме того, Drovorub-agent идет без дополнительного руткита модуля ядра Drovorub. Очевидными целями Дроворуб-агента являются: загрузка файлов на конечные станции Дроворуб-клиента, а также переадресация сетевого трафика через портовые ретрансляторы.
Атрибуция
Дроворуб - проприетарная вредоносная программа, разработанная для использования Главным разведывательным управлением (ГРУ) 85-го Главного спеццентра (ГЦСС) войсковой части 26165. Вредоносная кибернетическая активность GTsSS ранее приписывалась частному сектору с использованием имен Fancy Bear, APT28, Strontium и ряда других идентификаторов. (Министерство юстиции, 2018)(Washington Post, 2018)(CrowdStrike, 2016) В дополнение к атрибуции АНБ и ФБР в GTsSS, оперативная инфраструктура командования и управления Дроворуба была связана с общеизвестной операционной киберинфраструктурой GTsSS. Например, 5 августа 2019 года Центр реагирования на угрозы безопасности компании "Майкрософт" опубликовал информацию, связывающую IP-адрес 82.118.242.171 с инфраструктурой "Стронтьюмин" в связи с эксплуатацией устройств "Интернет вещей" (IoT) в апреле 2019 года. (Microsoft Security Response Center, 2019) (Microsoft, 2019) АНБ и ФБР подтвердили, что этот же IP-адрес использовался также для доступа к IP-адресу Drovorub C2 185.86.149.125 в апреле 2019 г. Почему вредоносная программа называется "Drovorub" и что она означает? Название "Дроворуб" происходит от множества артефактов, обнаруженных в файлах Дроворуба, а также от операций, выполняемых GTsSS с помощью этой вредоносной программы; это имя используется самими акторами GTsSS. С русского переводится как "дровосек" или "рубить дрова".
Дроворуб Технические характеристики
Следующие разделы содержат технические детали Дроворуба, в том числе функциональность компонентов и инструментальное взаимодействие. Все IP-адреса, порты, крипто-ключи, переданные файлы, пути к файлам и туннелированные данные, использованные в примерах, были сгенерированы в лабораторной среде и не должны предполагаться как фактически используемые агентом. Даты и время, указанные в примерах, были либо отредактированы, либо изменены. Кроме того, в примеры JSON были добавлены новые строки и вкладки для удобства чтения.
Drovorub Конфигурация компонентов
Дроворуб-сервер Конфигурация
Конфигурационный файл Drovorub-сервера представляет собой текстовый файл в формате JSON. Он должен присутствовать при запуске исполняемого файла Drovorub-server и его путь указан в качестве аргумента командной строки. Он содержит IP-адрес, порт, имя БД, имя пользователя и пароль для своей бэкэндной БД MySQL. Он также содержит путь к своему приватному RSA ключу, IP-адрес прослушивающего хоста или домена и порта, а также интервал, через который WebSocket будет посылать "ping" сообщения подключенным Дроворуб-клиентам и Дроворуб-агентам. Пример конфигурационного файла Drovorub-сервера показан ниже. Использование поля "Фраза" в конфигурационном файле неизвестно.
{"db_host" : "<DB_IP_ADDR>",
"db_port": "<DB_PORT>",
"db_db": "<DB_NAME>",
"db_user" : "<DB_USER>",
"db_password" : "<DB_PASS>",
"lport": "<LHOST>",
"lhost": "<LPORT>",
"ping_sec": "<SEC>",
"priv_key_file" : "<PRIVATE_KEY_FILE>",
"phrase": "<PHRASE>"}
Дроворуб-клиент Конфигурация
Первоначальная конфигурация для Drovorub-клиента встроена в его исполняемый файл. Он включает в себя URL2 обратного вызова Drovorub-сервера, имя пользователя и пароль, а также открытый ключ RSA. Как пара имя пользователя/пароль, так и открытый ключ RSA используются для аутентификации сервером Drovorub. После успешной регистрации на сервере Дроворуб клиент записывает на диск отдельный конфигурационный файл, который будет скрыт модулем Drovorub-kernel. Этот послеинсталляционный конфигурационный файл представляет собой текстовый файл в формате JSON. Первоначальное содержимое файла включает в себя значения "id" и "key", используемые для идентификации экземпляра Drovorub-клиента и будущих попыток аутентификации с Drovorub-сервером. Смотрите раздел Network Communications section для получения подробной информации о процессе аутентификации Дроворуба. Дополнительное содержимое конфигурационного файла добавляется для сохранения текущего скрытия произвольных модулей ядра, сетевых портов, файлов, каталогов и процессов, выполняемых модулем ядра Дроворуба, а также любых узлов сетевых портов, настроенных внутри целевого. Ниже приведен пример содержимого исходного конфигурационного файла Drovorub-клиента:
{"id" : "cbcf6abc-466b-11e9-853b-000c29cb9f6f",
"key": "Y2xpZW50a2V5"}
Значение для "id" - это 128-битная временная UUID-строка, которую сервер Дроворуб генерирует для Дроворуб-клиента при первом подключении. Этот UUID генерируется статически связанными библиотеками POCO C++ с открытым исходным кодом. Последние 48 бит (6 байт) UUID - это MAC-адрес одного из Ethernet-адаптеров Drovorub-сервера. Поэтому ожидается, что последние 6 байт значения "id" будут одинаковыми для Дроворуб-клиентов и Дроворуб-агентов, подключающихся к одному и тому же Дроворуб-серверу. Значение "key" по умолчанию является кодировкой base64 для ASCII-строки "clientkey". ASCII-строка "ключ клиента" жестко закодирована в двоичном файле Дроворуб-сервера. Значение "ключ" возвращается клиенту с Drovorub-сервера во время начального квитирования (См. процесс аутентификации "signin", описанный в разделе Network Communications section).
Ниже приведен пример конфигурационного файла Drovorub-клиента с некоторой информацией о сокрытии файлов, модулей и сетевых портов. Если файл, модуль или сетевой порт скрыт модулем Drovorub-kernel, то поле "активен" будет установлено в "true". Иначе оно будет "ложным". Для файлов и модулей полем "маска" является имя скрываемого файла или модуля. Каждому файлу, модулю или сетевому порту также присваивается UUID (поле "id"), с помощью которого отслеживается запись.
{"id" : "6fa41616-aff1-11ea-acd5-000c29283bbc",
"key": "Y2xpZW50a2V5",
"monitor" : {"file" : [{"active" : "true",
"id" : "d9dc492b-5a32-8e5f-0724-845aa13fff98",
"mask" : "testfile1"}],
"module" : [{"active" : "true",
"id" : "48a5e9d0-74c7-cc17-2966-0ea17a1d997a",
"mask" : "testmodule1"}],
"net" : [{"active" : "true",
"id" : "4f355d5d-9753-76c7-161e-7ef051654a2b",
"port" : "12345",
"protocol" : "tcp"}]}}
Дроворуб-агент Конфигурация
Конфигурационный файл Drovorub-agent представляет собой текстовый файл в формате JSON. Он должен присутствовать при запуске исполняемого файла Drovorub-agent и его путь указан в качестве аргумента командной строки. Изначально он содержит URL обратного вызова, имя пользователя и пароль, а также открытый ключ RSA. Ниже приведен пример начального конфигурационного файла Drovorub-agent:
{"client_login" : "user123",
"client_pass" : "pass4567",
"pub_key_file" : "public_key",
"server_host" : "192.168.57.100",
"server_port" : "45122",
"server_uri" : "/ws"}
После того, как Дроворуб-агенты впервые успешно зарегистрировались на своем Дроворуб-сервере, в конфигурационный файл добавляются два дополнительных поля: "clientid" и "clientkey_base64". Так же, как и значение "id" Дроворуб-клиента, "clientid" Дроворуб-агента - это 128-битная UUID-строка, сгенерированная Дроворуб-сервером и отправленная Дроворуб-агенту во время первоначальной аутентификации. Он используется для идентификации уникального экземпляра Drovorub-agent. Дроворуб-агент "clientkey_base64" также по умолчанию является кодировкой base64 для ASCII-строки "clientkey". Ниже приведен пример конфигурационного файла Drovorub-agent после успешного соединения с его сервером:
{"client_login" : "user123",
"client_pass" : "pass4567",
"clientid" : "e391847c-bae7-11ea-b4bc-000c29130b71",
"clientkey_base64" : "Y2xpZW50a2V5",
"pub_key_file" : "public_key",
"server_host" : "192.168.57.100",
"server_port" : "45122",
"server_uri" : "/ws"}
Операция по имплантации Дровораба
Установка клиента и модуля ядра Дроворуба
При установке и выполнении модуля Drovorub-клиент и модуля Drovorub-ядра выполняются следующие действия по настройке:
модуль Drovorub-kernel устанавливает все схемы системных вызовов, необходимые для его работы с руткитом (подробнее см. в разделе Evasionsection)
Drovorub-клиент регистрируется в модуле Drovorub-kernel (о том, как Drovorub-клиент и модуль Drovorub-kernel взаимодействуют друг с другом, см. в разделе Communicationssection (Связь на базе хоста)).
модуль Drovorub-kernel скрывает запущенные процессы Дроворуб-клиента и исполняемый файл Дроворуб-клиента на диске (подробнее см. в разделе Evasionsection).
Если Drovorub-клиент не сможет связаться с модулем Drovorub-ядро, он остановит выполнение. После того, как Drovorub-клиент и модуль Drovorub-ядро завершат свои действия по настройке, Drovorub-клиент попытается аутентифицироваться на сконфигурированном им Drovorub-сервере. После успешной регистрации на Drovorub-сервере, Drovorub-клиент немедленно запрашивает списки любых дополнительных файлов, модулей или сетевых портов, чтобы скрыть их, а затем ждет команды от Drovorub-сервера.
Сохранение модулей ядра Linux
Кибер-программа GTsSS использует широкий спектр запатентованных и общеизвестных методов для получения доступа к целевым сетям и сохранения своих вредоносных программ на зараженных устройствах.
Независимо от конкретного кибер-актора или инструментария, модули ядра могут сохраняться, используя возможности, встроенные в Linux для загрузки модулей ядра при загрузке.В дистрибутивах на базе Red Hat® это может включать, но не ограничиваться, размещение исполняемого скрипта .modules в /etc/sysconfig/modules/, добавлением модуля ядра в /etc/modules.conf или размещением файла .conf в /etc/modules-load.d/. В дистрибутивах, основанных на Debian, это может включать, но не ограничиваться добавлением модуля ядра в /etc/modules/, или помещением .conf файла в /etc/modules-load.d/. Модули ядра обычно размещаются в /lib/modules/<KERNEL_RELEASE>/kernel/drivers/, где <KERNEL_RELEASE> - это релиз ядра Linux на целевой машине. (Настройка системы > Грунтовка ядра, 2016)
Сетевые коммуникации
Все сетевое взаимодействие между компонентами Drovorub (т.е. клиентом, агентом и сервером) использует протокол WebSocket, реализованный в публично доступной библиотеке POCOC++, которая статически связана с каждым компонентом. Протокол WebSocket, определенный в RFC 6455, является протоколом прикладного уровня, который работает по протоколу TCP и состоит из начального квитирования, за которым следуют кадры сообщений для передачи данных. Drovorub может быть настроен на использование нестандартных TCP-портов для связи WebSocket. Все сетевые коммуникации Дроворуба проходят через сервер Дроворуба. Дроворуб-клиенты и Дроворуб-агенты не разговаривают напрямую друг с другом, а общаются через Дроворуб-сервер. Это означает, что Дроворуб-клиенты и Дроворуб-агенты могут общаться только с другими клиентами и агентами, которые подключены к тому же Дроворуб-серверу.
Дроворуб использует JSON в качестве формата сообщений для своих WebSocket полезных нагрузок. Все полезные нагрузки Дроворуб JSON имеют базовую структуру, показанную на рисунке 7 ниже [в оригинальном тексте]. Полезная нагрузка представляет собой один JSON-объект, содержащий один член по имени "дочерние", значением которого является массив JSON-объектов. Фактический порядок расположения JSON-объектов в массиве "дочерних" может отличаться от приведенного ниже. Каждый объект в "дочернем" массиве всегда содержит два элемента с именами "name" и "value". Значение члена "value" всегда base64 закодировано в каждом объекте, за одним исключением, которое подробно описано в разделе Command Taskingsection. Каждая полезная нагрузка JSON Drovorub будет содержать как минимум два объекта в "дочернем" массиве. Эти объекты имеют "имя" член-значение "модуль" и "действие". Объекты "модуль" и "действие" обозначают, в общем случае, конкретную команду или ответ С2. Дополнительные JSON-объекты, обозначаемые "...", представляют собой потенциальные параметры, связанные с конкретными перечисленными "модулем" и "действием". Команды С2 Дроворуба далее рассматриваются в разделе Задания команд. Этот формат полезной нагрузки применим ко всем сетевым коммуникациям между компонентами Drovorub.
{"children":
[
{"name":"module","value":"<BASE64 VALUE>"},
{"name":"action","value":"<BASE64 VALUE>"},...
]
}
Особенно важно, что протокол WebSocket реализует функцию, называемую "маскировкой "3 , которая влияет на то, как трафик появляется в сети. Согласно RFC 6455, каждое клиентское сообщение WebSocket, отправленное на сервер WebSocket, имеет "маскировку" XOR со случайным 4-байтовым значением, которое является уникальным для каждого сообщения. Значение XOR передается в заголовке фрейма сообщения, поэтому данные о полезной нагрузке могут быть удалены сервером WebSocket. Трафик между сервером и клиентом WebSocket не является XOR "замаскированным". В случае Дроворуба, серверы Дроворуба выступают в качестве серверов WebSocket, в то время как клиенты Дроворуба и агенты Дроворуба выступают в качестве клиентов WebSocket. Поэтому весь трафик, отправляемый с сервера Дроворуб клиенту или Дроворуб-агенту, будет читаться как простые текстовые JSON сообщения, в то время как трафик на сервер Дроворуб будет выглядеть как случайные данные из-за маскировки XOR. Следующая диаграмма [в ориг. тексте], взятая из RFC 6455, показывает структуру фрейма сообщений WebSocket. (Fette & Melnikov, 2011).
Аутентификация
Ниже приводится описание процесса, используемого как Дроворуб-клиентом, так и Дроворуб-агентом для подключения и аутентификации к Дроворуб-серверу. В этом описании термин "клиент" будет использоваться для обозначения либо Дроворуб-клиента, либо Дроворуб-агента, если не указано иначе, так как оба следуют одному и тому же процессу.
Клиент инициирует взаимодействие с сервером Дроворуб, сначала устанавливая соединение WebSocket через запрос на обновление HTTP, как показано на рисунке 10, ниже. Для клиента Drovorub, IP адрес и информация о портах Drovorub-сервера встроена в исполняемый файл, в то время как для Drovorub-агента она содержит файл конфигурации Drovorub-agent.
GET /ws HTTP/1.0
Connection: Upgrade
Host: 192.168.1.2:12345Sec-Web
Socket-Key: Ui/SCrtEKS/BaslV9vSMUw==
Sec-WebSocket-Version: 13
Upgrade: websocket
Дроворуб-сервер отвечает ответом протокола HTTP 101 Switching Protocols, как показано на рисунке 11 ниже.
HTTP/1.0 101 Switching Protocols
Connection: UpgradeContent-Length: 0
Date: Thu, 05 Nov 2020 13:07:00 GMT
Sec-WebSocket-Accept: SeoYykqncmS/fWcGFIHcv3AR26k=
Upgrade: websocket
Подробности о том, как клиенты и серверы WebSocket проверяют соединение в процессе квитирования WebSocket, можно найти в RFC 6455 и не обсуждается здесь. (Fette & Melnikov, 2011)
Как только клиент устанавливает WebSocketconnection, он пытается аутентифицироваться на Drovorub-сервере. Для аутентификации Drovorub существует два процесса: "авторизация" и "вход в систему". Процесс "авторизации" используется для первой регистрации клиента на Drovorub-сервере. Процесс "входа" используется для последующих попыток аутентификации после того, как клиент уже зарегистрировался на Дроворуб-сервере. На диаграмме ниже показаны команды C2, используемые в процессе аутентификации, как "signin", так и "login".
Оба процесса начинаются с запроса на аутентификацию от клиента к Drovorub-серверу, как показано в примере ниже (до "маскировки" WebSocket). Модулем", используемым для аутентификации Дроворуба, является "Y2xvdWQuYXV0aA==", который декодируется в "cloud.auth". В запросе содержится объект "action" с членом "value", который base64 декодирует в "auth.hello". Действие "auth.hello" принимает один параметр - объект "token". Токен представляет собой случайно сгенерированное 16-байтовое значение, которое шифруется открытым ключом RSA клиента, а затем кодируется base64. (ЗАМЕЧАНИЕ: значение "token" содержит возвраты каретки и символы новой строки "\r\n". Дроворуб-сервер удалит эти символы до декодирования "токена" в base64).
{"children":[
{"name":"module","value":"Y2xvdWQuYXV0aA=="},
{"name":"action","value":"YXV0aC5oZWxsbw=="},{"name":"token","value":"AIzX7mWtXtkJOBPeiVtC/0Nyofzgs+GZjZbwi0dd8Ak6/RtktfYjUltekzJXNt+CrGvG+ClA\r\n7Hmq772qrvUUjI/8g9MlDRN8vy+ZBcclCSv6KtBZ1+nxV285tquowBIEsEiYGX+ULzdhaG3I\r\nvHO/R8Me5xQqkRoS51LadZUY8SzEZ/0Eyg5Dtcu9ESzA3mldahqt0gVNExpcr7RfcrlDcfC2\r\nkdEzvckIlSDaHbcVT3y9GAp6IUgpmZuSFBkgXHfslUFmNvoAl/Tl5qFzi40woEU2f9kC6JWJ\r\n3zCBj+dvCL/oyaoXu7qBOf5hm32/ZjYP+N9AXJI0Jj8zLVb/rjiKoA=="}
]}
Когда Drovorub-сервер получает запрос на аутентификацию, он расшифровывает значение "токена" с помощью соответствующего закрытого ключа RSA. Для доказательства успешной расшифровки токена Дроворуб-сервер генерирует "serverid" (идентификатор сервера). Этот сервер ID генерируется сначала случайным 16-байтовым значением, добавляя расшифрованный клиентский токен, а затем генерирует SHA1 дайджест байтовых значений. Случайное 16-байтовое значение, генерируемое сервером Дроворуба, используется в качестве "токена" в его ответе клиенту. Дроворуб-сервер строит сообщение "auth.hello" с "сервером" и его незашифрованным токеном и отправляет его клиенту. (ПРИМЕЧАНИЕ: Токен Дроворуб-сервера не зашифрован, так как он будет использоваться клиентом для генерации того же "сервера", по сути доказывая, что Дроворуб-сервер расшифровал значение клиентского токена). Ниже приведен пример ответа Дроворуб-сервера на запрос на аутентификацию клиента.
{"children":[{"name":"module","value":"Y2xvdWQuYXV0aA=="},{"name":"action","value":"YXV0aC5sb2dpbg=="},{"name":"mode","value":"bG9naW4="},{"name":"clientid","value":"4h0fm4AffQntf0O7hhdhIlZUmbZvsk31jU08OwgomXsVf+HIKaPWpWwcYJ9cS493"},{"name":"token","value":"axCTGMUnr2v9FhRQmf2wYQ=="}]}
[Далее большой фрагмент с примерами и подробностями пропущен, см. оригинальный текст, полный перевод возможен в будущем, тогда этот пост будет расширен.]
[...]
Уклонение
Модуль Drovorub-kernel реализует базовый функционал для сокрытия различных артефактов из пользовательского пространства, включая указанные файлы и каталоги, процессы и свидетельства этих процессов в файловой системе "/proc", сетевые порты и сеансы, а также указанные загруженные модули ядра, чтобы включить себя. Что сщественно для реализации своих скрывающих возможностей, функции настоящего ядра оказываются взломаны либо путем непосредственного исправления ("патча") функций, либо путем перезаписи указателей, которые указывают на функции. Используя эту технику, модуль ядра Дроворуб вводит: сокрытие процесса, сокрытие файлов, сокрытие сокета, сокрытие сетевого фильтра и сокрытие от приема raw сокета.
Скрытие процесса
Модуль Drovorub-kernel может скрывать процессы от системных вызовов и от файловой системы proc (/proc). В зависимости от версии ядра Linux, модуль ядра Дроворуба может перехватывать либо функцию find_pid_ns(), find_pid(), либо функцию find_task_by_pid_type() для сокрытия процессов от системных вызовов. Скрытие процессов от файловой системы proc достигается перехватом нескольких функций ядра, которые могут включать d_lookup(), iterate_dir() или vfs_readdir() в зависимости от версии ядра Linux. Модуль Drovorub-kernel также перехватывает функцию поиска, хранящуюся в файле f_path.dentry->d_inode->i_op-> lookup файла "/proc". Наконец, модуль Drovorub-kernel перехватывает функцию ядра do_fork(), чтобы скрыть порожденные дочерние процессы от скрытого процесса.
Скрытие файлов
Для сокрытия файлов модуль Drovorub-kernel перехватывает либо функции ядра iterate_dir(), либо vfs_readdir(), в зависимости от версии ядра. Скрытые файлы отфильтровываются из списка каталогов, но скрытые файлы все равно доступны по имени файла, если имя известно.
Скрытие сокетов
Для сокрытия сетевых сокетов модуль ядра Drovorub перехватывает соответствующую функцию ядра и отфильтровывает скрытые сокеты. Он определяет, какую функцию следует подключить, открыв соответствующий интерфейс в каталоге /proc/net в файловой системе proc. Для TCP-соединений модуль ядра Drovorub обращается к /proc/net/tcp и /proc/net/tcp6. Для UDP-соединений модуль обращается к /proc/net/udp и /proc/net/udp6. После подключения соответствующей функции модуль Drovorub-kernel сравнивает записи о соединениях с сконфигурированным скрытым списком и отфильтровывает скрытые соединения. Модуль Дроворуб-ядро отфильтровывает TCP соединения, основанные на портах источника или назначения, UDP соединения, основанные только на портах источника, или любые соединения, принадлежащие скрытому процессу.
Скрытие сетевого фильтра
В Linux Netfilter - это компонент, позволяющий фильтровать пакеты в ядре. Он обычно используется брандмауэрами для выполнения фильтрации пакетов. Модуль Drovorub-kernel регистрирует Netfilter hook (термин hook здесь не подразумевает патч, а скорее является обычным термином для регистрации функции обратного вызова Netfilter) по номерам LOCAL_IN и LOCAL_OUT.Модуль Drovorub-kernel также скрытно перехватывает функцию nf_register_hook() кернела, которая используется для регистрации Netfilter hook. При вызове nf_register_hook() модуль ядра Дроворуб сначала вызывает оригинальную функцию nf_register_hook(), позволяющую добавить новый хук Netfilter. Затем с помощью функции ядра nf_unregister_hook() отменяет регистрацию любого перехвата, который ранее был зарегистрирован под тем же номером перехвата. Наконец, модуль ядра Дроворуб перерегистрирует свой перехват Netfilter, используя функцию nf_register_hook(). Целью удаления и перерегистрации перехвата Netfilter модуля ядра Дроворуба является обеспечение того, чтобы его Netfilter перехват был вызван перед любым другим, не зарегистрированным модулем Дроворуба, перехватом на том же номере перехвата. При вызове перехвата Netfilter модуля ядра Дроворуба модуль определяет, является ли пакет частью скрытого TCP соединения, или частью TCP соединения к или от скрытого процесса. Если это так, то его Netfilter hook возвращает NF_STOP, не позволяя никаким другим зарегистрированным Netfilter hooks вызывать этотpacket. Для облегчения идентификации пакетов к или от скрытых процессов, модуль ядра Drovorub тайно перехватывает функции сокета ядра для установления или приема соединений, а также для удаления соединений. Он находит эти функции, создавая сокет ядра с помощью функции ядра sock_create() и просматривая структуру возвращаемого сокета (предположим, что здесь он называется "s") в s->ops->accept, s->ops->connect и s->ops->release. Всякий раз, когда делается вызов на прием (входящие соединения) или вызов на подключение (исходящие соединения), модуль Drovorub-kernel проверяет, не скрыт ли вызывающий процесс. Если да, то сокет сохраняется в глобальном списке, который проверяется хуками модуля Drovorub-kernel Netfilter для каждого пакета.(ПРИМЕЧАНИЕ:UDP не поддерживается Netfilter-крюком модуля ядра, только TCP).
Прячась от raw сокета, модуль ядра Дроворуба перехватывает функцию ядра skb_recv_datagram(). Любой пакет, являющийся частью скрытой сетевой сессии, отфильтровывается из получаемого raw сокета. Сетевой сеанс должен быть явно скрыт, чтобы его пакеты отфильтровывались. Пакеты из сетевых сессий со скрытыми процессами не фильтруются автоматически.
Обнаружение
Методологии обнаружения
Ряд дополнительных методов детектирования эффективно идентифицирует активность вредоносного ПО Дроворуб. Однако, модуль ядра Дроворуба представляет собой сложную задачу для крупномасштабного обнаружения, поскольку он скрывает артефакты Дроворуба от инструментов, обычно используемых для реагирования в реальном масштабе времени. Ниже обсуждаются преимущества и недостатки различных методик обнаружения, доступных для вредоносного ПО Дроворуб.
ПРИМЕЧАНИЕ: Некоторые из методов, определенных в этом разделе, могут повлиять на доступность или стабильность системы. Защитники должны следовать организационной политике и лучшим практикам реагирования на инциденты, чтобы минимизировать риск для операций во время охоты на вредоносное ПО Дроворуб.
Обнаружение на основе сети
Системы обнаружения вторжений в сеть (NIDS) могут реально идентифицировать командные и контрольные сообщения между Дроворуб-клиентом или Дроворуб-агентом и Дроворуб-сервером. В частности, некоторые NIDS (например, Suricata®, Zeek®, Snort и т.д.), которые могут динамически дезактивировать "замаскированные" сообщения протокола WebSocket с помощью скриптовых возможностей. Использование TLSproxy на границе сети позволило бы обнаруживать командные и контрольные сообщения даже по зашифрованному TLS каналу.
В частности, некоторые NIDS (например, Snort, Suricata, Zeek и т.д.) могут динамически деобфускатировать "замаскированные" сообщения протокола WebSocket с помощью скриптовых возможностей.
Преимущества: Высокая степень уверенности, крупномасштабное (по всей сети) обнаружение сетевых команд и управления.
Недостатки: Возможность уклонения по TLS или изменения формата сообщений.
Обнаружение на основе хоста
Зондирование
Ниже приведен скрипт для взаимодействия с модулем Drovorub-kernel вредоносной программы. Этот скрипт пытается проверить, скрывает ли модуль Drovorub-kernel определенный файл, основываясь на известном предустановленном префиксе файла.
Преимущества: Быстрое, масштабируемое развертывание детекторов на конечных точках для обнаружения известных образцов, с относительно небольшим риском влияния на стабильность системы.
Недостатки: Возможность уклонения, если файловый префикс отличается от известного значения.
Продукты безопасности (например, антивирус, обнаружение и реагирование конечных точек и т.д.) и ведение журналов.
Продукты безопасности могут обеспечить видимость различных артефактов вредоносного ПО Drovorub, включая детектирование функциональности руткита. Оценка детектирования конкретных продуктов выходит за рамки данной публикации, однако, защитники должны учитывать, могут ли какие-либо продукты безопасности в их среде быть эффективными в обнаружении вредоносного ПО Drovorub.
Правильно настроенная система аудита ядра Linux может дополнительно выявить артефакты первоначального компрометации и установки вредоносного ПО Drovorub.
Живой отклик
Специалисты по реагированию на инциденты обычно используют техники реагирования в реальном времени, такие как поиск определенных имён файлов, путей, хэшей и правил Yara на работающих системах, использующих исполняемые файлы и библиотеки собственной системы (которые используют системные вызовы, предоставляемые ядром), для обнаружения вредоносной активности в масштабах предприятия. Модуль ядра Дроворуб скрывает себя и связанные с ним файлы, процессы и сетевые соединения путем перехвата (изменения логики и вывода) определенных функций ядра, что значительно снижает или полностью исключает эффективность данной методики обнаружения. Таким образом, данный метод обнаружения подвержен повышенному риску ложноотрицательных срабатываний (неспособность обнаружить скомпрометированную конечную точку).
Анализ памяти
Захват и анализ оперативной памяти конечной точки является наиболее эффективным подходом в обнаружении модуля Drovorub-kernel, так как он предлагает наибольшее понимание поведения, которое руткит берет, чтобы скрыть себя и другие артефакты в системе. Для получения и анализа памяти можно использовать такие общедоступные инструменты, как Linux Memory Grabber (LMG), LiME и Volatility, или Rekall. Подробное руководство по выявлению поведения модулей ядра Дроворуба представлено в разделе Анализ памяти с волатильностью ниже.
Преимущества: Обеспечивает полную видимость специфического поведения руткитов и артефактов, таких как файлы, другие процессы и сетевые соединения, скрытые вредоносной программой.
Недостатки: Более высокое потенциальное влияние на стабильность системы (во время приобретения), а не настолько масштабируемое для большого количества конечных точек.
Анализ носителей (изображений диска)
Несколько файловых артефактов Drovorub присутствуют и постоянно присутствуют на скомпрометированных конечных дисковых носителях, хотя и скрыты от обычных системных двоичных файлов и системных вызовов руткитом. Приобретение необработанных образов носителей является жизнеспособным методом обнаружения для известных образцов Дроворуба с использованием IOCs (например, имена файлов и пути к ним) или правил Yara.
Преимущества: Обеспечивает видимость файлов Дроворуба на диске, включая данные конфигурации.
Недостатки: Потеря артефактов памяти-резидента, более сильное потенциальное влияние на стабильность системы (во время сбора данных), и не настолько масштабируемая для большого количества конечных точек.
Анализ памяти с Volatility
Используя программное обеспечение Volatility для анализа памяти, можно обнаружить присутствие вредоносной программы Дроворуб на зараженных хостах. Volatility требует соответствующего профиля Linux для операционной системы, в которой память была захвачена, для корректной работы. Многие профили Linux доступны для скачивания с GitHub®website Volatility.
[С этого места подробнее о работе Volatility см. в оригинальном тексте]
Другой инструмент, который может быть использован для изучения памяти - Bulk Extractor. Одной из его функций является извлечение сетевого трафика из изображения. Это полезно, так как он может обеспечить некоторый сетевой трафик, генерируемый вредоносной программой в формате pcap. После того, как Bulk Extractor закончит анализ образа памяти, найдите файл в формате pcap в выходном каталоге и откройте его с помощью Wireshark. Используя фильтры отображения на некоторых терминах в связях C2, описанных в начале этой рекомендации, результаты могут идентифицировать хост как скомпрометированный.
[Подробнее с примерами, открытыми в Wireshark и разобранными, см. в оригинальном тексте]
Метод обнаружения модулей ядра Дроворуба
Если следующие команды выполняются в командной строке и "тестовый файл" исчезает, система заражается Дроворубом. Если "тестовый файл" не исчезнет, система все равно может быть заражена Дроворубом. Может быть изменена подпись "ASDFZXCV" или псевдо-устройство, используемое для связи на хосте между Дроворубом-клиентом и модулем ядра Дроворуба, может быть чем-то отличным от /dev/zero.
Правила Snort
Следующие правилаSnort могут быть использованы для обнаружения сетевых взаимодействий между Дроворуб-сервером и Дроворуб-клиентом (или Дроворуб-агентом). Правило #1 также может обнаруживать незамаскированные соединения Drovorub-клиента (или Drovorub-агента) с сервером Drovorub-клиента (или Drovorub-агента).
alert tcp any any -> any any (msg: "Drovorub WebSocket JSON Comms"; content:"{|22|children|22|:[{|22|name|22|:"; pcre: "/\x81.{1,4}\{\x22children\x22:\[\{\x22name\x22:\x22[a-z0-9_]{1,32}\x22,\x22value\x22:\x22[a-zA-Z0-9+\/]{1,256}={0,2}\x22\}/"; sid: 1; rev: 1
alert tcp any any -> any any (msg:"Drovorub WebSocket Ping";flow:established,from_server; dsize:18; content:"|89 10 7b 22 70 69 6e 67 22 3a 22 70 69 6e 67 22 7d 0a|";depth:18; sid: 2; rev: 1
Правила Яры
Это правило Яры может быть использовано для обнаружения компонентов Дроворуба. Так как модуль ядра Дроворуба активно скрывает себя и Дроворуб-клиента, эти правила наиболее эффективны, если запускать их в ходе криминалистического образа.
[Правила Yara подробнее см. в оригинале стр. 41-43]
[Обнаружение при помощи Yara и Snort с примерами см. в оригнальном тексте]
Меры предотвращения
ПРИМЕЧАНИЕ: эти меры не предназначены для защиты от первоначального вектора доступа. Ограничения по смыванию предназначены только для предотвращения сперфитизма Дроворуба и его укрытия.
Постоянно обновлять Linux
Системные администраторы должны постоянно проверять и запускать последнюю версию программного обеспечения, поставляемого поставщиком для компьютерных систем, с тем чтобы воспользоваться преимуществами усовершенствованного программного обеспечения и самыми последними мерами по обнаружению и смягчению последствий нарушения безопасности (Агентство национальной безопасности, 2018). Системным администраторам следует обновить ядро Linux Kernel 3.7 или более позднюю версию, чтобы в полной мере воспользоваться преимуществами внедрения подписей на ядре.
Предотвращение недоверенных модулей ядра
Владельцам системы рекомендуется настроить систему так, чтобы в нее загружались только модули с действительной цифровой подписью, что затруднит внедрение в систему вредоносного модуля ядра. Противник может использовать вредоносный модуль ядра для контроля над системой, скрытия или продолжения перезагрузок (Агентство национальной безопасности, 2017).
Оригинал https://media.defense.gov/2020/Aug/13/2002476465/-1/-1/0/CSA_DROVORUB_RUSSIAN_GRU_MALWARE_AUG_2020.PDF