
skill-scanner v2.0.14
Scanner de Segurança para Habilidades de Agentes
Skill Scanner
Um scanner de segurança de melhor esforço para Skills de Agentes de IA 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-como-juiz e análise comportamental de fluxo de dados para maximizar a cobertura de detecção de ameaças prováveis, minimizando falsos positivos.
Importante: Este scanner fornece detecção de melhor esforço, não cobertura abrangente ou completa. Uma varredura que não retorna achados não garante que uma skill esteja livre de todas as ameaças. Consulte Escopo e Limitações abaixo.
Suporta formatos OpenAI Codex Skills e Cursor Agent Skills seguindo a especificação Agent Skills. Com --lenient, também varre formatos não padronizados, como .claude/commands/*.md do Claude Code e repositórios de skills em markdown simples.
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 de melhor esforço
- Filtragem de Falsos Positivos - Meta-analisador reduz significativamente o ruído preservando a capacidade de detecção
- Pronto para CI/CD - Saída SARIF para GitHub Code Scanning, workflow reutilizável de 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 varrer 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 conectar-se com a equipe.
Escopo e Limitações
O Skill Scanner é uma ferramenta de detecção. Ele identifica padrões de risco conhecidos e prováveis, mas não certifica segurança.
Principais limitações:
- Sem achados ≠ sem risco. Uma varredura que retorna "Sem achados" 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 pode 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 à 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 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 de falsos positivos e priorização |
| 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 controles de 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
# Usando uv (recomendado)
uv pip install cisco-ai-skill-scanner
# Usando pip
pip install cisco-ai-skill-scanner
Extras de Provedores de Nuvem
# Suporte a AWS Bedrock
pip install cisco-ai-skill-scanner[bedrock]
# Suporte a Google AI Studio / Gemini
pip install cisco-ai-skill-scanner[google]
# Suporte a Google Vertex AI
pip install cisco-ai-skill-scanner[vertex]
# Suporte a Azure OpenAI
pip install cisco-ai-skill-scanner[azure]
# Todos os provedores de nuvem
pip install cisco-ai-skill-scanner[all]
Início Rápido
Configuração de Ambiente (Opcional)
# Para analisador LLM e Meta-analisador
export SKILL_SCANNER_LLM_API_KEY="your_api_key"
export SKILL_SCANNER_LLM_MODEL="claude-3-5-sonnet-20241022"
# Opcional: disabled, minimal, low, medium, high, xhigh, ou max
export SKILL_SCANNER_LLM_REASONING_EFFORT="low"
# Para varredura binária VirusTotal
export VIRUSTOTAL_API_KEY="your_virustotal_api_key"
# Para 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 iniciar o assistente interativo:
skill-scanner
O assistente orienta você na seleção de alvo de varredura, analisadores, política e formato de saída, e então mostra o comando montado antes de executá-lo. Ótimo para aprender a CLI.
Uso da CLI
# Varre uma única skill (analisadores principais: estático + bytecode + pipeline)
skill-scanner scan /path/to/skill
# Varre com analisador comportamental (análise de fluxo de dados)
skill-scanner scan /path/to/skill --use-behavioral
# Varre com todos os engines
skill-scanner scan /path/to/skill --use-behavioral --use-llm --use-aidefense
# Varre com meta-analisador para filtragem de falsos positivos
skill-scanner scan /path/to/skill --use-llm --enable-meta
# Varre com analisador de gatilho para verificações de descrição vaga
skill-scanner scan /path/to/skill --use-trigger
# Executa o analisador LLM várias vezes e mantém achados com acordo majoritário
skill-scanner scan /path/to/skill --use-llm --llm-consensus-runs 3
# Varre múltiplas skills recursivamente
skill-scanner scan-all /path/to/skills --recursive --use-behavioral
# Varre múltiplas skills com detecção de sobreposição entre skills
skill-scanner scan-all /path/to/skills --recursive --check-overlap
# Varre um repositório GitHub (atalho owner/repo ou URL completa)
skill-scanner scan-repo owner/repo
skill-scanner scan-repo https://github.com/owner/repo --use-llm
# Modo leniente: tolera skills malformadas em vez de falhar
skill-scanner scan /path/to/skill --lenient
skill-scanner scan-all /path/to/skills --recursive --lenient
# Modo leniente com formatos de skill não padronizados (sem SKILL.md obrigatório)
skill-scanner scan .claude/commands/deploy --lenient
skill-scanner scan-all .claude/commands --recursive --lenient
# Usa um nome de arquivo de metadados personalizado em vez de SKILL.md
skill-scanner scan /path/to/skill --skill-file README.md
# CI/CD: Falha o build se ameaças forem encontradas
skill-scanner scan-all ./skills --fail-on-severity high --format sarif --output results.sarif
# Gera relatório HTML interativo com grupos de correlação de ataques
skill-scanner scan /path/to/skill --use-llm --enable-meta --format html --output report.html
# Usa regras YARA personalizadas
skill-scanner scan /path/to/skill --custom-rules /path/to/my-rules/
# Usa taxonomia personalizada + perfis de mapeamento de ameaças (JSON/YAML)
skill-scanner scan /path/to/skill --taxonomy /path/to/taxonomy.json --threat-mapping /path/to/threat_mapping.json
# Varredura de hash VirusTotal com uploads opcionais de arquivos desconhecidos
skill-scanner scan /path/to/skill --use-virustotal --vt-upload-files
# Usa uma predefinição de política de varredura (strict, balanced, permissive)
skill-scanner scan /path/to/skill --policy strict
# Usa um arquivo de política organizacional personalizado
skill-scanner scan /path/to/skill --policy my_org_policy.yaml
# Gera um arquivo de política para personalizar
skill-scanner generate-policy -o my_org_policy.yaml
# Configurador interativo de política (TUI)
skill-scanner configure-policy
O modo de consenso mantém um achado somente quando ele aparece em mais da metade das execuções configuradas. Quando esses votos discordam sobre a gravidade, a maior gravidade observada vence, independentemente da ordem das respostas. Execuções com falha e execuções bem-sucedidas que omitem o achado não votam, mas permanecem no denominador. Isso torna a seleção de gravidade estável para achados com acordo majoritário. Isso não torna uma amostra individual de LLM determinística, e campos descritivos de votos com gravidade igual, saída de execução única e achados não majoritários ainda podem variar entre varreduras.
Nota sobre provedores 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 (consulte documentação do Analisador LLM).
SDK Python
from skill_scanner import SkillScanner
from skill_scanner.core.analyzers import BehavioralAnalyzer
# Cria scanner com analisadores
scanner = SkillScanner(analyzers=[
BehavioralAnalyzer(),
])
# Varre uma skill
result = scanner.scan_skill("/path/to/skill")
print(f"Achados: {len(result.findings)}")
print(f"Gravidade máxima: {result.max_severity}")
# Nota: is_safe indica que nenhum achado HIGH/CRITICAL foi detectado.
# Isso não garante que a skill esteja livre de todo risco.
if not result.is_safe:
print("Problemas detectados -- revise os achados antes da implantação")
Analisadores de Segurança
| Analisador | Método de Detecção | Escopo | Requisitos |
|---|---|---|---|
| Estático | Padrões YAML + YARA | Todos os arquivos | Nenhum |
| Bytecode | Verificação de integridade .pyc | Bytecode Python | Nenhum |
| Pipeline | Análise de taint de comandos | Pipelines de shell | Nenhum |
| Comportamental | Análise de fluxo de dados AST | Arquivos Python | Nenhum |
| LLM | Análise semântica | SKILL.md + scripts | Chave de API |
| Meta | Filtragem de falsos positivos | Todos os achados | 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, mantém achados com acordo majoritário e retém sua maior gravidade observada |
--llm-max-tokens N | Máximo de tokens de saída para respostas do LLM (padrão: 8192) |
--llm-reasoning-effort LEVEL | Profundidade de raciocínio opcional (disabled, minimal, low, medium, high, xhigh ou max); não definido preserva o padrão do provedor |
--use-virustotal | Ativa o scanner binário VirusTotal |
--vt-api-key KEY | Fornece a chave de API do VirusTotal diretamente (opcional) |
--vt-upload-files | Envia binários desconhecidos ao 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 gatilho |
--enable-meta | Ativa o meta-analisador para filtragem de falsos positivos |
--verbose | Inclui impressões digitais de política por achado, 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 autocontido com grupos de correlação recolhíveis, trechos de código expansíveis e diagramas de fluxo de taint de pipeline |
--detailed | Inclui achados detalhados 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 achados em ou acima de LEVEL (critical, high, medium, low, info) |
--custom-rules PATH | Usa regras YARA personalizadas de um diretório |
--taxonomy PATH | Carrega perfil de taxonomia personalizado (JSON/YAML) para esta execução |
--threat-mapping PATH | Carrega perfil de mapeamento de ameaças do scanner personalizado (JSON) para esta execução |
--lenient | Tolera skills malformadas (coage campos inválidos, preenche padrões) em vez de falhar. Quando SKILL.md está ausente, recorre à varredura de arquivos .md no diretório |
--skill-file FILENAME | Nome de arquivo de metadados personalizado para usar em vez de SKILL.md (ex.: README.md) |
--check-overlap | (scan-all) Ativa verificações de sobreposição de descrição entre skills |
| Comando | Descrição |
|---|---|
| (sem comando) | Inicia o assistente interativo de varredura (quando executado em um terminal) |
interactive | Inicia o assistente interativo de varredura (explícito) |
scan | Varre um único diretório de skill |
scan-all | Varre múltiplas skills (com --recursive, --check-overlap) |
generate-policy | Gera um YAML de política de varredura para personalização |
configure-policy | TUI interativo para criar/editar uma política de varredura personalizada (--input suportado) |
list-analyzers | Mostra 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] Sem achados
Gravidade Máxima: NONE
Total de Achados: 0
Duração da Varredura: 0.15s
Nota: "Sem achados" significa que o scanner não detectou nenhum padrão de ameaça conhecido -- isso não é uma garantia de que a skill esteja livre de todo risco. Consulte Escopo e Limitações.
GitHub Actions
Varre 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. Consulte o guia completo para integração com LLM, configuração de segredos e configuração de proteção de branch.
Hook de Pre-commit
Varre 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 a tag de release mais recente
hooks:
- id: skill-scanner
Ou instale o hook integrado diretamente:
skill-scanner-pre-commit --install
O hook mapeia arquivos alterados para o SKILL.md mais próximo e varre cada skill
afetada uma vez. Durante um commit normal, ele lê o diff em staged. Em CI, compare duas
revisões para que nenhum índice staged seja necessário:
pre-commit run skill-scanner --from-ref "$BASE_SHA" --to-ref "$HEAD_SHA"
Ambas as revisões devem existir no checkout. Para varrer todas as skills configuradas, invoque o hook diretamente:
skill-scanner-pre-commit --scan-all
Alternativamente, configure args: [--scan-all] para o hook em
.pre-commit-config.yaml.
Contribuindo
Aceitamos contribuições! Consulte CONTRIBUTING.md para diretrizes.
Licença
Apache 2.0 - Consulte LICENSE para detalhes.
Copyright 2026 Cisco Systems, Inc. e suas afiliadas