С чего всё началось
Я больше не мог смотреть на то, как сканеры уязвимостей просто генерируют атаки из словарей и кидают в стену тысячи запросов. Это напоминало мне детский рисунок, где ребёнок мечется кистью по холсту, надеясь случайно изобразить Ван Гога.
Я хотел сканер, который понимает. Сканер, который учится. Сканер, который адаптируется.
Так начался проект AI-Scanner — не как плагин к существующему решению, а как попытка вырастить нечто живое: обучаемую систему, способную эволюционировать, предсказывать, ошибаться и исправляться.
Первая попытка: генетика без смысла
Я начал с того, что знал: генетический алгоритм. Эволюция векторов атак, мутации, кроссовер, отбор. Всё как по учебнику. Система порождала тысячи новых payload’ов — но из них лишь единицы были валидны. Я смотрел на отчёты, полные мусора. В логах красовались HTML-блоки с %%%%%%%}
и ><><><>><
, которые не вызывали ни ошибки, ни отклика, ни жизни.
Алгоритм слеп. Он не знает, что делает. Он просто копирует, мутирует, надеется.
Вот пример мутации, которую я тогда использовал:
func SmartMutate(payload string) string {
return `<svg onload="` + payload + `"></svg>`
}
Она казалась разумной. Но в вакууме даже разум — бесполезен.
Стена: отсутствие данных для обучения
Я подключил простую нейросеть (MLP), чтобы начать предсказывать успешность payload’ов. Но тут я столкнулся с новой проблемой: модель не могла обучаться. Почему? Потому что не было данных. Атаки не срабатывали. Модель получала только нули. Неудача → нет обратной связи → обучение невозможно.
Я оказался в замкнутом круге:
Модель не учится, потому что нет меток.
Меток нет, потому что атаки неэффективны.
Атаки неэффективны, потому что нет модели.
Пришлось сделать шаг назад и вручную аннотировать небольшое количество успешных атак. Только тогда началось обучение.
Первые шаги: модель оживает
Когда я запустил цикл обучение → атака → обучение
, система начала оживать. Нейросеть стала отбрасывать бесполезные варианты и выделять перспективные. Количество срабатываний пошло вверх. Я впервые увидел, как машина учится на собственных ошибках.
model.Train(X, Y, epochs, learningRate)
Каждая итерация делала модель чуть лучше. И эта разница ощущалась — в логах, в отчётах, в числах.
Новый тупик: стагнация мутаций
Но потом пришло разочарование. Система стабилизировалась. Генетика больше не порождала ничего нового. Лучшие payload’ы повторялись, комбинации сходились к одному и тому же. Эволюция остановилась. Я увидел, что мутация уже не разнообразие, а шум. Элитные особи не эволюционировали — они клонировались.
Вдохновение из другой области: квантовая логика
Я вспомнил о принципах квантовых вычислений. Конечно, я не мог использовать квантовый компьютер. Но я мог реализовать суперпозицию и туннелирование — как идеи.
Я изменил логику генерации:
Вместо одного сильного вектора я порождал десятки параллельных гипотез.
Добавил вероятностный отбор: не всегда побеждает сильнейший, иногда — рискованный.
Начал использовать локальные скачки в пространстве мутаций, чтобы выходить из тупиков.
Эти принципы дали результат. Популяция оживилась. Система снова начала расти.
Слияние: AI + генетика + квантовые принципы
Вот тогда всё сошлось:
Генетический движок создавал возможности.
Нейросеть выбирала перспективные направления.
Квантовая логика обеспечивала разнообразие и прыжки в новое.
Каждое поколение становилось умнее не потому, что алгоритм так написан, а потому что вся система училась. Это была настоящая эволюция — не математическая, а живая.
Вот часть этого цикла в main.go
:
successes, results := fuzzer.FuzzWithModel(...)
model.Train(X, Y, ...)
engine.EvaluateFitness(successes, results)
engine.Evolve()
Финал: сканер, который думает
Я не говорю, что создал интеллект. Но я создал механизм обучения, который живёт внутри фаззера. Он не просто перебирает. Он помнит, учится, предсказывает и адаптируется.
Когда я увидел, как он сам начинает порождать эффективные цепочки, как он отбрасывает шаблонные атаки и предлагает нестандартные — я понял: это работает.
Заключение
AI-Scanner для меня — это эксперимент. Я хотел проверить, можно ли встроить обучение не как отдельный модуль, а как часть архитектуры с самого начала. И это оказалось возможным.
Нейросеть в центре системы даёт важное преимущество: она делает процесс адаптивным. Без неё — это просто перебор. С ней — уже поиск с памятью и приоритетами.
Проект я делал один, потому что мне хотелось понять: можно ли выжать больше смысла из хаоса фаззинга.
Комментарии (8)
verysimple12345
12.05.2025 19:34В методе селекции (отбора) генетического алгоритма, вероятно, применение диверсификации позволит улучшить результат. В топ выборки выбирать особи не из топа, а применяя подход с корреляциями и ожидаемыми полезностями от индивидов, чтобы сформировать в топе устойчивое разнообразие (диверсифицированный портфель в терминах из финансовых рынков) в определённых долях (смотри портфельную теорию Гарри Марковица, отсылка к курсу Йельского университета), а не топ клонов с малыми отличиями.
hydroxygenium
Можно ссылку на код ? хочется посмотреть
digtatordigtatorov
Боюсь, что автор задействовал скрытые параллельные миры, скорее всего код написан его невероятным интеллектом из другой Вселенной нашего мультиверса
Valo656 Автор
Ну что поделать, придется выкладывать, тегну по факту