💀 Бэкдор внутри HAProxy: набор инструментов DPRK атакует южнокорейские автопром и медиа Linux-набор инструментов с низкой обнаруживаемостью минирует граничные серверы южнокорейских автопроизводителей и СМИ. Вместо грубой командной оболочки атакующие пересобрали HAProxy 2.8.12 с модулем ted_plugin. Модуль использует штатный API фильтров, пулы памяти и планировщик событий балансировщика, чтобы перехватывать HTTP, воровать файлы cookie сессий и вставлять скрипты выбранным клиентам. Легитимная балансировка нагрузки при этом работает как обычно. Рядом лежат троянизированные crond, agetty, atd, sshd и polkitd, SSH-кейлоггер пишет пароли в /var/lib/sshd/c8c68e629bba773a10ac80012d10bf19, а загрузчик чистит /var/log/secure, auth.log, audit.log и bash_history от следов. По данным rapid7_blog, кампанию относят к DPRK APT со средней уверенностью: нацеленность на южнокорейские медиа и автопром, XOR-шифрование, собственный шифр подстановки, C2 из списков, связанных с APT37. Самые ранние загрузки на VirusTotal датированы серединой 2025 года, но использованный HAProxy 2.8.12-0fdb194 вышел 22.11.2024. Точная точка входа не подтверждена: у обеих жертв наружу торчали порты 80, 443 и 25, на 443 — групповой портал, на 25 — почта. И то, и другое укладывается в почерк Kimsuky. curlRAT маскируется под легитимный crond и работает двумя потоками. Первый опрашивает C2 через HTTPS с интервалом по умолчанию 43200 секунд, в режиме учащённых опросов — 30 секунд. Конфигурация содержит байт-селектор: команды 0–5 дают выполнение команд через popen, запись конфигурации, загрузку полезной нагрузки, обратную оболочку и PTY. Второй поток — сторожевой процесс: каждый час проверяет /var/run/haproxy.pid и шлёт C2 статус процесса как 0, 1, 2 или 3. Полезная деталь для защитников: до активации сторожевой процесс проверяет /usr/lib/libvirtlog.so.0 — не в виртуальной машине он засыпает на шесть минут и выходит. Ключевой трюк — не уязвимость нулевого дня, а сборка под конкретную среду. Модуль читает свою рабочую конфигурацию из ~/cache/haproxy-1000.cache, расшифровывая её двойным слоем: последовательным XOR и моноалфавитной подстановкой. Так же зашиты списки IP-адресов в haproxy-1001.cache и haproxy-1002.cache. Проверка бинаря по размеру или поверхностным сигнатурам не поможет. Бэкдор так глубоко вшит в HAProxy, что песочница видит легитимный балансировщик. Я бы начинал не с сетевых сигнатур, а со сравнения бинаря граничного хоста с официальной сборкой: 18 МБ, контроль целостности вне базы RPM и аудит вызовов API фильтров за пределами штатной конфигурации. #HAProxy #DPRK #APT37 #бэкдор #curlRAT