Агентство национальной безопасности и Федеральное бюро расследований США
Управляющий центр «Дроворуба» аргументом командной строки получает путь к конфигурационному файлу в формате JSON:
{
«db_host» : «<DB_IP_ADDR>»,
«db_port» : «<DB_PORT>»,
«db_db» : «<DB_NAME>»,
«db_user» : «<DB_USER>»,
«db_password» : «<DB_PASS>»,
«lport» : «<LPORT>»,
«lhost» : «<LHOST>»,
«ping_sec» : «<SEC>»,
«priv_key_file» : «<PRIVATE_KEY_FILE>»,
«phrase» : «<PHRASE>»
}
В качестве бекенда используется СУБД MySQL. Для подключения клиентов используется протокол WebSocket.
Клиент имеет встроенную конфигурацию, в том числе URL сервера, его публичный ключ RSA, имя пользователя и пароль. После установки руткита конфигурация сохраняется в виде текстового файла в формате JSON, который скрывается от системы модулем ядра «Дроворуба»:
{
«id» : «cbcf6abc-466b-11e9-853b-000c29cb9f6f»,
«key»: «Y2xpZW50a2V5»
}
Здесь «id» — уникальный идентификатор, выданный сервером, в котором последние 48 бит соответствуют MAC-адресу сетевого интерфейса сервера. Параметр «key» по умолчанию — закодированная в формате base64 строка «clientkey», которая используется сервером при первичном рукопожатии. Кроме этого, конфигурационный файл может содержать информацию о скрываемых файлах, модулях и сетевых портах:
{
«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»
}
]
}
}
Ещё один компонент «Дроворуба» — агент, его конфигурационный файл содержит информацию для подключения к серверу:
{
«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»
}
Поля «clientid» и «clientkey_base64» изначально отсутствуют, они добавляются после первичной регистрации на сервере.
После установки выполняются следующие операции:
- загружается модуль ядра, который регистрирует хуки для системных вызовов;
- клиент выполняет регистрацию в модуле ядра;
- модуль ядра скрывает работающий процесс клиента и его исполняемый файл на диске.
Для взаимодействия клиента с модулем ядра используется псевдостройство, например /dev/zero. Модуль ядра выполняет разбор всех записываемых в устройство данных, а для передачи в обратном направлении посылает клиенту сигнал SIGUSR1, после чего тот считывает данные из этого же устройства.
Для обнаружения «Дроворуба» можно использовать анализ сетевого трафика средствами NIDS (вредоносную сетевую активность в самой заражённой системе выявить не удаётся, так как модуль ядра скрывает используемые им сетевые сокеты, правила netfilter и пакеты, которые могли бы перехватиться raw-сокетами). В системе, где установлен «Дроворуб», можно обнаружить модуль ядра, отправив ему команду сокрытия файла:
touch testfile
echo “ASDFZXCV:hf:testfile” > /dev/zero
ls
Созданный файл «testfile» при этом становится невидимым.
Другие методы обнаружения включают анализ памяти и содержимого диска. Для предотвращения заражения рекомендуется использовать обязательную проверку подписи ядра и модулей, доступную начиная с версии ядра linux 3.7.
В отчёте содержатся правила Snort для обнаружения сетевой активности «Дроворуба» и правила Yara для детектирования его компонентов.
Напомним, что 85 ГЦСС ГРУ (в/ч 26165) ассоциируется с группой
Источник: opennet.ru