EnglishРусский Map

Nautilus

title
Nautilus
type
entity
summary
Грамматический фаззер с контролем покрытия; мутирует деревья КС-грамматик для генерации валидных входов, проходящих парсер
tags
fuzzing, security, research
created
2026-05-12
updated
2026-05-12
lang
ru
translation_of
nautilus-fuzzer
source_updated
2026-05-12
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Nautilus - грамматический фаззер, опубликованный Aschermann, Schumilo, Blazytko, Gawlik и Holz на NDSS 2019 (TU Berlin / Ruhr-Uni Bochum). Он объединяет контекстно-свободную грамматику с обратной связью по покрытию: входные данные хранятся в виде деревьев вывода, а не байтовых строк, мутации переписывают поддеревья, а планирование корпуса выполняется по покрытию, как в AFL.

Именно выбор структуры данных позволяет ему работать: грамматический фаззер, сохраняющий входные данные строками, в итоге мутирует байты и деградирует до AFL с лишними шагами. Хранение дерева означает, что отдельная мутация выглядит как "замени это поддерево Number на другое поддерево Number", благодаря чему входные данные остаются структурно корректными уже по построению.

Где встречается

  • Встроен как грамматический движок в другие фаззеры (расширения Honggfuzz, AFL++ через custom mutator'ы, грамматический режим gosentry)
  • Соглашения по формату грамматики, введённые Nautilus (JSON-массивы правил вида [non-terminal, production]), были переняты несколькими сторонними инструментами, включая режим --grammar в gosentry

Формат грамматики

Стандартный вид - JSON-массив из двухэлементных массивов, где первый элемент - имя нетерминала, а второй - порождающее правило (с {Name}, ссылающимся на другие нетерминалы). Подробный пример разобран в grammar-based-fuzzing.