
Бывший ведущий инженер Akamai Цветан Стойчев рассказал в блоге ClickHouse, как находит реальные уязвимости в коде популярной аналитической базы данных, почти не будучи специалистом по информационной безопасности. Помощником выступает ИИ — связка из GitHub Copilot, Claude Opus и моделей Gemini. Несколько найденных дыр оказались серьезными: Стойчев сообщил о них в баг-баунти программу ClickHouse и получил выплаты.
ClickHouse написан на C++ — это большой и зрелый проект, где простые ошибки давно вычищены, а оставшиеся прячутся глубоко. Схема Стойчева выглядит так: он просит ИИ-агента просмотреть свежий код и выдвинуть гипотезы, где может скрываться уязвимость. Потом берет одну гипотезу и поручает агенту написать на Python скрипт, который попробует воспроизвести проблему на тестовом ClickHouse, запущенном локально в Docker. Если результат выглядит убедительно, инженер проверяет все вручную. Главный вывод автора: лучше всего работает не сложная автоматизация с цепочками агентов, а один управляемый агент, за которым внимательно следишь.
Тут и кроется главная ловушка. Модели почти всегда возвращают красивые находки с пометками «высокая» и «критическая» опасность — но большинство из них галлюцинации и ложные срабатывания. Отличить настоящую уязвимость от выдуманной можно только руками: на подготовку одного честного отчета у Стойчева уходит от трех до четырех часов, и этот этап он принципиально не автоматизирует. Любопытно, что новичку это даже помогает — там, где опытный исследователь увидел бы защиту и решил «тупик», Стойчев по незнанию продолжал давить на агента вопросами «почему?» и «а как иначе?», и пару раз это выводило на реальные баги.
Чтобы агент меньше врал и не ходил по кругу, автор делится несколькими приемами:
-
удаляет из репозитория файлы с инструкциями для ИИ (вроде .github/copilot-instructions.md) — они написаны для разработчиков ClickHouse и сбивают агента с задачи по поиску уязвимостей;
-
удаляет папки с тестами, документацией и утилитами — именно там агент чаще всего находил несуществующие проблемы;
-
ставит временные локальные заплатки на уже найденные баги, иначе агент снова и снова «открывает» одно и то же.
Отдельно он следит за хитростью, когда агент читает память чужого процесса напрямую через /proc/[pid]/mem и объявляет победу: на деле это обход самой границы безопасности, а не доказательство уязвимости.
Еще одно наблюдение Стойчева — ИИ радикально ускорил создание PoC, небольшой программы, которая демонстрирует уязвимость. Раньше, чтобы разобрать незнакомый бинарный формат или собрать payload, ушли бы дни; теперь модель делает это за минуты. Практический совет: если агент выдает код с ошибками, стоит сменить язык — сам автор перешел с Node.js на Python, и проблемы исчезли. Готовый отчет он дополнительно прогоняет через две модели сразу, Opus и GPT: каждая замечает то, что упустила другая.
P.S. Поддержать меня можно подпиской на канал «сбежавшая нейросеть», где я рассказываю про ИИ с творческой стороны.
ссылка на оригинал статьи https://habr.com/ru/articles/1052744/