
skill-scanner v2.0.13
Scanner de Segurança para Habilidades de Agentes
Skill Scanner
Um scanner de segurança de melhor esforço para AI Agent Skills que detecta injeção de prompt, exfiltração de dados e padrões de código malicioso. Combina detecção baseada em padrões (YAML + YARA), LLM-as-a-judge e análise comportamental de fluxo de dados para maximizar a cobertura de detecção de ameaças prováveis enquanto minimiza falsos positivos.
Importante: Este scanner fornece detecção de melhor esforço, sem cobertura abrangente ou completa. Uma varredura que não retorna nenhuma descoberta não garante que uma skill esteja livre de todas as ameaças. Veja Escopo e Limitações abaixo.
Suporta os formatos OpenAI Codex Skills e Cursor Agent Skills, seguindo a especificação Agent Skills. Com --lenient, também escaneia formatos não padronizados, como Claude Code .claude/commands/*.md e repositórios planos de skills em markdown.
Destaques
- Detecção Multi-Engine - Análise estática, fluxo de dados comportamental, análise semântica por LLM e varredura baseada em nuvem para cobertura em camadas e de melhor esforço
- Filtragem de Falsos Positivos - O meta-analisador reduz significativamente o ruído mantendo a capacidade de detecção
- Pronto para CI/CD - Saída SARIF para GitHub Code Scanning, workflow reutilizável do GitHub Actions, códigos de saída para falhas de build
- Hook de Pre-commit - Integração com o framework padrão pre-commit para escanear skills antes de cada commit
- Extensível - Arquitetura de plugins para analisadores personalizados
Junte-se ao Discord da Cisco AI para discutir, compartilhar feedback ou se conectar com a equipe.
Escopo e Limitações
O Skill Scanner é uma ferramenta de detecção. Ela identifica padrões de risco conhecidos e prováveis, mas não certifica segurança.
Principais limitações:
- Nenhuma descoberta ≠ nenhum risco. Uma varredura que retorna "No findings" indica que nenhum padrão de ameaça conhecido foi detectado. Isso não garante que uma skill seja segura, benigna ou livre de vulnerabilidades.
- A cobertura é inerentemente incompleta. O scanner combina detecção baseada em assinaturas, análise semântica por LLM, análise comportamental de fluxo de dados, serviços de nuvem opcionais e pacotes de regras configuráveis. Embora essa abordagem melhore a cobertura, nenhuma ferramenta automatizada é capaz de detectar todas as técnicas, especialmente ataques novos ou de dia zero.
- Falsos positivos e falsos negativos podem ocorrer. Modos de consenso e meta-análise reduzem o ruído, mas nenhuma configuração elimina todas as classificações incorretas. Ajuste a política de varredura de acordo com sua tolerância a risco.
- A revisão humana continua essencial. A varredura automatizada é um componente de uma estratégia de defesa em profundidade. Implantações de alto risco ou em produção devem combinar os resultados do scanner com revisão manual de código e/ou modelagem de ameaças.
Documentação
| Guia | Descrição |
|---|---|
| Início Rápido | Comece em 5 minutos |
| Arquitetura | Design do sistema e componentes |
| Taxonomia de Ameaças | Taxonomia completa de ameaças AITech com exemplos |
| Analisador LLM | Configuração e uso do LLM |
| Meta-Analisador | Filtragem e priorização de falsos positivos |
| Analisador Comportamental | Detalhes da análise de fluxo de dados |
| Política de Varredura | Políticas personalizadas, predefinições e guia de ajuste |
| Referência Rápida de Política | Referência compacta para seções e parâmetros da política |
| Criação de Regras | Como adicionar regras de assinatura, YARA e Python |
| GitHub Actions | Workflow reutilizável para integração CI/CD |
| Referência da API | Documentação da API REST |
| Guia de Desenvolvimento | Contribuição e configuração de desenvolvimento |
Instalação
Pré-requisitos: Python 3.10+ e uv (recomendado) ou pip
# Using uv (recommended)
uv pip install cisco-ai-skill-scanner
# Using pip
pip install cisco-ai-skill-scanner
Extras de Provedores de Nuvem
# 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]
Início Rápido
Configuração do Ambiente (Opcional)
# 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"
Assistente Interativo
Não sabe quais flags usar? Execute skill-scanner sem argumentos para abrir o assistente interativo:
skill-scanner
O assistente guia você pela seleção do alvo de varredura, analisadores, política e formato de saída; em seguida, mostra o comando montado antes de executá-lo. Ótimo para aprender a CLI.
Uso via 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 sobre o provedor de LLM: --llm-provider atualmente aceita anthropic ou openai. Para Bedrock, Vertex, Azure, Gemini e outros backends LiteLLM, defina strings de modelo e variáveis de ambiente específicas do provedor (veja a documentação do Analisador LLM).
SDK Python
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")
Analisadores de Segurança
| Analisador | Método de Detecção | Escopo | Requisitos |
|---|---|---|---|
| Static | Padrões YAML + YARA | Todos os arquivos | Nenhum |
| Bytecode | Verificação de integridade de .pyc | Bytecode Python | Nenhum |
| Pipeline | Análise de taint (contaminação) de comandos | Pipelines de shell | Nenhum |
| Behavioral | Análise de fluxo de dados por AST | Arquivos Python | Nenhum |
| LLM | Análise semântica | SKILL.md + scripts | Chave de API |
| Meta | Filtragem de falsos positivos | Todas as descobertas | Chave de API |
| VirusTotal | Malware baseado em hash | Arquivos binários | Chave de API |
| AI Defense | IA baseada em nuvem | Conteúdo de texto | Chave de API |
Opções da CLI
| Opção | Descrição |
|---|---|
--policy | Política de varredura: nome de predefinição (strict, balanced, permissive) ou caminho para YAML personalizado |
--use-behavioral | Ativa o analisador comportamental (análise de fluxo de dados) |
--use-llm | Ativa o analisador LLM (requer chave de API) |
--llm-provider | Provedor de LLM para roteamento da CLI: anthropic ou openai |
--llm-consensus-runs N | Executa a análise LLM N vezes e mantém as descobertas aprovadas por maioria |
--llm-max-tokens N | Máximo de tokens de saída para respostas do LLM (padrão: 8192) |
--use-virustotal | Ativa o scanner de binários do VirusTotal |
--vt-api-key KEY | Fornece a chave de API do VirusTotal diretamente (opcional) |
--vt-upload-files | Envia binários desconhecidos para o VirusTotal (opcional) |
--use-aidefense | Ativa o analisador Cisco AI Defense |
--aidefense-api-url URL | Substitui a URL da API do AI Defense (opcional) |
--use-trigger | Ativa o analisador de especificidade de triggers (acionadores) |
--enable-meta | Ativa o meta-analisador para filtragem de falsos positivos |
--verbose | Inclui impressões digitais de política por descoberta, metadados de co-ocorrência e mantém falsos positivos do meta-analisador |
--format | Saída: summary, json, markdown, table, sarif, html. O formato html produz um relatório interativo autônomo com grupos de correlação recolhíveis, trechos de código expansíveis e diagramas de fluxo de taint em pipelines |
--detailed | Inclui descobertas detalhadas na saída Markdown |
--compact | Saída JSON compacta |
--output PATH | Caminho padrão do arquivo de saída (substituído por --output-<fmt>) |
--fail-on-findings | Sai com erro se HIGH/CRITICAL for encontrado (atalho para --fail-on-severity high) |
--fail-on-severity LEVEL | Sai com erro se existirem descobertas em LEVEL ou acima (critical, high, medium, low, info) |
--custom-rules PATH | Usa regras YARA personalizadas de um diretório |
--taxonomy PATH | Carrega um perfil de taxonomia personalizado (JSON/YAML) para esta execução |
--threat-mapping PATH | Carrega um perfil de mapeamento de ameaças personalizado do scanner (JSON) para esta execução |
--lenient | Tolera skills malformadas (corrige campos inválidos, preenche padrões) em vez de falhar. Quando o SKILL.md está ausente, volta a escanear os arquivos .md do diretório |
--skill-file FILENAME | Nome de arquivo de metadados personalizado para usar no lugar de SKILL.md (ex.: README.md) |
--check-overlap | (scan-all) Ativa verificações de sobreposição de descrição entre skills |
| Comando | Descrição |
|---|---|
| (nenhum comando) | Inicia o assistente interativo de varredura (quando executado em um terminal) |
interactive | Inicia o assistente interativo de varredura (explícito) |
scan | Escaneia um único diretório de skill |
scan-all | Escaneia múltiplas skills (com --recursive, --check-overlap) |
generate-policy | Gera um YAML de política de varredura para personalização |
configure-policy | TUI interativa para criar/editar uma política de varredura personalizada (--input suportado) |
list-analyzers | Mostra os analisadores disponíveis |
validate-rules | Valida assinaturas de regras (--rules-file suportado) |
Exemplo de Saída
$ 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: "No findings" significa que o scanner não detectou nenhum padrão de ameaça conhecido -- não é uma garantia de que a skill esteja livre de todo risco. Veja Escopo e Limitações.
GitHub Actions
Escaneie skills automaticamente a cada push ou PR usando o workflow reutilizável:
# .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
Os resultados aparecem como anotações inline em PRs via GitHub Code Scanning. Veja o guia completo para integração com LLM, configuração de segredos e configuração de proteção de branch.
Hook de Pre-commit
Escaneie skills antes de cada commit usando o 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
Ou instale o hook embutido diretamente:
skill-scanner-pre-commit install
O hook detecta automaticamente quais diretórios de skills têm alterações staged e escaneia apenas esses, mantendo os commits rápidos. Use --all para escanear tudo.
Contribuição
Aceitamos contribuições! Consulte CONTRIBUTING.md para as diretrizes.
Licença
Apache 2.0 - Consulte LICENSE para detalhes.
Copyright 2026 Cisco Systems, Inc. e suas afiliadas