关于 audit-context-building
用于安全审计前建立代码上下文的 Claude Skill,适合需要深入理解代码、架构或威胁边界的分析者。它强调逐块追踪函数调用、状态与假设,并明确排除漏洞结论和修复建议。
主要功能
- 01自底向上梳理技术栈与模块
- 02逐块分析函数输入、输出和副作用
- 03跨调用追踪数据流与不变量
- 04重建系统工作流和信任边界
- 05记录不确定性并持续修正模型
适用场景
- 01漏洞搜寻前理解完整代码路径
- 02梳理模块间状态变化与依赖
- 03为架构审查或威胁建模建立上下文
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ workersio/ skills --skill audit-context-building安装后在 Claude Code 中输入/audit-context-building确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/function-analyzer.mdresources/COMPLETENESS_CHECKLIST.mdFUNCTION_MICRO_ANALYSIS_EXAMPLE.mdOUTPUT_REQUIREMENTS.md详细介绍
深度上下文构建技能
1. 目的
此技能规定了在审计的上下文构建阶段,Claude 应如何思考。
启用后,Claude 将:
- 默认按逐行/逐块分析代码。
- 在微观层面应用第一性原理、5 个为什么和5 个如何。
- 持续串联洞见 -> 函数 -> 模块 -> 整个系统。
- 维护稳定、明确且会随新证据不断演进的思维模型。
- 识别不变量、假设、流程和推理风险。
此技能定义了结构化的分析格式,并在漏洞搜寻阶段之前运行。
2. 何时使用此技能
适用于:
- 发现 Bug 或漏洞之前需要深入理解。
- 希望自底向上地理解,而非进行高层猜测。
- 减少幻觉、矛盾和上下文丢失至关重要。
- 准备进行安全审计、架构审查或威胁建模。
请勿用于:
- 漏洞发现
- 修复建议
- 漏洞利用推理
- 严重性/影响评级
3. 此技能的行为方式
启用后,Claude 将:
- 默认对每个代码块和每行代码进行极其细致的分析。
- 在微观层面应用第一性原理、5 个为什么和 5 个如何。
- 构建并完善持久的全局思维模型。
- 在发现矛盾时更新先前的假设(“我之前认为是 X;现在认为是 Y。”)。
- 定期总结要点,以维持稳定的上下文。
- 避免猜测;必要时明确表达不确定性。
目标:深入、准确地理解,而非得出结论。
合理化理由(请勿跳过)
| 合理化理由 | 错在哪里 | 必须采取的行动 |
|---|---|---|
| “我大致明白了” | 只理解大意会遗漏边缘情况 | 必须逐行分析 |
| “这个函数很简单” | 简单函数组合起来也会产生复杂 Bug | 无论如何都要应用 5 个为什么 |
| “我会记住这个不变量” | 你不会。上下文会逐渐衰减。 | 明确记录下来 |
| “外部调用应该没问题” | 外部调用都具有对抗性,除非已证实并非如此 | 深入查看代码,或将其建模为恶意输入 |
| “我可以跳过这个辅助函数” | 辅助函数中的假设会不断传播 | 追踪完整的调用链 |
| “这花的时间太长了” | 仓促构建上下文会导致之后产生幻觉式漏洞 | 慢即是快 |
4. 阶段 1 -- 初步定向(自底向上扫描)
深入分析前,先进行最基本的映射:
- 识别技术栈 -- 确定语言、框架、数据库、身份验证提供方、包管理器。
- 识别主要模块/文件/合约。
- 记录明显的公开/外部入口点(HTTP 路由、RPC 处理程序、CLI 命令、Webhook)。
- 识别可能的参与者(用户、管理员、服务、外部集成)。
- 识别重要的存储(数据库表、状态结构体、配置、环境变量)。
- 在不预设行为的前提下,构建初步结构。
这将为详细分析建立锚点。
5. 阶段 2 -- 极细粒度函数分析(默认模式)
对每个重要函数进行完整的微观分析。
5.1 单个函数的微观结构检查清单
对于每个函数:
-
目的
- 该函数存在的原因,以及它在系统中的作用。
-
输入与假设
- 参数和隐式输入(状态、发送者、环境)。
- 前置条件和约束。
-
输出与影响
- 返回值。
- 状态/存储写入。
- 事件/消息。
- 外部交互。
-
逐块/逐行分析 对于每个逻辑块:
- 它做了什么。
- 为什么出现在这里(顺序逻辑)。
- 它依赖哪些假设。
- 它建立或维护哪些不变量。
- 后续有哪些逻辑依赖它。
对每个代码块应用:
- 第一性原理
- 5 个为什么
- 5 个如何
5.2 跨函数与外部流程分析
遇到调用时,应跨越边界继续采用相同的微观优先分析方式。
内部调用
- 立即跳转到被调用函数。
- 对相关代码逐块进行分析。
- 跟踪数据流、假设和不变量: 调用方 -> 被调用方 -> 返回 -> 调用方。
- 记录被调用函数的逻辑在此特定调用上下文中是否表现不同。
外部调用——两种情况
情况 A——调用代码库中存在的代码 按内部调用处理:
- 跳转到目标函数。
- 继续逐块进行细粒度分析。
- 无缝传递不变量和假设。
- 根据实际代码考虑边界情况,不要进行黑盒猜测。
情况 B——调用时无法获取代码(真正的外部调用/黑盒) 按对抗性方式分析:
- 描述发送的负载/参数。
- 确定对目标的假设。
- 考虑所有结果:失败、返回值不正确、状态发生意外变化、行为异常。
连续性规则
将整个调用链视为一个连续的执行流程。 绝不重置上下文。 所有不变量、假设和数据依赖都必须在调用间传递。
5.3 完整分析示例
完整演练请参阅 FUNCTION_MICRO_ANALYSIS_EXAMPLE.md。
5.4 输出要求
按照 OUTPUT_REQUIREMENTS.md 组织输出。
质量门槛:
- 每个函数至少 3 个不变量
- 至少记录 5 个假设
- 至少考虑 3 个外部交互风险
- 至少应用 1 次第一性原理
- 至少结合应用 3 次 5 Whys/5 Hows
5.5 完整性检查清单
结束前,请对照 COMPLETENESS_CHECKLIST.md 进行检查。
6. 阶段 3——全局系统理解
完成足够的细粒度分析后:
- 状态与不变量重建——梳理每个状态变量的读取/写入情况。推导跨函数不变量。
- 工作流重建——识别端到端流程。跟踪状态转换。记录持久性假设。
- 信任边界映射——参与者 -> 入口点 -> 行为。识别不可信输入路径。
- 复杂度与脆弱性聚类——找出假设多、分支复杂、状态变化耦合的函数。
7. 稳定性与一致性规则
- **绝不扭曲证据以迎合先前的假设。**更新模型并明确说明修正内容。
- **定期梳理关键事实。**总结不变量、状态关系、参与者角色和工作流。
- **避免含糊猜测。**使用“尚不明确;需要检查 X。”,而不是“可能……”
- **持续交叉引用。**将新发现与先前的状态、流程和不变量联系起来。
8. 子 Agent 使用
对于密集或复杂的函数、长数据流链、加密逻辑或状态机,请使用 function-analyzer Agent 对每个函数进行深入分析。
9. 非目标
在工作期间,Claude 不应:识别漏洞、提出修复方案、生成 PoC、对漏洞利用建模或评定严重性。
这仅用于构建上下文。