tcpdump捕获攻击流量

Linux下使用tcpdump捕获攻击流量实战教程

概述

tcpdump是Linux环境下最经典的网络抓包工具,能够实时捕获网络接口上的数据包,并支持多种过滤表达式。本教程将带你从基础到进阶,掌握使用tcpdump捕获、分析攻击流量的技能,并附带防御建议。

1. 基础用法

1.1 安装tcpdump

大多数Linux发行版已预装tcpdump,若未安装:

Debian/Ubuntu
sudo apt-get install tcpdump

CentOS/RHEL
sudo yum install tcpdump

1.2 基本语法

sudo tcpdump [选项] [过滤表达式]

常用选项:
–i:指定网络接口,如`-i eth0`
– n:不解析主机名,提高速度
– nn:不解析主机名和端口名
– X:以十六进制和ASCII显示包内容
– w:将捕获结果写入文件
– r:从文件读取
– c:指定捕获包数量

1.3 捕获所有流量

sudo tcpdump -i eth0 -nn

按下Ctrl+C停止捕获。

2. 捕获攻击流量实战

2.1 捕获SYN Flood攻击

SYN Flood利用TCP三次握手中的SYN包,发送大量伪造源IP的SYN请求,耗尽服务器资源。

捕获命令:

sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0'

解释:
– tcp[tcpflags] & (tcp-syn) != 0:匹配SYN标志位为1的包
– tcp[tcpflags] & (tcp-ack) == 0:确保ACK标志位为0,即纯SYN包

注意事项:正常连接也会产生SYN包,需结合统计判断。例如,捕获到大量来自不同源IP的SYN包,且目标端口相同,高度疑似攻击。

防御建议:
– 启用SYN Cookie:sysctl -w net.ipv4.tcp_syncookies=1
– 限制半连接队列大小:sysctl -w net.ipv4.tcp_max_syn_backlog=1024
– 使用防火墙限制单位时间连接数。

2.2 捕获DNS放大攻击

DNS放大攻击利用开放DNS服务器,向受害者发送大量响应包,源IP为伪造的受害者IP。

捕获命令:

sudo tcpdump -i eth0 -nn 'udp dst port 53 and udp[10] & 0x80 != 0'

解释:
– udp dst port 53:目标端口53(DNS查询)
– udp[10] & 0x80 != 0:检查DNS标志中的QR位(响应标志)为1,即响应包

注意事项:正常DNS响应也会被捕获,需结合流量大小判断。若大量DNS响应包来自不同源IP但目标IP相同,且响应包大小异常大(>512字节),可能是放大攻击。

防御建议:
– 关闭递归查询:配置DNS服务器仅对授权域提供递归服务。
– 限制响应速率:使用防火墙或DNS速率限制功能。
– 部署反欺骗措施:如BCP38(源地址验证)。

2.3 捕获端口扫描(如Nmap SYN扫描)

攻击者使用SYN扫描探测开放端口,发送SYN包,根据是否收到SYN+ACK判断端口状态。

捕获命令:

sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0 and dst port 80'

解释: 捕获针对80端口的SYN包。实际应捕获全部端口,但为演示指定目标端口。

注意事项: 正常访问也会产生SYN包,需观察模式:若短时间内从同一源IP向多个不同端口发送SYN包,则为扫描行为。

防御建议:
– 使用端口敲门或白名单机制。
– 部署IDS/IPS检测扫描行为。
– 限制单个IP的连接速率。

2.4 捕获HTTP暴力破解

攻击者尝试登录后台,发送大量POST请求。

捕获命令:

sudo tcpdump -i eth0 -nn 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

解释:
– tcp[12:1] & 0xf0) >> 2:计算TCP数据偏移,得到数据起始位置
– 0x504f5354:即”POST”的ASCII码

注意事项:该命令仅匹配HTTP POST请求,不包含HTTPS。对于HTTPS,需先解密或使用其他方法。

防御建议:
– 实施登录失败锁定策略。
– 使用CAPTCHA验证。
– 限制单个IP的请求频率。

3. 保存与分析

3.1 保存捕获数据

sudo tcpdump -i eth0 -nn -w attack.pcap

3.2 读取并分析

sudo tcpdump -r attack.pcap -nn | less

3.3 统计包数

sudo tcpdump -r attack.pcap -nn | wc -l

3.4 提取特定协议

sudo tcpdump -r attack.pcap -nn 'tcp port 80' -w http.pcap

4. 常见错误及解决

错误1:权限不足

  • 错误信息:tcpdump: eth0: You don’t have permission to capture on that device
  • 解决:使用sudo或以root用户执行。

错误2:过滤表达式语法错误

  • 错误信息:tcpdump: syntax error
  • 解决:检查括号、引号是否匹配。例如,tcp[tcpflags] & (tcp-syn) != 0中的括号是否成对。

错误3:找不到网络接口

  • 错误信息:tcpdump: eth0: No such device exists
  • 解决:使用ip link show列出可用接口,替换为正确名称(如ens33)。

错误4:捕获大量数据导致磁盘满

  • 解决: 使用-c限制包数,或设置抓包文件大小限制(如使用-C选项)。

5. 防御建议总结

– 及时更新系统:修补已知漏洞。
– 最小化服务:关闭不必要的端口和服务。
– 使用防火墙:限制入站和出站流量。
– 监控与告警:结合tcpdump和IDS/IPS实时分析。
– 日志审计:定期检查网络日志。

6. 总结

通过tcpdump,我们可以有效捕获并分析多种攻击流量,包括SYN Flood、DNS放大、端口扫描和暴力破解。掌握过滤表达式和常见攻击特征,是网络安全工程师的必备技能。同时,务必结合防御建议加固系统,做到防患于未然。

By admin

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

This website uses cookies to analyze site traffic and improve your experience. By continuing to use this site, you consent to our use of cookies.