mcpField
H
huawei-cloud-skill-audit

huawei-cloud-skill-audit

github.com/huaweicloud安全59567 次安装2 天前更新
代码仓库

关于 huawei-cloud-skill-audit

huawei-cloud-skill-audit 是用于检查单个华为云 Skill 或技能目录的安全技能。它运行三类内置检查,并生成包含问题详情和修复建议的报告。

主要功能

  1. 01三类安全检查流程
  2. 02五种可选扫描级别
  3. 03扫描单个技能或目录
  4. 04选择或跳过检查项
  5. 05结构化问题与修复建议

适用场景

  1. 01发布前审计技能
  2. 02提交前快速扫描
  3. 03在 CI/CD 中设置技能门禁
  4. 04查看问题及修复步骤

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-skill-audit

安装后在 Claude Code 中输入/huawei-cloud-skill-audit确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.gitignore
.markdownlint.json
references/
acceptance-criteria.md
cli-installation-guide.md
gitcode-security-scanner.md
iam-policies.md
security-audit-guide.md
verification-method.md
scripts/
check_protocol.py
check_registry.py
ensure_cli.sh
hcloud-run.sh
install_cli.sh
skill_audit.py
scripts/checks/
__init__.py
gitleaks_builtin_check.py
gitleaks_check.py
gitleaks_rules.json
hwcloud_spec_check.py
llm_arbiter.py
markdownlint_check.py
runtime_security_check.py
runtime_security_rules.json
skill_quality_rules.json
skillcheck_check.py
skillspector_builtin_check.py
skillspector_check.py
skillspector_rules.json
scripts/cli/
cli_entry.py
cli_reporting.py

详细介绍

Huawei Cloud Skill Audit

用于审计 Huawei Cloud 技能的三重安全检查流程 — 安全门禁。


步骤 0:安装 skill-quality-cli(幂等操作,若已安装则跳过)

先设置 AUDIT_DIR 为本 skill 安装目录的绝对路径(export AUDIT_DIR=/path/to/huawei-cloud-skill-audit, 示例: $HOME/.local/share/huawei-cloud-skill-audit), 后续所有命令统一用它, 禁止在被审计目录内使用相对路径执行本 skill 的脚本(防目录内恶意同名脚本劫持, 见 Core Commands 安全要求)。

export AUDIT_DIR=/path/to/huawei-cloud-skill-audit   # 替换为实际安装目录
bash "$AUDIT_DIR/scripts/ensure_cli.sh"

⚠️ 强制要求: 本 skill 的任何 hcloud 命令必须用 skill-quality-cli run --skill-name huawei-cloud-skill-audit -- 包裹, 禁止裸调 hcloud。(强制要求:严禁直接调用 hcloud。)

安装行为说明:

  • 已装且可用 → 静默跳过; 未装 → 从华为云 OBS(HTTPS) 下载官方包(wrapper + ELF + Python fallback, low-GLIBC 兼容)安装到 ~/.local/bin/。
  • 离线/安装失败 → stderr 打印 警告: 后跳过, 不阻塞业务流(但 wrapped 命令将 command not found, 正式场景必须保证安装成功)。
  • 调试/离线场景可用裸命令 python3 "$AUDIT_DIR/scripts/skill_audit.py" ...(见 Core Commands 安全要求与统一说明)。

概述

扫描单个 Huawei Cloud 技能目录或包含多个技能的文件夹,执行三道安全门禁,并生成包含问题详情和修复策略的结构化报告。

三项检查:

#工具检查内容实现方式
1skillspectorAI 技能安全扫描器:18 个类别中的 52 条规则 / 609 个模式(提示词注入、数据外泄、权限提升、供应链、行为 AST、污点跟踪、MCP 分析、YARA)内置(纯 Python,52 条规则 + AST 分析)
2gitleaks凭证泄露扫描:43 条规则,用于检测硬编码的 API 密钥、密码、私钥和令牌内置(纯 Python,43 条规则 + Shannon 熵)
3runtime_securityCWE 高风险运行时模式:36 条规则(命令注入、反序列化、凭证窃取、沙箱逃逸、持久化、破坏性操作、挖矿)+ 3 条技能质量规则(Q001-Q003)内置(纯 Python,与级别无关,始终运行所有规则)

规则数(52/609、43、36+3)以 scripts/checks/*rules.json 为准, 增删规则后请同步更新本表。


依赖项:系统会通过 skill-quality-cli 自动收集质量遥测数据(若未安装,则由 scripts/ensure_cli.sh 安装;安装/升级/禁用遥测的具体命令见 references/cli-installation-guide.md)。

前置条件

  1. Python 3.10+ — 用于内置的 skillspector 和 gitleaks 检查
  2. Node.js + npx — 可选;仅在修复过程中手动运行 markdownlint-cli2 --fix 时需要
  3. hcloud CLI — 用于验证 Huawei Cloud 服务(可选,仅用于验证)
  4. Huawei Cloud AK/SK — 审计本身不需要,但审计后若要验证技能功能则需要

内置 / 外部二进制说明:

  • 默认内置: skillspector 与 gitleaks 均为纯 Python 实现, 无需外部二进制或 pip 安装。
  • 外部路径显式指定才生效: 传 --skillspector/--gitleaks <path> 时才使用外部二进制。
  • PATH 自动发现已禁用(2026-09-23, fail-closed): 不再从 PATH 探测, 避免 PATH 被注入同名恶意二进制静默接管审计。
  • 外部二进制不校验签名/哈希: 请确保其来源可信(PATH 无同名二进制, 下载来源受控)。
  • 默认行为: 不传 --skillspector/--gitleaks 时, 恒使用内置纯 Python 实现, 与 scan level 无关。

若要跳过外部二进制的回退自动安装,请使用 --no-install 标志。


工作流

Input (skill path or folder)
    │
    ├── Discover Skills ──── Find SKILL.md in target or subdirectories
    │
    ├── Run Three Checks ────
    │   1. skillspector → AI security scan (52 rules, 609 patterns)
    │   2. gitleaks → Credential leak detection
    │   3. runtime_security → CWE high-risk runtime patterns (36 + 3 rules)
    │
    ├── Build Report ────
    │   Section 1: Scanned Skills
    │   Section 2: Issue Summary (by severity)
    │   Section 3: Issue Details (per-issue)
    │   Section 4: Fix Strategies (per rule/category)
    │
    └── Gate Verdict ──── PASS or FAIL

扫描级别

级别分析器速度使用场景
critical仅使用 "critical" 严重性规则(P5 有害内容)快最严格的门禁
high"critical" + "error" 严重性规则 + AST(exec/eval/os.system/反序列化)快阻止高风险问题
quick仅模式匹配(所有静态正则规则)快快速提交前检查
standard所有静态分析器(high 基础上放开 WARNING/INFO 级 AST + taint tracking)中CI/CD 门禁
deepStandard + MCP 分析(最小权限、工具投毒、rug pull)较慢发布前完整审计

⚠️ 术语区分: 扫描档位名(critical/high/quick/standard/deep, 反引号)与规则 JSON 中的 severity 值("critical"/"high"/"medium"/"low", 引号)是两套值 —— 档位决定启用哪些分析器并 过滤到哪些 severity 级别; severity 是单条规则的属性。同名不表示同一概念: 例如 critical 档过滤出 "critical" 级发现, high 档过滤出 "critical"+"error" 级发现。

严重性过滤仅适用于 SkillSpector(按扫描级别选择规则)。gitleaks 仅包含 "critical"/"high" 严重性规则,因此这些规则会在每个扫描级别运行。runtime_security 与级别无关:全部 39 条规则(36 条 CWE + Q001-Q003)始终运行,且其 CRITICAL 发现始终会阻断门禁。

AST 分析在 high/standard/deep 均执行(high 为默认档, 必须带 AST, 否则 eval/exec/pickle.loads 等执行类检测可被直接绕过)。high 档楼层过滤保留 CRITICAL/ERROR 级发现(critical/high 为规则 JSON 中的 severity 值, 内部映射为 CRITICAL/ERROR), 因此默认档阻断: AST1/2/5/9/10(exec/eval/os.system/getattr 反射/反序列化全部 ERROR 级); WARNING 级(AST3/4/6/7: compile/subprocess/动态 import 等)仅在 standard/deep 可见。.py 解析失败不再静默——产出 ERROR 级 AST-SYNTAX 发现并阻断 gate(fail-closed, 防恶意写坏代码规避 AST)。


KooCLI 命令格式标准

此 skill 会在本地审计 skill 目录,不会直接调用 hcloud CLI 命令。 审计后验证 skill 功能时,适用标准 KooCLI 格式——以下一行是示例模板,不是可运行命令:

bash "$AUDIT_DIR/scripts/hcloud-run.sh" <Service> <Operation> --cli-region=<region> [--key=value ...]   # 强制入口:一切 hcloud 经 hcloud-run.sh 包装执行(hcloud-run.sh 内部自动经 skill-quality-cli run 包裹上报, 见 Step 0 强制要求); hcloud 场景下用户只需调用 hcloud-run.sh, 不要手工再包一层 skill-quality-cli run

核心命令

⚠️ 安全要求(必须遵守): 所有命令必须通过 绝对路径 引用本 skill 的 scripts/skill_audit.py。 被审计的技能目录是不可信输入 —— 其中可能被预置恶意 scripts/skill_audit.py, 若在 该目录内执行相对路径 python3 scripts/skill_audit.py, 审计会执行攻击者代码(RCE)。 执行前先设置 AUDIT_DIR 为本 skill(huawei-cloud-skill-audit)的安装目录绝对路径: export AUDIT_DIR=/path/to/huawei-cloud-skill-audit(示例: $HOME/.local/share/huawei-cloud-skill-audit)。 之后统一用 python3 "$AUDIT_DIR/scripts/skill_audit.py" ..., 并可用 --target . 指向你所在/任意被审计目录。

统一说明: 每个场景给出两条命令 —— ① 包装命令(skill-quality-cli run --skill-name huawei-cloud-skill-audit -- ...): 正式使用必须用它(质量上报); ② 裸命令(python3 "$AUDIT_DIR/scripts/skill_audit.py" ...): 仅调试/离线场景的等效直接执行, 正式使用请勿用裸命令。

扫描单个 skill
# 先按上述安全要求设置 AUDIT_DIR, 然后在任意目录执行(--target . 指向被审计目录)
skill-quality-cli run --skill-name huawei-cloud-skill-audit -- python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .
扫描一组 skill 目录
# --target 指向包含多个技能的父目录
skill-quality-cli run --skill-name huawei-cloud-skill-audit -- python3 "$AUDIT_DIR/scripts/skill_audit.py" --target ..
使用指定级别扫描
skill-quality-cli run --skill-name huawei-cloud-skill-audit -- python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .. --scan-level quick
选择性执行检查
skill-quality-cli run --skill-name huawei-cloud-skill-audit -- python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .. --checks skillspector
skill-quality-cli run --skill-name huawei-cloud-skill-audit -- python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .. --skip-checks gitleaks
使用自定义工具路径运行

可通过 --skillspector、--gitleaks 和 --node-bin 覆盖自定义二进制文件的位置(参见参数确认;默认自动安装位置为 ~/.local/bin/):

skill-quality-cli run --skill-name huawei-cloud-skill-audit -- python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .. --skillspector /path/to/skillspector --gitleaks /path/to/gitleaks --node-bin /path/to/node
# 等效直接执行(⚠️ 仅调试/离线场景, 正式使用请经 skill-quality-cli run 包裹以保证质量上报)
python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .. --skillspector /path/to/skillspector --gitleaks /path/to/gitleaks --node-bin /path/to/node

可用的 --scan-level 值:high(默认)、critical、quick、standard、deep。 可用的 --checks:skillspector、gitleaks、runtime_security。 使用 --skip-checks 排除指定检查。


参数确认

参数必填描述示例
--target是单个技能目录或技能的父目录/path/to/skill-dir
--output-dir否报告输出目录(默认:目标的父目录)--output-dir ./reports
--scan-level否扫描级别:high/critical/quick/standard/deep(默认:high)--scan-level deep
--checks否要运行的检查项,以逗号分隔(默认:全部);有效值仅有 skillspector、gitleaks、runtime_security。不可与 --skip-checks 同时使用--checks skillspector
--skillspector否覆盖 SkillSpector 二进制文件路径--skillspector ~/.local/bin/skillspector
--gitleaks否覆盖 gitleaks 二进制文件路径(缺失时自动安装到 ~/.local/bin)--gitleaks ~/.local/bin/gitleaks
--skip-checks否要跳过的检查项,以逗号分隔;不可与 --checks 同时使用--skip-checks gitleaks
--no-install否跳过工具的自动安装--no-install

报告结构

报告将以 skill-gate-report-<timestamp>.txt 的名称保存在已扫描路径的父目录中。

输入报告保存位置
/repo/skills/huawei-cloud-ecs-manage/repo/skills/skill-gate-report-<timestamp>.txt
/repo/skills/repo/skill-gate-report-<timestamp>.txt

包含四个部分:

  1. 已扫描的技能 — 列出找到的所有技能
  2. 问题摘要 — 按严重级别(CRITICAL/ERROR/WARNING)统计数量,并按规则分类(不包括 INFO)
  3. 问题详情 — 每个问题包含:技能名称、规则、行号、代码片段、消息
  4. 修复策略 — 针对每个唯一规则/类别提供可执行的修复建议

修复策略参考

skillspector
规则修复
P1-P8(提示词注入 / 系统提示词泄露)不要在系统提示词中嵌入用户可控的输入;使用带有显式转义的模板变量
E1-E5(数据外泄)移除外部 URL;使用环境变量配置 API 端点;限制工具定义中的网络访问
PE1-PE5(权限提升)避免使用 sudo/root 命令;采用基于能力的权限;不要禁用安全控制
AST(行为 AST:AST1-AST7/9/10)使用更安全的替代方案替换 exec()/eval();使用带允许列表的 importlib
YR1-YR4(YARA)移除反向 shell/webshell 模式;将服务器功能移至单独的受控服务
SC1/SC2/SC3/SC7(供应链)使用哈希固定依赖版本;更新存在漏洞的依赖
EA1-EA4(过度自主权)将工具权限限制在完成任务所需的最低范围
MP1-MP3、OH1-OH3(记忆投毒 / 输出处理)使用前验证记忆写入内容和工具输出
RA1-RA2、AS1-AS3(恶意 Agent / Agent 窥探)限制 Agent 委派和会话数据访问
SSRF1-SSRF3(服务端请求伪造)请求前验证外部端点,或将其加入允许列表
TM1-TM4(工具误用)验证工具参数;切勿将不可信输入拼接到 shell 命令中
gitleaks
规则修复
private-key移除硬编码的私钥;在运行时从文件或密钥管理器加载;将密钥文件添加到 .gitignore
(其他规则)将硬编码凭据替换为环境变量或密钥管理器引用;参见 https://gitleaks.io/docs/secrets

修复工作流(审计 -> 修复 -> 验证)

运行审计并得到 FAIL 后,请按以下顺序操作:

  1. 手动修复问题 — 应用报告中“修复策略”部分或上方 skillspector/gitleaks 规则表中的修复方案。
  2. 重新运行完整审计,以验证是否通过。

此工具不会审计 Markdown 样式和 SKILL.md 规范问题;如需单独修复 Markdown 样式,请使用 markdownlint-cli2 --fix 等外部工具。


CI/CD 集成

# CI 场景下 checkout 的仓库即本 skill 自身, 脚本来源可信, 相对路径无 RCE 风险
# (与 Core Commands 安全要求不冲突: 那里禁止的是在"被审计技能目录"内跑相对路径)
jobs:
  skill-gate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - name: Run audit
        run: python3 scripts/skill_audit.py --target . --output-dir .
      - name: Upload report
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: skill-gate-report
          path: skill-gate-report-*.txt

配置文件

内置检查使用捆绑的规则集——无需外部配置:

  • scripts/checks/skillspector_rules.json — skillspector 规则(52 条规则 / 609 个模式)
  • scripts/checks/gitleaks_rules.json — gitleaks 规则(43 条规则)

技能目录中附带的 .markdownlint.json 和 skillcheck.toml 不会被此审计使用;它们仅供外部 markdownlint/skillcheck 工具使用。


安全扫描

skillspector 纯静态模式的局限性

skillspector 以 --no-llm 模式运行(仅静态分析)。存在以下缺口:

分析器检测内容在 --no-llm 模式下的检测盲区
模式匹配(P1-P8、E1-E5、PE1-PE5、EA1-EA4、MP1-MP3、OH1-OH3、RA1-RA2、AS1-AS3、SSRF1-SSRF3、TM1-TM4)提示词注入、数据外泄、权限提升、代理性/投毒模式大模型生成的混淆变体
AST 分析(AST1-AST7/9/10)exec()/eval() 调用、动态导入、反射式 getattr、不安全反序列化运行时求值的字符串
YARA 规则(YR1-YR4)反向 Shell、WebShell 模式编码/混淆的载荷
供应链(SC1/SC2/SC3/SC7)存在漏洞/固定版本的依赖问题传递依赖漏洞利用
配套工具
工具检测内容安装方式
skillspector(内置,--no-llm)提示词注入、反向 Shell、命令注入、数据外泄、权限提升、供应链问题自动安装
gitleaks(内置)43 条规则:API 密钥、密码、私钥、令牌自动安装
gitcode-security-scanner通用关键词凭据、中文关键词、SQL 注入、调试信息泄漏来自 DTSE-SKILL 仓库

建议:同时运行 huawei-cloud-skill-audit 和 gitcode-security-scanner,以实现完整覆盖。


输出格式

报告为纯文本文件,包含四个部分(已扫描技能、问题摘要、问题详情、修复策略),后跟 Gate 判定结果(PASS/FAIL)。


验证方法

运行审计
# AUDIT_DIR 见 Core Commands 安全要求(本 skill 安装目录绝对路径)
skill-quality-cli run --skill-name huawei-cloud-skill-audit -- python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .
# 等效直接执行(⚠️ 仅调试/离线场景, 正式使用请经 skill-quality-cli run 包裹以保证质量上报)
python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .
验证修复
# Fix issues from the report's Fix Strategies section, then re-run audit
skill-quality-cli run --skill-name huawei-cloud-skill-audit -- python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .
# 等效直接执行(⚠️ 仅调试/离线场景, 正式使用请经 skill-quality-cli run 包裹以保证质量上报)
python3 "$AUDIT_DIR/scripts/skill_audit.py" --target .
检查 Gate 判定结果
# Gate Verdict: PASS = 无 CRITICAL/ERROR 发现(WARNING 带记录理由后可接受)
# Gate Verdict: FAIL = 存在 CRITICAL 或 ERROR 发现(与 references/verification-method.md、security-audit-guide.md 一致)

参考文档

  • references/iam-policies.md — 技能审计所需的 IAM 权限
  • references/verification-method.md — 详细验证流程
  • references/acceptance-criteria.md — 审计通过(PASS)的验收标准
  • references/security-audit-guide.md — 安全审计指南和修复策略
  • references/gitcode-security-scanner.md — 配套扫描器使用指南
  • scripts/ensure_cli.sh — 幂等的 skill-quality-cli 安装程序(缺失时自动安装)

最佳实践

  • 接受任何 Huawei Cloud 技能贡献前先运行审计
  • 根据报告中的修复策略解决问题,然后务必重新运行完整审计以验证是否通过(PASS)
  • 对于大型仓库,逐个扫描技能,以避免生成过大的报告
  • 同时运行 huawei-cloud-skill-audit 和 gitcode-security-scanner,以实现完整的安全覆盖

注意事项

  • 此技能仅生成审计报告和修复策略;它绝不会自动修改任何技能文件。用户根据报告中的修复策略或修复工作流手动应用修复;修复后重新运行审计以进行验证。
  • 三项检查按顺序运行;每项检查相互独立
  • 严禁推断 API 端点
  • 凭据(AK/SK)从环境变量读取;禁止硬编码
  • 如果审计后验证缺少 AK/SK,请提示用户;不要跳过
  • 必须跟踪测试期间创建的资源;如有任何资源残留,请输出手动清理说明
  • INFO 级问题不纳入报告;仅显示 CRITICAL/ERROR/WARNING
  • gitleaks 的 --no-git 模式仅扫描当前文件内容,不扫描 git 历史记录
  • gitleaks 无法检测中文关键词凭据;请使用 gitcode-security-scanner 检测此类凭据

边缘情况

场景处理方式
技能目录不存在报告错误并终止
目标中没有 SKILL.md,也没有包含 SKILL.md 的子目录报告错误:未找到技能
内置规则文件缺失跳过检查并发出警告(内置规则 JSON 是唯一默认路径;不会自动下载外部文件——默认拒绝)
Python 版本 < 3.12内置纯 Python 检查仍可运行(Python 3.10+);不会自动检测外部二进制文件(默认拒绝),因此没有针对特定版本的外部回退方案
大型仓库生成的报告过大扫描单个技能;使用 head/tail 阅读摘要
gitleaks 误报添加到 .gitleaksignore 文件中
skillspector 退出代码为 1按规则严重程度报告发现项;风险评分仅用于展示,不作为门禁条件

设计原则

  • 三项检查流水线 — 每项检查相互独立,并共同决定总体门禁结论
  • 自动安装 — 首次运行时自动安装缺失的工具
  • 链式验证 — 所有已启用的检查都必须通过,门禁结论才为 PASS
  • Agent 防护 — 写入操作需要用户确认;不允许自动绕过门禁
  • 数据驱动 — 报告采用结构化文本,明确标注严重程度和修复策略
  • 批次可重复 — 可重复审核同一技能;每次运行都会生成带新时间戳的报告
  • 凭证安全 — 不硬编码 AK/SK;从环境变量读取
  • 最小权限 — IAM 策略遵循最低权限要求

评论

支持 Markdown