С чего всё началось

Я больше не мог смотреть на то, как сканеры уязвимостей просто генерируют атаки из словарей и кидают в стену тысячи запросов. Это напоминало мне детский рисунок, где ребёнок мечется кистью по холсту, надеясь случайно изобразить Ван Гога.

Я хотел сканер, который понимает. Сканер, который учится. Сканер, который адаптируется.

Так начался проект 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 для меня — это эксперимент. Я хотел проверить, можно ли встроить обучение не как отдельный модуль, а как часть архитектуры с самого начала. И это оказалось возможным.

Нейросеть в центре системы даёт важное преимущество: она делает процесс адаптивным. Без неё — это просто перебор. С ней — уже поиск с памятью и приоритетами.

Проект я делал один, потому что мне хотелось понять: можно ли выжать больше смысла из хаоса фаззинга.

Комментарии (3)


  1. hydroxygenium
    12.05.2025 19:34

    Можно ссылку на код ? хочется посмотреть


    1. digtatordigtatorov
      12.05.2025 19:34

      Боюсь, что автор задействовал скрытые параллельные миры, скорее всего код написан его невероятным интеллектом из другой Вселенной нашего мультиверса


  1. ToniDoni
    12.05.2025 19:34

    А нейросеть-то там в итоге в каком месте оказалась?