前言
2020年7月1日,V 火币4遭到黑客攻击。接到情报后,慢雾安保小组对袭击进行了全面分析。以下是对此攻击的详细技术分析。
攻击细节
此攻击事务如下0xdd1120a90ed4112b634266d6a244b93ca86785317bc75f0e170ab0cd97c65224
通过交易概述,我们可以看到攻击者在Uniswap中使用0.9 火币4交换V 火币4,然后使用V 火币4在V 火币4 Er合同中操作,**盗取了大量的V 火币4。
现在使用Oko合同浏览器分析具体的攻击细节(下图仅显示一部分)https://oko.palkeo.com/0xdd1120a90ed4112b634266d6a244b93ca86785317bc75f0e170ab0cd97c65224/
通过分析交易细节,我们可以发现攻击者首先创建了一个契约0x47ed415006c6f8052f05fe983f31d6d24b8fdb;通过该契约,调用了火币4 Er契约中的changeexcluded(unknown37217349)函数和transferfrom函数。
接下来,分析了这两个函数的具体代码
函数transferFrom(address from,address to,uint alue)public oerride返回(bool success){
如果(!mapAddress UU排除[消息发送者{
要求(aluelt;=uU折让[自][消息发送者], );
免税额[自][消息发送者]—=值;
}
转让(从、到、价值);
返回true;
}
如您所见,在transferfrom函数中,mapaddress_Uu被排除[消息发送者]具体逻辑为mapaddress_Uexcluded[消息发送者如果为false,将检查攻击者合约的授权金额,然后调用调用。传递函数。但这种逻辑显然行不通,攻击者契约没有任何授权限制。所以排除了mapaddress消息发送者]只能为true,然后直接调用传递函数进行传递。
接下来,我们分析如何使用mapaddress_Uexcluded[消息发送者]设置为真(T):
通过查看合同,我们可以发现:
初始化协定时,只添加地址的mapaddress(this)和burnaddress,如果exclusie设置为true,则有其他逻辑设置mapaddress_Uexclude。通过分析火币4 Er合约,可以发现changeexcluded函数可以实现mapaddress函数的排除设置。
功能更改排除(地址除外)外部{;
如果(!mapAddress_Uexcluded[排除]){
转让(消息发送者,地址(本),mapEra_u排放量[1]/16);
mapAddress排除[排除]=真实;
排除darray.push(不包括);excludedCount+=1;
总费用+=mapEra排放量[1]/16;
mapAddress UU块更改[排除]=区块编号;以及;
}其他{
转让(消息发送者,地址(本),mapEra_u排放量[1]/32);
mapAddress排除[排除]=错误;
总费用+=mapEra排放量[1]/32;
mapAddress UU块更改[排除]=区块编号;以及;
};
}
通过分析changeexcluded函数,可以发现它的可见性是外部的。因此,攻击者契约可以直接调用changeexcluded函数。在这种情况下,攻击者协定的mapaddress被排除为false,因此它将进入if逻辑。
如果在代码中详细分析
执行if逻辑后,您需要先支付手续费,这是上面代码块中的第3行,手续费从何而来?答案是0.9火币4,攻击者最初将其转移到合同中。
从图中可以看出,它可以转换成大约138 V 火币4到0.9 火币4。
通过计算代码_Eemission[1]/16中的mapera,我们可以得到攻击者需要支付的服务费:我们在合同中阅读mapera,可以知道mapera_uemission[1]是2048。
Mapera计算得出,发射[1]/16的佣金为2048/16=128 V 火币4,攻击者交换了约138 V 火币4,足以支付手续费。因此,您可以通过上述代码块中的第4行使用攻击者契约的mapaddress,将其设置为true。
完整的攻击过程如下:
1创建攻击合同,并通过Uniswap将0.9 火币4兑换成约138 V 火币4;(此处,货币更改为稍后支付服务费)
2调用V 火币4 Er合同中的changeexcluded函数,并使用先前在Uniswap赎回的138 V 火币4支付128 V 火币4手续费,然后将mapaddress_uSetexcluded添加为true
3使用mapaddress调用transferfrom函数;如果排除为true,则直接传输
拿着钱走吧
黑客地址:
0xfa2700e67065bc364136b5e7f57112083cb2a0cd
攻击交易:
0xdd1120a90ed4112b634266d6a244b93ca86785317bc75f0e170ab0cd97c65224
V 火币4合同地址
0x75572098dc462f976127f59f8c97dfa291f81d8b
维修建议
此攻击主要利用火币4 Er合约中changeexcluded函数的可见性作为外部,没有权限限制,用户可以直接拨打外部电话,为攻击创造了必要的条件。因此,需要限制changeexcluded函数的权限或可见性,以避免任何用户直接调用changeexcluded函数。
文章标题:维思合同遭黑客攻击分析
文章链接:https://www.btchangqing.cn/47618.html
更新时间:2020年07月02日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。