近期火热由OpenAI 推出的ChatGPT展现了令人惊艳的问答能力,不仅能理解人类的自然语言并加以解答,甚至可以编写小说、诗词、文案、剧本以及程式码...等等。

事件简介

去中心化博彩项目— ZKasino ,他们做了一个实验,把项目合约交由专业审计公司Certik 的时候,也同时让ChatGPT 来做审计,看看ChatGPT 的审计效果如何。

ZKasino 项目的合约包括了数个博弈游戏以及资金结构和通用功能等核心合约,路径表如下:

├── CoinFlip.solCoinFlip . sol ├── Common . sol ├── Dice . sol ├── Mines . sol ├── Plinko . sol ├── RockPaperScissors . sol ├── Slots . sol ├── VideoPoker . sol └── bankroll ├── facets │ └── BankrollFacet . sol ├── libraries │ └── LibStorage . sol └── vendor ├── Diamond . sol ├── libraries │ └── LibDiamond . sol └── upgradeInitializers └── DiamondInit . sol

ChatGPT 发现了什么

ZKasino 陆续上传并解释各合约的用途给ChatGPT 后,在Common.sol 中找出了数个安全性漏洞,包括Reentrancy attack, Transfer failure, Insufficient balance, VRF fee calculation 。

然而根据Certik 审计后的结果来看,除了VRF fee calculation 以外,其他的漏洞皆为误报。

Reentrancy attack 的部分, ZKasino 已经正确的使用了Reentrancy guardrails ,并没有安全问题。

Transfer failure 的部分,由于玩家必须要投入足够的赌注才能游玩,否则交易直接会被回溯,因此也没有安全问题。

Insufficient balance 的部分,只要玩家拥有的资金不足,便无法投入足够的赌注,交易一样会直接回溯,也不会有安全问题。

ChatGPT 遗漏了什么

经过Certik 专业的审计后去比较ChatGPT 的审计结果,发现ChatGPT 主要提到的都是在许多智和合约实施中常见的安全问题,但像是项目特定的逻辑漏洞、不准确的数学计算逻辑和统计模型、程式码实作与项目设计本身意图不一致..等问题皆无法由ChatGPT 所抓出。

漏洞1:项目特定的逻辑漏洞

ChatGPT 并未找出一个关键漏洞。玩家透过调用VRF 加入游戏,然后Chainlink 的VRF 会以随机数触发fulfillRandomWords()函数以完成游戏。然而攻击者可以在输了的时候调用_transferPayout()使其回溯,导致整个fulfillRandomWords()调用失败,使其进入长为100 个区块的等待期,继而触发CoinFlip_Refund()进行退款,这意味着攻击者相当于永远不会输钱。

漏洞2:不准确的数学计算逻辑和统计模型

在VideoPoker 游戏中有个随机树的漏洞,某些牌出现的机会比较少。另一个问题是在骰子游戏中发现的,玩家可以选特定的倍率来最大化预期收益。

漏洞3:程式码实作与项目设计本身意图不一致

ChatGPT 或许可以了解某个函数在技术层面上如何执行,但无法理解他在整个智能合约中该函数有着什么目的以及这样写的根本原因。像根据ZKasino 的设计,在Plinko 游戏中setPlinkoMultipliers()函数使用的行数应该是8 到16。但是,由于以下检查中的错误,Bankroll 合约所有者可以通过设置一个超出预期范围的行数值。

程式码中会检查numRows 是否介于8~16 之中,以及risk 是否小于3 ,两个条件必须都不符合才会回溯此笔交易,也就是说如果只有一个条件不符合,那还是不会回溯。然而ChatGPT 的理解却是只要任一条件不符就会触发回溯。ChatGPT 似乎理解了这个函数的目的,然而它并不具备相应的应用程式知识,在没有额外讯息的情况下也无法识别真正的漏洞。

AI 审计VS 专业人员审计

由上述例子可以看出ChatGPT 在智能合约审计上容易误报漏洞,而且ChatGPT 主要找出的问题皆为主流的漏洞(像是Reentrancy ),对于项目个别独有的漏洞ChatGPT 较无法抓出。

然而使用ChatGPT 审计的主要优点为速度,相较于专业人员审计需要数日到数周来说,ChatGPT 可以在几分钟之内完成审计,非常神速。

然而免费版的ChatGPT 在使用上也会有提问次数限制,遇到大型专案的审计上可能也无法顺利完成。

结论

由于智能合约部署后,无法更改其中内容,因此在智能合约审计上安全必定为第一要务。这个案例可以看出使用ChatGPT 做智能合约审计却遗漏了某些关键性的漏洞,原因主要为ChatGPT 无法充份的了解各功能的确切意图,以及整体合约内的各功能之间的关联性,所以在安全性上还是略显不足。因此还是建议交由专业人员审计以确保安全,避免造成严重的资金损失。