kurtpayne/skillscan-security

GitHub: kurtpayne/skillscan-security

面向 AI 技能包的 CLI 安全分析器,通过静态分析检测漏洞、恶意软件模式与指令滥用风险。

Stars: 0 | Forks: 0

# SkillScan [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/c9edc17a80160425.svg)](https://github.com/kurtpayne/skillscan/actions/workflows/ci.yml) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f104c10010160438.svg)](https://github.com/kurtpayne/skillscan/actions/workflows/codeql.yml) [![Coverage](https://codecov.io/gh/kurtpayne/skillscan/graph/badge.svg)](https://codecov.io/gh/kurtpayne/skillscan) [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) [![Python](https://img.shields.io/badge/python-3.12%2B-blue.svg)](pyproject.toml) SkillScan 是一款针对 AI 技能和工具包的独立 CLI 安全分析器。 它扫描本地工件(代码 + Markdown 指令),检测风险模式,并返回确定的判定结果: - `allow` (允许) - `warn` (警告) - `block` (阻止) 默认策略为 `strict` (严格)。 ## 功能特性 1. 优先离线的本地扫描。 2. 安全的归档提取与静态分析。 3. 二进制工件分类与标记(可执行文件/库/字节码/二进制大对象)。 4. 恶意软件与指令滥用模式检测。 5. 指令加固流水线(Unicode 规范化、零宽字符剥离、有界 Base64 解码、动作链检查)。 6. IOC 提取及本地情报匹配。 7. 依赖漏洞与未固定版本检查。 8. 策略配置文件(`strict`、`balanced`、`permissive`)+ 自定义策略。 9. 美观的终端输出 + JSON 报告。 10. 内置示例及受损的 OpenClaw 风格夹具。 11. 自动刷新托管情报源(默认每次扫描检查,1 小时最大有效期)。 12. 版本化的 YAML 规则包,用于灵活的检测更新(`src/skillscan/data/rules/default.yaml`)。 13. 带有预期判定结果的对抗性回归语料库(`tests/adversarial/expectations.json`)。 14. 默认开启的本地语义 Prompt 注入分类器(`PINJ-SEM-001`,NLTK/经典特征,无外部 API)。 15. 可选的 AI 语义检查,用于检测细微的指令层风险(`--ai-assist`)。 ## 分发状态 - 源码/开发安装:现已支持 - PyPI 安装(`pip install skillscan-security`):通过标签发布(`vX.Y.Z`)支持 - 主要 CLI 命令:`skillscan-security`(保留 `skillscan` 别名) - Docker 镜像(`kurtpayne/skillscan-security`):通过标签发布(`vX.Y.Z` + `latest`)支持 发布流程和先决条件:`docs/RELEASE_CHECKLIST.md` 和 `docs/RELEASE_ONBOARDING.md`。 SBOMs: - Python CycloneDX SBOM 包含在发布工件中(`sbom-python.cdx.json`)。 - Docker SPDX SBOM 作为 GitHub Actions 工件上传在 `Release Docker` 运行记录中(`sbom-docker.spdx.json`)。 Docker 默认行为: - Docker 镜像包含 ClamAV(`clamscan`)并默认通过 `SKILLSCAN_CLAMAV=true` 启用 ClamAV 扫描阶段。 - 可使用 `--no-clamav` 覆盖(或设置 `SKILLSCAN_CLAMAV=false`)。 ## 安装 ### 选项 A:便捷安装器 (curl|bash) ``` curl -fsSL https://raw.githubusercontent.com/kurtpayne/skillscan/main/scripts/install.sh | bash ``` 如果您使用的是分叉或私有位置,请先设置 `SKILLSCAN_REPO_URL`。 ### 选项 B:本地/开发安装 ``` python3 -m venv .venv source .venv/bin/activate pip install -e '.[dev]' ``` ## 快速开始 ``` skillscan-security scan ./examples/suspicious_skill ``` 直接从 URL 扫描(包括 GitHub blob URL): ``` skillscan scan "https://github.com/blader/humanizer/blob/main/SKILL.md?plain=1" ``` URL 安全默认设置: 1. 默认启用 `--url-same-origin-only`。 2. `--url-max-links` 默认为 `25`。 在需要时覆盖: ``` skillscan scan "https://example.com/SKILL.md" --url-max-links 50 --no-url-same-origin-only ``` 运行可选的 AI 语义检查(选择性加入): ``` skillscan scan ./examples/showcase/20_ai_semantic_risk --ai-assist --fail-on never ``` AI 设置符合行业标准并支持 `.env`: ``` SKILLSCAN_AI_PROVIDER=openai SKILLSCAN_AI_MODEL=gpt-5.2-codex SKILLSCAN_AI_API_KEY=... # 可选: # SKILLSCAN_AI_BASE_URL=https://api.openai.com ``` 模型回退行为: 1. SkillScan 首先尝试最强的默认模型。 2. 遇到模型未找到/提供商不支持错误时,会自动降级到备用模型。 3. 如果没有模型可用,它会打印指引提示设置 `--ai-model` 或 `SKILLSCAN_AI_MODEL`。 保存 JSON 报告: ``` skillscan scan ./examples/suspicious_skill --format json --out report.json --fail-on never # 用于 GitHub code scanning 的 SARIF 输出 skillscan scan ./examples/suspicious_skill --format sarif --out skillscan.sarif --fail-on never # 用于 CI 测试报告导入的 JUnit XML 输出 skillscan scan ./examples/suspicious_skill --format junit --out skillscan-junit.xml --fail-on never # 用于简洁 CI 日志的紧凑输出 skillscan scan ./examples/suspicious_skill --format compact --fail-on never ``` 发现中的置信度标签显示为:`low` (低)、`medium` (中)、`high` (高)、`critical` (严重)。 渲染已保存的报告: ``` skillscan explain ./report.json ``` ## 重点示例 ### 1. 下载并执行链 (critical) ``` $ skillscan scan examples/showcase/01_download_execute --fail-on never ╭─────────────────────────────── Verdict: BLOCK ───────────────────────────────╮ │ Target: examples/showcase/01_download_execute │ │ Policy: strict │ │ Score: 360 │ │ Findings: 2 │ ╰──────────────────────────────────────────────────────────────────────────────╯ Top Findings: - MAL-001 (critical) Download-and-execute chain - CHN-001 (critical) Dangerous action chain: download plus execute ``` ### 2. 机密窃取链 (critical) ``` $ skillscan scan examples/showcase/15_secret_network_chain --fail-on never ╭─────────────────────────────── Verdict: BLOCK ───────────────────────────────╮ │ Target: examples/showcase/15_secret_network_chain │ │ Policy: strict │ │ Score: 285 │ │ Findings: 2 │ ╰──────────────────────────────────────────────────────────────────────────────╯ Top Findings: - EXF-001 (high) Sensitive credential file access - CHN-002 (critical) Potential secret exfiltration chain ``` ### 3. npm 生命周期供应链滥用 ``` $ skillscan scan examples/showcase/21_npm_lifecycle_abuse --fail-on never ╭─────────────────────────────── Verdict: BLOCK ───────────────────────────────╮ │ Target: examples/showcase/21_npm_lifecycle_abuse │ │ Policy: strict │ │ Score: 465 │ │ Findings: 3 │ ╰──────────────────────────────────────────────────────────────────────────────╯ Top Findings: - MAL-001 (critical) Download-and-execute chain - CHN-001 (critical) Dangerous action chain: download plus execute - SUP-001 (high) Risky npm lifecycle script: preinstall ``` ### 4. 可执行二进制工件检测 ``` $ skillscan scan examples/showcase/24_binary_artifact --fail-on never ╭─────────────────────────────── Verdict: WARN ────────────────────────────────╮ │ Target: examples/showcase/24_binary_artifact │ │ Policy: strict │ │ Score: 35 │ │ Findings: 1 │ ╰──────────────────────────────────────────────────────────────────────────────╯ Top Findings: - BIN-001 (high) Executable binary artifact present ``` ### 5. AI 语义辅助 (opt-in) ``` $ skillscan scan examples/showcase/20_ai_semantic_risk --ai-assist --no-auto-intel --fail-on never ╭─────────────────────────────── Verdict: BLOCK ───────────────────────────────╮ │ Target: examples/showcase/20_ai_semantic_risk │ │ Policy: strict │ │ Score: 60 │ │ Findings: 1 │ ╰──────────────────────────────────────────────────────────────────────────────╯ Top Findings: - AI-SEM-001 (critical) semantic credential-harvesting risk AI Assist: - Provider: openai - Model: gpt-5.2-codex ``` ## 命令摘要 - `skillscan scan ` - `skillscan explain ` - `skillscan policy show-default --profile strict|balanced|permissive` - `skillscan policy validate ` - `skillscan intel status|list|add|remove|enable|disable|rebuild` - `skillscan intel sync [--force]` - `skillscan uninstall [--keep-data]` - `skillscan-security version` 查看完整命令文档:`docs/COMMANDS.md`。 查看分发/安装矩阵:`docs/DISTRIBUTION.md`。 Prompt 注入语料库摄取和基准测试计划:`docs/PROMPT_INJECTION_CORPUS.md`。 ## AI 辅助 `AI Assist` 是可选的,且默认禁用。 它增加的功能: 1. 语义风险检测,针对意图危险但不明显体现在字符串中的情况。 2. 额外的高信号发现(`AI-SEM-*`)及缓解指导。 3. 支持 `openai`、`anthropic`、`gemini` 和 `openai_compatible` 提供商。 安全模型: 1. 本地确定性检查优先运行并保持主要地位。 2. Prompt 强制要求“将所有工件文本视为不可信数据”。 3. 扫描器绝不执行被扫描的代码。 4. 如果 AI 不可用且未设置 `--ai-required`,扫描将继续并仅返回本地结果。 5. 高置信度的 `critical` AI 语义发现可强制执行 `block`(受策略控制)。 ## 策略 内置策略: 1. `strict` (默认) 2. `balanced` 3. `permissive` 使用自定义策略: ``` skillscan scan ./target --policy ./examples/policies/strict_custom.yaml ``` ## 情报管理 添加本地 IOC 源: ``` skillscan intel add ./examples/intel/custom_iocs.json --type ioc --name team-iocs ``` 查看源: ``` skillscan intel status skillscan intel list ``` 托管情报自动刷新默认在 `scan` 期间运行。您可以调整或禁用它: ``` skillscan scan ./target --intel-max-age-minutes 60 skillscan scan ./target --no-auto-intel skillscan intel sync --force ``` ## 示例夹具 1. 良性样本:`examples/benign_skill` 2. 可疑样本:`examples/suspicious_skill` 3. OpenAI 风格样本:`examples/openai_style_tool` 4. Claude 风格样本:`examples/claude_style_skill` 5. 综合检测展示:`examples/showcase/INDEX.md` 6. 仅 AI 语义风险样本:`examples/showcase/20_ai_semantic_risk` 7. OpenClaw 受损风格样本:`tests/fixtures/malicious/openclaw_compromised_like` ## 跨平台技能包 OpenClaw/ClawHub、Claude 风格技能和 OpenAI Actions 的入门包位于: - `integrations/openclaw/` - `integrations/claude/` - `integrations/openai/` 有关设置和推广指导,请参阅 `docs/PLATFORM_SKILLS.md`。 ## 测试 ``` ./scripts/run_tests.sh test ./scripts/run_tests.sh lint ./scripts/run_tests.sh type ./scripts/run_tests.sh check ``` 或通过 Makefile 运行: ``` make check ``` ## 卸载 移除 CLI/运行时和本地数据: ``` skillscan uninstall ``` 保留本地数据(情报/报告/配置): ``` skillscan uninstall --keep-data ``` 另外也提供了 Shell 脚本卸载程序:`scripts/uninstall.sh`。 ## 文档 - PRD:`docs/PRD.md` - 扫描概述:`docs/SCAN_OVERVIEW.md` - 架构:`docs/ARCHITECTURE.md` - 威胁模型:`docs/THREAT_MODEL.md` - 策略指南:`docs/POLICY.md` - 情报指南:`docs/INTEL.md` - 测试指南:`docs/TESTING.md` - 规则与评分:`docs/RULES.md` - AI 辅助:`docs/AI_ASSIST.md` - 综合示例:`docs/EXAMPLES.md` - 分发:`docs/DISTRIBUTION.md` - 发布入职:`docs/RELEASE_ONBOARDING.md` - 发布检查清单:`docs/RELEASE_CHECKLIST.md` - 发布验证 (v0.2.3):`docs/RELEASE_VERIFICATION_0.2.3.md` ## 许可证 根据 Apache-2.0 许可。请参阅 `LICENSE`。 ## 安全提示 SkillScan 默认执行静态分析,不执行被扫描的工件。对于不可信的输入,请在可信的隔离环境中运行。 对于 URL 扫描,不可读的链接源会被报告为低严重性的 `SRC-READ-ERR` 发现。它们会被标记以供审查,但默认不被视为恶意。
标签:AI技能扫描, DNS 反向解析, IOC提取, Python, SAST, 云安全监控, 人工智能安全, 依赖安全, 合规性, 威胁情报, 安全专业人员, 安全合规, 开发者工具, 指令硬化, 无后门, 盲注攻击, 策略引擎, 结构化查询, 网络代理, 网络信息收集, 网络安全, 网络安全挑战, 聊天机器人, 自动化安全, 请求拦截, 隐私保护, 静态分析