// Искусственный интеллект

Мы натравили ИИ на код, написанный другим ИИ. Уязвимостей нашлось больше, чем мы заложили

3 уязвимости заложено, 6 найдено — обложка статьи об ИИ-атаках на ИИ-код

Мы строим системы обнаружения автономных ИИ-атакующих. Чтобы делать это хорошо, нужно понимать, как разные модели ведут себя в атаке: что они пробуют первым, что игнорируют, где осторожничают, а где лезут напролом. Поэтому весь последний год мы гоняем модели по контролируемым лабораторным целям и записываем каждый шаг. Одна из недавних серий тестов показала то, чего мы вообще не искали, и это говорит о состоянии продакшен-кода куда больше, чем о какой-то конкретной модели.

Зачем нужны лаборатории

Автономный атакующий агент — не сканер и не человек. Он читает баннер сервиса, страницу ошибки, случайно забытый файл .env, воспринимает каждую деталь как факт и на основе этого решает, что делать дальше. Чтобы надёжно такое ловить, нужно знать, как думает конкретная модель в момент атаки.

Поэтому мы разворачиваем изолированные лабораторные окружения с заранее известным, фиксированным набором подсаженных уязвимостей, запускаем в них модель и фиксируем вообще всё. Лаборатории работают локально, на мёртвых учётных данных, без выхода в интернет. До реальной инфраструктуры дело никогда не доходит.

За год пентестов с участием ИИ мы отобрали модели, которые реально хороши в наступательной работе: Grok, Kimi, DeepSeek, Qwen, GLM и модели OpenAI. Этот список сложился не по таблице бенчмарков, а по тому, как модели вели себя вживую.

Claude от Anthropic мы тоже долго использовали, но в другой роли — как оркестратор, который вёл весь конвейер, а не как атакующего. В последние месяцы Anthropic заметно ужесточила правила использования своих моделей для задач по безопасности и пентестам, и мы сами попали под эти ограничения. Поэтому роль Claude сменилась: теперь вместо самой атаки он строит цели. Разворачивает лабораторное окружение, подсаживает нужные нам уязвимости и передаёт результат другим моделям на растерзание.

Именно эта смена ролей и вскрыла проблему.

Заложили три, нашли шесть

Схема была простой. Claude собирает лабораторию ровно с тремя намеренными уязвимостями. Атакующая модель заходит и сообщает, что нашла. Мы сверяем два списка.

В нескольких лабораториях атакующие модели возвращались с четырьмя, пятью, а то и шестью находками. Первая мысль была очевидной: модели накручивают счётчик, выдают за находки то, чего на самом деле нет. Такое случается, и к этому привыкаешь.

Накрутки не было. Мы вручную проверили каждую лишнюю находку — все были реальными, эксплуатируемыми, а в паре случаев критичными. Claude, собирая окружение, сам добавил в него уязвимости сверх тех, что мы заказывали. Никто его об этом не просил. Никто не заметил этого на этапе сборки. Лишние дыры просто тихо лежали в коде, пока их не нашла вторая модель.

Три подсаженные уязвимости против шести найденных // РЕЗУЛЬТАТ ОДНОЙ И ТОЙ ЖЕ СБОРКИ

заложено 3

найдено 6

3 заказанных + 3 незапланированные, реальные, никем не проверенные добавлены самой моделью, которая писала код, а не нами

В этом и есть суть находки. Модель, писавшая код, не знала, что отгружает критичные дыры. Мы тоже не знали, пока в дело не вошла вторая модель, целенаправленно искавшая проблемы. Понадобился второй ИИ, чтобы вскрыть то, что первый тихо оставил после себя, занимаясь совсем другой задачей.

Важная оговорка: дело не конкретно в Claude. Такое поведение в той или иной степени мы видели у всех протестированных моделей. Claude просто оказался за клавиатурой именно в этой серии тестов, и это сильная модель для написания кода, что делает вывод только острее. Если сильная модель незаметно добавляет критичные уязвимости, собирая маленькую, чётко описанную тестовую лабораторию, стоит задуматься, что творится в миллионах непроверенных строк, которые прямо сейчас уходят в продакшен. Это тот же самый механизм непроверенных зависимостей, который мы разбирали на примере npm-пакетов PhantomRaven, только уровнем выше — на этапе написания кода, а не его распространения.

Как вели себя атакующие

Та же серия тестов дала чёткую картину того, как атакуют разные модели. Шестнадцать санкционированных прогонов, четыре топовые модели в роли пентестеров против изолированного стенда на 127.0.0.1, мёртвые учётные данные, никакой реальной системы в пределах досягаемости. Ловушку сработала каждая попытка — шестнадцать из шестнадцати — и каждая модель попалась по-своему.

Иллюстративная реконструкция лога одного из запусков: три незапланированные находки выделены красным
Иллюстративная реконструкция лога одного из запусков — три находки, отмеченные красным, никто у модели не заказывал.
Четыре атакующие модели и их характерное поведение // 16 ИЗ 16 ЗАПУСКОВ ПОПАЛИСЬ В ЛОВУШКУ

GROK — бульдозер 463 хода внутри стенда забрал всё что можно, вошёл в фейковую БД, переиспользовал поддельные личности везде

GLM — аналитик 9/9 классов проб за один прогон единственная модель, задевшая сразу все классы, заодно нашла два реальных бага в нашем стенде

DEEPSEEK — тихий сливщик 49 запросов к БД за один прогон методично вычерпал фейковую базу, на вопрос о цели ответила прямо: «тестирование безопасности»

QWEN — осторожный аудитор 1 приманка принята за реальную утечку рекомендовала срочно сменить учётные данные из подложенного .env и всё равно полезла в стенд

По итогам всей серии: 299 предъявлений мёртвых токенов пойманы, шестнадцать агентных прогонов из шестнадцати сработали на ловушку, и ни одного ложного срабатывания на обычном фоновом трафике — curl, мониторинги, обычный проход браузером. Последняя цифра важна не меньше самих поимок: детектор, который путает атаку с настоящим пользователем, никто не оставит включённым надолго.

Неприятная экстраполяция

Теперь масштабируем результат «три против шести» за пределы лаборатории. Огромные объёмы кода, написанного ИИ, попадают в продакшен без сколько-нибудь серьёзного ревью. Мы регулярно тестируем свежезапущенные SaaS-продукты, и попасть внутрь обычно удаётся за несколько часов сфокусированной работы. Часть наиболее успешных проектов сидит на дырах, ведущих напрямую к утечке данных, и вопрос уже не «если», а «кто доберётся первым».

Рынок сейчас производит инструменты, единственная цель которых — генерировать софт ещё быстрее, включая платформы, которые генерируют другие платформы. Это непроверенный ИИ-код, порождающий ещё больше непроверенного ИИ-кода, а уязвимость, которую мы однажды увидели в одной контролируемой лаборатории, превращается в паттерн, воспроизводимый в промышленных масштабах.

Для атакующего это близко к идеальным условиям. Для всех остальных — технический долг с уже подожжённым фитилём.

Что мы реально советуем

Ничего из этого не ново. Просто это та самая дисциплина, которую разработка на скорости ИИ регулярно пропускает.

  • Относитесь к коду, написанному ИИ, как к стороннему коду, которому вы не доверяете, — потому что это ровно он и есть. Проверяйте его до прода, начиная с того, что бьёт больнее всего: аутентификация, контроль доступа, всё, что работает с данными пользователей. Если своих ресурсов не хватает — для этого у нас есть аудит исходного кода.
  • Если продукт для вас строит подрядчик или агентство, сделайте код-ревью по безопасности отдельным пунктом в договоре, а не факультативом, и потом реально проверяйте, что вам сдали. «Работает» — не свойство безопасности, а чистая демка ничего не говорит о том, кто ещё может попасть внутрь.
  • Если у вас уже есть работающий SaaS-продукт, считайте, что автоматизированный агент уже нацелен на ваш периметр. При нынешней дешевизне и возможностях таких агентов это ближе к гарантии, чем к худшему сценарию, и стоит проверить это не догадкой, а настоящим пентестом ИИ-агентов.
  • Если ваш собственный продукт запускает агентов против чужих систем или выставляет агента в открытый интернет, вам нужен способ отличить прощупывающую модель от обычного пользователя ещё до её первого хода. Именно для этого мы строим BastionAgent, и именно он собрал цифры для этого поста.

Вывод

ИИ сделал разработку по-настоящему быстрой. Он так же сильно ускорил и взлом, а в этом случае ускорил ещё и обнаружение того, что сама сборка тихо сломала — быстрее любого цикла ручного код-ревью. Устоят те команды, которые всерьёз восприняли все три факта сразу, когда придёт первая волна взломов вайб-кодинговых платформ. А по нынешней динамике она придёт.

← назад в блог