업데이트로 돌아가기
New releaseAug 4, 2026

skill-scanner v2.0.13

에이전트 스킬용 보안 스캐너

공유

Skill Scanner

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

AI 에이전트 스킬을 위한 최선 노력(best-effort) 보안 스캐너로, 프롬프트 인젝션, 데이터 유출, 악성 코드 패턴을 탐지합니다. 패턴 기반 탐지(YAML + YARA), LLM-as-a-judge, 동작 기반 데이터 흐름(behavioral dataflow) 분석을 결합하여 잠재적 위협에 대한 탐지 범위를 극대화하면서 오탐(false positive)을 최소화합니다.

중요: 이 스캐너는 포괄적이거나 완전한 커버리지가 아닌 최선 노력 탐지를 제공합니다. 결과가 없는 스캔이 스킬에 모든 위협이 없음을 보장하지는 않습니다. 아래의 범위 및 제한 사항을 참조하세요.

OpenAI Codex SkillsCursor Agent Skills 형식을 Agent Skills 사양에 따라 지원합니다. --lenient을 사용하면 Claude Code .claude/commands/*.md 및 플랫 마크다운 스킬 저장소와 같은 비표준 형식도 스캔합니다.


주요 기능

  • 멀티 엔진 탐지 - 계층적 최선 노력 커버리지를 위한 정적 분석, 동작 기반 데이터 흐름, LLM 의미 분석, 클라우드 기반 스캐닝
  • 오탐 필터링 - 메타 분석기가 탐지 성능을 유지하면서 노이즈를 크게 줄입니다
  • CI/CD 준비 - GitHub Code Scanning용 SARIF 출력, 재사용 가능한 GitHub Actions 워크플로, 빌드 실패를 위한 종료 코드
  • Pre-commit 훅 - 모든 커밋 전에 스킬을 스캔하는 표준 pre-commit 프레임워크 통합
  • 확장 가능 - 사용자 정의 분석기를 위한 플러그인 아키텍처

Cisco AI Discord 참여하기 - 논의, 피드백 공유, 팀과의 연결을 위해.


범위 및 제한 사항

Skill Scanner는 탐지 도구입니다. 알려졌거나 가능성이 있는 위험 패턴을 식별하지만, 보안을 인증하지는 않습니다.

주요 제한 사항:

  • 결과 없음 ≠ 위험 없음. "결과 없음(No findings)"을 반환하는 스캔은 알려진 위협 패턴이 탐지되지 않았음을 의미합니다. 스킬이 안전하거나, 무해하거나, 취약점이 없음을 보장하지는 않습니다.
  • 커버리지는 본질적으로 불완전합니다. 스캐너는 시그니처 기반 탐지, LLM 기반 의미 분석, 동작 기반 데이터 흐름 분석, 선택적 클라우드 서비스, 구성 가능한 규칙 팩을 결합합니다. 이 접근 방식이 커버리지를 개선하지만, 어떤 자동화 도구도 특히 신규 또는 제로데이 공격과 같은 모든 기법을 탐지할 수는 없습니다.
  • 오탐과 미탐이 발생할 수 있습니다. 합의 모드와 메타 분석이 노이즈를 줄이지만, 어떤 구성도 모든 오분류를 제거하지는 못합니다. 스캔 정책을 위험 허용 수준에 맞게 조정하세요.
  • 인간의 검토는 여전히 필수적입니다. 자동화된 스캐닝은 심층 방어(defense-in-depth) 전략의 한 구성 요소입니다. 고위험 또는 프로덕션 배포에서는 스캐너 결과를 수동 코드 검토 및/또는 위협 모델링과 함께 사용해야 합니다.

문서

가이드설명
빠른 시작5분 만에 시작하기
아키텍처시스템 설계 및 구성 요소
위협 분류 체계예시가 포함된 전체 AITech 위협 분류 체계
LLM 분석기LLM 구성 및 사용법
메타 분석기오탐 필터링 및 우선순위 지정
동작 분석기데이터 흐름 분석 세부 사항
스캔 정책사용자 정의 정책, 프리셋 및 튜닝 가이드
정책 빠른 참조정책 섹션 및 설정값에 대한 간편 참조
규칙 작성시그니처, YARA, Python 규칙을 추가하는 방법
GitHub ActionsCI/CD 통합을 위한 재사용 가능한 워크플로
API 참조REST API 문서
개발 가이드기여 및 개발 환경 설정

설치

사전 요구 사항: Python 3.10+ 및 uv (권장) 또는 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"

대화형 마법사

어떤 플래그를 사용해야 할지 모르시나요? 인수 없이 skill-scanner를 실행하면 대화형 마법사가 시작됩니다:

skill-scanner

마법사가 스캔 대상, 분석기, 정책, 출력 형식 선택을 안내한 다음, 실행 전에 조합된 명령을 보여줍니다. CLI를 배우기에 좋습니다.

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

LLM 공급자 참고 사항: --llm-provider는 현재 anthropic 또는 openai를 지원합니다. Bedrock, Vertex, Azure, Gemini 및 기타 LiteLLM 백엔드의 경우 공급자별 모델 문자열과 환경 변수를 설정하세요 (LLM 분석기 문서 참조).

Python SDK

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")

보안 분석기

분석기탐지 방법범위요구 사항
정적(Static)YAML + YARA 패턴모든 파일없음
바이트코드(Bytecode).pyc 무결성 검증Python 바이트코드없음
파이프라인(Pipeline)명령 오염(taint) 분석셸 파이프라인없음
동작(Behavioral)AST 데이터 흐름 분석Python 파일없음
LLM의미 분석SKILL.md + 스크립트API 키
메타(Meta)오탐 필터링모든 결과API 키
VirusTotal해시 기반 악성코드바이너리 파일API 키
AI Defense클라우드 기반 AI텍스트 콘텐츠API 키

CLI 옵션

옵션설명
--policy스캔 정책: 프리셋 이름(strict, balanced, permissive) 또는 사용자 정의 YAML 경로
--use-behavioral동작 분석기 활성화 (데이터 흐름 분석)
--use-llmLLM 분석기 활성화 (API 키 필요)
--llm-providerCLI 라우팅용 LLM 공급자: anthropic 또는 openai
--llm-consensus-runs NLLM 분석을 N회 실행하고 다수 합의된 결과만 유지
--llm-max-tokens NLLM 응답의 최대 출력 토큰 수 (기본값: 8192)
--use-virustotalVirusTotal 바이너리 스캐너 활성화
--vt-api-key KEYVirusTotal API 키를 직접 제공 (선택 사항)
--vt-upload-files알 수 없는 바이너리를 VirusTotal에 업로드 (선택 사항)
--use-aidefenseCisco AI Defense 분석기 활성화
--aidefense-api-url URLAI Defense API URL 재정의 (선택 사항)
--use-trigger트리거 특이성 분석기 활성화
--enable-meta오탐 필터링용 메타 분석기 활성화
--verbose결과별 정책 지문, 동시 발생 메타데이터를 포함하고 메타 분석기 오탐을 유지
--format출력 형식: summary, json, markdown, table, sarif, html. html 형식은 접을 수 있는 상관 관계 그룹, 확장 가능한 코드 스니펫, 파이프라인 오염 흐름 다이어그램이 포함된 자체 포함형 대화형 보고서를 생성합니다
--detailedMarkdown 출력에 상세 결과 포함
--compact간결한 JSON 출력
--output PATH기본 출력 파일 경로 (--output-<fmt>로 재정의됨)
--fail-on-findingsHIGH/CRITICAL 발견 시 오류로 종료 (--fail-on-severity high의 약어)
--fail-on-severity LEVELLEVEL 이상의 결과가 있으면 오류로 종료 (critical, high, medium, low, info)
--custom-rules PATH디렉토리의 사용자 정의 YARA 규칙 사용
--taxonomy PATH이 실행에 대한 사용자 정의 분류 체계 프로필 로드 (JSON/YAML)
--threat-mapping PATH이 실행에 대한 사용자 정의 스캐너 위협 매핑 프로필 로드 (JSON)
--lenient잘못된 형식의 스킬을 실패 대신 허용 (잘못된 필드 강제 변환, 기본값 채움). SKILL.md가 없으면 디렉토리의 .md 파일을 스캔하는 것으로 대체
--skill-file FILENAMESKILL.md 대신 사용할 사용자 정의 메타데이터 파일 이름 (예: README.md)
--check-overlap(scan-all) 스킬 간 설명 중복 검사 활성화
명령설명
(명령 없음)대화형 스캔 마법사 실행 (터미널에서 실행 시)
interactive대화형 스캔 마법사 실행 (명시적)
scan단일 스킬 디렉토리 스캔
scan-all여러 스킬 스캔 (--recursive, --check-overlap 지원)
generate-policy사용자 지정을 위한 스캔 정책 YAML 생성
configure-policy사용자 정의 스캔 정책을 만들거나 편집하는 대화형 TUI (--input 지원)
list-analyzers사용 가능한 분석기 표시
validate-rules규칙 시그니처 검증 (--rules-file 지원)

출력 예시

$ skill-scanner scan ./my-skill --use-behavioral

============================================================
Skill: my-skill
============================================================
Status: [OK] No findings
Max Severity: NONE
Total Findings: 0
Scan Duration: 0.15s

참고: "결과 없음(No findings)"은 스캐너가 알려진 위협 패턴을 탐지하지 못했음을 의미합니다. 스킬에 모든 위험이 없음을 보장하는 것은 아닙니다. 범위 및 제한 사항을 참조하세요.


GitHub Actions

재사용 가능한 워크플로를 사용하여 모든 푸시 또는 PR에서 스킬을 자동으로 스캔합니다:

# .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

결과는 GitHub Code Scanning을 통해 PR에 인라인 주석으로 표시됩니다. LLM 통합, 비밀 구성, 브랜치 보호 설정은 전체 가이드를 참조하세요.


Pre-commit 훅

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

또는 내장 훅을 직접 설치합니다:

skill-scanner-pre-commit install

훅은 스테이징된 변경 사항이 있는 스킬 디렉토리를 자동으로 감지하여 해당 디렉토리만 스캔하므로 커밋 시간이 빠릅니다. 모든 항목을 스캔하려면 --all을 사용하세요.


기여

기여를 환영합니다! 지침은 CONTRIBUTING.md를 참조하세요.

라이선스

Apache 2.0 - 자세한 내용은 LICENSE를 참조하세요.

Copyright 2026 Cisco Systems, Inc. and its affiliates


GitHubDiscordPyPI

카테고리