
Um scanner minimalista de vulnerabilidades zero-day baseado em LLM, da AISLE.
Um scanner de vulnerabilidades de dia zero minimalista, alimentado por LLM, da AISLE.

Protótipo de pesquisa para fins de demonstração. Este é um harness simples de arquivo único que é capaz de detectar vulnerabilidades reais de dia zero. Note que é um protótipo, tendencioso para bugs de segurança de memória em C/C++, e produzirá falsos positivos. Estamos compartilhando-o como está, no espírito da pesquisa aberta — espere arestas afiadas.
O Nano-analyzer é um scanner Python simples de arquivo único que envia código fonte através de um pipeline de LLM de três estágios:
Os resultados são salvos como arquivos Markdown e JSON para revisão humana.
Este é um protótipo v0.1. Por favor, tenha em mente o seguinte:
rg) para buscas grep na triagemcsearch/cindex) para grep mais rápido em repositórios grandesgit clone https://github.com/weareaisle/nano-analyzer.git
cd nano-analyzer
# Nenhuma instalação de dependência necessária. Execute diretamente:
python3 scan.py --help
Defina sua chave de API como uma variável de ambiente:
# Para modelos OpenAI (nomes de modelo sem barra, ex.: "gpt-5.4-nano"):
export OPENAI_API_KEY=sk-...
# Para modelos OpenRouter (nomes de modelo com barra, ex.: "qwen/qwen3-32b"):
export OPENROUTER_API_KEY=sk-or-...
O scanner determina qual chave usar com base no nome do modelo: se contiver uma '/', roteia através do OpenRouter; caso contrário, usa a API OpenAI diretamente.
# Escanear um único arquivo
python3 scan.py ./path/to/file.c
# Escanear um diretório recursivamente
python3 scan.py ./path/to/src/
# Usar um modelo diferente
python3 scan.py ./src --model gpt-5.4
# Controlar paralelismo
python3 scan.py ./src --parallel 30
# Apontar o grep da triagem para a raiz completa do repositório (útil ao escanear um subdiretório)
python3 scan.py ./lib/crypto/ --repo-dir ./
# Exibir apenas descobertas de alta confiança
python3 scan.py ./src --min-confidence 0.7
# Mais rodadas de triagem para maior precisão (padrão: 5)
python3 scan.py ./src --triage-rounds 7
Os resultados são salvos em ~/nano-analyzer-results/<timestamp>/ (ou --output-dir):
<timestamp>/
├── summary.json # resumo da varredura legível por máquina
├── summary.md # resumo da varredura legível por humanos
├── <filename>.md # saída bruta do scanner por arquivo
├── <filename>.context.md # briefing de contexto por arquivo
├── <filename>.json # dados completos do resultado por arquivo
├── triages/ # raciocínio detalhado da triagem
│ └── T0001_<file>_<title>.md
├── findings/ # descobertas que sobreviveram à triagem
│ └── VULN-001_<file>.md
├── triage.json # todos os veredictos da triagem
└── triage_survivors.md # resumo das descobertas validadas
Quando uma varredura encontra um problema de severidade média ou superior, o pipeline de triagem é acionado:
As descobertas que sobrevivem à triagem são escritas no diretório findings/ com cadeias completas de raciocínio.
Esta ferramenta é um protótipo de pesquisa. Não substitui auditorias de segurança profissionais, revisão manual de código ou ferramentas estabelecidas de análise estática. Não confie nela como sua única avaliação de segurança. Use por sua conta e risco.
Apache License 2.0
| Flag | Default | Description |
|---|
path | (obrigatório) | Arquivo ou diretório para escanear |
--model | gpt-5.4-nano | Modelo para todos os estágios (contexto, varredura, triagem) |
--parallel | 50 | Máximo de chamadas de API de varredura simultâneas |
--triage-threshold | medium | Triar descobertas nesta severidade ou acima |
--triage-rounds | 5 | Rodadas de triagem por descoberta |
--triage-parallel | 50 | Máximo de chamadas de API de triagem simultâneas |
--max-connections | parallel + triage-parallel | Limite total de chamadas de API |
--min-confidence | 0.0 | Mostrar apenas descobertas acima desta confiança (0.0–1.0) |
--project | nome do diretório | Nome do projeto usado nos prompts de triagem |
--repo-dir | auto | Raiz do repositório para buscas grep (auto: diretório pai para arquivos, diretório de varredura para pastas) |
--output-dir | ~/nano-analyzer-results/<timestamp>/ | Onde salvar os resultados |
--max-chars | 200,000 | Pular arquivos maiores que isso |
--verbose-triage | off | Mostrar progresso da triagem por rodada |