分布式拒绝服务攻击了解一下?区块链

区块链安全档案 2018-07-30 23:06
分享到:
导读

就曲速未来安全区的文章“KotET事件之拒绝服务漏洞”分析,何为分布式拒绝服务攻击。

随着经济技术的不断发展,计算机安全技术越来越受到冲击,拒绝服务攻击已成为网络机安全最大的威胁之一,由于它的破坏性极大,因此成为网络黑客经常采用的攻击手段。该文主要分析了拒绝服务攻击的基本原理以及怎样能够更好的加以防范。

就曲速未来安全区的“KotET事件之拒绝服务漏洞”分析,可能就有人不太理解什么是分布式拒绝服务攻击。

想要知道分布式拒绝服务攻击的原理,先要了解一下两个关键的基础原理

1.TCP饿死:

UDP这种传输方式不会控制自己在通信通道里的流量,可理解为不讲道理的人。他们来到了一个热闹地区的KFC中,但是他们不买东西只排队将所有食物的价格都问一遍,占满所有的座位和过道。而常规的TCP服务通过自己的弹窗机制来控制流量,好比讲道理的人,座位被占满了,TCP自然会离开KFC导致正常的服务不能进行。最终的结果就是UDP将整个通道打满堵死。

2.TCP三次握手和四次断开连接,如图所示:

Tcp头格式

seq:序列号;ack:确认序列号

双方均需要确认才可断开连接

关于双方在整个过程中每个时间段的状态名称:

针对智能合约的DoS攻击属于利用协议漏洞进行的手段,具体的攻击方法有三种。关于第一种的“异常障碍”攻击曲速未来安全区用KotET事件做了很详细的事例说明,现在我们直接讲第二种的攻击:调用栈攻击。

调用栈攻击:

在EIP150使用之前,以太坊虚拟机的调用栈深度为1024。这也就是说,有人可以在自动使用第1024个调用之前,调用某个合约1023次。攻击者最终会达到第1023次合约,导致接下来的调用失败,并且让他们自身来盗窃合约的资金,并且掌控合约。

攻击示例

和KotET这类旁氏游戏类似,用户会发出以太币给合约,来加入游戏。每轮游戏的赢家可以获得奖池的金额。游戏的规则如下:

你必须要发送至少1ETH到合约,然后你会被支付10%的利息。

如果“政府”(合约)在12小时内没有收到新的资金,最后的人获得所有的奖池,所有人都会失去资金。

发送到合约的以太币分配如下:5%给奖池,5%给合约拥有者,90%根据支付顺序,用来支付给发送资金的人。

当奖池满了(1万以太币),95%的资金会发送给支付者。

红利:支付者可以使用推荐链接来邀请别人。如果有朋友对这个合约进行支付,那么邀请人可以获得5%,5%会给到合约拥有者,5%会进入奖池,剩下的85%会用来支付利息。

合约的写入,需要保证用户和他们的资金被记录在2个数组,ddress[] public credAddr 和int[] public credAmt。这两个数组会在游戏最后重置。GovernMental已经非常成功了,因为数组变得非常大,需要清除他们的燃料费已经超过每个转账能够做到的极限。最终的结局是奖池的永久性冻结,总共有大约1100个以太坊。最后,在2个月后,资金最后还是解冻了,并且发给了调用者。

GovernMental虽然不是被恶意的用户攻击,但是它也是很好的例子,这类灾难会由调用栈攻击产生。这也表面,在进行大型数据库工作的时候,需要格外的小心。

代码分析

下面是GovernMental智能合约的完整代码,其中还包含简短的变量。我已经在它的整体中包含了真正的合约,因为通过一行行地检查合约可以学到很多,包含这个合约是如何构建的。有人可以看到function lendGovernmentMoney(),代表了发出资金者的地址,并且需要以太币的数量被重置或者添加到现有数据。需要注意,在同个函数中,资金是如何在合约拥有者以及12个小时结束时的最后发出资金者之间分配的,credAddr[credAddr.length1].send(profitFromCrash); 以及corruptElite.send(this.balance)。

我们假设攻击者写了如下的合约,进行恶意攻击contract Government {}。

攻击者调用了contract attackGov{} 函数,来进行调用直到栈的大小为1023。当栈达到1022,lendGovernmentMoney()函数就会在第1023个栈上执行。因为第1024个调用已经失败了,并且 send() 函数不会检查返回的代码,合约的credAddr[credAddr.length — 1].send(profitFromCrash)代码也会失效。合约之后就会重置,而且下一轮已经可以开始。因为支付失败了,合约现在就会从最后一轮中获得奖池,在下轮结束后,合约拥有者就会获得全部的资金,corruptElite.send(this.balance)。

合约 攻击 资金 调用 需要
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。


专题报道