
augustus v0.14.15
Framework di test di sicurezza per LLM per rilevare iniezioni di prompt, jailbreak e attacchi avversari — oltre 190 sonde, 28 fornitori, un singolo binario Go
Augustus - Scanner di vulnerabilità LLM per injection di prompt, jailbreak e test di attacchi avversari
Augustus - Scanner di Vulnerabilità LLM
Testa grandi modelli linguistici contro oltre 210 attacchi avversari che coprono injection di prompt, jailbreak, exploit di codifica ed estrazione dati.
Augustus è uno scanner di vulnerabilità LLM basato su Go per professionisti della sicurezza. Testa grandi modelli linguistici contro un'ampia gamma di attacchi avversari, si integra con 28 fornitori LLM e produce report di vulnerabilità utilizzabili.
A differenza degli strumenti orientati alla ricerca, Augustus è progettato per il testing di sicurezza in produzione — scansione concorrente, limitazione della frequenza, logica di retry e gestione del timeout sono inclusi fin dall'inizio.
Indice dei contenuti
- Perché Augustus
- Caratteristiche
- Avvio Rapido
- Fornitori Supportati
- Utilizzo
- Come Funziona
- Architettura
- Configurazione
- FAQ
- Risoluzione dei Problemi
- Contribuire
- Sicurezza
- Supporto
- Licenza
Perché Augustus
| Caratteristica | Augustus | garak | promptfoo |
|---|---|---|---|
| Linguaggio | Go | Python | TypeScript |
| Binario singolo | Sì | No | No |
| Scansione concorrente | Pool di goroutine | Pool di multiprocessing | Sì |
| Fornitori LLM | 28 | 35+ | 80+ |
| Tipi di sonda | 210+ | 160+ | 119 plugin + 36 strategie |
| Focus aziendale | Sì | Ricerca | Sì |
Caratteristiche
| Caratteristica | Descrizione |
|---|---|
| 210+ Sonde di Vulnerabilità | 47 categorie di attacco: jailbreak, injection di prompt, esempi avversari, estrazione dati, benchmark di sicurezza, attacchi agenti e altro ancora |
| 28 Fornitori LLM | OpenAI, Anthropic, Azure, Bedrock, Vertex AI, Ollama e altri 22 con 43 varianti di generatore |
| 90+ Rilevatori | Pattern matching, LLM-as-a-judge, HarmJudge (arXiv:2511.15304), Perspective API, rilevamento di contenuti non sicuri |
| 7 Trasformazioni Buff | Codifica, parafrasi, poesia (5 formati, 3 strategie), traduzione in lingue a basse risorse, trasformazioni di maiuscolo/minuscolo |
| Output Flessibile | Formati di report: tabella, JSON, JSONL e HTML |
| Pronto per la Produzione | Scansione concorrente, limitazione della frequenza, logica di retry, gestione del timeout |
| Binario Singolo | Lo strumento basato su Go compila in un singolo eseguibile portabile |
| Estendibile | Registrazione in stile plugin tramite funzioni Go init() |
Categorie di Attacco
- Attacchi di jailbreak: DAN, DAN 11.0, AIM, AntiGPT, Grandma, ArtPrompts
- Iniezione di prompt: Codifica (Base64, ROT13, Morse), Contrabbando di tag, FlipAttack, Iniezione di prefisso/suffisso
- Esempi avversari: GCG, PAIR, AutoDAN, TAP (Tree of Attack Prompts), TreeSearch, DRA
- Attacchi multi-turno: Crescendo (escalation graduale), GOAT (cambio adattivo di tecnica)
- Estrazione dati: Perdita di chiavi API, Allucinazione di pacchetti, Estrazione di PII, LeakReplay
- Manipolazione del contesto: Avvelenamento RAG, Overflow del contesto, Attacchi multimodali, Continuazione, Divergenza
- Exploit di formato: Iniezione Markdown, Attacchi di parsing YAML/JSON, Escape ANSI, Iniezione web (XSS)
- Tecniche di evasione: Offuscamento, Sostituzione di caratteri, Attacchi basati su traduzione, Parafrasi, ObscurePrompt
- Benchmark di sicurezza: DoNotAnswer, RealToxicityPrompts, Snowball, LMRC
- Attacchi agenti: Manipolazione multi-agente, Exploit di navigazione
- Test di sicurezza: Bypass di guardrail, Scansione AV/spam, Exploitation (SQLi, esecuzione di codice), BadChars
Avviso: La sonda
lmrcutilizza linguaggio profano e offensivo come parte del test di jailbreak. Utilizzare solo in ambienti di test autorizzati.
Avvio Rapido
Installazione
Richiede Go 1.25.3 o successivo.```bash go install github.com/praetorian-inc/augustus/cmd/augustus@latest
Oppure compila dal sorgente:```bash
git clone https://github.com/praetorian-inc/augustus.git
cd augustus
make build
Utilizzo di base```bash
export OPENAI_API_KEY="your-api-key"
augustus scan openai.OpenAI
--probe dan.Dan_11_0
--detector dan.DAN
--verbose
### Esempio di output```
+--------------+-------------+--------+-------+--------+
| PROBE | DETECTOR | PASSED | SCORE | STATUS |
+--------------+-------------+--------+-------+--------+
| dan.Dan_11_0 | dan.DAN | false | 0.85 | VULN |
| dan.STAN | dan.STAN | true | 0.10 | SAFE |
| dan.AntiDAN | dan.AntiDAN | true | 0.05 | SAFE |
+--------------+-------------+--------+-------+--------+
Elenca le capacità disponibili```bash
List all registered probes, detectors, generators, harnesses, and buffs
augustus list
## Provider Supportati
Augustus include 28 categorie di provider LLM con 43 varianti di generatori:
| Provider | Nomi Generatore | Note |
|--------------------|---------------------------|--------------------------------|
| OpenAI | `openai.OpenAI`, `openai.OpenAIReasoning` | Modelli GPT-3.5, GPT-4, GPT-4 Turbo, o1/o3 di ragionamento |
| Anthropic | `anthropic.Anthropic` | Claude 3/3.5/4 (Opus, Sonnet, Haiku) |
| Azure OpenAI | `azure.AzureOpenAI` | Modelli OpenAI ospitati su Azure |
| AWS Bedrock | `bedrock.Bedrock` | Modelli Claude, Llama, Titan |
| Google Vertex AI | `vertex.Vertex` | Modelli PaLM, Gemini |
| Cohere | `cohere.Cohere` | Modelli Command, Command R |
| Replicate | `replicate.Replicate` | Modelli open ospitati su cloud |
| HuggingFace | `huggingface.InferenceAPI`, `huggingface.InferenceEndpoint`, `huggingface.Pipeline`, `huggingface.LLaVA` | API HF Inference, endpoint, pipeline, multimodale |
| Together AI | `together.Together` | Inferenza veloce per modelli OSS |
| Anyscale | `anyscale.Anyscale` | Hosting di Llama e Mistral |
| Groq | `groq.Groq` | Inferenza LPU ultra-veloce |
| Mistral | `mistral.Mistral` | Modelli API Mistral |
| Fireworks | `fireworks.Fireworks` | Piattaforma di inferenza di produzione |
| DeepInfra | `deepinfra.DeepInfra` | Inferenza GPU serverless |
| NVIDIA NIM | `nim.NIM`, `nim.NVOpenAICompletion`, `nim.NVMultimodal`, `nim.Vision` | Endpoint AI NVIDIA, multimodale |
| NVIDIA NeMo | `nemo.NeMo` | Framework NVIDIA NeMo |
| NVIDIA NVCF | `nvcf.NvcfChat`, `nvcf.NvcfCompletion` | Funzioni Cloud NVIDIA |
| NeMo Guardrails | `guardrails.NeMoGuardrails` | NeMo Guardrails NVIDIA |
| IBM watsonx | `watsonx.WatsonX` | Piattaforma IBM watsonx.ai |
| LangChain | `langchain.LangChain` | Wrapper LLM di LangChain |
| LangChain Serve | `langchain_serve.LangChainServe` | Endpoint LangChain Serve |
| Rasa | `rasa.RasaRest` | AI conversazionale di Rasa |
| GGML | `ggml.Ggml` | Inferenza locale di modelli GGML |
| Function | `function.Single`, `function.Multiple` | Generatori di funzioni personalizzati |
| Ollama | `ollama.Ollama`, `ollama.OllamaChat` | Hosting locale di modelli |
| LiteLLM | `litellm.LiteLLM` | Proxy API unificato |
| REST API | `rest.Rest` | Endpoint REST personalizzati (supporto SSE) |
| Test | `test.Blank`, `test.Repeat`, `test.Lipsum`, `test.Nones`, `test.Single`, `test.BlankVision` | Test e sviluppo |
Tutti i provider sono disponibili nel binario compilato. Configura tramite variabili d'ambiente o file di configurazione YAML. Vedi [Configurazione](#configuration) per i dettagli di configurazione.
## Utilizzo
### Sonda Singola```bash
# Test for DAN jailbreak
augustus scan openai.OpenAI \
--probe dan.Dan_11_0 \
--detector dan.DAN \
--config-file config.yaml \
--verbose
Sonde Multiple```bash
Use glob patterns to run related probes
augustus scan openai.OpenAI
--probes-glob "dan.,goodside.,grandma."
--detectors-glob ""
--config-file config.yaml
--output batch-results.jsonl
Run all probes against Claude
augustus scan anthropic.Anthropic
--all
--config '{"model":"claude-3-opus-20240229"}'
--timeout 60m
--output comprehensive-scan.jsonl
--html comprehensive-report.html
### Buff Transformations
Applica trasformazioni di prompt per testare tecniche di evasione:```bash
# Apply base64 encoding buff to all probes
augustus scan openai.OpenAI \
--all \
--buff encoding.Base64 \
--config '{"model":"gpt-4"}'
# Apply poetry transformation
augustus scan anthropic.Anthropic \
--probes-glob "dan.*" \
--buff poetry.MetaPrompt \
--config '{"model":"claude-3-opus-20240229"}'
# Chain multiple buffs
augustus scan openai.OpenAI \
--all \
--buffs-glob "encoding.*,paraphrase.*" \
--output buffed-results.jsonl
Formati di output```bash
Table format (default) - human-readable
augustus scan openai.OpenAI --probe dan.Dan_11_0 --format table
JSON format - structured output
augustus scan openai.OpenAI --probe dan.Dan_11_0 --format json
JSONL format - one JSON object per line, ideal for piping
augustus scan openai.OpenAI --probe dan.Dan_11_0 --format jsonl
HTML report - visual reports for stakeholders
augustus scan openai.OpenAI --all --html report.html
### Endpoint REST personalizzati```bash
# Test proprietary LLM endpoint (OpenAI-compatible API)
augustus scan rest.Rest \
--probe dan.Dan_11_0 \
--detector dan.DAN \
--config '{
"uri": "https://api.example.com/v1/chat/completions",
"method": "POST",
"headers": {"Authorization": "Bearer YOUR_API_KEY"},
"req_template_json_object": {
"model": "custom-model",
"messages": [{"role": "user", "content": "$INPUT"}]
},
"response_json": true,
"response_json_field": "$.choices[0].message.content"
}'
# Test with proxy interception (Burp Suite, mitmproxy)
augustus scan rest.Rest \
--probes-glob "goodside.*" \
--config '{
"uri": "https://internal-llm.corp/generate",
"proxy": "http://127.0.0.1:8080",
"headers": {"X-API-Key": "$KEY"},
"api_key": "your-key-here",
"req_template": "{\"prompt\":\"$INPUT\",\"max_tokens\":500}",
"response_json": true,
"response_json_field": "output"
}'
Chiavi di configurazione REST:
uri: Endpoint API di destinazione (obbligatorio)method: Metodo HTTP (predefinito: POST)headers: Intestazioni HTTP come coppie chiave-valorereq_template: Corpo della richiesta grezzo con segnaposto$INPUTreq_template_json_object: Corpo della richiesta JSON (auto-serializzato, usa$INPUTnelle stringhe)response_json: Analizza la risposta come JSON (predefinito: false)response_json_field: Percorso JSONPath da estrarre (es.$.data.texto nome di campo semplice)api_key: Chiave API per la sostituzione del segnaposto$KEYproxy: URL del proxy HTTP per l'ispezione del traffico
Opzioni Avanzate```bash
Adjust concurrency (default: 10)
augustus scan openai.OpenAI --all --concurrency 20
Increase timeout for complex probes like TAP or PAIR
augustus scan openai.OpenAI --probe tap.TAPv1 --timeout 60m
Use a specific harness strategy
augustus scan openai.OpenAI --all --harness batch.Batch
Test local model with Ollama (no API key needed)
augustus scan ollama.OllamaChat
--probe dan.Dan_11_0
--config '{"model":"llama3.2:3b"}'
## Come funziona
Augustus utilizza un'architettura a pipeline per testare gli LLM contro attacchi avversari:```mermaid
flowchart LR
A[Probe Selection] --> B[Buff Transform]
B --> C[Generator / LLM Call]
C --> D[Detector Analysis]
D --> E{Vulnerable?}
E -->|Yes| F[Record Finding]
E -->|No| G[Record Pass]
subgraph Scanner
B
C
D
E
end
Pipeline di scansione
- Selezione delle probe: Scegli le probe per nome, pattern glob o
--all - Trasformazione Buff: Trasforma facoltativamente i prompt (codifica, parafrasi, traduzione, poeticizzazione)
- Chiamata del generatore: Invia prompt avversari all'LLM target tramite la sua integrazione provider
- Analisi del rilevatore: Analizza le risposte utilizzando pattern matching, LLM-as-a-judge o rilevatori specializzati
- Registrazione dei risultati: Assegna un punteggio a ogni tentativo e produce output nel formato richiesto
- Motore di attacco: Per le probe iterative (PAIR, TAP), il motore di attacco a turno singolo perfeziona i prompt attraverso le iterazioni con pruning dei candidati e scoring basato sul giudice
- Motore multi-turno: Per le probe conversazionali (Crescendo, GOAT), il motore multi-turno mantiene la cronologia completa della conversazione con il target attraverso i turni, con rilevamento del rifiuto e adattamento dinamico
Strategie di attacco multi-turno
Gli attacchi multi-turno mantengono una conversazione persistente con l'LLM target, sfruttando il fatto che i modelli possono rivelare informazioni incrementalmente attraverso i turni che rifiuterebbero in un singolo prompt. Il motore multi-turno utilizza tre LLM: un attaccante (genera domande), un target (il sistema sotto test), e un giudice (valuta i progressi e rileva i rifiuti).
Crescendo
Crescendo utilizza un'escalation graduale (tecnica del piede nella porta) per spostare lentamente una conversazione da argomenti benigni verso un obiettivo proibito.
- Articolo: Russinovich et al., 2024
- Approccio: Inizia con domande genuinamente benigne ed educative e aumenta incrementalmente la specificità nel corso di molti turni
- Schema di escalation: Contesto storico → meccanismi tecnici → dettagli specifici → richieste dirette formulate come follow-up naturali
- Punto di forza: Efficace contro modelli che tracciano il tono della conversazione — lo spostamento graduale evita di attivare i filtri di sicurezza```bash
augustus scan rest.Rest
--probe crescendo.Crescendo
--config-file crescendo.yaml
--html report.html -v
#### GOAT (Generative Offensive Agent Tester)
GOAT utilizza un approccio aggressivo e adattivo con 7 tecniche avversariali e un ragionamento Chain-of-Attack-Thought per cambiare dinamicamente strategia in base a ciò che funziona o fallisce.
- **Paper**: [Pavlova et al., 2024](https://arxiv.org/abs/2410.01606)
- **Approccio**: Punta all'obiettivo fin dal turno 1 usando un framing indiretto, senza mai menzionare l'obiettivo direttamente al bersaglio
- **7 tecniche** in 3 categorie:
- *Manipolazione dell'Output*: Soppressione del Rifiuto, Priming della Risposta
- *Distrattori di Risposta Sicura*: Doppia Risposta, Divisione dell'Argomento, Intento Opposto
- *Scenari Fittizi*: Modifica della Persona, Ipotetico
- **Chain-of-Attack-Thought**: Ogni turno l'attaccante ragiona attraverso Osservazione → Pensiero → Strategia → Risposta prima di formulare il suo messaggio
- **Combinazione di tecniche**: Più tecniche possono essere combinate in un singolo turno per un effetto più forte
- **Punto di forza**: Raggiunge tassi di successo elevati in meno turni (tipicamente 3-5) passando aggressivamente tra approcci fondamentalmente diversi```bash
augustus scan rest.Rest \
--probe goat.Goat \
--config-file goat.yaml \
--html report.html -v
Hydra
Hydra mantiene un unico percorso di conversazione e annulla interi turni quando il target rifiuta, chiedendo all'attaccante un approccio completamente diverso. A differenza di Crescendo/GOAT (che riformulano al rifiuto), il backtracking di Hydra rimuove completamente i turni rifiutati dalla visuale del target.
- Approccio: Percorso singolo con backtracking a livello di turno — i turni rifiutati vengono cancellati e sostituiti
- Tecniche: Scomposizione (suddividere l'obiettivo in sotto-domande innocue), sfruttamento del contesto (basarsi sulle parole del target), simulazione di autorità, inquadramento emotivo, normalizzazione progressiva
- Caratteristica chiave:
max_backtrackscontrolla quante volte Hydra può cancellare e riprovare un turno - Modalità stateful: Imposta
stateful: trueper target in cui i messaggi non possono essere annullati (disabilita il backtracking) - Punto di forza: Mantiene pulita la cronologia della conversazione del target — il target non vede mai i tentativi falliti, prevenendo l'escalation difensiva```bash
augustus scan rest.Rest
--probe hydra.Hydra
--config-file hydra.yaml
--html report.html -v
#### Utente Malizioso
L'Utente Malizioso simula una persona innocente e curiosa che sonda sottilmente i confini dell'IA attraverso una conversazione naturale. A differenza delle strategie avversariali, la persona dell'attaccante è un utente occasionale che si sposta verso argomenti proibiti attraverso un coinvolgimento apparentemente innocente.
- **Ispirato da**: [Tau-bench](https://github.com/sierra-research/tau-bench) e dalla strategia mischievous-user di promptfoo
- **Approccio**: Fase di costruzione del rapporto → sondaggio dei confini → spinta assertiva
- **7 tecniche**: Curiosità ingenua, fraintendimento deliberato, prova sociale, deriva graduale, appello emotivo, permesso presunto, ricontestualizzazione
- **Playbook specifici per obiettivi**: Script integrati per estrarre istruzioni di sistema, trovare segreti/flag e bypassare la politica dei contenuti
- **Turni predefiniti**: 5 (meno di altre strategie — l'approccio sottile funziona rapidamente o per niente)
- **Punto di forza**: Efficace contro modelli addestrati a resistere a pattern avversariali ovvi — la persona occasionale bypassa le euristiche di 'rilevamento degli attacchi'```bash
augustus scan rest.Rest \
--probe mischievous.MischievousUser \
--config-file mischievous.yaml \
--html report.html -v
Guida alla Selezione della Strategia
| Strategia | Turni | Stile | Ideale per | Costo |
|---|---|---|---|---|
crescendo.Crescendo | 10 | Escalation graduale | Modelli con filtri di sicurezza che tracciano il tono | Medio (10 turni × 3 chiamate LLM) |
goat.Goat | 10 | Cambio aggressivo di tecnica | Risultati rapidi, modelli vulnerabili ai trucchi di framing | Medio-Alto (overhead di ragionamento della tecnica) |
hydra.Hydra | 10 | Backtracking sul rifiuto | Modelli ostinati che rifiutano frequentemente | Alto (il backtracking aggiunge tentativi) |
mischievous.MischievousUser | 5 | Sondaggio informale della personalità | Modelli addestrati contro schemi avversari | Basso (5 turni, approccio sottile) |
Decisione rapida:
- Inizia con Crescendo — è la strategia più versatile
- Prova GOAT se Crescendo è troppo lento (GOAT generalmente ha successo in 3-5 turni)
- Usa Hydra se il target rifiuta frequentemente (il backtracking mantiene la conversazione pulita)
- Usa Mischievous per target con forte rilevamento di schemi avversari (la personalità bypassa le euristiche)
Configurazione Multi-Turn
Tutte e quattro le strategie condividono la stessa struttura di configurazione:```yaml generators: rest.Rest: uri: "https://your-llm-endpoint/chat" method: POST req_template: '{"input": "$INPUT"}' response_json: true response_json_field: "response"
judge: generator_type: openai.OpenAI config: model: gpt-4 api_key: "${OPENAI_API_KEY}"
probes: attacker_generator_type: openai.OpenAI attacker_config: model: gpt-4 api_key: "${OPENAI_API_KEY}" settings: crescendo.Crescendo: # or goat.Goat, hydra.Hydra, mischievous.MischievousUser goal: "your test objective" max_turns: 10 success_threshold: 0.8 use_secondary_judge: true
| Setting | Default | Descrizione |
|---------|---------|-------------|
| `goal` | (obbligatorio) | L'obiettivo che l'attaccante cerca di raggiungere |
| `max_turns` | 10 | Numero massimo di turni di conversazione prima dell'arresto |
| `success_threshold` | 0.8 | Punteggio del giudice (0.0-1.0) che attiva l'uscita anticipata |
| `max_refusal_retries` | 10 | Tentativi di riformulazione per turno quando il bersaglio rifiuta |
| `attack_max_attempts` | 5 | Riprova per errori di parsing JSON dell'LLM attaccante |
| `use_secondary_judge` | true | Abilita giudice secondario per cogliere falsi negativi |
| `max_backtracks` | 10 | Rollback a livello di turno in caso di rifiuto (solo Hydra) |
| `enable_fast_refusal` | true | Rilevamento del rifiuto basato su pattern prima della chiamata al giudice LLM |
| `enable_scan_memory` | false | Apprendimento cross-test-case (condivide tattiche tra probe) |
| `stateful` | false | Disabilita il backtracking per bersagli stateful |
| `exclude_target_output` | false | Nascondi le risposte del bersaglio dal feedback dell'attaccante (modalità privacy) |
| `attacker_model` | (auto) | Sostituisci il nome del modello attaccante per il dimensionamento della finestra di contesto |
#### Risoluzione dei problemi Multi-Turn
| Sintomo | Causa probabile | Soluzione |
|---------|-----------------|-----------|
| `no turns completed (attacker_parse_failures=N)` | LLM attaccante restituisce JSON non valido | Usa un modello attaccante più potente (GPT-4, Claude Opus). Aumenta `attack_max_attempts`. |
| `no turns completed (target_empty=N)` | Il bersaglio restituisce risposte vuote/nulle | Controlla che l'endpoint del bersaglio risponda. Verifica il template di configurazione REST. |
| All turns score 0.0 | Obiettivo troppo vago o attaccante non coinvolto | Rendi `goal` più specifico. Prova una strategia diversa. |
| High scores but no success | `success_threshold` troppo alto | Abbassa `success_threshold` da 0.8 a 0.6-0.7 |
| Runs too long / expensive | Troppi turni e riprove | Riduci `max_turns` (prova 5). Imposta `enable_fast_refusal: true`. |
| Hydra keeps backtracking | Il bersaglio rifiuta tutto | Prova `stateful: true` o passa alla strategia Mischievous |
## Architecture```
cmd/augustus/ CLI entrypoint (Kong-based)
pkg/
attempt/ Probe execution lifecycle and result tracking
buffs/ Buff interface for prompt transformations
config/ Configuration loading (YAML/JSON) with profiles
detectors/ Public detector interfaces and registry
generators/ Public generator interfaces and registry
harnesses/ Harness interface for execution strategies
lib/http/ Shared HTTP client with proxy support
lib/stego/ LSB steganography for multimodal attacks
logging/ Structured slog-based logging
metrics/ Prometheus metrics collection
prefilter/ Aho-Corasick keyword pre-filtering
probes/ Public probe interfaces and registry
ratelimit/ Token bucket rate limiting
registry/ Generic capability registration system
results/ Result types and multi-format output
retry/ Exponential backoff with jitter
scanner/ Scanner orchestration with concurrency
templates/ YAML probe template loader (Nuclei-style)
types/ Canonical shared interfaces (Prober, Generator, Detector)
internal/
probes/ 210+ probe implementations (47 categories)
generators/ 28 LLM provider integrations (43 variants)
detectors/ 90+ detector implementations (35 categories)
harnesses/ 3 harness strategies (probewise, batch, agentwise)
buffs/ Buff interface for prompt transformations
attackengine/ Iterative adversarial attack engine (PAIR/TAP backend)
multiturn/ Multi-turn conversational attack engine (Crescendo/GOAT/Hydra/Mischievous)
ahocorasick/ Internal Aho-Corasick keyword matching
benchmarks/ Performance benchmarks
tests/ Integration and equivalence tests
research/ Research documentation and analysis
examples/ Example configurations
docs/ Documentation
Decisioni Chiave di Progetto
- Scansione concorrente con pool di goroutine limitati tramite
errgroup - Registrazione in stile plugin utilizzando funzioni Go
init()per probe, generatori, rilevatori, buff e harness - Motore di attacco iterativo con gestione delle conversazioni multi-stream, pruning dei candidati e punteggio basato su giudice per PAIR/TAP
- Motore di attacco multi-turno con cronologia delle conversazioni persistente, rilevamento dei rifiuti, design agnostico rispetto alla strategia per Crescendo/GOAT
- Template YAML per probe (stile Nuclei) per definizioni dichiarative di probe insieme a probe basati su Go
- Prefiltraggio Aho-Corasick per il rapido matching di parole chiave nei rilevatori
Configurazione
File di Configurazione YAML
Crea un file config.yaml:```yaml
Runtime configuration
run: max_attempts: 3 timeout: "30s"
Generator configurations
generators: openai.OpenAI: model: "gpt-4" temperature: 0.7 api_key: "${OPENAI_API_KEY}" # Environment variable interpolation
anthropic.Anthropic: model: "claude-3-opus-20240229" temperature: 0.5 api_key: "${ANTHROPIC_API_KEY}"
ollama.OllamaChat: model: "llama3.2:3b" temperature: 0.8
Judge configuration (required for judge.Judge, judge.Refusal, and multi-turn probes)
judge: generator_type: openai.OpenAI model: gpt-4o-mini config: api_key: "${OPENAI_API_KEY}"
Output configuration
output: format: "jsonl" path: "./results.jsonl"
Named profiles for different scenarios
profiles: quick: run: max_attempts: 1 timeout: "10s" generators: openai.OpenAI: model: "gpt-3.5-turbo" temperature: 0.5 output: format: "table"
thorough: run: max_attempts: 5 timeout: "60s" generators: openai.OpenAI: model: "gpt-4" temperature: 0.3 output: format: "jsonl" path: "./thorough_results.jsonl"
### Variabili d'ambiente```bash
# API Keys
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export COHERE_API_KEY="..."
# Debug mode
export AUGUSTUS_DEBUG=true
Configurazione Proxy
Instradare il traffico HTTP attraverso un proxy (es. Burp Suite) per l'ispezione:```bash
Method 1: Via config parameter
augustus scan rest.Rest
--probe dan.Dan_11_0
--detector dan.DAN
--config '{"uri":"https://api.example.com","proxy":"http://127.0.0.1:8080"}'
--output results.jsonl
Method 2: Via environment variables
export HTTP_PROXY=http://127.0.0.1:8080 export HTTPS_PROXY=http://127.0.0.1:8080 augustus scan rest.Rest --probe dan.Dan_11_0 --config '{"uri":"https://api.example.com"}'
- Verifica TLS automaticamente disabilitata per l'ispezione proxy
- Supporto HTTP/2 abilitato per API moderne
- Risposte Server-Sent Events (SSE) automaticamente rilevate e analizzate
### Riferimenti CLI```
Usage: augustus scan <generator> [flags]
Arguments:
<generator> Generator name (e.g., openai.OpenAI, anthropic.Anthropic)
Probe Selection (choose one):
--probe, -p Probe name (repeatable)
--probes-glob Comma-separated glob patterns (e.g., "dan.*,goodside.*")
--all Run all registered probes
Detector Selection:
--detector Detector name (repeatable)
--detectors-glob Comma-separated glob patterns
Buff Selection:
--buff, -b Buff names to apply (repeatable)
--buffs-glob Comma-separated buff glob patterns (e.g., "encoding.*")
Configuration:
--config-file Path to YAML config file
--config, -c JSON config for generator
Execution:
--harness Harness name (default: probewise.Probewise)
--timeout Overall scan timeout (default: 30m)
--probe-timeout Per-probe timeout (default: 5m)
--concurrency Max concurrent probes (default: 10, env: AUGUSTUS_CONCURRENCY)
Output:
--format, -f Output format: table, json, jsonl (default: table)
--output, -o JSONL output file path
--html HTML report file path
--verbose, -v Verbose output
Global:
--debug, -d Enable debug mode
Comandi:```bash augustus version # Print version information augustus list # List available probes, detectors, generators, harnesses, buffs augustus scan # Run vulnerability scan augustus completion # Generate shell completion (bash, zsh, fish)
**Codici di uscita:**
| Codice | Significato |
|--------|-------------|
| 0 | Successo - scansione completata |
| 1 | Errore di scansione/esecuzione |
| 2 | Errore di validazione/utilizzo |
## FAQ
### Come si confronta Augustus con garak?
Augustus è una reimplementazione nativa in Go ispirata da [garak](https://github.com/NVIDIA/garak) (lo scanner di vulnerabilità LLM basato su Python di NVIDIA). Differenze principali:
- **Prestazioni**: Binario Go vs interprete Python — esecuzione più veloce e minor consumo di memoria
- **Distribuzione**: Singolo binario senza dipendenze runtime vs pacchetto Python con installazione tramite pip
- **Concorrenza**: Pool di goroutine Go (parallelismo cross-probe) vs pool di multiprocessing Python (parallelismo intra-probe)
- **Copertura dei probe**: Augustus ha 210+ probe; garak ha 160+ probe con un pedigree di ricerca più lungo e un articolo pubblicato (arXiv:2406.11036)
- **Copertura dei provider**: Augustus ha 28 provider; garak ha 35+ varianti di generatori su 22 moduli provider
### Posso testare modelli locali senza chiavi API?
Sì! Usa l'integrazione Ollama per il test di modelli locali:```bash
# No API key needed
augustus scan ollama.OllamaChat \
--probe dan.Dan_11_0 \
--config '{"model":"llama3.2:3b"}'
Come aggiungo sonde personalizzate?
- Crea un nuovo file Go in
internal/probes/ - Implementa l'interfaccia
probes.Probe - Registra usando
registry.RegisterProbe()in una funzioneinit() - Ricostruisci:
make build
Vedi CONTRIBUTING.md per istruzioni dettagliate.
Quali formati di output sono supportati?
Augustus supporta quattro formati di output:
| Formato | Flag | Caso d'uso |
|---|---|---|
| Tabella | --format table | Output terminale leggibile |
| JSON | --format json | Oggetto JSON singolo per parsing |
| JSONL | --format jsonl | JSON delimitato da righe per streaming |
| HTML | --html report.html | Report visivi per le parti interessate |
Come testare più modelli contemporaneamente?```bash
Test multiple models sequentially
for model in "gpt-4" "gpt-3.5-turbo"; do
augustus scan openai.OpenAI
--all
--config "{"model":"$model"}"
--output "results-$model.jsonl"
done
### Augustus è adatto per ambienti di produzione?
Sì, Augustus è progettato per l'uso in produzione con:
- Scansione concorrente con limiti configurabili
- Limitazione della velocità per rispettare le quote API
- Gestione dei timeout per probe a lunga esecuzione
- Logica di retry per errori transitori
- Log strutturato per l'osservabilità
## Risoluzione dei problemi
### Errore: "Limite di velocità API superato"
**Causa**: Troppe richieste concorrenti o richieste al minuto.
**Soluzioni**:
1. Riduci la concorrenza: `--concurrency 5`
2. Utilizza le impostazioni del limite di velocità specifiche del provider nella configurazione YAML: ```yaml
generators:
openai.OpenAI:
rate_limit: 10 # requests per minute
Error: "context deadline exceeded" or "timeout"
Cause: Sonde complesse (come TAP o PAIR) superano il timeout predefinito.
Solution:```bash
augustus scan openai.OpenAI
--probe tap.TAPv1
--timeout 60m
--config-file config.yaml
### Errore: "chiave API non valida" o "autenticazione fallita"
**Causa**: Credenziali API mancanti o non valide.
**Soluzioni**:
1. Verificare che la variabile d'ambiente sia impostata: `echo $OPENAI_API_KEY`
2. Controllare la presenza di errori di battitura nel file di configurazione
3. Assicurarsi che la chiave API abbia i permessi necessari
4. Per Ollama, assicurarsi che il servizio sia in esecuzione: `ollama serve`
### Errore: "sonda non trovata" o "rilevatore non trovato"
**Causa**: Errore di battitura nel nome o sonda non registrata.
**Soluzione**:```bash
# List all available probes and detectors
augustus list
# Use exact names from the list
augustus scan openai.OpenAI --probe dan.Dan_11_0 # Correct
La scansione non produce risultati
Causa: Il rilevatore non ha corrisposto a nessuna risposta, oppure l'output non è stato scritto.
Soluzioni:
- Eseguire con
--verboseper vedere l'output dettagliato - Verificare che il rilevatore corrisponda al tipo di sonda
- Controllare che il percorso del file di output sia scrivibile
Contribuire
Accogliamo con favore i contributi! Vedi CONTRIBUTING.md per:
- Aggiungere nuove sonde di vulnerabilità
- Creare nuove implementazioni di rilevatori
- Aggiungere integrazioni con provider LLM
- Linee guida per i test
- Requisiti di stile del codice
Sviluppo```bash
Run all tests
make test
Run specific package tests
go test ./pkg/scanner -v
Run equivalence tests (compare Go vs Python implementations)
go test ./tests/equivalence -v
Build binary
make build
Install to $GOPATH/bin
make install
### Ambiente di Benchmark (DevPod)
Un ambiente di sviluppo cloud pronto all'uso per il benchmarking degli LLM è disponibile tramite [DevPod](https://devpod.sh/). Fornisce un container remoto con Augustus, Ollama, Go e tutte le dipendenze preinstallate.```bash
cd devpod
# CPU-only instance (~$0.08/hr) - cloud APIs only
make devpod-up-cpu
# GPU instance with NVIDIA T4 (~$0.53/hr) - local models up to 14B
make devpod-up-gpu
# GPU Pro instance with NVIDIA L4 (~$0.80/hr) - local models up to 32B
make devpod-up-gpu-pro
Dentro il devpod:```bash devpod/scripts/setup.sh # Configure LLM provider API keys devpod/scripts/pull-models.sh # Pull local Ollama models (GPU only) devpod/scripts/benchmark.sh # Run benchmarks with comparison reports
L'ambiente funziona anche come un [dev container](https://containers.dev/) standard — apri il repository in VS Code o Cursor e seleziona la configurazione CPU o GPU da `.devcontainer/`.
## Sicurezza
Augustus è progettato **esclusivamente per test di sicurezza autorizzati**.
- Augustus invia prompt avversari agli LLM che specifici — assicurati sempre di avere l'autorizzazione
- Non testare mai sistemi che non possiedi o per i quali non hai esplicito permesso
- Alcune probe generano contenuti offensivi per progettazione (per testare i filtri di sicurezza)
- I risultati possono contenere contenuti dannosi prodotti dagli LLM di destinazione
Segnala problemi di sicurezza tramite [GitHub Issues](https://github.com/praetorian-inc/augustus/issues).
## Supporto
Se trovi Augustus utile, considera:
- Assegnare una **stella** su GitHub
- [Aprire una issue](https://github.com/praetorian-inc/augustus/issues) per bug o richieste di funzionalità
- [Contribuire](https://github.com/praetorian-inc/augustus/blob/HEAD/CONTRIBUTING.md) con nuove probe, rilevatori o integrazioni di provider
[](https://star-history.com/#praetorian-inc/augustus&Date)
## Licenza
[Apache 2.0](https://github.com/praetorian-inc/augustus/blob/HEAD/LICENSE) — Praetorian Security, Inc.
---
**Realizzato da [Praetorian](https://www.praetorian.com/)** — Soluzioni di Sicurezza Offensiva