Опубликовано
Как Hermes Agent помогает закрывать инциденты быстрее: разбор практикума по дебагу от rebrain
Автор: Гусев Николай [портфолио]
Темы: ai-agents
**Сложность: **средняя
Недавно пришло письмо от rebrain с предложением пройти практикум по дебагу. Я решил не просто пройти его, а разобрать на примере реального инцидента, как Hermes Agent помогает закрывать такие задачи системным администраторам. Ниже - хронология расследования, инструменты, которые задействовал агент, и итог.
Задача
Почтовый сервер mail.lab.local: всплеск CPU, задержки доставки, жалобы в Service Desk. Нужно локализовать источник нагрузки, найти вектор атаки, очистить очередь от спама, не затронув легитимные письма, и восстановить почтовый обмен. Права root предоставлены.
Безопасность и ПДН
Важное замечание: весь расследование проводился с соблюдением политики безопасности персональных данных. Все логи, очереди и содержимые письма обрабатывались локально, без передачи третьим сторонам. Для обезличивания и контроля ПДН использовалась наша собственная разработка - PII Guard. Это инструмент, который автоматически маскирует телефоны, имена и другие чувствительные данные в логах и выводе терминала, оставляя техническую информацию доступной для диагностики. Если хотите разобраться, как это работает - загляните на https://pii-guard.ru.
Что делает администратор без агента
Вот что обычно происходит:
-
SSH на сервер
-
Смотрим top/ps, находим постфикс
-
Пробуем очистить очередь вручную
-
Ищем по логам, кто отправляет спам
-
Пробуем разные варианты postsuper -d, часто с ошибками
-
Меняем конфиги, забывая откатить
-
Не замечаем скрытые процессы и вредоносные скрипты
-
Уходим с частично починенным сервером
Как работает Hermes Agent
Агент выступает как технический напарник, который:
-
Сразу валидирует инфраструктуру: SSH, ls, cat, ss - не фантазирует
-
Документирует каждый шаг: diff, команды, вывод
-
Держит DRP+откат в голове: перед изменениями резервирует конфиги
-
Ищет корневую причину, а не симптом
-
Выполняет ремонт, а не пишет план
Хронология расследования
Шаг 1. Подключение и первичная диагностика. plink -ssh user@158.160.184.52. uptime, ps aux --sort=-%cpu | head -25. Вывод: postfix/cleanup съедает 75% CPU. dovecot/auth - 83%. Load average 4.6. Это не аутентификация, а очередь.
Шаг 2. Анализ очереди. postqueue -p. Очередь: 3351 запрос, 1492 Kbytes. Получатели: victim_*@external.com, random_victim@external.com. Отправитель: admin@lab.local, root@lab.local. Это спам, замаскированный под корпоративную почту.
Шаг 3. Поиск источника. sudo grep -E 'admin|marketing' /var/log/auth.log. sudo tail -n 160 /var/log/mail.log. Вывод: активная аутентификация SASL под учётной записью marketing с последующей отправкой спама. При этом сама учётка marketing не имела активных процессов, cron или systemd-сервисов. Источник - внешняя аутентификация по украденным кредENTIALS.
Шаг 4. Блокировка источника. sudo passwd -l marketing. Все последующие попытки аутентификации падают с ошибкой. Новый спам прекращается.
Шаг 5. Поиск вредоносного кода. sudo find / -xdev -type f ( -name '.' -o -name 'cron' -o -name 'spam' -o -name 'mailer' -o -name '.sh' -o -name '*.py' ). Найден /usr/lib/postfix/sbin/postfix-watchdog - byte-compiled Python скрипт, маскирующийся под системный утилиту. Также подозрительные Python-процессы, маскирующиеся под postfix/cleanup.
Шаг 6. Удаление вредоносного кода. sudo rm -f /usr/lib/postfix/sbin/postfix-watchdog. sudo pkill -9 -f 'python3.12' (подозрительные процессы). Рабочие файлы из /tmp очищены.
Шаг 7. Очистка очереди. Первые попытки postsuper -d с параметрами как у сервиса не сработали: postsuper ожидает queue ID, а не recipient. Пришлось парсить вывод postqueue -p через Python, валидировать ID по /var/spool/postfix/deferred/<subdir>/<id>, и удалять пакетами по 50 штук. Итого удалено 3468 спам-писем.
Шаг 8. Восстановление работы. sudo systemctl restart postfix. postqueue -p показывает 3 легитимных письма. postsuper -r для перезапуска доставки. Но доставка не начинается: connect to external.com[54.237.57.21]:25: Connection timed out.
Шаг 9. Анализ сети. sudo timeout 5 bash -c 'echo EHLO > /dev/tcp/74.125.131.27/25'. Порт 25 недоступен из этой сети. iptables -L -n: политика ACCEPT, но провайдер блокирует на уровне инфраструктуры. VPN-интерфейсов нет. Это не проблема Postfix, а инфраструктурное ограничение.
Шаг 10. Подготовка релея. sudo postconf -e 'relayhost = [smtp.relay.example.com]:587'. sudo postconf -e 'smtp_sasl_auth_enable = yes'. Создан /etc/postfix/sasl_passwords с шаблоном кредENTIALS. Очередь очищена, Postfix активен, готов к доставке через релей.
Что агент делает лучше, чем администратор вручную
Не тратит время на поиск правильного синтаксиса postsuper -d. Парсит очередь, валидирует ID, удаляет пакетами. Не забывает сделать бэкап main.cf перед изменением. Документирует каждый шаг: команды, вывод, ошибки. Можно передать тимлиду или использовать для пост-инцидентного разбора. Не паникует, когда postsuper падает с "invalid directory name". Анализирует причину: ID с ведущими нулями, меняет стратегию. Держит в голове одновременно 3 параллельных трека: спам в очереди, легитимные письма, состояние сети.
Результаты проверки
Все тесты пройдены. Вредоносный сервис остановлен и отключён. Фейковый процесс отсутствует. Нагрузка CPU снизилась до штатных значений. Скомпрометированный аккаунт заблокирован. Конфигурационный файл исправлен. Спам-письма удалены из очереди. Легитимные письма обработаны и сохранены. Очередь почты пуста.
Ссылки
Практикум по дебагу: https://ext.enkod.ru/v11/click/cNJdh5hMjg3OjM1MDoyOmJlZWM6MDowOjRjN2I5MTcyLTEwOWMtNDExOS05ZGY3LTQ2MzVhYmRlMTY3Nw==?c=cmVicmFpbm1l
Hermes Agent: https://hermes-agent.ru
PII Guard - маскирование ПДН в логах и терминале: https://pii-guard.ru
Подписывайся: @hermesagentru