ChatGPT 的 Web3.0 安全审计艺术:有点东西,但不多
2022年11月,OpenAI推出了创新的人工智能(AI)项目。
除了可用于进行文章的撰写和总结、笑话和诗歌的创作以外,ChatGPT还可以用来调试和生成代码。
2022年全年,Web3.0领域因黑客攻击和欺诈等事件造成的资产损失超过了37亿美元,这样巨额损失不禁让业内人思考:如ChatGPT这样的新技术是否可以用以改善智能合约代码的安全性。
ZKasino是一个去中心化的博彩平台,近期通过ChatGPT进行了一次预审计。
ZKasino希望在CertiK开展全面审计的同时,让CertiK为ChatGPT所得出的结果进行一个初步的审查,以测试ChatGPT作为AI「智能合约审计师」的能力。
那么ChatGPT的测试结果如何呢?
其是否已经准备好接替人工代码审计专家的工作?
或者说它仍不足以完全替代人工?
2022年12月23日,ZKasino「聘请」了ChatGPT来识别智能合约中潜在的安全风险。该工具也的确提出了几个表面上听起来很合理的风险担忧。
然而,尽管ChatGPT不可否认地为Web3.0安全社区提供了一些有价值的服务,但是我们发现其仍有相当大的改进空间——ChatGPT遗漏了一些严重或关键性的漏洞,同时又「误伤」了那些没问题的代码。在此,我们希望CertiK安全专家的深度数据和建议能够助力ChatGPT成为一个更强大的Web3.0应用安全工具。
下文,我们将为大家详细介绍此次事件中ChatGPT的两类错误发现。
ChatGPT发现了合约中的哪些问题? ChatGPT遗漏了什么 严重或关键性的漏洞?ChatGPT提到了在许多智能合约实现中都会存在的几个常见安全问题。
但是,它未能识别某些严重的风险,包括:
-
项目特定的逻辑漏洞
-
不准确的数学计算和统计模型
-
代码实现和项目设计的不一致
ChatGPT未能识别出一个关键漏洞,该漏洞会导致攻击者可以不断地赢取并耗尽Bankroll合约中用户的资金。玩家可以通过调用可验证随机函数(VRF)加入游戏,Chainlink的VRF会使用随机数触发fulfillRandomWords()函数以完成游戏。
ZKasino的代码允许用户在fulfillRandomWords()调用失败的情况下将资金取回。
在CertiK对同一智能合约代码的审查中,发现了一个潜在且有害的_transferPayout()调用,该函数被设计为可将赢取的资金转移至玩家的账户。
然而攻击者可以在输了的时候调用_transferPayout()使其回滚,导致整个fulfillRandomWords()调用失败——这会使其进入长为100个区块的等待期,继而触发CoinFlip_Refund()进行退款,这意味着攻击者相当于永远不会输钱。
- 星际资讯
免责声明:投资有风险,入市须谨慎。本资讯不作为投资建议。