Agentic Awesome Skills 安全护栏与策略:Agent 攻防技能的规则制定与落地实践
【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,115+ agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址: https://gitcode.com/gh_mirrors/an/agentic-awesome-skills
导读:本篇文章以仓库 docs/contributors/security-guardrails.md 为骨架,系统讲解 Agentic Awesome Skills(AAS)针对进攻型(Offensive)与防守型(Defensive)技能制定的《交战规则》(Rules of Engagement)。你将了解进攻技能必须内嵌的 "Authorized Use Only" 免责声明与强制确认门禁、防守技能的数据隐私与只读审计约束、外部技能源的安装审查流程,以及这些策略如何通过元数据风险分级、
security:docs文档扫描器和security:scan静态扫描器在仓库中机械化落地。
Agentic Awesome Skills 是本地优先的 Agent 控制平面(AAS Core),承载 2,100+ 个可被 Agent 自主发现、选择与编排的 agentic skills。技能库中既有纯推理类文本技能,也包含渗透测试、SQL 注入评估、Red Teaming 等具备真实系统交互能力的进攻技能。仓库在 docs/contributors/security-guardrails.md 中明确声明:"With great power comes great responsibility"——本文档即为所有安全与进攻能力的交战规则,是技能作者、审阅者与使用者都必须遵守的底线。
进攻技能策略("红线")
什么是进攻技能
文档给出的定义是:任何被设计用于渗透、利用、破坏或模拟对系统攻击的技能。典型例子包括:
- Pentesting(渗透测试)
- SQL Injection(SQL 注入评估)
- Phishing Simulation(钓鱼模拟)
- Red Teaming(红队演练)
这类技能并不少见,例如仓库中的 pentest-checklist(风险分级risk: offensive,frontmatter 第 4 行)与 sql-injection-testing(同样声明risk: offensive),都属于典型的进攻型技能。它们的存在价值是让持有授权的安全人员高效开展工作,但也因此成为仓库安全策略监管的重心。
1. "仅限授权使用"声明(Authorized Use Only Disclaimer)
策略第一条是硬性要求:每个进攻技能必须在SKILL.md中以此精确文本开头:
⚠️ AUTHORIZED USE ONLYThis skill is for educational purposes or authorized security assessments only. You must have explicit, written permission from the system owner before using this tool. Misuse of this tool is illegal and strictly prohibited.
这一要求在仓库源码中得到了完全一致的回响。pentest-checklist的 SKILL.md 与sql-injection-testing的 SKILL.md 均在文件第 10 行起逐字嵌入上述声明;两处还追加了第二道提示行:"AUTHORIZED USE ONLY: Use this skill only for authorized security assessments, defensive validation, or controlled educational environments."(仅用于授权安全评估、防御性验证或受控教育环境)。
与此同时,仓库的元数据校验体系把"是否带该警告"升级为可机器检查的硬约束。docs/contributors/quality-bar.md 明确规定风险分级🔴 offensive的技能MUST带有 "Authorized Use Only" 警告;docs/contributors/quality-bar.md 又定义了完整的风险枚举[none, safe, critical, offensive, unknown]。这意味着"免责声明"不再只是文档姿态,而是提交评审时会被校验器与人工双重把关的形式化字段。
2. 强制用户确认(Mandatory User Confirmation)
策略第二条明确:进攻技能绝不允许全自主运行。
在每次对目标执行以下任一动作的命令之前,Agent 必须完成"收集—展示—等待"三步:
- 收集:目标系统(exact target)与书面授权确认(written-authorization confirmation)及允许范围(permitted scope);
- 展示:将要执行的确切命令及其预期效果;
- 等待:在当前对话中等待用户的显式确认。
只有在获得确认后才可以继续;未获确认时,技能必须保持只读(read-only),仅提供防御性指导。
源码中的落地远比文档描述更具体。sql-injection-testing的 SKILL.md 内嵌了完整的 "Mandatory confirmation gate"(强制确认门禁):
在对目标执行任何会探测(probes)、利用(exploits)、更改(changes)、持久化(persists on)、提取数据(extracts data from)或尝试凭据访问(attempts credential access)的命令之前:
- 让用户陈述确切的目标 URL、IP、账户或资源;
- 让用户确认书面授权与允许范围;
- 展示确切的命令并解释预期效果;
- 在当前对话中等待显式确认。
若无此确认,保持只读并提供防御性指导。优先使用沙箱、一次性虚拟机或受控实验环境。
pentest-checklist的 SKILL.md 使用了逐字相同的门禁文本。从实现角度看,"确认门禁"被设计为 Agent 提示词层面的行为约束——它没有也不应该依赖某个强制执行的运行时开关,而是通过"每次交互都必须回到用户"的指令结构,从机制上阻断自主无监督的进攻行为。
3. 安全设计(Safe by Design)
策略第三条对技能内容本身提出两条约束:
- 无武器化载荷(No Weaponized Payloads):技能不应包含活跃的恶意软件、勒索软件或非教育目的的利用代码(exploits)。
- 建议沙箱(Sandbox Recommended):技能说明中应建议在受控环境中运行(Docker/VM)。
从源码看,这类"安全设计"提示同样渗透进技能的实操章节。pentest-checklist在 SKILL.md 的环境准备阶段给出三种环境的取舍表:
Production - Realistic but risky (生产环境:真实但有风险) Staging - Safer but may differ from production (预发布:更安全但与生产可能不一致) Clone - Ideal but resource-intensive (克隆环境:理想但资源密集)并在环境准备中建议对目标进行沙箱隔离与可回滚配置,这正与"Sandbox Recommended"的策略遥相呼应。
防守技能策略
什么是防守技能
文档定义:用于加固(hardening)、审计(auditing)、监控(monitoring)或保护(protecting)系统的工具。典型例子:
- Linting(代码/配置检查)
- Log Analysis(日志分析)
- Configuration Auditing(配置审计)
仓库中存在大量这类技能,例如 bash-defensive-patterns、accesslint-audit、security-audit 等,它们与进攻技能构成同一库中的两条主线。
防守技能的四项约束
文档为防守技能规定四条原则:
- 数据隐私(Data Privacy):未经用户明确同意,防守技能不得将数据上传至第三方服务器。
- 非破坏性(Non-Destructive):审计默认应为只读(read-only)。
- 文档审查(Documentation Review):即使防守技能包含命令示例,也必须审查其是否存在不安全的命令模式。
- 高风险示例管控:
curl|bash、wget|sh等高风险模式如果因操作需要被保留,必须在技能正文中使用显式的白名单注释(allowlisting comments)与清晰的警告上下文。
第 4 条在仓库工具链中有非常精确的实现。npm run security:docs实际执行的是 tools/scripts/tests/docs_security_content.test.js,它是一条仓库级的文档安全扫描:
- 扫描命令管道类危险模式,如
curl ... | bash|sh|zsh、wget ... | sh、irm/iwr ... | iex(见 docs_security_content.test.js 的curl-pipe-bash、irm-pipe-iex等用例定义); - 扫描内联 token/密钥样式的命令示例;
- 允许通过
<!-- security-allowlist: ... -->注释显式豁免经过审慎评估的高风险文档命令。
允许行(allowed line)的判断逻辑位于 docs_security_content.test.js,它会从行内正则匹配#|<!--形式的security-allowlist标记(支持<!-- security-allowlist: reason -->带原因的形式)。配套的 tools/scripts/security_scanner.py 定义了与上述规则一致的静态扫描正则(curl\b[^\n]*\|\s*(?:bash|sh|zsh)等),并在 security_scanner.py 中同时识别# security-allowlist、// security-allowlist、<!-- security-allowlist、-- security-allowlist四种注释形态,作为npm run security:scan的扫描后端。测试文件 test_security_scanner.py 与 security_findings_regressions.test.js 还专门回归验证"不允许文档推荐管道安装脚本"(如curl ... | bash)这一红线。
外部源安装(External Source Installation)
针对从外部克隆或下载技能的行为,文档提出一套严格的"先审查、后启用"流程:
- 禁止直接克隆/下载移动分支到活动的技能(skills)、插件(plugin)、钩子(hook)或 Agent 配置目录;
- 固定版本:将外部示例固定到完整的、已审查的 commit 或不可变 release,克隆到临时审查目录,并在启用前检查每一个捆绑文件;
- 必须报告:脚本、包生命周期钩子(package lifecycle hooks)、符号链接(symlinks)、二进制文件、网络访问、凭据处理、特权操作与破坏性操作;
- 双重审批:下载前获得用户明确批准,复制安装、安装依赖、启用钩子或修改 Agent 配置前再次获得批准;
- 固定不等于信任:一个 pin 提供的是可复现性(reproducibility)而非信任证明,升级即需要新一轮审查。
这条策略与仓库整体的供应安全(supply-chain)意识一致。docs/contributors/quality-bar.md 明确提示:"Source attribution identifies origin; it does not prove current maintenance, efficacy or security"(来源归属只说明出处,不能证明维护质量、有效性或安全性),并要求保留原始署名与许可声明、记录修改痕迹——正是对"pin 不等于 trust"的进一步延伸。
元数据风险分级:让护栏可机器校验
安全护栏不只是文档文本,它通过frontmatter 中的risk字段融入每个技能的元数据,形成可校验的闭环:
| 级别 | 含义 | 典型示例 |
|---|---|---|
⚪unknown | 遗留或未分类内容,新技能应尽量避免 | 待维护者 triage 的旧技能 |
🟢none | 纯文本/推理,无副作用 | Brainstorming |
🔵safe | 读取文件、执行安全命令 | Linter |
🟠critical | 修改状态、删除文件、推送生产 | Git Push |
🔴offensive | 渗透测试/红队工具,必须带 Authorized Use Only 警告 | Pentest Checklist、SQL Injection Testing |
该分级定义在 docs/contributors/quality-bar.md,并由 tools/scripts/validate_skills.py(通过npm run validate调用)校验字段的存在性与合法性;risk必须且只能取[none, safe, critical, offensive, unknown]之一(quality-bar.md)。仓库中的真实技能也在严格执行这一约定:pentest-checklist与sql-injection-testing的 frontmatter 均声明risk: offensive。
从源码结构可以推断:风险分级同时服务两条链路——机器侧(校验器检查字段与警告存在性)与人工侧(offensive/critical 技能的语义审查);正如 quality-bar.md 所强调的,风险标签是"声明的元数据",审计只验证其存在与形态,risk: unknown等模糊情况仍需语义审查而非词法推断。
验证命令速查
将上述策略落到日常工作中,仓库在 package.json 中提供了以下可直接运行的验证命令:
# 文档安全扫描:扫描 curl|bash、wget|sh、irm|iex 等危险模式与内联密钥 npm run security:docs # 全库静态安全扫描(Python 后端 security_scanner.py) npm run security:scan # 严格模式安全扫描 npm run security:scan:strict # 常规技能校验(元数据完整性、风险字段、示例、限制等) npm run validate # 维护者视角的全库合规/可用性审计报告 npm run audit:skills # 引用有效性校验 npm run validate:references按照 docs/contributors/quality-bar.md 的说明:
npm run validate是贡献者的操作级门禁(operational contributor gate);npm run security:docs对含命令或高风险内容的技能必须通过;- 触碰到
SKILL.md的 PR 还会触发 GitHub Actions 的skill-review自动评审工作流,评审结果会作为 PR 质量门禁的一部分; - 自动检查不能替代人工审阅者对逻辑、安全性与潜在失败模式的判断——即使所有自动化门禁通过,涉及技能变更与高风险指导的内容在合并前仍需人工逻辑评审。
法律免责声明
文档最后给出使用条款式的法律声明:使用本仓库即表示你同意——
- 你对自己的行为负责;
- 作者与贡献者不对这些工具造成的任何损害负责;
- 你将遵守所有适用的本地、州与联邦网络安全法律。
结语
Agentic Awesome Skills 的安全护栏策略可以归纳为一句话:能力越大,责任越大,且责任必须可验证。进攻技能用"Authorized Use Only 声明 + 强制确认门禁 + 沙箱建议"三道闸门约束 Agent 行为;防守技能用"数据隐私 + 只读审计 + 文档命令审查"守住底线;外部源安装用"固定版本 + 临时目录审查 + 双重审批"管控供应链风险。而这一切,最终都被沉淀为可机器校验的risk元数据、security:docs/security:scan扫描器和skill-review工作流——让"安全"从口号变成仓库中可执行、可回归、可审计的工程实践。
【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,115+ agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址: https://gitcode.com/gh_mirrors/an/agentic-awesome-skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考