- BrainTools - https://www.braintools.ru -
Я больше не мог смотреть на то, как сканеры уязвимостей просто генерируют атаки из словарей и кидают в стену тысячи запросов. Это напоминало мне детский рисунок, где ребёнок мечется кистью по холсту, надеясь случайно изобразить Ван Гога.
Я хотел сканер, который понимает. Сканер, который учится. Сканер, который адаптируется.
Так начался проект AI-Scanner — не как плагин к существующему решению, а как попытка вырастить нечто живое: обучаемую систему, способную эволюционировать, предсказывать, ошибаться и исправляться.
Я начал с того, что знал: генетический алгоритм. Эволюция [1] векторов атак, мутации, кроссовер, отбор. Всё как по учебнику. Система порождала тысячи новых payload’ов — но из них лишь единицы были валидны. Я смотрел на отчёты, полные мусора. В логах красовались HTML-блоки с %%%%%%%} и ><><><>><, которые не вызывали ни ошибки [2], ни отклика, ни жизни.
Алгоритм слеп. Он не знает, что делает. Он просто копирует, мутирует, надеется.
Вот пример мутации, которую я тогда использовал:
func SmartMutate(payload string) string {
return `<svg onload="` + payload + `"></svg>`
}
Она казалась разумной. Но в вакууме даже разум — бесполезен.
Я подключил простую нейросеть (MLP), чтобы начать предсказывать успешность payload’ов. Но тут я столкнулся с новой проблемой: модель не могла обучаться. Почему? Потому что не было данных. Атаки не срабатывали. Модель получала только нули. Неудача → нет обратной связи → обучение [3] невозможно.
Я оказался в замкнутом круге:
Модель не учится, потому что нет меток.
Меток нет, потому что атаки неэффективны.
Атаки неэффективны, потому что нет модели.
Пришлось сделать шаг назад и вручную аннотировать небольшое количество успешных атак. Только тогда началось обучение.
Когда я запустил цикл обучение → атака → обучение, система начала оживать. Нейросеть стала отбрасывать бесполезные варианты и выделять перспективные. Количество срабатываний пошло вверх. Я впервые увидел, как машина учится на собственных ошибках.
model.Train(X, Y, epochs, learningRate)
Каждая итерация делала модель чуть лучше. И эта разница ощущалась — в логах, в отчётах, в числах.
Но потом пришло разочарование. Система стабилизировалась. Генетика больше не порождала ничего нового. Лучшие payload’ы повторялись, комбинации сходились к одному и тому же. Эволюция остановилась. Я увидел, что мутация уже не разнообразие, а шум. Элитные особи не эволюционировали — они клонировались.
Я вспомнил о принципах квантовых вычислений. Конечно, я не мог использовать квантовый компьютер. Но я мог реализовать суперпозицию и туннелирование — как идеи.
Я изменил логику [4] генерации:
Вместо одного сильного вектора я порождал десятки параллельных гипотез.
Добавил вероятностный отбор: не всегда побеждает сильнейший, иногда — рискованный.
Начал использовать локальные скачки в пространстве мутаций, чтобы выходить из тупиков.
Эти принципы дали результат. Популяция оживилась. Система снова начала расти.
Вот тогда всё сошлось:
Генетический движок создавал возможности.
Нейросеть выбирала перспективные направления.
Квантовая логика обеспечивала разнообразие и прыжки в новое.
Каждое поколение становилось умнее не потому, что алгоритм так написан, а потому что вся система училась. Это была настоящая эволюция — не математическая, а живая.
Вот часть этого цикла в main.go:
successes, results := fuzzer.FuzzWithModel(...)
model.Train(X, Y, ...)
engine.EvaluateFitness(successes, results)
engine.Evolve()
Я не говорю, что создал интеллект [5]. Но я создал механизм обучения, который живёт внутри фаззера. Он не просто перебирает. Он помнит, учится, предсказывает и адаптируется.
Когда я увидел, как он сам начинает порождать эффективные цепочки, как он отбрасывает шаблонные атаки и предлагает нестандартные — я понял: это работает.
AI-Scanner для меня — это эксперимент. Я хотел проверить, можно ли встроить обучение не как отдельный модуль, а как часть архитектуры с самого начала. И это оказалось возможным.
Нейросеть в центре системы даёт важное преимущество: она делает процесс адаптивным. Без неё — это просто перебор. С ней — уже поиск с памятью [6] и приоритетами.
Проект я делал один, потому что мне хотелось понять: можно ли выжать больше смысла из хаоса фаззинга.
Автор: Valo656
Источник [7]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/15117
URLs in this post:
[1] Эволюция: http://www.braintools.ru/article/7702
[2] ошибки: http://www.braintools.ru/article/4192
[3] обучение: http://www.braintools.ru/article/5125
[4] логику: http://www.braintools.ru/article/7640
[5] интеллект: http://www.braintools.ru/article/7605
[6] памятью: http://www.braintools.ru/article/4140
[7] Источник: https://habr.com/ru/articles/908796/?utm_source=habrahabr&utm_medium=rss&utm_campaign=908796
Нажмите здесь для печати.