万象互联网络资讯网提示:黑客技术:ICMP洪水攻击浅析. |
简单示意:
伪造受害者的ICMP 应答
攻击者[IP=211.97.54.3]-------------------------->正常的主机--------------->受害者[截获攻击者IP=……网易?!]==>哭啊……
以上是几种常见的Flood方式,在测试中,我发现一个有趣的现象:一些防火墙只能拦截ECHO请求(Ping)的ICMP报文,对于其他ICMP报文一概睁只眼闭只眼,不知道其他防火墙有没有这个情况。所以想神不知鬼不觉对付你的敌人时,请尽量避开直接ECHO Flood,换用Type=0的ECHO应答或Type=14的时间戳应答最好,其他类型的ICMP报文没有详细测试过,大家可以试试看Type=3、4、11的特殊报文会不会有更大效果。
六、ICMP Flood能防吗?
先反问你一个问题:洪水迅猛的冲来时,你能否拿着一个脸盆来抵挡?(坐上脸盆做现代鲁宾逊倒是个不错的主意,没准能漂到MM身边呢)
软件的网络防火墙能对付一些漏洞、溢出、OOB、IGMP攻击,但是对于洪水类型的攻击,它们根本无能为力,我通常对此的解释是“倾倒垃圾”:“有蟑螂或老鼠在你家门前逗留,你可以把它们赶走,但如果有人把一车垃圾倾倒在你家门口呢?”前几天看到mikespook大哥对此有更体面的解释,转载过来——“香蕉皮原理:如果有人给你一个香蕉和一个香蕉皮你能区分,并把没有用的香蕉皮扔掉。(一般软件防火墙就是这么判断并丢弃数据包的。)但是如果有人在同一时间内在你身上倒一车香蕉皮,你再能区分有用没用也没啥作用了~~因为你被香蕉皮淹没了~~~~(所以就算防火墙能区分是DoS的攻击数据包,也只能识别,根本来不及丢弃~~死了,死了,死了~~)”
所以,洪水没法防!能做的只有提高自己的带宽和预防洪水的发生(虽然硬件防火墙和分流技术能做到,但那价格是太昂贵的,而且一般人也没必要这样做)。
如果你正在被攻击,最好的方法是抓取攻击者IP(除非对方用第一种,否则抓了没用——假的IP)后,立即下线换IP!(什么?你是固定IP?没辙了,打电话找警察叔叔吧)
七、被ICMP Flood攻击的特征
如何发现ICMP Flood?
当你出现以下症状时,就要注意是否正被洪水攻击:
1.传输状态里,代表远程数据接收的计算机图标一直亮着,而你没有浏览网页或下载
2.防火墙一直提示有人试图ping你
3.网络速度奇慢无比
4.严重时系统几乎失去响应,鼠标呈跳跃状行走
如果出现这些情况,先不要慌张,冷静观察防火墙报警的频率及IP来确认是否普通的Ping或是洪水,做出相应措施(其实大多数情况也只能换IP了)。
1.普通ping
这种“攻击”一般是对方扫描网络或用ping -t发起的,没多大杀伤力(这个时候,防火墙起的作用就是延迟攻击者的数据报发送间隔时间,请别关闭防火墙!否则后果是严重的!),通常表现如下:
==============================================================
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:24] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:26] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:30] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
=============================================================
这么慢的速度,很明显是由ping.exe或IcmpSendEcho发出的,如果对方一直不停的让你的防火墙吵闹,你可以给他个真正的ICMP Flood问候。
2.直接Flood
这是
较够劲的真正意义洪水了,防火墙的报警密度会提高一个数量级:
==============================================================
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:20] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:21] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:21] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:21] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:21] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:21] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:21] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:21] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
[13:09:21] 61.151.252.106 尝试用Ping 来探测本机,
该操作被拒绝。
这时候你的防火墙实际上已经废了,换个IP吧。
万象互联网络资讯网提示:黑客技术:ICMP洪水攻击浅析. |
3.伪造IP的Flood
比较厉害的ICMP Flood,使用的是伪造的IP而且一样大密度,下面是the0crat用56K拨号对我的一次攻击测试的部分数据(看看时间,真晕了,这可是56K小猫而已啊)
=============================================================
[18:52:12] 1.1.1.1 尝试用Ping 来探测本机,
该操作被拒绝。
[18:52:12] 1.1.1.1 尝试用Ping 来探测本机,
该操作被拒绝。
[18:52:12] 1.1.1.1 尝试用Ping 来探测本机,
该操作被拒绝。
[18:52:12] 1.1.1.1 尝试用Ping 来探测本机,
该操作被拒绝。
[18:52:12] 1.1.1.1 尝试用Ping 来探测本机,
该操作被拒绝。
[18:52:12] 1.1.1.1 尝试用Ping 来探测本机,
该操作被拒绝。
[18:52:12] 1.1.1.1 尝试用Ping 来探测本机,
该操作被拒绝。
[18:52:12] 1.1.1.1 尝试用Ping 来探测本机,
该操作被拒绝。
=============================================================
无言…………
4、反射ICMP Flood
估计现在Smurf攻击还没有多少人会用(R-Series的RSS.EXE就是做这事的,RSA.EXE和RSC.EXE分别用作SYN反射和UDP反射),所以这种方法还没有大规模出现,但Smurf是存在的!而且这个攻击方法比前面几种更恐怖,因为攻击你的是大网站(或一些受苦受难的服务器)!
我正在被网易、万网和新浪网站攻击中(懒得修改策略,直接用其他工具抓的。实际攻击中,反射的IP会多几倍!)
=======================================================================
[15:26:32] RECV:ICMP Packet from 202.108.37.36 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 202.108.36.206 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 202.108.37.36 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 202.108.36.206 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 202.108.37.36 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52)
[15:26:32] RECV:ICMP Packet from 202.108.36.206 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 202.108.36.206 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 202.108.37.36 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 202.108.37.36 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 202.108.36.206 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 202.108.37.36 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 202.108.36.206 (Type=0,Code=0,Len=52)
[15:26:33] RECV:ICMP Packet from 210.192.103.30 (Type=0,Code=0,Len=52)
=======================================================================
可以看出,攻击者使用的是32bytes的ECHO请求,所以服务器返回52-20=32bytes的REPLY报文,在这个情况下,是不会报警的。
还是那句话,报警也没用了。
八、自己编写ICMP Flooder
以上说的都是理论,如何才能自己写一个呢?相信很多人已经跃跃欲试了,下面就用VC6.0来写一个直接的ICMP Flooder(能在Win98/Me环境使用)……先等等——最重要的是原理。
1.程序原理
当然不能用IcmpSendEcho来做,我们必须自己从最原始的IP报文里做一个。构造一个SOCK_RAW报文后,填充ICMP数据和计算校验和(CheckSum),循环sendto发出去就完成了,so easy!
2.ICMP报文的声明
一个ICMP报文包括IP头部、ICMP头部和ICMP报文,用IPPROTO_ICMP创建这个类型的IP包,用以下结构填充:
typedef struct _ihdr
{
BYTE i_type; //8位类型
BYTE i_code; //8位代码
USHORT i_cksum; //16位校验和
USHORT i_id; //识别号
USHORT i_seq; //报文序列号
ULONG timestamp; //时间戳
}ICMP_HEADER;
这样我们就声明了一个ICMP报文结构,就等后面的填充了。