我在着手进行区块链安全审计这项工作的时候, 所历经的年头并不算短, 在此期间, 我所审查过的开源项目数量绝对没有少于两百多个这么多。
然而, 在大多数的情况之下, 很多人都是在刚刚准备去拉取代码的那个阶段之前, 就已经不慎掉进了预先设计好的陷阱里面, 造成这种结果的原因无非就是两种极端的表现形式: 要么是他们没有选择那个正确的协议类型, 要么是因为他们并未去执行那些基础性、最根本性的供应链验证相关操作。
区块链开源代码怎么验
我所看见的许多团队, 他们的做法是非常直接的, 那就是去执行 git clone 这个动作, 把那个 star 数量排在最高位置的代码仓库给克隆下来, 然后就开始运行。
只是去看 star 数量这件事, 其实是没有实际意义的, 你一定要去检查 commit 的历史记录, 要去查看贡献者的集中度情况, 还要去关注最后一次活跃的更新时间是一个什么状态。
如果一个项目已经有两年的时间没有进行过更新操作了, 哪怕它的代码结构写得再漂亮, 供应链风险这一项也已经处于非常高风险的区间里了。
此外, 你还需要去查看相关的许可证。MIT许可和Apache 2.0许可对于商业使用是非常友好的。然而, GPL系列的许可证具有很强的传染性效应。
我曾经审核过一家公司, 他们使用了带有GPL协议加密库来搭建SaaS服务, 这差点导致他们收到了律师函。所以在协议选型这一步中, 真实的情况是一定不能跳过这个流程的。
区块链开源代码怎么测
拿到代码之后, 先不要急着把它上链。应该先把静态分析的工作给做了。我通常情况下, 会使用Slither这个工具加上自己研发的规则来进行一次全面的排查。

在排查的过程中, 要把重点放在检查是否存在着重入的问题、整数溢出以及权限检查是否存在缺失这一些情况上面。因为区块链里的代码一旦进行了部署, 就变成了没法修改的状态。如果测试覆盖率低于百分之九十, 我是绝对不敢签字确认的。
动态测试使用基于主网的分叉版本来执行。具体操作流程是将目标合约部署到本地节点中, 以此来模拟相关的攻击场景。在去年的一个项目案例里, 团队在进行分叉测试时, 发现了一个未被设置角色校验机制的权限函数。如果这个漏洞带到了主网环境中,那么价值几百万代币的资金池就极有可能被直接抽空。
现在的人认为开源是一件非常好的事情, 然而把开源这个词语不等于安全这个东西。拉代码之前, 要拿出十分钟的时间来做验证, 这样做的话, 在出事之后再修, 那个费用肯定要比这样便宜得多。
转载请注明出处:imtoken,如有疑问,请联系()。
本文地址:https://www.zmdyd.cn/imazbqb/10805.html
