上一篇文章《从事件到监管:为什么加密机构需要区块链渗透测试》阐述了区块链渗透测试为何必要。本文转而探讨它究竟是什么,更详细地考察区块链渗透测试的定义与边界。
目前尚不存在一个被广泛接受的区块链渗透测试正式定义,而许多已提出的定义又将其与其他缓解措施混为一谈,因此审计、扫描和漏洞赏金等标签有时被纳入渗透测试的一部分,尽管每一种手段的目标各不相同。这使得人们更难判断某次评估到底验证了什么。我们的出发点源自学术界与行业实践,刻意保持简单:区块链渗透测试,顾名思义,就是渗透测试——一门已有数十年历史的学科——应用于 web3 生态系统,针对一个正在运行的 web3 环境,以对抗性、全系统的方式进行评估。从这门熟悉的学科出发,再探讨 web3 为威胁模型以及测试人员所需的判断力带来了哪些新增内容。
区块链渗透测试是在约定的环境和交战规则下,对正在运行的系统进行的对抗性、动手实操的评估,旨在验证可被利用的路径和控制链。 它对代码层面的安全审计起到补充作用,也可以作为独立委托的服务 [1]。
它寻求的是路径,而非孤立的弱点,并在明确的授权、范围、访问假设和安全约束下运作。本文回答三个问题:区块链渗透测试是什么、它能验证什么——尤其是超出审计通常提供的证据之外的内容——以及机构应如何从高层次入手开始。
Blockchain Penetration Testing
在合约、节点、API 和云环境中找到可乘之路
web3 增加了什么:资金处理威胁模型
Web3 保留了传统渗透测试所涉及的层面:云基础设施、网站、API、身份、特权访问、供应商以及运维工具。它并没有用一个"仅限区块链"的威胁模型取而代之,而是将该威胁模型延伸到了这样一些系统中——在这些系统里,同样的立足点可以直接导向授权、记账或转移资金的操作。

这种延伸由三个特征所塑造。
-
首先,数字资产可以直接转移。攻击者一旦触及正确的交易或提款路径,就可能在不经过传统支付所使用的相同撤销和对账机制的情况下转移资金。
-
其次,签名往往就是一次资金转移操作。一个密码学上有效的签名证明某个密钥对某个负载进行了授权;但它本身并不能证明操作员看到的是正确的目的地、理解了该笔交易,或遵循了预期的审批策略。
-
第三,当一个机构部署自己的合约时——随着产品增加更丰富的链上功能,这种情况正变得越来越普遍——这些合约可被公开调用并具备可组合性。外部用户和其他合约可以按照该机构无法控制的顺序调用它们。因此,安全性不仅取决于每个组件本身,还取决于身份、应用程序、策略、签名系统、记账逻辑和合约之间的交互方式。
我们将由此产生的风险敞口建模为一条资金处理链——即通向链上交易(以及日益增多的机构自行部署的合约)的链下签名意图、审批和资金逻辑控制——以及支撑这些环节的云、Web、API 和身份层 [1]。攻击者可能从一个普通的立足点开始,逐步跨越多个控制环节:操纵呈现给用户签名的内容、触及某个特权工作流、利用授权缺口,或使资金逻辑接受一个非预期的状态转换。
其中关键的组合缺口在于链下与链上之间的交接环节:即身份、界面、审批、签名和资金逻辑控制是否能在预期动作转变为链上交易时依然保持不变。并非每一次攻击都会贯穿整条链。关键在于,保障目标是跨层面的:那些单独看起来完善的控制措施,仍可能组合成一条穿过运行中的资金处理系统的可利用路径。
区块链渗透测试的作用
区块链渗透测试将这一组合缺口转化为证据。在授权范围和约定规则之内,测试人员将跨层假设转化为攻击场景,针对正在运行的环境执行这些场景,并判断它们是否产生可复现的路径和具体影响。其输出将路径与支持性证据、严重程度、修复建议以及对已达成一致的修复方案的复测联系起来——而不仅仅停留在一份互不关联的弱点清单上。

它的差异化优势在于专业的 web3 安全判断力,而非某种独特的工具箱。测试人员必须解读托管方式、交易意图、审批策略、提款流程、资金记账以及链上交易行为(包括已部署的合约),同时将来自常规云、Web、API、身份及特权访问层面的证据串联起来。工具可以辅助发现或验证,但真正判断所观察到的条件是否构成可信的资金转移路径,靠的是专家判断。
该评估是方法论驱动的、以证据为导向的,并且是针对特定时间点的。其结论适用于被测试的系统、版本、配置、访问假设和条件。潜在路径会被检视;已确认的可利用路径则会以可复现的证据加以记录。
请注意,即便在约定范围内进行系统性的工作,也无法保证发现所有弱点或攻击路径,负责任的渗透测试也不保证测试人员一定能够实现突破。
在机构级 web3 环境中,这一从场景到证据的过程贯穿于五项相互关联的能力——即同一条资金处理链上可被测试的层面。它们涵盖支撑该链条的基础设施、其三个链下控制环节,以及它最终交接给的链上交易;之所以说它们相互关联,是因为单一路径可能会跨越其中数项:
-
生产环境与自动化运维: 测试人员验证访问权限、部署流程、密钥或运维控制是否可以被串联成一次资金处理操作,从而产生将运维立足点与其可触及影响联系起来的证据。
-
Web 与 dApp 前端、授权及签名意图: 测试人员验证呈现给用户或操作员的交易是否可能与最终被授权的操作发生偏离,记录被操纵的流程以及由此产生的签名或提交行为。
-
签名、审批和提款授权链: 测试人员验证身份、角色、策略检查或审批步骤是否可以被绕过或组合利用,记录相应的操作序列以及由此触发的未授权操作。
-
资金业务逻辑: 测试人员验证余额、限额、对账、提款规则或状态转换是否会接受非预期的条件,捕获一条可复现的业务影响路径,而不仅仅是一个技术缺陷。
-
链上交易与已部署合约: 测试人员验证机构的链上交互在对抗性运行条件下的表现;在机构自行部署了合约的情况下,他们会对这些合约的运行时行为进行测试,并保留观察到结果的交易级证据。代码层面的保障仍然属于对应 Code Audit 的职责范围。
第4部分:Web3 攻击面:渗透测试概览 对这些层面及其相互关联进行了梳理,而核心目标始终未变:判断在约定的运行环境中,各种条件是否会串联成可复现的影响。
它与其他保障手段之间的关系
最清晰的比较维度是保障目标:即这项工作旨在支持的决策,以及预期产生的证据。如下图所示,方法之间可以相互重叠,不同学科之间可以协作,不存在任何有用的边界会依赖于"假装某个团队完全是静态分析、而另一个团队完全是动态分析"这种说法。同一个目标——一个已部署的合约、一个云或 RPC 层面、一个签名系统——可能同时属于多个学科的考察范围;真正不同的是每个学科所强调的保障目标,而不是对该系统的排他性主张。

渗透测试与代码层面审计
Code Audit——代码层面审计的专有名称——主要在代码层面(也包括设计、架构和协议假设)建立保障。它将专家评审与检测工具相结合,可能包含动态测试技术,并针对约定的审计范围出具一份签署报告。对于合约、链、跨链桥、Rollup、钱包或其他实现,审计要回答的问题是:设计和代码是否满足其预期的安全属性。
渗透测试主要确认的是:在一个约定的、正在运行的机构环境中,真实存在的条件是否可以被串联成可复现的影响。它会追踪已部署的应用程序、身份、配置、工作流、业务逻辑、签名系统和合约调用之间的交互,然后记录复现和修复该路径所需的证据。
这是目标和证据上的差异,而非能力上的限制。审计人员也可以执行测试、对组件进行模糊测试(fuzz)并调查运行时行为;渗透测试人员也可以审查配置、应用逻辑和实现细节,以理解某条路径。方法可以相互重叠,团队也可以协同工作。这些服务是互补关系,而非替代关系:仅靠审计通常无法提供这种覆盖整个机构的运行时可利用性证据,而渗透测试也不能替代审计所涵盖的实现和协议属性方面的代码层面保障。
因此,一份合约在实际机构路径中的对抗性表现可能属于渗透测试的范畴,而对合约代码本身的保障则应交由对应的 Code Audit 来完成。
Best Security Auditor for Web3
在上线前验证设计、代码和业务逻辑
扫描、漏洞赏金与专项测试
漏洞扫描针对已知特征、暴露的服务、缺失的补丁以及常见配置问题,提供自动化的广度覆盖。它支持可重复的可见性,也可以为侦察阶段提供助力,而渗透测试则增加了专家主导的深度,并判断这些条件是否可以被串联成一条有意义的路径。
漏洞赏金邀请独立研究人员按照公开规则报告符合条件的发现。其持续性的众包模式能够挖掘出长尾问题,而渗透测试项目则是指派一个团队,按照方法论对约定环境进行系统检视,并交付整合后的证据、严重程度、修复建议和复测结果。这两种模式是互补的,任何一种都不能保证做到完全发现。
例如,BlockSec 的 Blockchain Security Testing 是渗透测试的一个姊妹项目,而非其上级或子集。它使用专门的引擎——包括差分测试、模糊测试(fuzzing)、私有部署、大规模 RPC 拒绝服务测试,以及节点或集群基础设施测试——来验证定制化基础设施的实现正确性和韧性 [2]。区块链渗透测试则聚焦于贯穿正在运行的资金处理系统的机构级、跨层路径。应用托管和应用 CI/CD 归入渗透测试的范畴;节点与集群基础设施以及大规模 RPC 韧性则归入 Blockchain Security Testing。某个架构可能两者都需要。
相邻的保障目标同样需要精确的归类。合约代码层面的保障归入对应的 Code Audit。密钥托管实现(包括 MPC、TSS 和 TEE 设计)的密码学正确性归入 Wallet Security Audit。支付端的代理式系统归入 Agentic Payment Security [1]。当周边的签名工作流、运维代理或应用路径构成约定机构范围的一部分时,渗透测试仍可能对其进行检视。
| 保障目标 | 对应方法 |
|---|---|
| 验证可利用路径是否横跨一个正在运行的机构的应用程序、身份、审批控制、资金逻辑和链上交易(包括已部署的合约) | Blockchain Penetration Testing |
| 评估代码、设计、架构或协议假设 | Code Audit |
| 评估 MPC、TSS、TEE 或密钥托管实现中的密码学正确性 | Wallet Security Audit |
| 验证定制化节点、集群、EVM、数据库、MPT 或大规模 RPC 基础设施的实现正确性和韧性 | Blockchain Security Testing |
| 对已知特征和配置问题保持广泛的自动化可见性 | Vulnerability Scanning |
| 在公开的合格范围内邀请持续的、激励驱动的研究 | Bug Bounty |
| 评估支付端的代理式系统及其安全假设 | Agentic Payment Security |
这是一份归类指南,而非一个先后顺序。单一系统可能催生多个保障目标,因此可能需要一整套协调一致的评估;这些标签之间并非相互排斥。
根据司法辖区和机构类别的不同,测试可能是一项监管要求或监管期望,某些制度体系还要求由独立第三方进行测试;第1部分 对这些区别做了说明 [3]。监管适用性应与法律顾问确认。
如何开始
在做出决定之前,我们可以先从以下三个问题入手:哪些系统在转移资金?已经存在哪些保障证据?哪条控制链尚未经过对抗性验证? 这些问题的答案能够帮助识别保障缺口,而不必过早以名称来选定某项具体服务。
接下来,一次范围界定的沟通可以就目标、访问假设、防护措施和预期交付物达成一致。第3部分:机构级区块链渗透测试的交战规则与生产环境安全 详细介绍了将该项目付诸实施所需的授权、安全和协调事项 [4]。
当您准备好采取行动时,可以与 BlockSec 一起界定您的保障缺口,在测试开始前就目标、证据和防护措施达成一致。
继续阅读攻击面系列指南:
本系列即将发布的其他文章:
- 第5部分:授权与签名安全:Web、dApp 与移动端
- 第6部分:云与 CI/CD 安全:自动化运维攻击面
- 第7部分:资金库控制平面安全:签名与提款审批
- 第8部分:交易所账本安全:盗窃路径与数据平面逻辑
Blockchain Penetration Testing 主题页 提供了项目层面的整体视角。
参考文献
按首次出现的顺序编号。
- BlockSec, Blockchain Penetration Testing。
- BlockSec, [Blockchain Security Testing],即将发布。
- BlockSec, 从事件到监管:为什么加密机构需要区块链渗透测试。
- BlockSec, 机构级区块链渗透测试的交战规则与生产环境安全。



