
明确审查对象与适用范围
区块链审查指南需要注意哪些问题,首先取决于审查对象。网络层的账本机制、应用层的智能合约和管理权限涉及不同问题。本文讨论技术与安全审查,不涉及特定项目认定或法律合规结论;以太坊合约的具体检查方法也不能直接套用于所有区块链。
NIST《区块链技术概述》将区块链描述为分布式、具有篡改可察觉性和抗篡改能力的数字账本,并将已发布交易不被改变的描述限定在网络正常运行条件下。这意味着审查时必须写清运行条件,不能仅凭“不可篡改”判断整个系统安全。
区分账本记录与业务正确性
记录难以修改,无法单独证明写入内容真实、操作获得合法授权或业务规则正确。审查应分别回答:系统怎样保存记录,哪些主体能够发起操作,以及程序是否正确执行预期规则。把这些问题混在一起,容易遗漏应用层缺陷。
核查敏感操作与权限分配
以太坊智能合约安全文档强调访问控制、异常检查、多种测试方法和独立代码审查,也提醒审计不能发现所有漏洞。对于采用类似权限机制的合约,可据此检查谁能执行升级、暂停或其他敏感操作。
权限审查需要查看实际限制,不能只看函数名称或说明。角色分工有助于限制单个账户的职责,多签则要求多个签名共同批准操作;两者作用不同。即使设置多个管理账户,也需要检查权限是否重叠,以及某个账户是否仍可独自改变关键规则。
让测试覆盖异常路径
验证正常输入能够成功执行,只能说明部分功能符合预期。审查还应覆盖未授权调用、输入边界、状态不满足条件和重复操作,并明确哪些状态关系必须始终成立。
单元测试、静态分析、动态测试和形式化验证提供不同类型的证据。形式化验证的结论受所选性质、模型和假设约束,不能扩大为整个系统绝对安全;测试数量本身也不能替代对检查范围的说明。
常见问题与结论边界
通过审计是否意味着可以忽略后续检查?审计提供额外审查机会,仍可能遗漏问题。报告应注明检查的代码版本、覆盖范围、发现的问题和修复复核情况,后续代码或权限变化也应纳入判断。
已部署合约是否总能直接修复?通常不能像普通服务一样直接修改已部署代码。对于采用升级机制的系统,还需要审查升级授权与规则变化。有效的审查结论应说明证据支持了什么,以及哪些条件和问题仍未得到验证。