Специалисты из сообщества MalwareHunterTeam обнаружили вредоносный ELF-файл, загруженный на платформу VirusTotal из Японии и не имевший на момент обнаружения ни одного детекта антивирусными движками. Быстрый анализ показал, что файл libjson_script.so.0 представляет собой бэкдор, нацеленный на определённые Linux-устройства. Этот файл имитирует легитимную библиотеку libjson_script.so, входящую в состав проекта OpenWrt (дистрибутив Linux для встраиваемых устройств) и его подсистемы libubox. Такая маскировка позволяет избежать подозрений при поверхностной проверке, особенно на маршрутизаторах, использующих компоненты OpenWrt.
Описание
Предоставленный анализ MalwareHunterTeam показал, что основная цель бэкдора - роутеры китайского производителя iKuai. Это подтверждается особенностями работы вредоносной программы, в частности попытками получить идентификатор шлюза (GWID), который фигурирует в официальной документации iKuai и хранится в файлах /etc/release и /usr/share/misc/.runlevel.cache. Таким образом, злоумышленники выбрали целевую аудиторию узкого сегмента корпоративных и провайдерских сетей, использующих оборудование iKuai.
После запуска бэкдор выполняет несколько последовательных действий, обеспечивающих закрепление в системе и связь с командным центром (C2). Сначала вызывается функция acquire_lock(), гарантирующая, что в памяти работает только один экземпляр вредоносного процесса. Затем происходит расшифровка конфигурации с помощью простого алгоритма XOR с однобайтовым ключом 0x5A. Расшифрованные строки содержат адрес C2 - https://47.80.111.129:7380 - и несколько URI для передачи данных, а также User-Agent (имитация браузера Chrome), язык Accept-Language и тип контента application/octet-stream. Кроме того, в конфигурации хранятся AES-256 ключ и значение интервала ожидания между сеансами связи - 3600 секунд (один час).
Далее бэкдор создаёт каталог /var/tmp и переходит в него, инициализирует контекст шифрования MbedTLS AES-GCM (библиотека для криптографических операций) с 256-битным ключом и настраивает HTTPS-клиент без проверки сертификата сервера. Отсутствие валидации сертификата упрощает организацию канала управления, но делает программу уязвимой к перехвату трафика на сетевом уровне. Затем запускается поток планировщика задач для выполнения команд, полученных от C2.
Бэкдор пытается получить идентификатор устройства GWID, проверяя файл /etc/release на наличие поля GWID=, и если не находит, обращается к /usr/share/misc/.runlevel.cache за ранее сохранённым значением. В случае отсутствия обоих вариантов бэкдор генерирует случайный GWID и записывает его в указанный файл. Это поведение однозначно указывает на адаптацию под архитектуру iKuai.
Основной цикл C2 начинается со сбора профильной информации: имя хоста, локальный IP-адрес (исключая localhost), версия прошивки из поля VERSTRING= файла /etc/release. Все эти данные упаковываются в JSON-объект с помощью встроенной библиотеки cJSON, шифруются AES-256 и отправляются на сервер по адресу https://47.80.111[.]129:7380/cdn-cgi/trace.
В ответ от C2 приходит зашифрованный JSON, содержащий поле sleep (время ожидания до следующего опроса) и массив tasks. Каждая задача состоит из идентификатора и командной строки. Бэкдор поддерживает шесть команд: __sched__ (загрузка и выполнение дополнительной полезной нагрузки по расписанию), __sched_cancel__ (отмена запланированной задачи), __uu__ (загрузка, выполнение и последующее удаление ELF-файла), __dd__ (чтение файла, base64-кодирование и эксфильтрация при размере не более 512 КБ), cd (смена рабочего каталога) и exec_cmd_async (выполнение произвольных shell-команд через /bin/sh -c). Последняя команда установлена как действие по умолчанию, если команда не распознана.
Результаты выполнения любой команды отправляются обратно на C2 через функцию report_result, которая шифрует результат AES и передаёт его на URI https://47.80.111[.]129:7380/cdn-cgi/bm/cv/result. Для загрузки дополнительных модулей используется endpoint /cdn-cgi/challenge-platform/generate/ov1, а в конфигурации также присутствует ссылка на несуществующий GitHub-репозиторий, который, по-видимому, не используется в текущей версии бэкдора.
Все эти механизмы свидетельствуют о сложности и целенаправленности атаки. Разработчики бэкдора учли особенности операционной системы iKuai, основанной на модифицированном Linux, и использовали стандартные методы маскировки под открытый компонент OpenWrt. Использование шифрования AES-GCM с динамическим ключом усложняет анализ трафика, а отсутствие проверки сертификата при HTTPS-соединении снижает нагрузку на злоумышленников, но не делает канал неуязвимым для перехвата.
Для защиты от подобных угроз администраторам сетей с оборудованием iKuai следует уделять внимание целостности библиотек, особенно тех, что загружаются в память динамически. Рекомендуется проверять хеш-суммы исполняемых файлов и библиотек, отключать службы, не используемые на роутере, и регулярно обновлять прошивку. Кроме того, мониторинг исходящих соединений на порт 7380 и нестандартные HTTPS-запросы к доменам, имитирующим CDN-пути, может помочь обнаружить активность бэкдора на ранней стадии.
Индикаторы компрометации
URL
- https://47.80.111.129:7380
- https://47.80.111.129:7380/cdn-cgi/bm/cv/result
- https://47.80.111.129:7380/cdn-cgi/trace
SHA256
- 4e6276cc400b3b9e9616d04474b64a8fa0c35375b9673ab41a92a6d5bce72d8d
AES-256
- 8fc4cdd44e1d2baee2d8915c3a3651f452da877565a3ee4d43fb44ee28a4ee8c
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | rule ikuai_bdoor { meta: reference_hash = "4e6276cc400b3b9e9616d04474b64a8fa0c35375b9673ab41a92a6d5bce72d8d" strings: $s1 = "__sched__|" $s2 = "__sched_cancel__|" $s3 = "__uu__:" $s4 = "__dd__:" $s5 = "exec_elf" $c2_1 = "/cdn-cgi/bm/cv/result" $c2_2 = "/cdn-cgi/trace" $c2_3 = "/cdn-cgi/challenge-platform/generate/ov1" $beacon1 = "gwid" $beacon2 = "eips" $beacon3 = "VERSTRING=" condition: uint32(0) == 0x464c457f and filesize < 10MB and ( (3 of ($s*)) or (2 of ($c2*)) or (all of ($beacon*)) ) } |