
Scanner di sicurezza per le abilità degli agenti
Uno scanner di sicurezza che opera al meglio delle possibilità per le Skill di Agenti AI, in grado di rilevare prompt injection, data exfiltration e pattern di codice dannoso. Combina rilevamento basato su pattern (YAML + YARA), LLM-as-a-judge e analisi comportamentale del flusso di dati per massimizzare la copertura di rilevamento delle minacce probabili minimizzando i falsi positivi.
Importante: Questo scanner fornisce un rilevamento al meglio delle possibilità, non una copertura completa o esaustiva. Una scansione che non restituisce alcun riscontro non garantisce che una skill sia priva di tutte le minacce. Vedi Ambito e Limitazioni di seguito.
Supporta i formati OpenAI Codex Skills e Cursor Agent Skills seguendo la specifica Agent Skills. Con --lenient, scansiona anche formati non standard come .claude/commands/*.md di Claude Code e repository di skill in markdown flat.
Unisciti al Discord Cisco AI per discutere, condividere feedback o contattare il team.
Skill Scanner è uno strumento di rilevamento. Identifica pattern di rischio noti e probabili, ma non certifica la sicurezza.
Limitazioni principali:
Prerequisiti: Python 3.10+ e uv (consigliato) o pip
# Using uv (recommended)
uv pip install cisco-ai-skill-scanner
# Using pip
pip install cisco-ai-skill-scanner
# AWS Bedrock support
pip install cisco-ai-skill-scanner[bedrock]
# Google AI Studio / Gemini support
pip install cisco-ai-skill-scanner[google]
# Google Vertex AI support
pip install cisco-ai-skill-scanner[vertex]
# Azure OpenAI support
pip install cisco-ai-skill-scanner[azure]
# All cloud providers
pip install cisco-ai-skill-scanner[all]
# For LLM analyzer and Meta-analyzer
export SKILL_SCANNER_LLM_API_KEY="your_api_key"
export SKILL_SCANNER_LLM_MODEL="claude-3-5-sonnet-20241022"
# For VirusTotal binary scanning
export VIRUSTOTAL_API_KEY="your_virustotal_api_key"
# For Cisco AI Defense
export AI_DEFENSE_API_KEY="your_aidefense_api_key"
Non sei sicuro di quali flag usare? Esegui skill-scanner senza argomenti per avviare la procedura guidata interattiva:
skill-scanner
La procedura guidata ti accompagna nella selezione di un target di scansione, analizzatori, politica e formato di output, quindi mostra il comando assemblato prima di eseguirlo. Ottima per imparare la CLI.
# Scan a single skill (core analyzers: static + bytecode + pipeline)
skill-scanner scan /path/to/skill
# Scan with behavioral analyzer (dataflow analysis)
skill-scanner scan /path/to/skill --use-behavioral
# Scan with all engines
skill-scanner scan /path/to/skill --use-behavioral --use-llm --use-aidefense
# Scan with meta-analyzer for false positive filtering
skill-scanner scan /path/to/skill --use-llm --enable-meta
# Scan with trigger analyzer for vague description checks
skill-scanner scan /path/to/skill --use-trigger
# Run LLM analyzer multiple times and keep majority-agreed findings
skill-scanner scan /path/to/skill --use-llm --llm-consensus-runs 3
# Scan multiple skills recursively
skill-scanner scan-all /path/to/skills --recursive --use-behavioral
# Scan multiple skills with cross-skill overlap detection
skill-scanner scan-all /path/to/skills --recursive --check-overlap
# Scan a GitHub repository (owner/repo shorthand or full URL)
skill-scanner scan-repo owner/repo
skill-scanner scan-repo https://github.com/owner/repo --use-llm
# Lenient mode: tolerate malformed skills instead of failing
skill-scanner scan /path/to/skill --lenient
skill-scanner scan-all /path/to/skills --recursive --lenient
# Lenient mode with non-standard skill formats (no SKILL.md required)
skill-scanner scan .claude/commands/deploy --lenient
skill-scanner scan-all .claude/commands --recursive --lenient
# Use a custom metadata filename instead of SKILL.md
skill-scanner scan /path/to/skill --skill-file README.md
# CI/CD: Fail build if threats found
skill-scanner scan-all ./skills --fail-on-severity high --format sarif --output results.sarif
# Generate interactive HTML report with attack correlation groups
skill-scanner scan /path/to/skill --use-llm --enable-meta --format html --output report.html
# Use custom YARA rules
skill-scanner scan /path/to/skill --custom-rules /path/to/my-rules/
# Use custom taxonomy + threat mapping profiles (JSON/YAML)
skill-scanner scan /path/to/skill --taxonomy /path/to/taxonomy.json --threat-mapping /path/to/threat_mapping.json
# VirusTotal hash scan with optional unknown-file uploads
skill-scanner scan /path/to/skill --use-virustotal --vt-upload-files
# Use a scan policy preset (strict, balanced, permissive)
skill-scanner scan /path/to/skill --policy strict
# Use a custom org policy file
skill-scanner scan /path/to/skill --policy my_org_policy.yaml
# Generate a policy file to customise
skill-scanner generate-policy -o my_org_policy.yaml
# Interactive policy configurator (TUI)
skill-scanner configure-policy
Nota sul provider LLM: --llm-provider attualmente accetta anthropic o openai. Per i backend Bedrock, Vertex, Azure, Gemini e altri LiteLLM, imposta le stringhe del modello specifiche del provider e le variabili d'ambiente (vedi documentazione Analizzatore LLM).
from skill_scanner import SkillScanner
from skill_scanner.core.analyzers import BehavioralAnalyzer
# Create scanner with analyzers
scanner = SkillScanner(analyzers=[
BehavioralAnalyzer(),
])
# Scan a skill
result = scanner.scan_skill("/path/to/skill")
print(f"Findings: {len(result.findings)}")
print(f"Max severity: {result.max_severity}")
# Note: is_safe indicates no HIGH/CRITICAL findings were detected.
# It does not guarantee the skill is free of all risk.
if not result.is_safe:
print("Issues detected -- review findings before deployment")
$ skill-scanner scan ./my-skill --use-behavioral
============================================================
Skill: my-skill
============================================================
Status: [OK] No findings
Max Severity: NONE
Total Findings: 0
Scan Duration: 0.15s
Nota: "Nessun riscontro" significa che lo scanner non ha rilevato alcun pattern di minaccia noto -- non è una garanzia che la skill sia priva di tutti i rischi. Vedi Ambito e Limitazioni.
Scansiona le skill automaticamente ad ogni push o PR utilizzando il flusso di lavoro riutilizzabile:
# .github/workflows/scan-skills.yml
name: Scan Skills
on:
pull_request:
paths: [".cursor/skills/**"]
jobs:
scan:
uses: cisco-ai-defense/skill-scanner/.github/workflows/scan-skills.yml@main
with:
skill_path: .cursor/skills
permissions:
security-events: write
contents: read
I risultati appaiono come annotazioni inline nelle PR tramite GitHub Code Scanning. Vedi la guida completa per l'integrazione LLM, la configurazione dei segreti e la configurazione della protezione dei rami.
Scansiona le skill prima di ogni commit utilizzando il framework pre-commit:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/cisco-ai-defense/skill-scanner
rev: v1.0.0 # use the latest release tag
hooks:
- id: skill-scanner
Oppure installa direttamente l'hook integrato:
skill-scanner-pre-commit install
L'hook rileva automaticamente quali directory di skill hanno modifiche in stage e scansiona solo quelle, mantenendo i tempi di commit veloci. Usa --all per scansionare tutto.
Accogliamo con piacere i contributi! Consulta CONTRIBUTING.md per le linee guida.
Apache 2.0 - Vedi LICENSE per i dettagli.
Copyright 2026 Cisco Systems, Inc. e affiliate
| Guida | Descrizione |
|---|
| Guida Rapida | Inizia in 5 minuti |
| Architettura | Progettazione del sistema e componenti |
| Tassonomia delle Minacce | Tassonomia completa delle minacce AITech con esempi |
| Analizzatore LLM | Configurazione e utilizzo LLM |
| Meta-Analizzatore | Filtraggio dei falsi positivi e prioritizzazione |
| Analizzatore Comportamentale | Dettagli dell'analisi del flusso di dati |
| Politica di Scansione | Politiche personalizzate, preimpostazioni e guida alla messa a punto |
| Riferimento Rapido alla Politica | Riferimento compatto per sezioni e parametri della politica |
| Creazione di Regole | Come aggiungere regole di firma, YARA e Python |
| GitHub Actions | Flusso di lavoro riutilizzabile per l'integrazione CI/CD |
| Riferimento API | Documentazione API REST |
| Guida allo Sviluppo | Configurazione per contribuire e sviluppare |
| Analizzatore | Metodo di Rilevamento | Ambito | Requisiti |
|---|
| Statico | Pattern YAML + YARA | Tutti i file | Nessuno |
| Bytecode | Verifica dell'integrità .pyc | Bytecode Python | Nessuno |
| Pipeline | Analisi della contaminazione dei comandi | Pipeline shell | Nessuno |
| Comportamentale | Analisi del flusso di dati AST | File Python | Nessuno |
| LLM | Analisi semantica | SKILL.md + script | Chiave API |
| Meta | Filtraggio dei falsi positivi | Tutti i risultati | Chiave API |
| VirusTotal | Malware basato su hash | File binari | Chiave API |
| AI Defense | AI basata su cloud | Contenuto testuale | Chiave API |
| Opzione | Descrizione |
|---|
--policy | Politica di scansione: nome preimpostato (strict, balanced, permissive) o percorso verso YAML personalizzato |
--use-behavioral | Abilita analizzatore comportamentale (analisi del flusso di dati) |
--use-llm | Abilita analizzatore LLM (richiede chiave API) |
--llm-provider | Provider LLM per il routing CLI: anthropic o openai |
--llm-consensus-runs N | Esegui l'analisi LLM N volte e mantieni i risultati concordati a maggioranza |
--llm-max-tokens N | Numero massimo di token di output per le risposte LLM (default: 8192) |
--use-virustotal | Abilita scanner binari VirusTotal |
--vt-api-key KEY | Fornisci direttamente la chiave API VirusTotal (opzionale) |
--vt-upload-files | Carica i binari sconosciuti su VirusTotal (opzionale) |
--use-aidefense | Abilita analizzatore Cisco AI Defense |
--aidefense-api-url URL | Sostituisci l'URL dell'API AI Defense (opzionale) |
--use-trigger | Abilita analizzatore di specificità dei trigger |
--enable-meta | Abilita meta-analizzatore per il filtraggio dei falsi positivi |
--verbose | Includi impronte digitali della politica per risultato, metadati di co-occorrenza e mantieni i falsi positivi del meta-analizzatore |
--format | Output: summary, json, markdown, table, sarif, html. Il formato html produce un report interattivo autonomo con gruppi di correlazione collassabili, snippet di codice espandibili e diagrammi del flusso di contaminazione della pipeline. |
--detailed | Includi risultati dettagliati nell'output Markdown |
--compact | Output JSON compatto |
--output PATH | Percorso del file di output predefinito (sostituito da --output-<fmt>) |
--fail-on-findings | Esci con errore se vengono trovati HIGH/CRITICAL (abbreviazione per --fail-on-severity high) |
--fail-on-severity LEVEL | Esci con errore se esistono risultati a livello LEVEL o superiore (critical, high, medium, low, info) |
--custom-rules PATH | Utilizza regole YARA personalizzate da una directory |
--taxonomy PATH | Carica un profilo di tassonomia personalizzato (JSON/YAML) per questa esecuzione |
--threat-mapping PATH | Carica un profilo di mappatura delle minacce dello scanner personalizzato (JSON) per questa esecuzione |
--lenient | Tollera skill malformate (correggi campi errati, imposta valori predefiniti) invece di fallire. Quando SKILL.md è assente, torna a scansionare i file .md nella directory. |
--skill-file FILENAME | Nome file di metadati personalizzato da utilizzare al posto di SKILL.md (es. README.md) |
--check-overlap | (scan-all) Abilita controlli di sovrapposizione delle descrizioni tra skill |
| Comando | Descrizione |
|---|
| (nessun comando) | Avvia la procedura guidata interattiva (se eseguito in un terminale) |
interactive | Avvia la procedura guidata interattiva (esplicito) |
scan | Scansiona una singola directory di skill |
scan-all | Scansiona più skill (con --recursive, --check-overlap) |
generate-policy | Genera un YAML di politica di scansione per la personalizzazione |
configure-policy | TUI interattivo per creare/modificare una politica di scansione personalizzata (supporta --input) |
list-analyzers | Mostra gli analizzatori disponibili |
validate-rules | Valida le firme delle regole (supporta --rules-file) |