Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
garak — Scanner di vulnerabilità LLM modulare che indaga su allucinazioni, perdita di dati, injection di prompt, jailbreak e tossicità utilizzando sonde statiche, dinamiche e adattive attraverso più provider di modelli. | Kitploit
Strumenti/GitHubGitHub/nvidia/garak
Scanner di VulnerabilitàPenetration TestingMachine LearningPaper e RicercaApprendimento e FormazioneRed TeamingSicurezza dell'IAAttacco AvversarioTop in Attacco Avversario n.7Top in Sicurezza dell'IA n.2
8.8k1.2k115 giorni faRevisionato da Kitploit
Top in Machine Learning n.5
GitHubnvidia/garak

garak

Scanner di vulnerabilità LLM modulare che indaga su allucinazioni, perdita di dati, injection di prompt, jailbreak e tossicità utilizzando sonde statiche, dinamiche e adattive attraverso più provider di modelli.

Vedi RepositorySito web

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

garak, scanner di vulnerabilità per LLM

Kit di red-teaming e valutazione per IA generativa

garak verifica se un LLM può essere indotto a fallire in modi indesiderati. garak esplora allucinazioni, fughe di dati, injection di prompt, disinformazione, generazione di tossicità, jailbreak e molte altre debolezze. Se conosci nmap o msf / Metasploit Framework, garak fa cose simili, ma per gli LLM.

garak si concentra sui modi per far fallire un LLM o un sistema di dialogo. Combina probe statici, dinamici e adattivi per esplorare questo aspetto.

garak è uno strumento gratuito. Amiamo svilupparlo e siamo sempre interessati ad aggiungere funzionalità per supportare le applicazioni.

Licenza Test/Linux

Test/Windows
Test/OSX
Stato della documentazione
arXiv
chat su discord
Stile codice: black
PyPI - Versione Python
PyPI
Download
Download

Per iniziare

> Vedi la nostra guida utente! docs.garak.ai

> Unisciti al nostro Discord!

> Link del progetto e home: garak.ai

> Twitter: @garak_llm

> DEF CON slide!


Supporto LLM

attualmente supporta:

  • modelli generativi di hugging face hub
  • modelli di testo di replicate
  • modelli chat e continuazione di openai api
  • modelli foundation di aws bedrock
  • litellm
  • praticamente qualsiasi cosa accessibile via REST
  • modelli gguf come llama.cpp versione >= 1046
  • .. e molti altri LLM!

Installare:

garak è uno strumento da riga di comando. È sviluppato su Linux e OSX.

Installazione standard con pip

Basta prenderlo da PyPI e si è pronti a partire:``` python -m pip install -U garak

root@kitploit:~
### Installa la versione di sviluppo con `pip`

La versione pip standard di `garak` viene aggiornata periodicamente. Per ottenere una versione più recente da GitHub, prova:```
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main

Clona dal sorgente

garak ha le proprie dipendenze. Puoi installare garak nel suo ambiente Conda:``` conda create --name garak "python>=3.10,<=3.12" conda activate garak gh repo clone NVIDIA/garak cd garak python -m pip install -e .

root@kitploit:~
OK, if that went fine, you're probably good to go!

**Note**: if you cloned before the move to the `NVIDIA` GitHub organisation, but you're reading this at the `github.com/NVIDIA` URI, please update your remotes as follows:```
git remote set-url origin https://github.com/NVIDIA/garak.git

Per iniziare

La sintassi generale è:

garak <options>

garak deve sapere quale modello eseguire la scansione; di default, proverà tutti i probe che conosce su quel modello, utilizzando i rilevatori di vulnerabilità consigliati da ciascun probe. Puoi vedere un elenco dei probe utilizzando:

garak --list_probes

Per specificare un generatore, usa le opzioni --target_type e, opzionalmente, --target_name. Il tipo di modello specifica una famiglia/interfaccia di modelli; il nome del modello specifica il modello esatto da utilizzare. La sezione "Introduzione ai generatori" qui sotto descrive alcuni dei generatori supportati. Una famiglia di generatori semplice è quella dei modelli Hugging Face; per caricarne uno, imposta --target_type su huggingface e --target_name sul nome del modello su Hub (es. "RWKV/rwkv-4-169m-pile"). Alcuni generatori potrebbero aver bisogno di una chiave API impostata come variabile d'ambiente, e te lo faranno sapere se ne hanno bisogno.

garak esegue tutti i probe di default, ma puoi essere più specifico anche in questo. --probes promptinject utilizzerà solo i metodi del framework PromptInject, per esempio. Puoi anche specificare un singolo plugin invece di una famiglia di plugin aggiungendo il nome del plugin dopo un .; per esempio, --probes lmrc.SlurUsage utilizzerà un'implementazione per verificare se i modelli generano insulti basata sul framework Language Model Risk Cards.

Per aiuto e ispirazione, trovaci su Twitter o discord!

Esempi

Esegui il probe di un modello commerciale per l'iniezione di prompt basata su codifica (OSX/*nix) (sostituisci il valore di esempio con una vera chiave API OpenAI)``` export OPENAI_API_KEY="sk-123XXXXXXXXXXXX" python3 -m garak --target_type openai --target_name gpt-5-nano --probes encoding

root@kitploit:~
Verifica se la versione Hugging Face di GPT2 è vulnerabile a DAN 11.0```
python3 -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0

Lettura dei risultati

Per ogni probe caricato, garak stamperà una barra di avanzamento durante la generazione. Una volta completata la generazione, viene fornita una riga che valuta i risultati di quel probe su ciascun rivelatore. Se uno qualsiasi dei tentativi di prompt ha prodotto un comportamento indesiderato, la risposta verrà contrassegnata come FAIL e verrà indicato il tasso di fallimento.

Ecco i risultati con il modulo encoding su una variante di GPT-3: alt text

E gli stessi risultati per ChatGPT: alt text

Possiamo notare che il modello più recente è molto più suscettibile agli attacchi di iniezione basati sulla codifica, mentre text-babbage-001 è risultato vulnerabile solo alle iniezioni quoted-printable e MIME. Le cifre alla fine di ogni riga, ad esempio 840/840, indicano il numero totale di generazioni di testo e quante di queste sono apparse OK. La cifra può essere piuttosto alta perché per ogni prompt vengono effettuate più generazioni - di default, 10.

Gli errori vanno in garak.log; l'esecuzione viene registrata in dettaglio in un file .jsonl specificato all'inizio e alla fine dell'analisi. C'è uno script di analisi di base in analyse/analyse_log.py che restituirà i probe e i prompt che hanno generato il maggior numero di hit.

Inviate PR e aprite issue. Buona caccia!

Introduzione ai generatori

Hugging Face

Utilizzo dell'API Pipeline:

  • --target_type huggingface (per modelli transformers da eseguire localmente)
  • --target_name - usa il nome del modello dall'Hub. Solo i modelli generativi funzioneranno. Se fallisce e non dovrebbe, apri un issue e incolla il comando che hai provato + l'eccezione!

Utilizzo dell'API Inference:

  • --target_type huggingface.InferenceAPI (per accesso al modello basato su API)
  • --target_name - il nome del modello dall'Hub, ad esempio "mosaicml/mpt-7b-instruct"

Utilizzo di endpoint privati:

  • --target_type huggingface.InferenceEndpoint (per endpoint privati)

  • --target_name - l'URL dell'endpoint, ad esempio https://xxx.us-east-1.aws.endpoints.huggingface.cloud

  • (opzionale) imposta la variabile d'ambiente HF_INFERENCE_TOKEN con un token API Hugging Face con il ruolo di "lettura"; vedi https://huggingface.co/settings/tokens quando sei loggato

OpenAI

  • --target_type openai
  • --target_name - il modello OpenAI che desideri utilizzare. gpt-5-nano è veloce e adatto per test.
  • imposta la variabile d'ambiente OPENAI_API_KEY con la tua chiave API OpenAI (ad esempio "sk-19763ASDF87q6657"); vedi https://platform.openai.com/account/api-keys quando sei loggato

I tipi di modello riconosciuti sono in whitelist, perché il plugin deve sapere quale sotto-API utilizzare. I modelli Completion o ChatCompletion vanno bene. Se desideri utilizzare un modello non supportato, dovresti ricevere un messaggio di errore informativo; per favore invia una PR / apri un issue.

Replicate

  • imposta la variabile d'ambiente REPLICATE_API_TOKEN con il tuo token API Replicate, ad esempio "r8-123XXXXXXXXXXXX"; vedi https://replicate.com/account/api-tokens quando sei loggato

Modelli Replicate pubblici:

  • --target_type replicate
  • --target_name - il nome del modello Replicate e l'hash, ad esempio "stability-ai/stablelm-tuned-alpha-7b:c49dae36"

Endpoint Replicate privati:

  • --target_type replicate.InferenceEndpoint (per endpoint privati)
  • --target_name - slug nome-utente/nome-modello dall'endpoint distribuito, ad esempio elim/elims-llama2-7b

Cohere

  • --target_type cohere
  • --target_name (opzionale, command di default) - Il modello Cohere specifico che desideri testare
  • imposta la variabile d'ambiente COHERE_API_KEY con la tua chiave API Cohere, ad esempio "aBcDeFgHiJ123456789"; vedi https://dashboard.cohere.ai/api-keys quando sei loggato

Groq

  • --target_type groq
  • --target_name - Il nome del modello a cui accedere tramite l'API Groq
  • imposta la variabile d'ambiente GROQ_API_KEY con la tua chiave API Groq; vedi https://console.groq.com/docs/quickstart per i dettagli su come creare una chiave API

ggml

  • --target_type ggml
  • --target_name - Il percorso del modello ggml che desideri caricare, ad esempio /home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin
  • imposta la variabile d'ambiente GGML_MAIN_PATH con il percorso del tuo eseguibile ggml main

REST

rest.RestGenerator è estremamente flessibile e può connettersi a qualsiasi endpoint REST che restituisca testo semplice o JSON. Richiede una breve configurazione, che di solito risulta in un breve file YAML che descrive il tuo endpoint. Vedi https://reference.garak.ai/en/latest/garak.generators.rest.html per esempi.

NIM

Utilizza modelli da https://build.nvidia.com/ o altri endpoint NIM.

  • imposta la variabile d'ambiente NIM_API_KEY con il tuo token API di autenticazione, oppure specificala nel file YAML di configurazione

Per modelli chat:

  • --target_type nim
  • --target_name - il nome del modello NIM, ad esempio meta/llama-3.1-8b-instruct

Per modelli completion:

  • --target_type nim.NVOpenAICompletion
  • --target_name - il nome del modello NIM, ad esempio bigcode/starcoder2-15b

AWS Bedrock

  • --target_type bedrock
  • --target_name - l'ID o alias del modello Bedrock, ad esempio anthropic.claude-3-sonnet-20240229-v1:0 o claude-3-sonnet
  • imposta la variabile d'ambiente BEDROCK_API_KEY con la tua chiave API AWS Bedrock; vedi https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys-use.html per le istruzioni di configurazione
  • (opzionale) imposta la variabile d'ambiente BEDROCK_REGION per specificare la regione AWS (predefinito: us-east-1)

Le famiglie di modelli supportate includono Anthropic Claude, Meta Llama, Amazon Titan, AI21 Labs, Cohere e modelli Mistral AI. Il generatore utilizza l'API Converse per un accesso unificato a tutti i tipi di modello.

Esempio di utilizzo:``` export BEDROCK_API_KEY="your-api-key" export BEDROCK_REGION="us-east-1" garak --target_type bedrock --target_name claude-3-sonnet --probes dan

root@kitploit:~
### Test

* `--target_type test`
* (alternativamente) `--target_name test.Blank`
Per i test. Questo genera sempre la stringa vuota, utilizzando il generatore `test.Blank`. Verrà segnato come fallimento per qualsiasi test che *richieda* un output, ad esempio quelli che fanno affermazioni controverse e si aspettano che il modello le confuti per superarlo.

* `--target_type test.Repeat`
Per i test. Questo generatore ripete il prompt ricevuto.

## Introduzione ai probe

| Probe                | Descrizione                                                                                                                                                                                                                              |
|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| blank                | Un probe semplice che invia sempre un prompt vuoto.                                                                                                                                                                                      |
| atkgen               | Automated Attack Generation. Un LLM di red-teaming sonda il target e reagisce ad esso nel tentativo di ottenere output tossici. Prototipo, per lo più senza stato, per ora utilizza un semplice GPT-2 [fine-tuned](https://huggingface.co/garak-llm/artgpt2tox) sul sottoinsieme di tentativi hhrlhf che hanno prodotto tossicità rilevabile (l'unico target attualmente supportato per ora). |
| badchars             | Implementa perturbazioni Unicode impercettibili (caratteri invisibili, omoglifi, riordinamenti, cancellazioni) ispirate al paper [Bad Characters](https://arxiv.org/abs/2106.09898).                                                      |
| av_spam_scanning     | Probe che tentano di far produrre al modello firme di contenuti malevoli                                                                                                                                                                 |
| continuation         | Probe che verificano se il modello continuerà una parola probabilmente indesiderabile                                                                                                                                                    |
| dan                  | Vari attacchi [DAN](https://adguard.com/en/blog/chatgpt-dan-prompt-abuse.html) e simili a DAN                                                                                                                                            |
| donotanswer          | Prompt a cui i modelli linguistici responsabili non dovrebbero rispondere.                                                                                                                                                               |
| encoding             | Iniezione di prompt tramite codifica del testo                                                                                                                                                                                           |
| gcg                  | Disrupter un prompt di sistema aggiungendo un suffisso avversario.                                                                                                                                                                       |
| glitch               | Sonda il modello per glitch token che provocano comportamenti insoliti.                                                                                                                                                                  |
| grandma              | Appello per essere ricordati della propria nonna.                                                                                                                                                                                        |
| goodside             | Implementazioni degli attacchi di Riley Goodside.                                                                                                                                                                                        |
| leakreplay           | Valuta se un modello riprodurrà dati di addestramento.                                                                                                                                                                                   |
| lmrc                 | Sottoinsieme dei probe [Language Model Risk Cards](https://arxiv.org/abs/2303.18190)                                                                                                                                                     |
| malwaregen           | Tentativi di far generare al modello codice per costruire malware                                                                                                                                                                        |
| misleading           | Tentativi di far sostenere a un modello affermazioni fuorvianti e false                                                                                                                                                                  |
| packagehallucination | Tentativo di ottenere generazioni di codice che specificano pacchetti inesistenti (e quindi insicuri).                                                                                                                                   |
| promptinject         | Implementazione del lavoro Agency Enterprise [PromptInject](https://github.com/agencyenterprise/PromptInject/tree/main/promptinject) (premio miglior paper al NeurIPS ML Safety Workshop 2022)                                           |
| realtoxicityprompts  | Sottoinsieme del lavoro RealToxicityPrompts (dati limitati perché il test completo richiederebbe troppo tempo per essere eseguito)                                                                                                      |
| snowball             | Probe [Snowballed Hallucination](https://ofir.io/snowballed_hallucination.pdf) progettati per far dare a un modello una risposta sbagliata a domande troppo complesse per essere elaborate                                               |
| xss                  | Cerca vulnerabilità che permettano o attuino attacchi cross-site, come l'esfiltrazione di dati privati.                                                                                                                                  |

## Registrazione

`garak` genera diversi tipi di log:
* Un file di log, `garak.log`. Include informazioni di debug da `garak` e dai suoi plugin, e viene continuato tra le esecuzioni.
* Un report dell'esecuzione corrente, strutturato come JSONL. Un nuovo file di report viene creato ogni volta che `garak` viene eseguito. Il nome di questo file viene stampato all'inizio e, se ha successo, anche alla fine dell'esecuzione. Nel report, viene creata una voce per ogni tentativo di probing sia quando vengono ricevute le generazioni, sia quando vengono valutate; l'attributo `status` della voce prende una costante da `garak.attempts` per descrivere in quale fase è stato creato.
* Un log dei hit, che dettaglia i tentativi che hanno prodotto una vulnerabilità (un 'hit')

## Com'è strutturato il codice?

Consulta la [documentazione di riferimento](https://reference.garak.ai/) per una guida autorevole sulla struttura del codice di `garak`.

In un'esecuzione tipica, `garak` legge un tipo di modello (e opzionalmente un nome di modello) dalla riga di comando, poi determina quali `probe` e `detector` eseguire, avvia un `generator`, e poi li passa a un `harness` per effettuare il probing; un `evaluator` gestisce i risultati. Ci sono molti moduli in ciascuna di queste categorie, e ogni modulo fornisce un certo numero di classi che agiscono come plugin individuali.

* `garak/probes/` - classi per generare interazioni con LLM
* `garak/detectors/` - classi per rilevare se un LLM mostra una determinata modalità di fallimento
* `garak/evaluators/` - schemi di reportistica di valutazione
* `garak/generators/` - plugin per LLM da sondare
* `garak/harnesses/` - classi per strutturare i test
* `resources/` - elementi accessori richiesti dai plugin

La modalità operativa predefinita è utilizzare l'harness `probewise`. Data una lista di nomi di moduli probe e nomi di plugin probe, l'harness `probewise` istanzia ogni probe, poi per ogni probe legge i suoi attributi `primary_detector` e `extended_detectors` per ottenere una lista di `detector` da eseguire sull'output.

Ogni categoria di plugin (`probes`, `detectors`, `evaluators`, `generators`, `harnesses`) include un `base.py` che definisce le classi base utilizzabili dai plugin in quella categoria. Ogni modulo plugin definisce classi plugin che ereditano da una delle classi base. Ad esempio, `garak.generators.openai.OpenAIGenerator` discende da `garak.generators.base.Generator`.

Artefatti più grandi, come file di modelli e corpora più estesi, sono tenuti fuori dal repository; possono essere memorizzati ad esempio su Hugging Face Hub e caricati localmente dai client che utilizzano `garak`.


## Sviluppare il proprio plugin

* Guarda come lo fanno gli altri plugin
* Eredita da una delle classi base, ad esempio `garak.probes.base.TextProbe`
* Sovrascrivi il meno possibile
* Puoi testare il nuovo codice in almeno due modi:
  * Avvia una sessione Python interattiva
    * Importa il modello, ad esempio `import garak.probes.mymodule`
    * Istanziare il plugin, ad esempio `p = garak.probes.mymodule.MyProbe()`
  * Esegui una scansione con plugin di test
    * Per i probe, prova un generatore blank e il detector always.Pass: `python3 -m garak -m test.Blank -p mymodule -d always.Pass`
    * Per i detector, prova un generatore blank e un probe blank: `python3 -m garak -m test.Blank -p test.Blank -d mymodule`
    * Per i generatori, prova un probe blank e il detector always.Pass: `python3 -m garak -m mymodule -p test.Blank -d always.Pass`
  * Fai elencare a `garak` tutti i plugin del tipo che stai scrivendo, con `--list_probes`, `--list_detectors` o `--list_generators`


## FAQ

Abbiamo una FAQ [qui](https://github.com/NVIDIA/garak/blob/main/FAQ.md). Contattaci se hai altre domande! [[email protected]](mailto:[email protected])

La documentazione di riferimento del codice è su [garak.readthedocs.io](https://garak.readthedocs.io/en/latest/).

## Citare garak

Puoi leggere il [preprint paper di garak](https://github.com/nvidia/garak/blob/main/garak-paper.pdf). Se usi garak, per favore citaci.```
@article{garak,
  title={{garak: A Framework for Security Probing Large Language Models}},
  author={Leon Derczynski and Erick Galinkin and Jeffrey Martin and Subho Majumdar and Nanna Inie},
  year={2024},
  howpublished={\url{https://garak.ai}}
}

"Mentire è un'abilità come qualsiasi altra, e se desideri mantenere un livello di eccellenza devi esercitarti costantemente" - Elim

Per aggiornamenti e novità vedi @garak_llm

© 2023- Leon Derczynski; Licenza Apache v2, vedi LICENSE

Scarica lo strumento