关于 huawei-cloud-skill-audit
huawei-cloud-skill-audit 是用于检查单个华为云 Skill 或技能目录的安全技能。它运行三类内置检查,并生成包含问题详情和修复建议的报告。
主要功能
- 01三类安全检查流程
- 02五种可选扫描级别
- 03扫描单个技能或目录
- 04选择或跳过检查项
- 05结构化问题与修复建议
适用场景
- 01发布前审计技能
- 02提交前快速扫描
- 03在 CI/CD 中设置技能门禁
- 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.jsonreferences/acceptance-criteria.mdcli-installation-guide.mdgitcode-security-scanner.mdiam-policies.mdsecurity-audit-guide.mdverification-method.mdscripts/check_protocol.pycheck_registry.pyensure_cli.shhcloud-run.shinstall_cli.shskill_audit.pyscripts/checks/__init__.pygitleaks_builtin_check.pygitleaks_check.pygitleaks_rules.jsonhwcloud_spec_check.pyllm_arbiter.pymarkdownlint_check.pyruntime_security_check.pyruntime_security_rules.jsonskill_quality_rules.jsonskillcheck_check.pyskillspector_builtin_check.pyskillspector_check.pyskillspector_rules.jsonscripts/cli/cli_entry.pycli_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 技能目录或包含多个技能的文件夹,执行三道安全门禁,并生成包含问题详情和修复策略的结构化报告。
三项检查:
| # | 工具 | 检查内容 | 实现方式 |
|---|---|---|---|
| 1 | skillspector | AI 技能安全扫描器:18 个类别中的 52 条规则 / 609 个模式(提示词注入、数据外泄、权限提升、供应链、行为 AST、污点跟踪、MCP 分析、YARA) | 内置(纯 Python,52 条规则 + AST 分析) |
| 2 | gitleaks | 凭证泄露扫描:43 条规则,用于检测硬编码的 API 密钥、密码、私钥和令牌 | 内置(纯 Python,43 条规则 + Shannon 熵) |
| 3 | runtime_security | CWE 高风险运行时模式: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)。
前置条件
- Python 3.10+ — 用于内置的 skillspector 和 gitleaks 检查
- Node.js + npx — 可选;仅在修复过程中手动运行
markdownlint-cli2 --fix时需要 - hcloud CLI — 用于验证 Huawei Cloud 服务(可选,仅用于验证)
- 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 门禁 |
deep | Standard + 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 |
包含四个部分:
- 已扫描的技能 — 列出找到的所有技能
- 问题摘要 — 按严重级别(CRITICAL/ERROR/WARNING)统计数量,并按规则分类(不包括 INFO)
- 问题详情 — 每个问题包含:技能名称、规则、行号、代码片段、消息
- 修复策略 — 针对每个唯一规则/类别提供可执行的修复建议
修复策略参考
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 后,请按以下顺序操作:
- 手动修复问题 — 应用报告中“修复策略”部分或上方 skillspector/gitleaks 规则表中的修复方案。
- 重新运行完整审计,以验证是否通过。
此工具不会审计 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 策略遵循最低权限要求