Voltar às atualizações
New releaseAug 4, 2026

skill-scanner v2.0.13

Scanner de Segurança para Habilidades de Agentes

Compartilhar

Skill Scanner

License Python 3.10+ PyPI version CI Discord Cisco AI Defense AI Security Framework Ask DeepWiki

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

GuiaDescrição
Início RápidoComece em 5 minutos
ArquiteturaDesign do sistema e componentes
Taxonomia de AmeaçasTaxonomia completa de ameaças AITech com exemplos
Analisador LLMConfiguração e uso do LLM
Meta-AnalisadorFiltragem e priorização de falsos positivos
Analisador ComportamentalDetalhes da análise de fluxo de dados
Política de VarreduraPolíticas personalizadas, predefinições e guia de ajuste
Referência Rápida de PolíticaReferência compacta para seções e parâmetros da política
Criação de RegrasComo adicionar regras de assinatura, YARA e Python
GitHub ActionsWorkflow reutilizável para integração CI/CD
Referência da APIDocumentação da API REST
Guia de DesenvolvimentoContribuiçã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

AnalisadorMétodo de DetecçãoEscopoRequisitos
StaticPadrões YAML + YARATodos os arquivosNenhum
BytecodeVerificação de integridade de .pycBytecode PythonNenhum
PipelineAnálise de taint (contaminação) de comandosPipelines de shellNenhum
BehavioralAnálise de fluxo de dados por ASTArquivos PythonNenhum
LLMAnálise semânticaSKILL.md + scriptsChave de API
MetaFiltragem de falsos positivosTodas as descobertasChave de API
VirusTotalMalware baseado em hashArquivos bináriosChave de API
AI DefenseIA baseada em nuvemConteúdo de textoChave de API

Opções da CLI

OpçãoDescrição
--policyPolítica de varredura: nome de predefinição (strict, balanced, permissive) ou caminho para YAML personalizado
--use-behavioralAtiva o analisador comportamental (análise de fluxo de dados)
--use-llmAtiva o analisador LLM (requer chave de API)
--llm-providerProvedor de LLM para roteamento da CLI: anthropic ou openai
--llm-consensus-runs NExecuta a análise LLM N vezes e mantém as descobertas aprovadas por maioria
--llm-max-tokens NMáximo de tokens de saída para respostas do LLM (padrão: 8192)
--use-virustotalAtiva o scanner de binários do VirusTotal
--vt-api-key KEYFornece a chave de API do VirusTotal diretamente (opcional)
--vt-upload-filesEnvia binários desconhecidos para o VirusTotal (opcional)
--use-aidefenseAtiva o analisador Cisco AI Defense
--aidefense-api-url URLSubstitui a URL da API do AI Defense (opcional)
--use-triggerAtiva o analisador de especificidade de triggers (acionadores)
--enable-metaAtiva o meta-analisador para filtragem de falsos positivos
--verboseInclui impressões digitais de política por descoberta, metadados de co-ocorrência e mantém falsos positivos do meta-analisador
--formatSaí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
--detailedInclui descobertas detalhadas na saída Markdown
--compactSaída JSON compacta
--output PATHCaminho padrão do arquivo de saída (substituído por --output-<fmt>)
--fail-on-findingsSai com erro se HIGH/CRITICAL for encontrado (atalho para --fail-on-severity high)
--fail-on-severity LEVELSai com erro se existirem descobertas em LEVEL ou acima (critical, high, medium, low, info)
--custom-rules PATHUsa regras YARA personalizadas de um diretório
--taxonomy PATHCarrega um perfil de taxonomia personalizado (JSON/YAML) para esta execução
--threat-mapping PATHCarrega um perfil de mapeamento de ameaças personalizado do scanner (JSON) para esta execução
--lenientTolera 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 FILENAMENome 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
ComandoDescrição
(nenhum comando)Inicia o assistente interativo de varredura (quando executado em um terminal)
interactiveInicia o assistente interativo de varredura (explícito)
scanEscaneia um único diretório de skill
scan-allEscaneia múltiplas skills (com --recursive, --check-overlap)
generate-policyGera um YAML de política de varredura para personalização
configure-policyTUI interativa para criar/editar uma política de varredura personalizada (--input suportado)
list-analyzersMostra os analisadores disponíveis
validate-rulesValida 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


GitHubDiscordPyPI

Categorias