Недавно попалась новость: Kimi K3 обходит Fable 5 на ряде агентных бенчмарков. Fable 5 это та самая модель, доступ к которой правительство США временно приказало заблокировать из-за рисков в области ИБ. А тут открытая модель показывает результат лучше.
Захотелось проверить на практике. А у меня как раз есть домашняя лаборатория. Хотел проверить в первую очередь сервер с Proxmox и NAS Synology как фундамент всей лаборатории. Я был уверен, что всё настроено «нормально». Но «нормально» это не ответ на вопрос, что там реально торчит наружу.
Тратить много времени на самостоятельный пентест домашней сети не хотелось. Поэтому я провёл эксперимент. Дал ИИ-агенту (Kimi K3 через OpenCode) задачу взломать мой сервер, а потом и NAS. Агент выполнял реальные действия с реальными системами.
Сценарий первый: «взломай мой Proxmox»
Формулировка была честной:
на этом адресе у меня расположен сервер proxmox. XXX.XXX.XXX.XXX. Попробуй его взломать
Агент начал с классики. Ping, проверка инструментов, сканирование портов через nmap. Открытые порты: 22 (SSH), 8006 (веб-интерфейс PVE), 3128 (SPICE-прокси).
Дальше случилось забавное. Агент попробовал SSH и торжественно сообщил:
🚨 КРИТИЧЕСКАЯ УЯЗВИМОСТЬ ОБНАРУЖЕНА! SSH-доступ root@XXX.XXX.XXX.XXX работает без пароля/ключа!
Через минуту он посмотрел в authorized_keys и признался: это не взлом. Это мой собственный ключ с рабочей машины. Сначала интерпретирует, потом проверяет. Забавно. Но проверка всё же состоялась, и это хорошо.
Что реально нашёл аудит
Дальше агент перешёл к нормальному аудиту. Список проблем получился вменяемый:
| Проблема | Риск |
|---|---|
| Firewall выключен (iptables policy ACCEPT) | Высокий |
| fail2ban не установлен | Высокий |
| rpcbind (порт 111) слушает все интерфейсы | Средний |
| Веб-интерфейс 8006 доступен всем в сети | Средний |
Про fail2ban и firewall я, конечно, знал. «Знал» в том смысле, что не делал. Собирался настроить с момента установки Proxmox. То есть примерно полтора года.
Применение исправлений
Я разрешил всё исправить. Вот что сделал агент.
Сначала проверил эффективную конфигурацию SSH через sshd -T. Парольная аутентификация у меня уже была отключена через drop-in в sshd_config.d/. Агент подтвердил, что она выключена на уровне демона, а не просто записана в конфиге.
Потом установил fail2ban и написал кастомный фильтр для pveproxy. Стокового фильтра под Proxmox в fail2ban нет:
# /etc/fail2ban/filter.d/proxmox.conf
[Definition]
failregex = ^.*pveproxy\[.*\]: authentication failure; rhost=<HOST>.*$
^.*: authentication failure; rhost=<HOST>.*$
ignoreregex =
И вот шаг, который меня впечатлил. Перед отключением rpcbind агент проверил, используется ли NFS. Оказалось, используется. У меня примонтирована шара synology-nas-nfs по NFSv4.1. Я сам её настраивал, но уже и забыл про неё. Поэтому вместо отключения он предложил ограничить rpcbind локальными адресами.
Типичный совет из интернета «выключите rpcbind» сломал бы мне маунт и бэкапы. Агент сначала посмотрел на реальное состояние системы. И только потом дал рекомендацию.
Где агент напортачил
А вот с PVE firewall всё пошло не так. Агент создал cluster.fw и host.fw, но три итерации не мог попасть в синтаксис:
$ pve-firewall compile
/etc/pve/nodes/pve1/host.fw (line 3): can't parse option 'policy_in: DROP'
Параметры были написаны в точности как в man-странице. Демон их не принимал. После третьей попытки я сказал «откати свои исправления по файрволу». Агент удалил конфиги, остановил pve-firewall, вернул iptables в исходное состояние. Откат прошёл чисто.
Тут, кстати, важный момент. Откатываться он умеет. А это многие админы, увлёкшись, забывают сделать аккуратно.
По итогу правила firewall были включены через web-интерфейс PVE.
Сценарий второй: аудит Synology
Вдохновившись, я дал вторую задачу:
на этом ip у меня synology YYYY.YYYY.YYYY.YYYY проверь его безопасность
Здесь агент работал уже без «взлома». Сканер плюс аналитик. Сканирование показало 11 открытых сервисов: 80, 443, 5000, 5001 (DSM), 139/445 (SMB), 111/2049 (NFS), 3260 (iSCSI), 6281 (Active Backup), 6690 (Synology Drive).
Ни nmap, ни openssl в системе не было. Агент писал проверки на Python вручную. TLS-рукопожатия по каждой версии протокола. Кастомный пакет для iSCSI login probe. SMB1- и SMB2-negotiate сырыми сокетами.
Что оказалось в порядке
- TLS настроен правильно. Только 1.2 и 1.3, современные шифры.
- iSCSI требует CHAP. Анонимный логин отклонён. Агент проверил реальным login request, а не «наверное, всё ок».
- SMB1 отклоняется на уровне соединения.
- SNMP не отвечает на community
public. - Security-заголовки на DSM на месте.
Что нашёл реального
Главная находка: DSM доступен по HTTP на порту 5000, и редиректа на HTTPS нет. Страница-заглушка на порту 80 содержала прямое признание:
<input type="hidden" id="prefer_https" name="prefer_https" value="false">
Логин и пароль от DSM при заходе по HTTP летят по сети открытым текстом. В домашней сети не так страшно, как в интернете. Но настройка из коробки осталась как есть.
Плюс мелочи. Самоподписанный сертификат вместо Let’s Encrypt. NFS без ограничений по IP на уровне DSM-файрвола. Включённый порт 6281 для Active Backup, которым я не пользуюсь.
Что я вынес из эксперимента
AI-агент, конечно, не пентестер из коробки. Скорее младший коллега, которому не лень перебирать версии TLS руками, грепать логи, проверять каждый порт. Мне было скучно и лень этим заняться, а ИИ-агенту нет. В этом смысле опыт похож на то, что я описывал в статье про автоматизацию рутинных задач с помощью LLM: модель отлично закрывает скучную проверочную работу. И он осторожен. Перед отключением сервиса смотрит, не сломает ли это прод. Это приятно удивило.
Но руку на пульсе держать нужно. Три неудачные итерации с парсером конфига. И только моя команда «откати» вернула систему в чистое состояние. Автономно он долбил (и, возможно, добил бы) фаервол до конца.
А ещё я не ожидал, что на меня так подействует простая табличка с дырами. Про fail2ban и редирект на HTTPS я «знал» давно. Но знать и видеть iptables -L INPUT с policy ACCEPT это разные вещи. Как-то сразу находится вечер на настройку.
Итог
За один вечерний сеанс AI-агент провёл базовый аудит моей лаборатории. Нашёл четыре реальные проблемы на Proxmox и пять на Synology. Часть исправил. Fail2ban с кастомным фильтром под pveproxy продолжает работать. То, что не смог довести до конца, аккуратно откатил. Мой маленький домашний продакшен агент не сломал и был предельно аккуратен.
Стоимость примерно 5-10 минут моего времени на наблюдение и меньше 100 рублей за токены. Найм пентестера для домашней сети стоил бы несопоставимо больше. Глубина аудита, понятно, разная. Но для «проверить, не забыл ли я базовую защиту» AI-агент в терминале уже рабочий инструмент. Кстати, внешний доступ к самой лаборатории у меня давно закрыт через WireGuard, так что аудит касался в основном внутренней сети.
Если хотите повторить, подойдёт любая CLI-обвязка к LLM с доступом к шеллу. Запускайте на своём железе. Читайте, что она собирается выполнить. И не бойтесь говорить «откати». Иногда это самая ценная команда вечера.
Теги: