Натравили ИИ-хакера на свой биллинг: автономный пентест Strix

После взлома одного из наших серверов в мае — того самого, куда залез майнинг-ботнет, — вопрос «а что нашёл бы настоящий атакующий?» перестал быть теоретическим. Обычно на него отвечает пентест: живой специалист неделю ковыряет систему руками. Мы решили проверить, на что способен новый класс инструментов — автономный ИИ-пентестер, который не просто сканирует, а сам пытается ломать и доказывает каждую дыру рабочим эксплойтом.
Взяли Strix — open-source-инструмент, где несколько ИИ-агентов ведут себя как команда хакеров: поднимают приложение, картируют его, подбирают атаки и проверяют находки настоящими proof-of-concept. Ниже — честный рассказ, как мы его завели (спойлер: с приключениями) и что он у нас нашёл.
Правило номер один: никогда по продакшену
Strix не сканер уязвимостей в привычном смысле. Он реально атакует: шлёт вредоносные запросы, пробует SQL-инъекции, подставляет чужие идентификаторы, пытается обойти авторизацию. Направлять такое на боевой биллинг с живыми абонентами нельзя — это мусорные данные, ложные списания, сорванные алерты в лучшем случае.
Поэтому цель — наш демо-стенд demo.billing.smit34.ru: обезличенная копия, которую не жалко. Перед запуском мы сделали две вещи. Во-первых, обновили стенд до текущей версии биллинга (v3.6.0, build 2623) — иначе проверять устаревший код бессмысленно. Во-вторых, сняли полный бэкап базы: что бы агент ни устроил, стенд восстанавливается одной командой.
Обновление стенда само оказалось мини-историей. Скрипт ночной синхронизации демо тянет с боевого сервера только данные — код обновляется отдельно. При переносе кода всплыла ровно та ловушка, о которой мы писали не раз: рабочее дерево на боевом сервере отставало от того, что реально крутится в контейнере. В демо приехала устаревшая копия одного модуля и дубль миграции — стенд отвечал 500, пока мы не подтянули код прямо из живого контейнера и не убрали лишний файл. Прод так не чинят на бегу — потому и тренируемся на демо.
Где это запускать, если ты в России
Strix — это Linux, Docker и обращения к большой языковой модели. Каждый из трёх пунктов выстрелил.
Рабочая машина не подошла сразу: системный диск был забит под ноль, а api.anthropic.com из российского адреса просто не открывается — та же стена, в которую упирается наш собственный ИИ-ассистент. Docker локально тоже не смог бы скачать образ песочницы: места нет.
Боевой сервер отпал по другой причине. Прокси, через который биллинг ходит к нейросети, там есть — но международный канал сервера жёстко порезан. Образ песочницы Strix весит почти 6 ГБ; на такой скорости он качался бы полночи. Вдобавок выяснилось, что из России сейчас перехвачен и сам Docker Hub: адрес registry-1.docker.io отдаёт чужой сертификат (какой-то filecloudonline вместо реестра). Пришлось искать образы на зеркалах, до которых достаём.
Сработал третий вариант — наш зарубежный VPS, тот самый, что уже проксирует ИИ-трафик биллинга. Ubuntu 24.04, свежий Docker, быстрый канал и прямой доступ к нейросетям без всяких прокси. Движок — там, цель — наш демо-стенд, бюджет запуска ограничили сверху, чтобы автономный агент не ушёл в долгую.
А каким мозгом его питать
Отдельная история — какая нейросеть будет думать за агентов. И здесь два очевидных кандидата отпали по совершенно разным причинам.
Claude подходил идеально: он и умный, и, в отличие от многих, спокойно берётся за авторизованный пентест собственной системы. Не взял по прозаической причине — на счету закончились деньги. Пополнить в моменте было нечем.
ChatGPT (пробовали и gpt-4o, и свежий gpt-5.6) просто отказался работать: на первых же запросах вернул «этот контент помечен как возможный киберриск». Политика OpenAI не даёт использовать модель для наступательной безопасности — даже когда ты честно тестируешь свою систему с её же учётными данными. Формально понятно, на практике — инструмент в руках недоступен.
Выручил Grok (модель grok-4.6): и по карману, и берётся за задачу без нравоучений. На нём и поехали. Мораль на будущее: для средств безопасности годится не «лучшая модель вообще», а та, что одновременно доступна из твоей сети и согласна делать работу. Из России это сужает выбор вдвойне.
flowchart LR A[Зарубежный VPS<br/>Strix + песочница Docker] -->|прямой доступ| B[Нейросеть<br/>Claude Sonnet] A -->|атаки по HTTPS| C[demo.billing.smit34.ru<br/>обезличенная копия v3.6.0] D[Боевой биллинг] -.->|только снимок кода| C style D stroke-dasharray: 4 4
Как выглядит работа автономного пентестера
Запуск — одна команда: цель, режим, ограничение бюджета и файл с инструкциями (что в зоне действия, какие учётные данные для входа, на чём сфокусироваться). Дальше Strix сам поднимает контейнер-песочницу и разворачивает в нём команду агентов.
Первое, что он делает, — разведка: обходит все страницы, снимает отпечаток технологий, собирает формы и параметры. Затем строит модель угроз и список задач с приоритетами — и мы видели этот список живьём: «картирование поверхности», «проверка IDOR на объектах абонент/финансы/заявка» с меткой critical, и так далее. Каждую задачу берёт отдельный агент, а найденное тут же пытается подтвердить эксплойтом — Strix принципиально не отдаёт находку без доказательства, чтобы не заваливать отчёт ложными срабатываниями статических анализаторов.
Что он нашёл
Главный результат приятно скучный: ни одной подтверждённой эксплуатируемой уязвимости. Strix прогонял стандартный набор атак по методологиям OWASP WSTG и PTES с трёх позиций атакующего — аноним, абонент, админ — и ни одну дыру не смог довести до рабочего эксплойта.
Важно, что это не «сканер ничего не нашёл» — часть проверок агент закрыл с доказательством, то есть показал, что защита реально работает:
- Публичные адресные API (
/api/address/suggest/,/api/address/check/) устояли под градом SSRF-пейлоадов — облачные metadata-адреса,localhost,file://,gopher://, приватные подсети. Ответы приходили одинаково быстро (~0,35 с) и одинаково пустыми: это запрос к базе, а не наружный «дозагрузчик» ссылок. - Те же адресные API не поддались SQL-инъекции — ни кавычки, ни
UNION SELECT, ниSLEEPне дали ни ошибок, ни задержек, ни утечки. - REST API (
/rest_api/v2/) без токена честно отдаёт401, а типовые обходы через заголовки (Bearer,X-API-Key) отклоняются. Сессия личного кабинета до REST API не дотягивается — API изолирован от куки ЛК.
Честный список того, что осталось открытым
Ноль уязвимостей — не то же самое, что «всё идеально». Strix сам, без прикрас, отметил, где прогон был неполным, и это самое ценное в отчёте:
flowchart TD A[Прогон standard,<br/>тайм-бокс] --> B[Закрыто с доказательством] A --> C[Осталось открытым<br/>= лиды на доработку] B --> B1[SSRF на адресных API] B --> B2[SQLi на адресных API] B --> B3[REST API требует токен] C --> C1[IDOR в /lk/ — не было<br/>учётки абонента] C --> C2[Подпись платёжного вебхука] C --> C3[SSRF/RCE через NAS SOAP] C --> C4[XSS / CSRF на формах]
Самый показательный пробел — IDOR в личном кабинете (можно ли, зная свой номер, открыть чужой счёт или заявку по соседнему ID). Проверить его агент не смог по простой причине: мы дали ему вход в админку, а кабинет пускает по договору/телефону/e-mail, и двух разных абонентских сессий у него не было. Так что перебор чужих ID остаётся непроверенным, а не опровергнутым. Урок на следующий раз: пентестеру нужно давать те же учётки, что и настоящему клиенту.
Ещё три поверхности агент только наметил: подпись платёжного вебхука (поддельный «платёж» — это прямой убыток, проверять обязательно), SOAP-эндпоинты NAS (run_script — по сути управление командами на оборудовании) и XSS/CSRF на формах кабинета и админки. По каждому Strix оставил конкретный план перепроверки — вплоть до «отправьте вебхук без подписи и убедитесь, что баланс не меняется».
И отдельным списком — гигиена, которую стоит закрыть независимо от находок: единая схема аутентификации API вместо «зоопарка» заголовков (и никакого alg: none в JWT), ограничение попыток входа в админку, единообразные ошибки «неверный логин/пароль», флаги Secure/HttpOnly/SameSite на куки, выключенный DEBUG и заголовки безопасности (HSTS, CSP, X-Frame-Options).
Стоил весь прогон около 15 долларов и примерно полчаса: 23,7 млн входных токенов (почти все — из кэша), 142 тысячи на выходе. За эти деньги мы получили структурированный отчёт по методологии, карту проверенных поверхностей и приоритизированный список на ручную доработку. Живому пентестеру за такую же карту пришлось бы заплатить в разы больше — но и глубину он дал бы другую.
Что мы вынесли из эксперимента
Автономный ИИ-пентест — это не замена живому специалисту, а неутомимый первый эшелон. Он за один прогон систематически прощупывает то, на что у человека уходят часы рутины: перебирает пейлоады инъекций, подставляет чужие идентификаторы, ищет открытые точки. И, в отличие от статических сканеров, не заваливает отчёт «возможными» проблемами — то, что не удалось подтвердить эксплойтом, честно помечает как «не воспроизвелось».
Границы тоже очевидны. Модель попроще пропустит хитрую логическую дыру. Многие находки — это лиды на ручную проверку, а не готовый вердикт. И сам инструмент капризен к окружению: из России его пришлось запускать в обход трёх блокировок сразу, а половина топовых нейросетей для такой задачи недоступна — по деньгам или по политике.
Главный итог — не список из отчёта, а привычка. После взлома мы решили не ждать следующего «сюрприза», а регулярно смотреть на свой продукт глазами атакующего. Автономный агент делает такой взгляд дешёвым и повторяемым: обновили демо-копию, натравили, разобрали находки. Один раз настроил — гоняй хоть каждый релиз.
Ответственно и по правилам. Всё, что описано, — тест своей инфраструктуры на изолированной обезличенной копии, с полным бэкапом и без единого запроса к чужим системам. Направлять подобные инструменты на чужие ресурсы без письменного разрешения — уже не пентест, а атака со всеми вытекающими. Мы проверяем только себя.
Посмотреть на своих данных
Покажем платформу на живом стенде и разберём ваш случай. Или спросите ассистента прямо сейчас — он отвечает по документации и настройкам.


