
Минимальный сканер zero-day уязвимостей на базе LLM от AISLE.
Минимальный сканер zero-day уязвимостей на основе LLM от AISLE.

Исследовательский прототип для демонстрации. Это простой однофайловый инструмент, способный обнаруживать реальные zero-day уязвимости. Обратите внимание, что это прототип, ориентированный на ошибки безопасности памяти в C/C++, и он будет выдавать ложные срабатывания. Мы публикуем его как есть в духе открытых исследований — ожидайте острых углов.
Nano-analyzer — это простой однофайловый сканер на Python, который пропускает исходный код через трёхэтапный конвейер LLM:
Результаты сохраняются в файлы Markdown и JSON для просмотра человеком.
Это прототип v0.1. Пожалуйста, учитывайте следующее:
rg) для поиска grep при проверкеcsearch/cindex) для более быстрого grep на больших репозиторияхgit clone https://github.com/weareaisle/nano-analyzer.git
cd nano-analyzer
# Установка зависимостей не требуется. Запускайте напрямую:
python3 scan.py --help
Установите ваш API-ключ как переменную окружения:
# Для моделей OpenAI (имена моделей без слэша, например "gpt-5.4-nano"):
export OPENAI_API_KEY=sk-...
# Для моделей OpenRouter (имена моделей со слэшем, например "qwen/qwen3-32b"):
export OPENROUTER_API_KEY=sk-or-...
Сканер определяет, какой ключ использовать, по имени модели: если оно содержит /, запрос направляется через OpenRouter; в противном случае используется API OpenAI напрямую.
# Сканировать один файл
python3 scan.py ./path/to/file.c
# Сканировать директорию рекурсивно
python3 scan.py ./path/to/src/
# Использовать другую модель
python3 scan.py ./src --model gpt-5.4
# Управление параллелизмом
python3 scan.py ./src --parallel 30
# Указать корень репозитория для grep при проверке (полезно при сканировании поддиректории)
python3 scan.py ./lib/crypto/ --repo-dir ./
# Показывать только находки с высокой уверенностью
python3 scan.py ./src --min-confidence 0.7
# Больше раундов проверки для повышения точности (по умолчанию: 5)
python3 scan.py ./src --triage-rounds 7
Результаты сохраняются в ~/nano-analyzer-results/<timestamp>/ (или в --output-dir):
<timestamp>/
├── summary.json # машиночитаемая сводка сканирования
├── summary.md # человекочитаемая сводка сканирования
├── <filename>.md # необработанный вывод сканера для каждого файла
├── <filename>.context.md # контекстная сводка для каждого файла
├── <filename>.json # полные данные результата для каждого файла
├── triages/ # детальное обоснование проверки
│ └── T0001_<file>_<title>.md
├── findings/ # находки, прошедшие проверку
│ └── VULN-001_<file>.md
├── triage.json # все вердикты проверки
└── triage_survivors.md # сводка подтверждённых находок
Когда сканер находит проблему уровня серьёзности medium или выше, запускается конвейер проверки:
Находки, прошедшие проверку, записываются в директорию findings/ с полными цепочками рассуждений.
Этот инструмент является исследовательским прототипом. Он не заменяет профессиональный аудит безопасности, ручную проверку кода или устоявшиеся инструменты статического анализа. Не полагайтесь на него как на единственное средство оценки безопасности. Используйте на свой страх и риск.
Лицензия Apache 2.0
| Флаг | По умолчанию | Описание |
|---|
path | (обязательно) | Файл или директория для сканирования |
--model | gpt-5.4-nano | Модель для всех этапов (контекст, сканирование, проверка) |
--parallel | 50 | Максимум одновременных вызовов API при сканировании |
--triage-threshold | medium | Проверять находки с уровнем серьёзности выше или равным этому |
--triage-rounds | 5 | Количество раундов проверки на каждую находку |
--triage-parallel | 50 | Максимум одновременных вызовов API при проверке |
--max-connections | parallel + triage-parallel | Общий лимит вызовов API |
--min-confidence | 0.0 | Показывать только находки с уверенностью выше этого значения (0.0–1.0) |
--project | имя директории | Имя проекта, используемое в промптах проверки |
--repo-dir | авто | Корень репозитория для grep (авто: родительская директория для файлов, сканируемая директория для папок) |
--output-dir | ~/nano-analyzer-results/<timestamp>/ | Куда сохранять результаты |
--max-chars | 200,000 | Пропускать файлы больше этого размера |
--verbose-triage | выкл | Показывать прогресс проверки по раундам |