智能合约漏洞之社会工程学的利用

语义上可用的智能合约不仅符合社会工程攻击之一的配置文件,还具有欺诈功能。这表明这个合约实际上是可用的。欺诈能力是一种内省措施,其特征是合约用户有机会误解智能合约的逻辑,执行潜在的社会工程攻击之一。欺诈能力的内省性要求人类推理欺诈性,人工分析3855个自动选择的可疑源代码的源代码,共计约140人的时间。

分析以语义可用性为例,揭示了34个智能合约,其中在关键操作前与空字符串文本进行比较,如上图所示。一个方法可以把这个合约作为攻击的载体A4使用零宽度空间(UnicodeU+200B),它在很多流行的文本编辑器(如VSCode)中显示为空字符串。虽然怀疑的34份合约中没有实际的零宽度空间,但可以通过重新部署同一份合约来发起社会工程A4攻击。


攻击A4的另一个有趣的例子可以在0xf5615138A9f2605e392375fa22Ab368771e018ff中找到。智能合约实现了个人智能合约计划,这意味着该计划的每个用户都有相同的智能合约(有时称为wallet)单独部署。该合约在哈希图密钥中使用同形异义字符号,导致无法提取之前存入的资金。虽然合约有明显的欺骗能力,但代码和事务日志不能绝对确定合约的恶意性。换句话说,映射键的同形异义词替换可能表示恶意或只是错字。


另一个语义可用地址操纵攻击的特殊例子是游戏,称为JigsawGames2。该合约中,解决函数sellEggs包括费用转移和用户奖励转移,这使得攻击者可以通过使用攻击A1或A2技术不支付费用地址来阻止用户获得奖金。该合约没有实现任何自毁或放弃功能,这对需要在合约中获得滞留资金的攻击者构成了挑战。无独有偶,该智能合约还向参与功能buyEggs的开发人员收取费用。这样的话,攻击者就可以创建一个伪造的玩家,并且通过使用伪造的玩家多次调用buyEggs函数将费用地址转换为应付账户地址,直到通过多次费用转换耗尽合约余额。这个例子表明,智能合约所有者通常有多种间接方式从智能合约中窃取资金。


分享: