审计上下文构建
深度上下文构建技能 (超细粒度纯上下文模式)
1. 目的
本技能规定了 Claude 在审计的上下文构建阶段的思考方式。
激活后,Claude 将:
- 默认执行逐行/逐块的代码分析。
- 在微观尺度上应用第一性原理 (First Principles)、5 Why 分析法和 5 How 分析法。
- 持续建立“洞察 $\rightarrow$ 函数 $\rightarrow$ 模块 $\rightarrow$ 整个系统”的链接。
- 维护一个稳定且明确的心理模型,并随新证据的出现而演进。
- 识别不变式 (Invariants)、假设、流程和推理陷阱。
本技能定义了一套结构化的分析格式(见下文“函数微观分析示例”),并在漏洞挖掘阶段之前运行。
---
使用场景
适用场景:- 在发现 Bug 或漏洞之前需要深度理解。
- 需要自下而上的理解,而非高层级的猜测。
- 必须减少幻觉、矛盾和上下文丢失。
- 为安全审计、架构评审或威胁建模做准备。
不适用于:
- 漏洞发现
- 修复建议
- Exploit 推演
- 严重程度/影响评级
---
2. 技能行为
激活后,Claude 将:
- 默认对每个代码块和每一行进行超细粒度分析。
- 应用微观层面的第一性原理、5 Why 和 5 How。
- 构建并完善一个持久的全局心理模型。
- 当之前的假设被推翻时及时更新(例如:“之前我认为是 X;现在发现是 Y。”)。
- 定期进行锚点总结以维持稳定的上下文。
- 避免臆测;必要时明确表达不确定性。
目标:深度、准确的理解,而非得出结论。
---
合理化陷阱 (不可跳过)
| 常见合理化借口 | 错误原因 | 要求采取的行动 |
|-----------------|----------------|-----------------|
| “我大概明白了” | 概括性的理解会遗漏边缘情况 | 必须进行逐行分析 |
| “这个函数很简单” | 简单函数的组合会产生复杂的 Bug | 依然应用 5 Why 分析 |
| “我会记住这个不变式” | 你不会。上下文会衰减。 | 必须明确记录下来 |
| “外部调用大概没问题” | 在证明安全前,外部调用 = 对抗性的 | 深入代码或将其建模为敌对状态 |
| “我可以跳过这个辅助函数” | 辅助函数包含会传递的假设 | 追踪完整的调用链 |
| “这太花时间了” | 上下文构建仓促 $\rightarrow$ 后期产生幻觉漏洞 | 慢即是快 |
---
3. 第一阶段 — 初始定向 (自下而上扫描)
在深度分析之前,Claude 将进行最小化映射:
1. 识别主要模块/文件/合约。
2. 记录明显的公共/外部入口点。
3. 识别可能的角色(用户、所有者、中继器、预言机、其他合约)。
4. 识别重要的存储变量、字典、状态结构体或单元 (cells)。
5. 构建初步结构,不对行为做假设。
这为详细分析建立了锚点。
---
4. 第二阶段 — 超细粒度函数分析 (默认模式)
每个非平凡函数都将接受完整的微观分析。
5.1 函数微观结构检查清单
针对每个函数:
1. 目的
- 函数存在的原因及其在系统中的角色。
2. 输入与假设
- 参数和隐式输入(状态、发送者、环境)。
- 前置条件和约束。
3. 输出与影响
- 返回值。
-
- 状态/存储写入。
- 事件/消息。
- 外部交互。
4. 逐块/逐行分析
针对每个逻辑块:
- 它的功能。
- 为什么出现在此处(排序逻辑)。
- 它依赖于哪些假设。
- 它建立或维护了哪些不变性(Invariants)。
- 后续哪些逻辑依赖于它。
对每个块应用:
- 第一性原理 (First Principles)
- 5 Whys (五个为什么)
- 5 Hows (五个怎么做)
---
5.2 跨函数与外部流程分析
*(全面集成“跳转至外部代码”规则)*在遇到调用时,跨越边界继续执行相同的微观第一性分析。
#### 内部调用
- 立即跳转至被调用者。
- 对相关代码进行逐块分析。
- 追踪数据流、假设和不变性:
调用者 $\rightarrow$ 被调用者 $\rightarrow$ 返回 $\rightarrow$ 调用者。
- 记录被调用者逻辑在此特定调用上下文中是否表现不同。
#### 外部调用 —— 分两种情况
情况 A — 调用代码库中存在的合约
将其视为内部调用:
- 跳转至目标合约/函数。
- 继续进行逐块微观分析。
- 无缝传递不变性和假设。
- 基于*实际*代码而非黑盒猜测来考虑边缘情况。
情况 B — 调用无可用代码的合约(真正的外部/黑盒)
将其视为对抗性分析:
- 描述发送的 Payload/Value/Gas 或参数。
- 识别对目标的假设。
- 考虑所有可能的结果:
- revert(回滚)
- 错误/异常的返回值
- 意外的状态变更
- 行为异常
- 重入(如果适用)
#### 连续性规则
将整个调用链视为一个连续的执行流。
绝不要重置上下文。
所有不变性、假设和数据依赖必须在调用之间传递。
---
5.3 完整分析示例
请参阅 FUNCTION_MICRO_ANALYSIS_EXAMPLE.md 以获取完整演示,包括:
- DEX swap 函数的完整微观分析
- 第一性原理、5 Whys 和 5 Hows 的应用
- 包含不变性和假设的逐块分析
- 跨函数依赖映射
- 外部交互的风险分析
该示例展示了所有分析函数所需的深度和结构水平。
---
5.4 输出要求
在进行超细粒度分析时,Claude 必须遵循 OUTPUT_REQUIREMENTS.md 中定义的格式构建输出。
关键要求:
- 目的 (Purpose)(至少 2-3 句话)
- 输入与假设 (Inputs & Assumptions)(所有参数、前置条件、信任假设)
- 输出与影响 (Outputs & Effects)(返回值、状态写入、外部调用、事件、后置条件)
- 逐块分析 (Block-by-Block Analysis)(做什么、为何在此、假设、第一性原理/5 Whys/5 Hows)
- 跨函数依赖 (Cross-Function Dependencies)(内部调用、带风险分析的外部调用、共享状态)
质量阈值:
- 每个函数至少 3 个不变性
- 至少记录 5 个假设
- 外部交互至少 3 项风险考量
- 至少 1 次第一性原理应用
- 至少 3 次 5 Whys/5 Hows 综合应用
---
5.5 完整性检查清单
在结束函数的微观分析前,请对照 COMPLETENESS_CHECKLIST.md 进行验证:
- 结构完整性:所有必要章节均已包含(目的、输入、输出、逐块分析、依赖)
- 内容深度:达到最低阈值(不变性、假设、风险分析、第一性原理)
- 连续性与集成:交叉引用、传递的假设、不变性耦合
- 反幻觉:行
当所有检查清单项均已满足且不存在未解决的“不明确”项时,分析即告完成。
---
5. 第三阶段 —— 全局系统理解
在完成充分的微观分析后:
1. 状态与不变式重构
- 映射每个状态变量的读/写操作。
- 推导跨函数和跨模块的不变式(Invariants)。
2. 工作流重构
- 识别端到端流程(如:存款、取款、生命周期、升级)。
- 追踪状态在这些流程中的转换过程。
- 记录在各步骤中持续存在的假设。
3. 信任边界映射
- 角色 $\rightarrow$ 入口点 $\rightarrow$ 行为。
- 识别不可信的输入路径。
- 权限变更及隐式角色预期。
4. 复杂度与脆弱性聚类
- 包含大量假设的函数。
- 高分支逻辑。
- 多步依赖关系。
- 跨模块的耦合状态变更。
这些聚类将为漏洞挖掘阶段提供引导。
---
6. 稳定性与一致性规则
*(反幻觉,反矛盾)*Claude 必须:
- 绝不为了迎合先前的假设而篡改证据。
- 定期锚定关键事实
- 避免模糊猜测
- 持续进行交叉引用
---
7. 子代理(Subagent)的使用
Claude 可针对以下场景创建子代理:
- 密集或复杂的函数。
- 冗长的数据流或控制流链。
- 加密/数学逻辑。
- 复杂的状态机。
- 跨模块的工作流重构。
使用 function-analyzer 代理进行单函数深度分析。
该代理遵循本技能定义的所有微观结构检查清单、跨函数流规则和质量阈值,并执行纯上下文构建约束。
子代理必须:
- 遵循相同的“微观优先”规则。
- 返回摘要,由 Claude 集成到其全局模型中。
---
8. 与其他阶段的关系
本技能在以下阶段之前运行:
- 漏洞发现
- 分类/分诊
- 报告撰写
- 影响建模
- Exploit 推演
其唯一目的是构建:
- 深度理解
- 稳定的上下文
- 系统级清晰度
---
9. 非目标
在执行本技能期间,Claude 不应:
- 识别漏洞
- 提出修复方案
- 生成概念验证(PoC)
- 建模 Exploit
- 评定严重程度或影响
这仅是纯粹的上下文构建。
局限性
- 仅在任务明确符合上述范围时使用此技能。
- 不要将输出视为环境特定验证、测试或专家评审的替代方案。
- 如果缺失必要的输入、权限、安全边界或成功标准,请停止并请求澄清。