智能合约代码漏洞 重入和溢出的测试

可以通过自动分析智能合约的字节码,源代码或交易历史记录来检测利用智能合约代码漏洞(例如重入或整数溢出)的攻击。但是,此信息不足以确定具有确定性的社会工程学攻击。例如,考虑交易0xc245b9156e44ce05551248849a84588a3abe6c1792ff8f2c889925c3501899y,通过该交易,发送方支付了大约500万美元的gas:如果没有发送方的证词,就无法知道此交易的上下文。寻找在野任何有关社会工程学攻击的现有报告,除了蜜罐开采的情况外,没有产生任何结果。因此,直到受害者的报告出现之前,只能讨论现实世界中智能合约中社会工程攻击的可能性。


为了更好地呈现以太坊中可能存在的社会工程攻击,从Etherscan收集了所有可用的开源智能合约,总共收集了85,656个独特的智能合约,包括Mainnet中的73,933个,Ropsten测试网络的8297个和Kovan测试网络的3,426个。下表列出了检测到的3855个候选者的细目分类,它们可能会发出社会工程攻击。然后对所有3,855个可疑案件进行手动分析,以删除2,375个不可利用的智能合约,并将剩余的1,480个合约细分为453个句法匹配(但无法利用)和1,027个语义上可以利用的合约。不可利用合约21的一个示例是通过互斥的if-else分支与关键指令隔离开来的可疑合约。接下来详细介绍如何识别语法匹配和语义可利用的合约及其含义。


语法匹配合约漏洞

语法上匹配的智能合约符合其中一种社会工程学攻击(A1...A6)的特征,但没有表现出欺骗受害者的欺骗能力。例如,智能合约0xe5b288da8fb70cd58ab240f71610576657308762适合A2情况,因为它具有硬编码的收费EOA地址。但是,对智能合约的手动检查显示此地址为0xfeefeefeefeefeefeefeefeefeefeefeefeefeef。显然,极不可能有人拥有可以在此地址部署智能合约的帐户。

语法上匹配的智能合约的另一个示例是称为MyMillions的智能合约,其中费用转账与另一笔转账共享同一笔交易的调用堆栈,而费用地址既已预先初始化,又可以更改,这两者都匹配A1和A2攻击。但是,对该合约的手动分析表明,双重转移发生在功能buyFactory中,该功能是一个参与函数(即客户调用以参与智能合约方案的函数)。如果此功能由于攻击而失败,则客户存款将永远不会发生,因此,该攻击不会为攻击者带来任何收益。由于智能合约的语义各不相同,因此只有人才能明确地确定参与和解决功能。


分享: