Использование ИИ для поиска багов авторизации
Программы Bug Bounty меняются. Некоторые программы перестали выплачивать вознаграждения. Другие сократили выплаты на 80%. Причина не в том, что ИИ находит слишком много багов. Причина в том, что ИИ находит слишком много ложных багов. Команды триажа тонут в низкокачественных отчетах.
В таких условиях важнейшим навыком является не поиск багов, а доказательство того, что бага не существует. Вы должны находить правильные «негативные» результаты.
Для целей с доступным исходным кодом я использую двухэтапный метод.
Этап 1: Fan-out
Используйте дешевые модели ИИ для чтения кода. Разбейте цель на мелкие части. Попросите модель найти нарушенные инварианты. Ищите места, где объект загружается без проверки владельца или где пропускается защитный барьер (security gate). Стремитесь к высокой полноте (high recall). Будьте готовы к множеству ошибок.
Этап 2: Adversarial Verification
Используйте дорогую модель с продвинутым логическим мышлением, чтобы отсеять кандидатов. Исходите из того, что каждый кандидат будет опровергнут. Кандидат выживает только в том случае, если вы можете сослаться на конкретные строки кода. Вы должны доказать, что путь достижим и никакая другая проверка его не блокирует.
Самым ценным результатом является список опровержений. Этот список укрепляет доверие со стороны триажеров.
Я протестировал Ory Kratos, сервер идентификации с открытым исходным кодом. Я изучал процесс настройки. Эта область отвечает за смену паролей и обновление адреса электронной почты. Одна ошибка здесь ведет к захвату аккаунта (account takeover).
Первый этап нашел заманчивый баг. В стратегии OIDC в определенном контейнере отсутствует привязка личности (identity binding). Если бы вы искали только отсутствие проверок, вы бы сообщили об этом как о баге высокой степени серьезности.
Это было бы ошибкой.
Отсутствующая привязка не является эксплуатируемой. Система получает целевую личность из активного сессионного cookie или подписанного токена. Свойства контейнера никогда не применяются к фактической цели записи. Дизайн надежен.
Сообщение об этом потратило бы время и подорвало бы ваш авторитет. Ценность, которую я принес, заключалась в уверенности в том, чтобы не подавать отчет.
Когда я применил этот же метод к другой цели, я нашел настоящий баг. Альтернативная точка входа пропускала проверку авторизации, которую обеспечивал основной путь. Отозванный пользователь все еще мог войти через «черный ход». Этот баг имел высокую степень влияния и был невидим для стандартных сканеров.
Gatekeepers возводят стены против избыточного объема. Чтобы добиться успеха, ваша работа с ИИ должна быть строгой. Используйте ИИ, чтобы прочитать больше кода, чем может человек. А затем используйте ИИ, чтобы опровергнуть самого себя, прежде чем нажать кнопку «отправить».
Сосредоточьтесь на сигнале, а не на объеме.
