文章总结: SkillSentinel是专为Skill生态设计的轻量级安全扫描工具,定位为安装前的自动化审计网关。文档详细介绍了其在ClaudeCode和命令行的安装调用方式,包含839条正则规则覆盖10大风险分类(如提示注入、数据外发、反弹Shell等),支持自定义规则和JSON报告输出。关键发现包括风险评分机制(allow/review/block)和APT攻击技术检测能力,建议用户通过斜杠命令或终端扫描Skill目录防范恶意代码。 综合评分: 85 文章分类: 安全工具,漏洞分析,安全运营,应用安全,安全开发
SkillSentinel — Skill 安全扫描哨兵
摸鱼信安
2026年6月22日 18:58 重庆
在小说阅读器读本章
去阅读
SkillSentinel — Skill 安全扫描哨兵
SkillSentinel 是 Skill 生态的”入口门禁”,在 Skill 安装、加载、启用之前执行自动化安全审计。
定位不是通用 SAST,不是运行时沙箱,而是 Skill 生态里的轻量安全网关。
在 Claude Code 中使用
其它下载方法参考:魔塔社区下载(推荐)
1. 安装到 Claude Code
# git仓库下载
git clone https://github.com/wpsec/skills.git ~/.claude/skills/skill-sentinel
# 或者软链接已有项目
ln -s /path/to/Skill-Sentinel ~/.claude/skills/skill-sentinel
# 安装依赖
cd ~/.claude/skills/skill-sentinel && pip install -r requirements.txt
codex 同理
2. 重启 Claude Code
Skill 安装后需要重启客户端才能被 Claude Code 发现。
3. 调用方式
安装后可通过以下方式调用:
| 方式 | 示例 | 说明 |
| — | — | — |
| 斜杠命令 | /skill-sentinel | 初始化扫描所有已安装 Skill |
| 自然语言 | “扫描我的 Skill 安全性” | Claude Code 自动识别并调用 |
| 自然语言 | “检查 ~/.claude/skills/ 下有没有恶意 Skill” | 同上 |
| 自然语言 | “扫描 /path/to/skill 这个 Skill” | 扫描单个 Skill |
4. 可用命令
# 初始化扫描(扫描所有已安装 Skill)
/skill-sentinel
# 扫描指定目录
cd ~/.claude/skills/skill-sentinel && python3 -m skill_sentinel --scan-dir /path/to/skills
# 扫描单个 Skill
cd ~/.claude/skills/skill-sentinel && python3 -m skill_sentinel /path/to/skill
命令行使用
如果不想安装为 Claude Code Skill,也可以直接在终端使用:
# 安装依赖
pip install -r requirements.txt
# 扫描 Skill(终端输出)
# 初始化安全基线(扫描所有已安装 Skill)
python3 -m skill_sentinel --init
# 扫描单个 Skill(终端输出)
python3 -m skill_sentinel /path/to/skill
# JSON 输出
python3 -m skill_sentinel /path/to/skill --json
# 导出报告
python3 -m skill_sentinel /path/to/skill -o report.json
# 使用自定义规则
python3 -m skill_sentinel /path/to/skill --rules my_rules.py
作为 Python 库
from skill_sentinel import scan_skill
result = scan_skill("/path/to/skill")
print(result["risk_level"]) # "allow" | "review" | "block"
print(result["risk_score"]) # 0-100+
扫描流程
新 Skill 安装/加载
│
▼
发现 Skill 根目录 → 解析 SKILL.md
│
▼
构建资产图(入口→引用→脚本→配置→压缩包→间接依赖)
│
▼
规则扫描(839 条正则规则)
│
▼
风险评分 → allow / review / block
│
▼
输出证据(文件:行号 + 规则 + 原因 + 建议)
风险分类
| # | 分类 | 典型检测项 | | — | — | — | | 1 | 提示注入 | 忽略前置指令、角色扮演劫持、AI 行为篡改 | | 2 | 数据外发 | HTTP 请求、Webhook、邮件、FTP 上传 | | 3 | 提权与越权 | sudo、setuid、capabilities、容器的逃逸 | | 4 | 持久化与自启动 | crontab、systemd、注册表、LaunchAgent | | 5 | 文件破坏与目录篡改 | rm -rf、删除/覆写关键文件、chmod 777 | | 6 | 供应链投毒 | curl | | 7 | 反弹Shell/后门 | socket+dup2、SSH 隧道、ngrok/frp 内网穿透 | | 8 | 隐蔽下载与远程执行 | eval/exec、base64 解码执行、subprocess | | 9 | 敏感信息泄露 | 硬编码密钥、.env 读取、SSH 私钥、云凭证 | | 10 | 混淆与遮蔽行为 | chattr、nohup、screen/tmux 隐藏、免杀 |
规则资产
共计 839 条正则规则,分三个文件,覆盖 10 大风险分类和 14 个 APT 攻击技术领域。
规则文件概览
| 文件 | 规则数 | 定位 | 适用场景 |
| — | — | — | — |
| rules/total_rules.py | 312 | 全高危操作扫描 | 覆盖面广,适合首次审计 |
| rules/precise_rules.py | 288 | 恶意高危精确扫描 | 误报更低,适合日常门禁 |
| rules/apt_rules.py | 239 | APT 级高级威胁检测 | 补充盲区,适合深度审计 |
rules/total_rules.py 覆盖(312 条,全高危操作扫描)
| # | 分类 | 规则数 | 严重度分布 | 典型检测 | | — | — | — | — | — | | 1 | 提示注入 | 17 | low:17 | ignore all instructions、角色扮演、人格设定、升级伪装 | | 2 | 数据外发 | 13 | med:6 low:7 | HTTP 请求、FTP 上传、SMTP 发信、Telegram/Webhook 外发 | | 3 | 提权与越权 | 12 | high:8 low:4 | sudo ALL=、setuid、cap_set_proc、内核模块加载 | | 4 | 持久化与自启动 | 11 | high:5 low:6 | crontab 写入、systemctl enable、注册表 Run、LaunchAgent | | 5 | 文件破坏与目录篡改 | 28 | critical:3 high:10 low:15 | DROP TABLE、rm -rf /、dd of=/dev/sda、chmod 777 | | 6 | 供应链投毒 | 11 | high:6 med:5 | curl | | 7 | 反弹Shell/后门 | 14 | critical:2 high:5 med:7 | socket+dup2、ngrok、SSH -R/-L/-D 隧道、frp 内网穿透 | | 8 | 隐蔽下载与远程执行 | 159 | critical:5 high:12 med:9 low:133 | os.system、subprocess、eval/exec、pickle.loads、base64 -d | | 9 | 敏感信息泄露 | 41 | high:2 low:39 | 硬编码密码/token/api_key、读取 .env、SSH 私钥、AWS/GCloud 凭证 | | 10 | 混淆与遮蔽行为 | 6 | low:6 | chattr +i/a、nohup &、disown、screen -dmS、tmux new-session -d |
rules/precise_rules.py 覆盖(288 条,恶意高危精确扫描)
| # | 分类 | 规则数 | 严重度分布 | 典型检测 | | — | — | — | — | — | | 1 | 提示注入 | 12 | low:12 | ignore previous instructions、伪装角色、无视系统提示 | | 2 | 数据外发 | 5 | med:2 low:3 | 上传到 pastebin/transfer.sh、SCP 外发、rsync 外发 | | 3 | 提权与越权 | 19 | high:17 low:2 | sudo su -、setuid、SUID shell、CVE 漏洞利用、UAC 绕过 | | 4 | 持久化与自启动 | 13 | high:8 low:5 | @reboot cron、systemctl enable、注册表 Run、LaunchDaemon | | 5 | 文件破坏与目录篡改 | 35 | critical:7 high:15 low:13 | DROP DATABASE、rm -rf / –no-preserve-root、shred -zu | | 6 | 供应链投毒 | 9 | high:6 med:3 | pip install –index-url、npm install -g –unsafe-perm、git push –force | | 7 | 反弹Shell/后门 | 39 | critical:18 high:13 med:8 | Bash TCP 反弹Shell、MSFVenom、CobaltStrike、PHP一句话木马 | | 8 | 隐蔽下载与远程执行 | 131 | critical:10 high:13 med:3 low:105 | xp_cmdshell、PowerShell bypass、execute_script、编码/加密后执行 | | 9 | 敏感信息泄露 | 17 | high:1 low:16 | 读取 /etc/shadow、SSH 私钥、AWS credentials、kubeconfig | | 10 | 混淆与遮蔽行为 | 8 | critical:5 high:3 | Windows Defender 排除路径、关闭实时监控、免杀 |
三文件汇总
| # | 分类 | total_rules | precise_rules | apt_rules | 合计 | | — | — | — | — | — | — | | 1 | 提示注入 | 17 | 12 | 34 | 63 | | 2 | 数据外发 | 13 | 5 | 22 | 40 | | 3 | 提权与越权 | 12 | 19 | 6 | 37 | | 4 | 持久化与自启动 | 12 | 13 | 4 | 28 | | 5 | 文件破坏与目录篡改 | 28 | 35 | 1 | 64 | | 6 | 供应链投毒 | 11 | 9 | 4 | 24 | | 7 | 反弹Shell/后门 | 14 | 39 | 10 | 63 | | 8 | 隐蔽下载与远程执行 | 159 | 131 | 124 | 415 | | 9 | 敏感信息泄露 | 41 | 17 | 11 | 69 | | 10 | 混淆与遮蔽行为 | 6 | 8 | 23 | 36 | | | 合计 | 312 | 288 | 239 | 839 |
严重程度分布
| 等级 | total_rules | precise_rules | apt_rules | 合计 | 评分权重 | | — | — | — | — | — | — | | critical | 10 | 40 | 4 | 54 | 25 分/条 | | high | 48 | 47 | 22 | 117 | 10 分/条 | | medium | 27 | 16 | 52 | 96 | 3 分/条 | | low | 227 | 185 | 161 | 572 | 1 分/条 |
APT 攻击技术覆盖(rules/apt_rules.py)
| # | APT 技术 | 规则数 | MITRE ATT&CK | 典型检测 | | — | — | — | — | — | | 1 | LOLBin 利用 | 55 | T1218 | certutil, mshta, regsvr32, osascript, systemd-run | | 2 | 高级混淆 | 28 | T1027 | 多级编码链、字符串拼接、Unicode 混淆、动态代码生成 | | 3 | 无文件执行 | 11 | T1620 | memfd_create, /dev/shm, mmap, /proc/self/fd | | 4 | 隐蔽 C2 | 24 | T1090/T1572 | DNS 隧道、社交媒体 C2、死点解析器、加密隧道 | | 5 | 供应链高级攻击 | 13 | T1195 | 版本混淆、extra-index-url、postinstall 投毒 | | 6 | AI 高级提示注入 | 37 | — | 工具调用劫持、无授权操作、静默执行、多语言注入 | | 7 | 时间延迟触发 | 11 | T1654 | time.sleep、调度器、日期条件、环境检测 | | 8 | 数据批量窃取 | 10 | T1041 | 分段传输、编码外传、隐写术 | | 9 | 防御规避 | 14 | T1562 | SELinux/Defender 禁用、SIP 绕过、审计关闭 | | 10 | 横向移动 | 12 | T1021 | SSH pass、WinRM、PsExec、Impacket | | 11 | 凭据转储 | 8 | T1003 | LSASS dump、DPAPI、浏览器凭据 | | 12 | 容器逃逸 | 7 | T1611 | cgroup release_agent、docker.sock 挂载 | | 13 | 内核模块攻击 | 5 | T1547 | insmod、内核参数篡改 | | 14 | Python 代码注入 | 8 | — | AST 操纵、字节码注入、猴子补丁 |
规则格式
MALICIOUS_PATTERNS = {
r"(?i)\bos\.system\s*\(": "执行系统命令 (os.system)",
r"(?i)\brm\s+-rf\s+/": "删除根目录",
# ...
}
自定义规则
通过 --rules 参数指定自定义规则文件:
python3 -m skill_sentinel /path/to/skill --rules my_rules.py
输出结构
{
"skill_name": "example-skill",
"skill_path": "/path/to/skill",
"scan_time": "2026-06-22T16:49:17",
"risk_level": "block",
"risk_score": 94,
"summary": {
"total_files": 123,
"scanned_files": 159,
"total_findings": 57,
"categories": {"8": 36, "5": 18, "3": 3},
"severity_counts": {"critical": 0, "high": 3, "medium": 5, "low": 49}
},
"findings": [
{
"file": "/path/to/script.py",
"line": 42,
"rule": "执行系统命令 (subprocess)",
"severity": "medium",
"category": 8,
"match": "subprocess.run"
}
],
"evidence": [
{
"file": "/path/to/script.py",
"line": 42,
"rule": "执行系统命令 (subprocess)",
"category": "隐蔽下载与远程执行",
"severity": "medium",
"reason": "第 42 行匹配到规则: 执行系统命令 (subprocess)",
"suggestion": "检查命令执行上下文,确认输入来源是否可信"
}
],
"asset_graph_summary": {
"entry_file": "...",
"scripts_count": 39,
"configs_count": 64,
"archives_count": 0,
"indirect_deps_count": 0
}
}
退出码
| 退出码 | 含义 | | — | — | | 0 | allow — 低风险,可启用 | | 1 | review — 中风险,需人工审查 | | 2 | block — 高风险,禁止启用 |
目录结构
SkillSentinel/
skill_sentinel/ # 核心 Python 包
scanner.py # 正则扫描引擎
rules.py # 规则加载、分类、严重程度
discovery.py # Skill 发现与结构识别
graph.py # 资产图构建与遍历
analyzer.py # 风险评分与证据生成
reporter.py # JSON/终端输出
rules/ # 规则文件
scripts/ # CLI 入口
tests/ # 测试套件(26 个用例)
docs/ # 文档
检测策略(三阶段演进)
| 阶段 | 方法 | 优势 | 局限 | | — | — | — | — | | Phase 1 (当前) | 正则规则扫描 | 快、易解释、易扩展 | 误报偏多、语义理解有限 | | Phase 2 | 结构化扫描 | 引用链、命令链、依赖链分析 | 需更多上下文 | | Phase 3 | 策略评分 | 严重程度+置信度+影响范围 | 需更多训练数据 |
实测数据
基于 788 个真实 Skill 的批量扫描结果,经过多轮误报消除。
扫描结果分布
| 等级 | 数量 | 占比 | 说明 | | — | — | — | — | | BLOCK | 17 | 2.2% | 高危,检测到代码执行、渗透测试、敏感操作 | | REVIEW | 52 | 6.6% | 中危,存在需确认的操作 | | ALLOW | 719 | 91.2% | 低风险,已放行 |
误报消除(6 轮迭代)
| 轮次 | 修复规则 | 根因 | 修复方式 | 减少 BLOCK |
| — | — | — | — | — |
| 1 | compile | re.compile() 正则编译 | 加 (?<!re\.) 排除 | -3 |
| 2 | Unicode 同形字 | (?i) 下 ſ→s,ı→i | 移除 ıİſẞ,仅保留 ff-st | -4 |
| 3 | CVE-XXXX-XXXXX | 漏洞数据库 CVE 列表 | 要求 exploit/poc/payload 上下文 | -5 |
| 4 | page.evaluate() | Playwright 标准 API | 要求 fetch/cookie/localStorage 上下文 | -5 |
| 5 | keylogger | 文档关键词列表 | 要求 import/exec/eval 上下文 | -4 |
| 6 | UNION SELECT / SLEEP() | 安全文档 SQL 示例 | 要求 FROM/password/admin 上下文 | -3 |
典型 Skill 修复前后对比
| Skill | 修复前评分 | 修复后评分 | 等级变化 | | — | — | — | — | | dependency-auditor | 833 | 3 | block → allow | | browser-automation | 150 | 0 | block → allow | | knowledge-ops | 19 | 0 | review → allow | | senior-secops | 193 | 29 | block → block | | security-pen-testing | 266 | 71 | block → block | | skill-tester | 283 | 167 | block → block |
剩余 17 个 BLOCK 技能
| Skill | 评分 | 主要风险 | | — | — | — | | skill-security-auditor | 192 | 隐蔽下载与远程执行(53)、敏感信息泄露(4) | | skill-tester | 167 | 隐蔽下载与远程执行(27)、敏感信息泄露(9) | | docker-development | 82 | 隐蔽下载与远程执行(5)、文件破坏与目录篡改(3) | | security-pen-testing | 71 | 隐蔽下载与远程执行(37)、提示注入(6) | | agent-platform-migrate-from-ai-studio | 48 | 隐蔽下载与远程执行(3)、敏感信息泄露(2) | | code-reviewer | 40 | 隐蔽下载与远程执行(14) | | pr-review-expert | 31 | 敏感信息泄露(3)、文件破坏与目录篡改(1) | | senior-secops | 29 | 隐蔽下载与远程执行(7)、敏感信息泄露(1) | | senior-security | 26 | 隐蔽下载与远程执行(4)、提示注入(2) |
剩余 BLOCK 技能多为安全审计/渗透测试工具,其
subprocess/eval/exec调用属于工具功能本身,需人工判断使用场景。
许可
MIT License
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:摸鱼信安 《SkillSentinel — Skill 安全扫描哨兵》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论