尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

security-audit-skill 台账校验器源码导读:状态不变量如何守护安全审计的单一事实源

security-audit-skill 台账校验器源码导读:状态不变量如何守护安全审计的单一事实源 security-audit-skill 台账校验器源码导读状态不变量如何守护安全审计的单一事实源【免费下载链接】security-audit-skillA coding-agent skill for multi-phase security audits with independently verified, machine-readable findings项目地址: https://gitcode.com/GitHub_Trending/se/security-audit-skillsecurity-audit-skill 是一个面向编程智能体的安全审计技能coding-agent skill它将 AI 智能体变成结构化的安全审计员。这篇文章导读其中的核心脚本validate-coverage-ledger.cjs——台账校验器讲清楚它如何为coverage-ledger.json这本审计账本设定状态不变量state invariants让多智能体审计的每一步都可验证、可追溯。不需要 Node.js 基础也能读懂。先搞懂台账审计过程中的唯一事实源 整个安全审计分六个阶段侦察 → 覆盖驱动的猎捕 → 候选验证 → 结构化输出 → 独立复核 → 中立报告。其中第一阶段的侦察阶段会生成 coverage-ledger.json 台账后续每个猎手hunter智能体的分配、进度、证据都记录在这里。README 中有一句话点明了校验器的角色父智能体在创建台账之后以及每次后续更新台账之后都会运行validate-coverage-ledger.cjs。也就是说台账是谁、审了哪些代码、审到什么程度、留下了什么证据的单一事实源single source of truth。而校验器就是看门人——任何一次更新只要违反规则立刻被拒。这就是状态不变量的由来无论台账经历多少轮更新某些逻辑关系必须永远成立。一次校验的完整旅程五道关卡 打开 validate-coverage-ledger.cjs全文 872 行零依赖整个流程像一条流水线输入文件要连闯五道关卡关卡函数检查什么1️⃣ 安全读取readFileWithinLimit拒绝符号链接、FIFO、超大文件、非法 UTF-82️⃣ 文本预检preflightJsonText在JSON.parse之前先逐字符扫描结构防栈溢出3️⃣ 文档预检preflightDocument对解析后的文档做深度/规模二次复核4️⃣ 单元级校验collectUnitErrors必填字段、规范 ID、安全路径、状态不变量5️⃣ 跨单元一致性validateDocument重复 ID、语义冲突、字典序排序值得注意的两个防御性设计限制常量集中管理LIMITS 把最多 5MB 输入、10000 个顶层单元、每个数组 1000 项、嵌套深度 64、总计 50 万个值等上限写在一处。测试套件专门构造了 200 万层嵌套的恶意输入来验证校验器用迭代而非递归实现绝不会栈溢出只会报出exceeds nesting depth limit 64。诊断信息自身也要安全错误消息里出现的控制字符如终端转义序列、RTL 覆盖符会被 safeQuote 转义成\uXXXX错误总数封顶 100 条。一个会回显用户输入的校验器本身不能成为注入面。重头戏状态机与证据不变量 ⚖️台账里每个单元unit有一个status字段共 8 种取值见 STATUSES。核心校验函数 validateStateInvariants 强制的是一条简单而有力的规则状态决定证据——什么状态就只能有什么证据。下面这张表就是整个校验器的灵魂✅要求非空⛔要求为空⬜无约束状态负责人 agent_id审阅路径 reviewed_paths本地检查 local_checks结果指纹 result_fingerprints未决事实 unresolvedplanned已计划必须为 null⛔⛔⛔⛔in_progress进行中必须非空⛔⛔⛔⛔blocked受阻必须非空✅✅⛔✅covered已覆盖必须非空✅✅⛔⛔candidate候选漏洞必须非空✅✅✅⬜not_applicable/out_of_scope/deferred必须为 null⛔⛔⛔✅这张表能防住三类典型说谎提前报功planned单元必须没有任何证据和负责人。想跳过侦察直接标记covered对不起covered要求非空的审阅路径和检查记录。证据与结论矛盾covered已确认安全却还挂着未决事实或blocked受阻却给出了结论指纹——都会被拦截。指纹越权result_fingerprints是候选漏洞的编号只有candidate状态允许持有其他状态一律必须为空。还有一条跨字段不变量由 validateReviewedPathOwnership 保证单元级的reviewed_paths必须恰好等于它名下所有检查各自reviewed_paths的并集——每行代码的审阅都必须有明确的负责人agent而负责人的证据也不得凭空出现在聚合列表之外。换人机制attempts 归档与新鲜负责人 多智能体审计有一条铁律README 称之为Adversarial validation验证发现的智能体绝不能是发现它的智能体。当批评者critic智能体发现某个分配有问题需要重新指派时校验器强制三件事规则集中在 validateAttempts旧状态必须整体归档进attempts并递增wave波次归档的 wave 必须严格递增且小于当前 wave新负责人必须是新鲜的任何出现在历史尝试里的agent_id都不能再当新负责人连历史证据local_checks 里的 owner也不能挪到当前状态里产物不可复用某次尝试产生的 artifact 文件之后的尝试不能再次引用。效果是重分配永远是清场重来旧证据留在档案里新负责人带着干净的上下文进场。这在 HUNTING.md 的编排规则里与 critic 机制配合构成了整个工作流的对抗性验证基础。身份系统规范 ID、安全路径与 Agent 命名 除了状态机还有三套身份不变量规范覆盖 IDcanonical ID由 canonicalCoverageId 从canonical_refs的四个字段surface / boundary / subsystem / attack_class按固定顺序 URL 编码后用::拼接而成。单元里手写的coverage_id必须与之逐字节相等——手写一个好记的别名会被直接判错。跨单元层面校验器还会拒绝重复 ID、拒绝不同 ID 指向同一语义元组的别名并要求全部单元按 ID 字典序排列方便 diff 与多次运行合并。安全相对路径isSafeRelativePath 拒绝绝对路径、..穿越、Windows 保留名con、prn、com1…、尾随空格/点号、不可见控制字符等近 20 种写法。Agent 命名isSafeAgentId 只接受小写字母数字开头、总长 64 以内的 ID并避开 Windows 设备名。因为 agent_id 会被用来构造agents/id/artifacts/产物目录——命名不安全等于把路径穿越的口子留给了智能体自己。30 秒上手运行 校验器就是普通 Node.js 脚本用法一行见文件头部注释node validate-coverage-ledger.cjs path-to-coverage-ledger.json输出只有两种全部通过时打印PASS: N coverage units valid退出码 0否则逐条打印ERROR:明细并以FAIL: N validation error(s)结尾退出码 1。配套测试 validate-coverage-ledger.test.cjs 多达 740 行其中不乏敌意用例终端控制字符注入、FIFO 管道、符号链接、受限堆内存下的深度嵌套……校验器的每一个防御点都有对应的回归测试。关键文件速查 文件作用validate-coverage-ledger.cjs台账校验器本体872 行零依赖validate-coverage-ledger.test.cjs校验器测试套件含大量恶意输入用例HUNTING.md阶段 2 编排规则critic 重分配、attempts 归档RECONNAISSANCE.md阶段 1 侦察台账的诞生SKILL.md六阶段工作流总览与预算机制README.md项目说明、文件清单与设计原则总结不变量思维给审计工程上了三道锁 状态即合同8 种状态各自绑定明确的证据形态让进度无法与证据脱节机器可判定任何一次台账更新是否诚实换人即清场attempts 归档 新鲜负责人规则把自己审自己从道德约定变成了语法错误校验器自身也要被审计5MB 上限、迭代式预检、诊断转义、路径白名单——它防的不仅是坏数据还有坏数据背后的恶意输入。这正是 README.md 中设计原则的落地让 AI 智能体做安全审计前提是审计过程本身必须比被审计对象更可信。【免费下载链接】security-audit-skillA coding-agent skill for multi-phase security audits with independently verified, machine-readable findings项目地址: https://gitcode.com/GitHub_Trending/se/security-audit-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表