Framework di analisi della sicurezza degli Smart Contract e generazione di PoC basato su IA
Versione 6.0 | Novità nella v6.0 | Changelog
Aether è un framework basato su Python per analizzare smart contract Solidity, generare risultati di vulnerabilità, produrre test proof-of-concept (PoC) basati su Foundry e validare exploit su fork della mainnet. Combina parsing dell'AST di Solidity, analisi dei flussi di dati (taint analysis), analisi del grafo di controllo del flusso, analisi cross-contract, esecuzione simbolica Halmos, oltre 180 rilevatori statici basati su pattern, una pipeline LLM multi-agente collaborativa (GPT/Gemini/Claude) con memoria istituzionale condivisa SAGE, 14 archetipi di protocollo, una knowledge base di oltre 75 exploit, rilevamento calibrato tramite ML, rilevamento di token quirks, estrazione di invarianti, risoluzione del contesto dei contratti correlati e filtraggio avanzato sensibile al contesto, il tutto in un'unica TUI persistente a schermo intero.
Pipeline di agenti collaborativi — La pipeline di analisi profonda si trasforma da 5 passaggi indipendenti a 5 agenti collaborativi che condividono conoscenza strutturata attraverso la memoria istituzionale SAGE:
docker compose up -d per avviarlo.Memoria istituzionale SAGE — Aether ora impara da ogni audit, riducendo i falsi positivi e migliorando la qualità dei risultati nel tempo:
SageFeedbackManager.sync_detector_accuracy() identifica i rilevatori ad alte/basse prestazioni e memorizza riflessioni di dos/don'tsdocker compose up -d avvia SAGE; configurazione tramite sage_enabled/sage_url in ~/.aether/config.yamlContributori: Grazie a @sashavdv per aver corretto le variabili di percorso hardcoded (PR #1) e a @pro258b per aver individuato il metodo mancante validate_anthropic_key() (PR #2).
SAGE è un sistema di memoria istituzionale persistente basato sul consenso BFT. Consulta il progetto SAGE per la documentazione completa.```bash
pip install sage-agent-sdk
docker compose up -d
python aether.py
python -c "from core.sage_seeder import SageSeeder; SageSeeder.generate_seed_fixtures()"
### Come SAGE Migliora gli Audit```
Audit 1 → Findings + FPs → Record outcomes in SAGE
↓
Audit 2 → SAGE recalls FP patterns → Fewer false positives
↓
Audit 3 → Richer institutional context → Better severity calibration
↓
Audit N → Institutional expert-level knowledge → Bug-bounty-quality findings
Auto-esecuzione dei PoC — I PoC Foundry generati ora vengono compilati ed eseguiti automaticamente:
forge test --json esegue i PoC subito dopo la compilazionePoCTestResult per report strutturati di superamento/fallimento/errorePOC_TESTING in JobManager per il monitoraggio live dei progressi nella TUIEsecuzione simbolica con Halmos — Verifica formale tramite esecuzione simbolica:
HalmosRunner per eseguire test simbolici Halmos sulle proprietà generateHalmosPropertyGenerator per generare automaticamente proprietà di verifica dagli invarianti estrattiHalmosSymbolicNode integrato allo Stage 1.95 di validazioneenable_symbolic_verification, halmos_timeoutAnalisi del grafo di flusso di controllo — Comprensione del flusso di controllo a livello di compilatore:
BasicBlock, CFGEdge, ControlFlowGraph in solidity_ast.pybuild_cfg(), get_dominators(), get_loop_headers(), format_cfg_for_llm() per l'analisi strutturaleparse_assembly_block() per il supporto all'assembly inlineCiclo di feedback ML — Calibrazione basata sui risultati storici:
AccuracyTracker.record_finding_outcome() per monitorare i risultati delle submission e i guadagni dei bountyget_detector_accuracy() e get_detector_weights() per le statistiche di performance dei singoli detectorDetectorStats tiene traccia di veri/falsi positivi e dell'accuratezza storicaEnhancedVulnerabilityDetector in base allo storico del detectorContesto dei contratti correlati — L'analisi LLM ora vede il codice sorgente completo delle dipendenze:
RelatedContractResolver scopre automaticamente contratti genitore, interfacce, librerie e contratti dipendentiPulizia del debito tecnico — Rimossi 8.500 righe di codice morto:
ai_ensemble.py, audit_engine.py, fork_verifier.pyslither_project_cache dal database managerParsing dell'AST Solidity — Aether v4.0 aggiunge l'analisi del codice basata sul compilatore tramite py-solc-x, superando l'analisi statica basata solo su regex:
solc --ast-json per una corretta risoluzione dell'ereditarietà, visibilità delle funzioni, layout di storage con numeri di slot e tracciamento delle letture/scritture delle variabili di stato per funzioneMotore di analisi del taint — Traccia gli input controllati dall'utente attraverso i contratti per identificare flussi di dati pericolosi:
Analisi Cross-Contract (Pass 3.5) — Nuovo pass di analisi profonda mirato alle vulnerabilità multi-contratto:
Database delle anomalie dei token — 12 categorie di comportamenti ERC-20 non standard che causano exploit reali:
| Categoria | Severità | Token di esempio |
|---|---|---|
| Fee-on-transfer | HIGH | USDT, STA, PAXG |
| Token rebasing | HIGH | stETH, AMPL, OHM |
| Callback ERC-777 | HIGH | imBTC |
| Coniazione flash | HIGH | DAI |
| Return non standard | MEDIUM | Old USDT |
| Token con blocklist | MEDIUM | USDC, USDT |
| Token pausabili | MEDIUM | USDC |
| Token con decimali ridotti | MEDIUM | USDC (6), WBTC (8) |
| Hook di trasferimento | MEDIUM | LINK (ERC-677) |
| Corsa all'approval | LOW | Vari |
| Molteplici punti di ingresso | LOW | TUSD |
| Token aggiornabili | LOW | USDC v2 |
Integrato nella pipeline di rilevamento statico e nelle checklist degli archetipi.
Motore di precisione avanzato — Rilevamento avanzato delle vulnerabilità di arrotondamento e precisione:
Generazione di PoC eseguibili — I test Foundry generati ora compilano ed eseguono davvero:
Miglioramenti alla pipeline LLM:
Motore di analisi profonda — Aether v3.5 trasforma radicalmente il modo in cui lo strumento trova le vulnerabilità, passando da una chiamata LLM one-shot "trova i bug" a una pipeline strutturata a 6 pass che rispecchia l'approccio degli auditor professionisti alla revisione del codice: prima comprendere, poi attaccare sistematicamente.
Invece di inviare un intero contratto a un LLM con un singolo prompt, Aether ora esegue sei pass di analisi sequenziali con contesto accumulato:
| Pass | Scopo | Livello modello |
|---|---|---|
| Pass 1 | Comprensione del protocollo — cosa È il protocollo, i suoi invarianti, i flussi di valore, le assunzioni di fiducia | Economico (in cache) |
| Pass 2 | Mapping della superficie d'attacco — ogni punto di ingresso, letture/scritture di stato, finestre di rientranza | Economico (in cache) |
| Pass 3 | Analisi delle violazioni degli invarianti — verifica sistematica di ogni invariante su ogni percorso di codice | Potente |
| Pass 4 | Interazione cross-funzione — analisi delle dipendenze di stato, dipendenze temporali, sequenze di flash loan | Potente |
| Pass 5 | Modellazione avversaria — prospettiva esplicita dell'attaccante con flash loan, MEV, più account | Potente |
| Pass 6 | Casi limite e di confine — prime/ultime operazioni, valori zero, valori massimi, operazioni auto-referenziali | Medio |
I Pass 1-2 sono memorizzati nella cache tramite hash del contenuto del contratto, quindi i nuovi audit saltano la fase di comprensione. Ogni pass successivo riceve tutto il contesto precedente, costruendo un modello d'attacco completo. Abilitato tramite feature flag AETHER_DEEP_ANALYSIS=1 (ON di default); in caso di errore torna al one-shot.
Prima di analizzare alla ricerca di bug, Aether rileva che tipo di protocollo implementa il contratto e carica checklist di vulnerabilità specifiche per archetipo:
| Archetipo | Esempi di voci della checklist |
|---|---|
| Vault ERC-4626 | Inflazione del primo depositante, direzione di arrotondamento, manipolazione del prezzo delle quote tramite donazioni |
| Pool di prestito | Manipolazione del prezzo dell'oracolo, manipolazione della soglia di liquidazione, cascata di bad debt, manipolazione del tasso d'interesse |
| DEX/AMM | Manipolazione del primo LP, attacchi sandwich, oracolo dei prezzi tramite riserve |
| Bridge | Replay cross-chain, compromissione dei validatori, disallineamento del mapping dei token, falsificazione delle prove di prelievo |
| Staking | Manipolazione del calcolo delle ricompense, overflow del tasso di ricompensa, rientranza nell'unstaking |
| Governance | Attacchi di governance con flash loan, bypass del timelock, manipolazione del quorum |
| Oracle | Dati di prezzo obsoleti, deviazione dei prezzi, downtime del sequencer L2 |
10 archetipi in totale, ognuno con 3-7 voci di checklist specifiche tratte da exploit reali.
Un database strutturato di oltre 50 pattern di exploit reali categorizzati sostituisce la precedente lista statica di 10 pattern:
| Categoria | Pattern | Esempi |
|---|---|---|
| Attacchi di inflazione/quote | 6 | Primo depositante ERC-4626, inflazione dei token LP, manipolazione tramite donazioni |
| Rientranza | 7 | Classica, read-only, cross-funzione, cross-contratto, hook ERC-777/1155, callback di flash loan |
| Oracle | 5 | Manipolazione del prezzo spot, manipolazione del TWAP, obsolescenza, disallineamento dei decimali, sequencer L2 |
| Governance | 4 | Voto con flash loan (Beanstalk), bypass del timelock, manipolazione del quorum |
| Bridge | 5 | Replay dei messaggi (Nomad), compromissione dei validatori (Ronin), mapping dei token (Wormhole) |
| Precisione/Arrotondamento | 4 | Direzione di arrotondamento, overflow non controllato, fee-on-transfer, deriva dei token rebasing |
| Controllo degli accessi | 5 | Proxy non inizializzato, collisione di storage, collisione di selettori, iniezione di delegatecall |
| Economico/DeFi | 8 | Attacchi sandwich, liquidità JIT, cascata di bad debt, bomba returndata, replay delle firme |
| Logica | 6 | Off-by-one, deadline/slippage mancanti, return non controllati, contabilità del self-transfer |
Ogni pattern include indicatori di codice, protezioni mancanti, meccanismo di exploit passo-passo e precedenti reali (con importi in dollari). I pattern vengono filtrati in base all'archetipo rilevato e all'area di focus dell'agente.
Estrae automaticamente gli invarianti del protocollo da tre fonti:
@invariant nei commenti dei contrattiGenera suite di test Foundry invariant_*() che fungono da prove di verifica formale semplificata — un test di invariante fallito dimostra che il bug è reale.
division_by_zero, integer_underflow, ecc. a bassa. Ora verifica se il finding si trova in un blocco unchecked{}, vicino a trasferimenti di valore, in calcoli di prezzo o in contesti oracle prima di decidere"pending" ora passano all'analisi LLM (in precedenza passavano solo quelli "validated", scartando silenziosamente molti finding reali)(line // 10) * 10 che separava finding distanti 2 righe in gruppi diversiDeFiVulnerabilityDetector (analisi a due stadi presenza/assenza) ora viene eseguito nel motore di audit avanzato principale, non solo nella pipeline basata sui flussiTUI testuale completamente integrata — Aether v3.0 è un'applicazione persistente a schermo intero che non passa mai a un terminale grezzo. Ogni operazione — audit, generazione di PoC, generazione di report, selezione dello scope GitHub, configurazione delle impostazioni — viene eseguita interamente all'interno della TUI:
app.suspend() — la TUI non scompare mai, nessun passaggio brusco al terminaleEnter su un job qualsiasi per vedere l'output scorrevole live, la barra di avanzamento delle fasi e i metadatia/n per tutto/niente, scrivi per filtrare, contratti già auditati con codici coloren Nuovo audit, r Riprendi, h Cronologia, p PoC, o Report, f Scarica, s Impostazioni, q EsciQuattro tipi di job in background: tutte le operazioni pesanti vengono eseguite come thread daemon tramite AuditRunner, con l'output catturato da ThreadDemuxWriter e visibile in JobDetailScreen:
| Tipo di job | Descrizione |
|---|---|
local | Audit di contratti singoli o paralleli |
github | Audit di repository GitHub con scope preselezionato |
poc | Generazione di proof-of-concept Foundry |
report | Generazione di report di audit (markdown/json/html) |
Supporto LLM a tre provider: OpenAI (GPT-5/5.3), Google Gemini (2.5/3.0) e Anthropic Claude (Sonnet 4.5/Opus 4.6) per la massima flessibilità e ridondanza.
Generazione avanzata di PoC: analisi del contratto basata su AST, correzioni iterative della compilazione e prompt LLM pronti per la produzione che generano exploit adatti alle submission di bug bounty.
Filtraggio avanzato dei falsi positivi: la validazione multi-stadio riduce i falsi positivi dal 66% a circa il 20-25%, migliorando l'accuratezza dal 33% al 75-80%:
script/, .s.sol, forge-std/Script.sol) vengono automaticamente esclusi dall'analisi delle vulnerabilità[PRODUCTION]/[DEPLOYMENT SCRIPT] così i modelli si concentrano sul codice di produzioneonlyDistributor, authorized) vengono estratti dal sorgente del contratto e riconosciuti insieme ai pattern hardcodedIntegrazione del database delle vulnerabilità Move: pattern tratti da 128 finding Critical/High in 77 audit, adattati a Solidity/EVM:
python setup.py # Interactive installer (recommended)
### 2. Avvia Aether```bash
python aether.py # Launches the full-screen Textual TUI
Tutto qui. La TUI ti guida attraverso tutto tramite scorciatoie da tastiera e finestre di dialogo modali.
OPENAI_API_KEY (per i modelli GPT)GEMINI_API_KEY (per i modelli Gemini)ANTHROPIC_API_KEY (per i modelli Claude)ETHERSCAN_API_KEY (opzionale, per recuperare contratti verificati)Se preferisci l'installazione manuale:```bash
curl -L https://foundry.paradigm.xyz | bash && foundryup export PATH="$PATH:$HOME/.foundry/bin"
pip install solc-select solc-select install 0.4.26 0.8.0 0.8.19 0.8.20 latest
python -m venv venv && source venv/bin/activate pip install -r requirements.txt
## Configurazione
La procedura guidata di configurazione (`python setup.py`) gestisce tutto. Puoi anche configurare dall'interno della TUI tramite `s` (Impostazioni):
- **Configura chiavi API** — richieste sequenziali per le chiavi OpenAI, Gemini, Anthropic, Etherscan con valori correnti mascherati
- **Configura modelli** — seleziona i modelli per ogni provider dalle opzioni disponibili
- **Procedura guidata completa** — esegue le chiavi API seguite dalla selezione dei modelli
- **Impostazioni di triage** — regola le soglie di gravità, i livelli di confidenza, i risultati massimi
Oppure imposta le variabili d'ambiente direttamente:```bash
export OPENAI_API_KEY=sk-...
export GEMINI_API_KEY=...
export ANTHROPIC_API_KEY=...
Configuration is stored in ~/.aether/config.yaml.
Posizioni del database:
~/.aether/aetheraudit.db~/.aether/aether_github_audit.dbTutte le interazioni avvengono tramite scorciatoie da tastiera nella schermata principale:
n — Nuovo AuditProcedura guidata in più passaggi con tre tipi di origine:
File o directory locale:
GitHub URL:
a/n per tutti/nessuno)URL dell'explorer di blocchi / indirizzo:
r — Riprendi AuditTabella di tutti gli audit GitHub in corso con nome del progetto, scope, avanzamento (contratti N/M) e orario dell'ultimo aggiornamento. Selezionane uno per verificare i contratti in sospeso e avviarlo come job in background.
h — Cronologia AuditVista unificata di tutti gli audit passati da entrambi i database (locale + GitHub). Seleziona una voce per un sottomenu:
p — Genera PoCSeleziona un progetto, configura il numero massimo di elementi, la severità minima e il filtro solo consenso. La generazione dei PoC viene eseguita come job in background — osserva l'avanzamento nella tabella dei job.
o — ReportSeleziona progetto, scope e formato (markdown/json/html/all). La generazione dei report viene eseguita come job in background.
f — Recupera ContrattoScegli una rete tra 10+ chain supportate, inserisci un indirizzo o incolla un URL di explorer, recupera il codice sorgente verificato e, opzionalmente, esegui subito un audit.
s — ImpostazioniEnter — Dettaglio JobPremi Invio su qualsiasi riga della tabella dei job per vedere:
q — EsciEsce dalla TUI. Se ci sono job in esecuzione, chiede conferma.
build_cfg() costruisce blocchi di base con alberi dei dominatori e rilevamento degli header di ciclo; parsing dei blocchi assembly; il contesto CFG viene iniettato nell'analisi profonda e nella propagazione del taintRelatedContractResolver per il contesto delle dipendenzeHalmosRunner + HalmosPropertyGenerator per la verifica formale degli invarianti; integrato nella fase di validazione 1.95; degradazione graduale se Halmos non è installatoAccuracyTracker registra gli esiti delle submission e genera pesi di confidenza per singolo rilevatore; la calibrazione della severità dai dati storici viene iniettata nell'analisi profondaRelatedContractResolver individua contratti genitore, interfacce, librerie e contratti di dipendenza; sistema di budget per passaggio con riepilogo delle librerie standardforge test --json con supporto fork-mode./output/ — Directory di output principale./output/reports/ — Report generati./output/pocs/ — Suite PoC Foundry generate./output/exploit_tests/ — Risultati dei test degli exploitaether.py — Punto di ingresso unico; avvia la TUI Textualcli/interactive_menu.py — Shim sottile che crea JobManager + AetherAppcli/tui/app.py — AetherApp(App) — app Textual principale con key binding e timer di aggiornamento di 1 secondocli/tui/)MainScreen (tabella dei job + barra dei costi), JobDetailScreen (log in tempo reale + fase + metadati), NewAuditScreen, HistoryScreen, ResumeScreen, PoCScreen, ReportsScreen, FetchScreen, SettingsScreenJobsTable (DataTable che interroga JobManager), CostBar (costo della sessione per provider), LogViewer (RichLog con aggiornamento incrementale), PhaseBar (avanzamento a blocchi Unicode)ConfirmDialog, TextInputDialog, SelectDialog, CheckboxDialog, PathDialog, ContractSelectorDialog — tutte sottoclassi di ModalScreenGitHubAuditHelper — operazioni di audit GitHub scomposte per l'integrazione nella TUItheme.tcss — CSS Textual con tema cianocli/audit_runner.py — classe AuditRunner che esegue audit, PoC, report e audit GitHub in thread daemoncore/job_manager.py — singleton JobManager: registro dei job di sessione (QUEUED/RUNNING/COMPLETED/FAILED/CANCELLED)core/audit_progress.py — ContractAuditStatus con buffer di log per job, ThreadDemuxWriter per la cattura di stdout/stderrcore/llm_usage_tracker.py — singleton thread-safe con snapshot() per i delta di costo per jobcli/main.py — classe AetherCLI (~2600 righe) — orchestratore interno degli audit utilizzato da AuditRunnercore/enhanced_audit_engine.py — motore di audit principale con integrazione dell'analisi profondacore/post_audit_summary.py — pannello post-audit con ripartizione dei costi per providercore/deep_analysis_engine.py — pipeline LLM a 6 passaggi più Pass 3.5 (cross-contratto): comprendi → superficie d'attacco → invarianti → cross-contratto → cross-funzione → avversario → casi limite; selezione del livello di modello, caching, esempi few-shot, imposizione della catena di pensiero, contesto CFG nel Pass 2, calibrazione della severità tramite ML nel Pass 5, contesto dei contratti correlati per passaggiocore/protocol_archetypes.py — rilevamento degli archetipi di protocollo (14 tipi inclusi LIQUID_STAKING, PERPETUAL_DEX, CDP_STABLECOIN, YIELD_AGGREGATOR) con checklist di vulnerabilità per archetipocore/exploit_knowledge_base.py — 75+ pattern di exploit reali categorizzati in 14 categorie (inclusi CROSS_CONTRACT, SIGNATURE_AUTH, TOKEN_INTEGRATION, PROXY_UPGRADE, TYPE_SAFETY)core/invariant_engine.py — estrazione degli invarianti (NatSpec + LLM + pattern) e generazione di test di invarianti Foundry + generazione di proprietà Halmoscore/solidity_ast.py — parsing AST di Solidity tramite py-solc-x con fallback regex per ereditarietà, visibilità, layout di storage, tracciamento delle letture/scritture di stato; costruzione del grafo di flusso di controllo (build_cfg(), get_dominators(), get_loop_headers())core/taint_analyzer.py — analisi del flusso di dati / taint con 8 tipi di sorgente, 12 tipi di sink, rilevamento dei sanitizer, tracciamento cross-contratto, propagazione CFG consapevole dei ramicore/cross_contract_analyzer.py — analisi delle relazioni tra contratti con rilevamento dei confini di fiducia, raggruppamento union-find e RelatedContractResolver per il contesto delle dipendenzecore/token_quirks.py — database delle stranezze dei token (12 categorie di comportamenti ERC-20 non standard)core/halmos_runner.py — esecutore di esecuzione simbolica Halmos per la verifica formalecore/halmos_property_generator.py — genera automaticamente proprietà di verifica Halmos dagli invarianticore/accuracy_tracker.py — ciclo di feedback ML: tracciamento dell'accuratezza per rilevatore, regolazione del peso di confidenza, calibrazione della severitàcore/enhanced_vulnerability_detector.py — rilevatore primario con 60+ patterncore/business_logic_detector.py, core/state_management_detector.py, core/data_inconsistency_detector.py, core/centralization_detector.py, core/looping_detector.py — rilevatori ispirati a Movecore/defi_vulnerability_detector.py, core/mev_detector.py, core/oracle_manipulation_detector.py — rilevatori specifici DeFi (il rilevatore DeFi è integrato nel motore potenziato nella v3.5)core/arithmetic_analyzer.py, core/precision_analyzer.py, core/gas_analyzer.py, core/input_validation_detector.py, core/data_decoding_analyzer.py — analizzatori specializzati (l'analizzatore di precisione è potenziato con inflazione delle quote, direzione dell'arrotondamento, troncamento delle divisioni, sfruttamento del dust, rilevamento dell'overflow degli accumulatori)core/token_quirks.pycore/validation_pipeline.py — pipeline multi-fase: controllo delle protezioni integrate, rilevamento della governance, validazione consapevole del taint (Stage 1.85), verifica simbolica Halmos (Stage 1.95), verifica del deployment, validazione localecore/governance_detector.py, core/deployment_analyzer.py, core/llm_false_positive_filter.pycore/control_flow_guard_detector.py, core/inheritance_verifier.pycore/nodes/halmos_node.py — nodo della pipeline HalmosSymbolicNode per la validazione tramite esecuzione simbolicacore/enhanced_llm_analyzer.py — analisi LLM strutturata (GPT/Gemini/Claude) con output JSON e rotazione multi-providercore/enhanced_prompts.py — template di prompt di produzione con caricamento dinamico dei pattern di exploit dalla base di conoscenza, esempi few-shot, calibrazione della severità e imposizione della catena di pensierocore/foundry_poc_generator.py (~8000 righe) — analisi basata su AST, feedback di compilazione iterativo (fino a 5 tentativi), auto-esecuzione tramite forge test --json con parsing di PoCTestResult e supporto fork-modecore/llm_foundry_generator.py — generazione di test basata su LLM con documentazione API mock e pattern setUp consigliaticore/enhanced_foundry_integration.py — validazione e formattazione Foundrycore/poc_templates.py — template di contratti mock (MockERC20, MockOracle, MockWETH, MockFlashLoanProvider)core/poc_setup_generator.py — generazione intelligente di setUp(): estrazione dei parametri del costruttore, deployment dei mock, gestione dei contratti upgradeable, minting e approvazioni dei tokencore/database_manager.py — DatabaseManager (audit locali) + AetherDatabase (audit GitHub)core/analysis_cache.py — caching intelligente per analisi ripetute 2 volte più velocicore/accuracy_tracker.py — ciclo di feedback ML: esiti delle submission, guadagni dai bounty, statistiche di accuratezza per rilevatore, generazione dei pesi di confidenzacore/github_auditor.py — clona repository, rileva framework, scopre contratti, coordina l'analisicore/etherscan_fetcher.py, core/basescan_fetcher.py — recuperano contratti verificati dagli explorer di blocchicore/exploit_tester.py — valida gli exploit contro fork AnvilI flussi di audit sono definiti in configurazioni YAML (configs/). Pipeline di audit potenziata:
FileReaderNode -> StaticAnalysisNode -> LLMAnalysisNode -> EnhancedExploitabilityNode -> [FixGeneratorNode -> ValidationNode -> HalmosSymbolicNode] -> ReportNode
2059 test in 76 file di test, esecuzione in ~23 secondi:```bash python -m pytest tests/ # All tests (~23s, 2059 tests) python -m pytest tests/test_enhanced_detectors.py -v # Single file python -m pytest tests/test_enhanced_detectors.py::TestArithmeticAnalyzer -v # Single class python -m pytest tests/ -k "governance" -v # Pattern match python -m pytest tests/ --cov=core --cov-report=html # With coverage
## Risoluzione dei problemi
- **Foundry non trovato** — Assicurarsi che `forge`/`anvil` siano installati e nel `PATH` (`foundryup` e `export PATH="$PATH:$HOME/.foundry/bin"`)
- **solc non trovato** — Installare `solc-select` e le versioni richieste: `solc-select install 0.8.20 latest`
- **Funzionalità LLM non funzionanti** — Verificare che le chiavi API siano impostate. Alcuni modelli potrebbero non essere disponibili per il tuo account/regione; il sistema effettua automaticamente il fallback
- **Database non trovato** — Per i report GitHub, assicurarsi che il workflow di audit sia stato eseguito in precedenza
- **Textual non si carica** — Eseguire `pip install textual>=1.0.0` se mancante
---
## Changelog
### v4.7 — Esecuzione automatica dei PoC, verifica simbolica Halmos, analisi CFG e ciclo di feedback ML
- **Esecuzione automatica dei PoC** — i PoC Foundry generati vengono compilati ed eseguiti automaticamente tramite `forge test --json` con parsing di `PoCTestResult` e supporto alla modalità fork; fase `POC_TESTING` per il monitoraggio live nella TUI
- **Esecuzione simbolica Halmos** — `HalmosRunner`, `HalmosPropertyGenerator` e nodo della pipeline `HalmosSymbolicNode` (Stage di validazione 1.95) per la verifica formale degli invarianti; degradazione controllata se Halmos non è installato
- **Analisi del grafo di flusso di controllo** — `BasicBlock`, `CFGEdge`, `ControlFlowGraph` con `build_cfg()`, alberi dei dominatori, rilevamento degli header dei loop, parsing dei blocchi assembly; contesto CFG iniettato nel Pass 2 dell'analisi profonda; propagazione del taint sensibile ai rami
- **Ciclo di feedback ML** — `AccuracyTracker` registra gli esiti delle submission con `get_detector_accuracy()` e `get_detector_weights()` per statistiche per-detectore; regolazione dei pesi di confidenza in `EnhancedVulnerabilityDetector`; calibrazione della severità nel Pass 5 dell'analisi profonda
- **Contesto dei contratti correlati** — `RelatedContractResolver` scopre contratti padre, interfacce, librerie e dipendenze con un sistema di budget per pass (200K/100K/50K caratteri); sintesi delle librerie standard; scoperta di contratti fratelli nello stesso file
- **Pulizia del debito tecnico** — rimosse 8.500 righe di codice morto: eliminati `ai_ensemble.py`, `audit_engine.py`, `fork_verifier.py`; rimossi tutti i riferimenti ad ai_ensemble da CLI, audit runner, schermate TUI e generatore di report
- **2059 test** superati in 76 file di test
### v4.0 — Parsing AST di Solidity, analisi del taint e tracciamento del flusso di dati
- **Parser AST di Solidity** — integrazione completa di solc tramite py-solc-x per una corretta risoluzione dell'ereditarietà, visibilità delle funzioni, layout di storage, tracciamento di lettura/scrittura dello stato; fallback regex controllato
- **Motore di analisi del taint** — traccia gli input controllati dall'utente attraverso 8 tipi di sorgenti fino a 12 sink pericolosi con rilevamento dei sanitizer e tracciamento cross-contratto
- **Integrazione nella pipeline** — dati AST inseriti nel Pass 1, dati del taint inseriti nel Pass 2, stage di validazione 1.85 sensibile al taint
- **1839 test** superati in 67 file di test (~23 secondi)
### v3.8 — Rilevamento potenziato e generazione di PoC
- **Analisi cross-contratto** — nuovo Pass 3.5 con analizzatore delle relazioni inter-contratto, rilevamento dei confini di fiducia, raggruppamento union-find
- **Database delle anomalie dei token** — 12 categorie di comportamenti ERC-20 non standard (fee-on-transfer, rebasing, ERC-777, ecc.)
- **Motore di precisione potenziato** — rilevamento dell'inflazione delle quote, analisi della direzione dell'arrotondamento, tracciamento del troncamento delle divisioni, sfruttamento del dust, overflow degli accumulatori
- **Generazione di PoC eseguibili** — libreria di contratti mock (ERC20, Oracle, WETH, FlashLoan), setUp() intelligente, tentativi di compilazione massimi 3→5
- **Esempi few-shot** nei Pass 3, 4, 5 dell'analisi profonda con esempi reali di vulnerabilità e falsi positivi
- **Calibrazione della severità** — soglie concrete (Critica >$1M, Alta >$100K, Media >$10K, Bassa teorica)
- **Applicazione della catena di pensiero** — ragionamento obbligatorio in 5 passaggi prima dell'output JSON
- **AI ensemble ritirato** — sostituito dalla rotazione multi-provider nei pass dell'analisi profonda
- **Rotazione multi-provider** — Gemini Flash (pass economici), Anthropic Claude (ragionamento), OpenAI GPT (diversità)
- **1682 test** superati
### v3.7 — Archetipi ampliati e pattern di exploit
- **4 nuovi archetipi di protocollo** — LIQUID_STAKING, PERPETUAL_DEX, CDP_STABLECOIN, YIELD_AGGREGATOR (10→14 totali)
- **25 nuovi pattern di exploit** — categorie CROSS_CONTRACT, SIGNATURE_AUTH, TOKEN_INTEGRATION, PROXY_UPGRADE, TYPE_SAFETY (50→75 totali)
- **Scanner di contratti migliorato** — agli abstract ora viene assegnato un punteggio, soglie regolate per il supporto ai monorepo
- **1528 test** superati
### v3.5.2 — Riduzione dei falsi positivi
- **Rilevamento degli script nella scoperta dei contratti** — i file in `script/`/`scripts/`, i file `.s.sol` e i contratti che importano `forge-std/Script.sol` o ereditano `is Script` vengono etichettati come script di deployment ed esclusi dall'analisi delle vulnerabilità LLM. Elimina un'intera classe di falsi positivi derivanti dagli helper di deployment di Foundry analizzati come codice di produzione
- **Marcatori di contesto dei file nei prompt LLM** — il contenuto combinato ora include marcatori `// FILE: <name>` per ogni file, e i pass 1 e 3 dell'analisi profonda ricevono un'intestazione `## Project Files` che etichetta ogni file come `[PRODUCTION]` o `[DEPLOYMENT SCRIPT]` così che gli LLM si concentrino sul codice giusto
- **Rilevamento dinamico dei modifier** — `GovernanceDetector` ora estrae i modifier personalizzati di controllo accessi definiti nel contratto (es. `onlyDistributor`, `onlyMinter`, `authorized`) analizzando le definizioni di modifier con prefisso `only` o controlli di `msg.sender`. Questi vengono uniti all'elenco di modifier hardcoded per `has_access_control()` e `is_governance_function()`
- **Deduplicazione per ambito di funzione** — `VulnerabilityDeduplicator` ora raggruppa i finding per `(function_name, vuln_type)` quando il codice del contratto è disponibile, sostituendo il fragile confronto per riga esatta che perdeva i duplicati su righe adiacenti nella stessa funzione. In assenza del contesto di funzione, ripiega sul raggruppamento in bucket da 20 righe
- **Tolleranza di riga ampliata dell'AI ensemble** — tolleranza di `_findings_match_fuzzy()` aumentata da ±5 a ±15 righe per individuare i duplicati nella stessa funzione tra i vari agenti
- **Pattern di falso positivo per costruttore atomico** — `_check_constructor_context()` ora rileva quando un contratto viene deployato (`new`/`Create2`) e inizializzato (`.initialize()`) nello stesso costruttore, marcando le preoccupazioni di front-running come falsi positivi poiché le operazioni sono atomiche
- **Pattern di validazione LLM #18** — aggiunto "Atomic Deployment + Initialization" alla checklist di 18 pattern di falsi positivi nel prompt di validazione LLM
- **1489 test** superati in 56 file di test (~40 secondi), in aumento rispetto ai 1461
### v3.5 — Motore di analisi profonda
- **Pipeline di analisi profonda a 6 pass** — sostituisce le chiamate LLM one-shot con un ragionamento multi-pass strutturato: Comprensione del protocollo → Mappatura della superficie d'attacco → Analisi delle violazioni degli invarianti → Interazione cross-funzione → Modellazione avversaria → Casi limite e di confine. Ogni pass riceve il contesto accumulato dai pass precedenti. I pass 1-2 vengono memorizzati nella cache tramite hash del contenuto per ri-audit rapidi
- **Rilevamento dell'archetipo del protocollo** — identifica automaticamente il tipo di protocollo (Vault ERC-4626, Lending Pool, DEX/AMM, Bridge, Staking, Governance, Oracle, NFT Marketplace, Token, Orderbook) con checklist di vulnerabilità per archetipo basate su exploit reali
- **Knowledge base degli exploit** — oltre 50 pattern di exploit categorizzati in 9 categorie (Inflation/Share, Reentrancy, Oracle, Governance, Bridge, Precision/Rounding, Access Control, Economic/DeFi, Logic) che sostituiscono la lista statica di 10 pattern. Ogni pattern include indicatori di codice, protezioni mancanti, meccanismo di exploit passo-passo, precedenti reali con importi in dollari e applicabilità per archetipo
- **Motore degli invarianti** — estrae gli invarianti del protocollo dai tag NatSpec `@invariant`, dall'analisi LLM e da 6 rilevatori di pattern comuni (conservazione del vault, tracciamento dei saldi, contabilità della supply, prodotto costante AMM, collateralizzazione dei prestiti, ricompense di staking). Genera suite di test Foundry `invariant_*()` come prove di verifica formale "leggera"
- **Calibrazione della severità sensibile al contesto** — sostituisce i downgrade generalizzati della severità con controlli del contesto di rischio. I finding in blocchi `unchecked{}`, vicino a trasferimenti di valore (`call{value:}`, `_mint`, `safeTransfer`), calcoli di prezzo o contesti oracle mantengono la severità originale
- **Correzione del gate di validazione** — i finding `"pending"` ora passano all'analisi LLM con il flag `needs_llm_validation`. Solo i finding esplicitamente `"false_positive"` vengono scartati (in precedenza, tutti i finding non-`"validated"` venivano filtrati silenziosamente)
- **Penalità di confidenza basata sullo specialista** — i finding di un singolo agente che corrispondono alla specializzazione dell'agente (es. AnthropicReasoningSpecialist + attacchi economici) ricevono una penalità di -0.05; i finding non specialistici mantengono -0.15
- **Correzione della deduplicazione per bucket di righe** — rimosso il raggruppamento `(line // 10) * 10` che causava problemi arbitrari ai confini (righe 9 e 11 in bucket diversi). La deduplicazione ora usa solo il tipo di vulnerabilità normalizzato, con `_findings_match_fuzzy()` che gestisce la vicinanza delle righe
- **Integrazione del rilevatore DeFi** — `DeFiVulnerabilityDetector` (analisi semantica a due stadi presenza/assenza) ora viene eseguito nel motore di audit potenziato insieme a `EnhancedVulnerabilityDetector`
- **Pattern di exploit dinamici nei prompt** — `enhanced_prompts.py` ora carica i pattern da ExploitKnowledgeBase filtrati per area di focus, con fallback ai pattern statici
- **1461 test** superati in 55 file di test (~50 secondi)
### v3.2 — Statistiche dei job e correzioni UI
- **Corretto il problema dei finding/costi/statistiche LLM dei job che risultavano sempre a zero** — il worker di audit ora cattura il dict dei risultati da `run_audit()` per estrarre il conteggio dei finding; rimosso `LLMUsageTracker.reset()` che lasciava riferimenti singleton orfani; tutti e 4 i tipi di worker calcolano le statistiche per-job dai delta degli snapshot
- **Corretto l'artefatto di repaint della UI al cambio finestra** — sostituiti i contenitori scrollabili con `Container` semplice + `overflow: hidden` in JobDetailScreen per prevenire frame del compositor obsoleti
- **Spostato "Job Details" in border_title** per un rendering più pulito del pannello dei metadati
- Rimosso `CLAUDE.md` dal tracciamento git
### v3.0 — TUI Textual completamente inline
- **Zero chiamate `app.suspend()`** — la TUI non passa mai a un terminale raw; ogni operazione viene eseguita inline
- **Generazione PoC in background** — viene eseguita come thread daemon tramite `AuditRunner.start_poc_generation()` con output live in JobDetailScreen
- **Generazione report in background** — viene eseguita come thread daemon tramite `AuditRunner.start_report_generation()` con output live
- **Audit GitHub in background** — selezione dello scope tramite dialoghi Textual, l'audit viene eseguito come thread daemon tramite `AuditRunner.start_github_audit()`
- **ContractSelectorDialog** — modale multi-selezione filtrabile quasi a tutto schermo che sostituisce `ScopeManager.interactive_select()` basato su curses. Spazio per attivare/disattivare, `a`/`n` per tutti/nessuno, digitare per filtrare, contratti già auditati con codice colore
- **GitHubAuditHelper** — wrapper scomposto attorno a `GitHubAuditor`/`AetherDatabase` che fornisce operazioni atomiche (`clone_and_discover`, `get_scope_state`, `save_new_scope`, `get_pending_contracts`, `handle_reaudit`) richiamabili dalle schermate Textual
- **Impostazioni inline** — configurazione di chiavi API e modelli tramite TextInputDialog/SelectDialog nativi, nessuna procedura guidata esterna necessaria
- **Gestione inline dello scope GitHub** — continua, ri-audit o crea un nuovo scope tramite SelectDialog; selezione dei contratti tramite ContractSelectorDialog
- **6 schermate riscritte** — PoCScreen, ReportsScreen, SettingsScreen, NewAuditScreen, HistoryScreen, ResumeScreen — tutte completamente inline
- **770 test** superati in 50 file di test
### v2.2 — Dashboard TUI Textual
- TUI Textual a schermo intero con app persistente, binding dei tasti e timer di aggiornamento di 1 secondo
- MainScreen con tabella dei job live e barra dei costi della sessione
- JobDetailScreen con visualizzatore di log live, barra di avanzamento delle fasi e metadati
- Dialoghi modali (conferma, input di testo, selezione, checkbox, selettore di percorso) che sostituiscono i prompt di questionary
- Esecuzione degli audit in background tramite AuditRunner con cattura dell'output tramite ThreadDemuxWriter
- JobManager singleton per il registro dei job di sessione
- Tracciamento dei costi per-job tramite snapshot di LLMUsageTracker
### v2.1 — Audit paralleli, rimozione di Slither e pulizia dei test
- Motore di audit parallelo — esegue più contratti contemporaneamente con `ThreadPoolExecutor`, configurabile fino a 8 worker paralleli
- Tracciamento dell'avanzamento thread-safe — `ContractAuditStatus` con locking, `ThreadDemuxWriter` per il multiplexing dello stdout
- Riepilogo post-audit — vista consolidata dei risultati al termine degli audit paralleli
- Tracciamento dell'uso LLM — traccia l'uso dei token, i costi e le chiamate API su tutti e tre i provider
- Slither completamente rimosso — eliminate tutte le dipendenze, il codice di integrazione e i test (~1200 righe); i rilevatori basati su pattern + ABI di Foundry + regex sono gli unici strumenti di analisi
- Pulizia della suite di test — rimossi oltre 40 file di test vecchi/lenti/di integrazione
### v2.0 — TUI a menu interattivo
- TUI interattiva basata su menu come interfaccia primaria
- Procedura guidata di audit con selezione della sorgente, checkbox delle funzionalità e conferma
- Possibilità di riprendere gli audit GitHub in corso
- Browser unificato della cronologia degli audit su database locali e GitHub
- Workflow integrati di generazione PoC e report dal menu
- Recupero di contratti multi-chain con audit immediato opzionale
- Gestione delle impostazioni dal menu
- Avvio/ritorno alla console dal menu
### v1.5 — Supporto LLM a tre provider e analisi potenziata
- Integrazione di Anthropic Claude (Sonnet 4.5, Opus 4.6, Haiku 4.5) come terzo provider LLM
- AI ensemble a 6 agenti: 2 agenti specialistici OpenAI + 2 Gemini + 2 Anthropic
- Fallback automatico cross-provider per la massima disponibilità
- Modelli OpenAI aggiornati (GPT-5.3) e modelli Google Gemini (3.0 Flash/Pro)
- Procedura guidata di configurazione aggiornata con configurazione della chiave API Anthropic e selezione del modello
- Corretto il comando CLI generate-foundry non funzionante
---
## Licenza
Aether è distribuito sotto la **Licenza MIT**. Fare riferimento al file [LICENSE](https://github.com/l33tdawg/aether/blob/main/LICENSE) per i dettagli.
## Autore
**Dhillon Andrew Kannabhiran** (@l33tdawg)
- Email: [email protected]
- Twitter: [@l33tdawg](https://twitter.com/l33tdawg)
- GitHub: [@l33tdawg](https://github.com/l33tdawg)
## Contributi
I contributi sono i benvenuti! Sentiti libero di segnalare problemi (issue), fare il fork del repository e creare pull request.