Elvis-180/DoS-DDoS-Detection-and-Response
GitHub: Elvis-180/DoS-DDoS-Detection-and-Response
一个在家庭实验室环境中构建的完整 DoS/DDoS 检测与响应安全实验项目,涵盖攻击模拟、自定义 IDS 规则、SIEM 仪表盘及标准化事件响应流程。
Stars: 1 | Forks: 0
# DoS/DDoS 检测与响应





## 目录
- [项目概述](#project-overview)
- [实验室架构](#lab-architecture)
- [检测工具栈](#detection-stack)
- [攻击模拟](#attack-simulations)
- [MITRE ATT&CK 映射](#mitre-attck-mapping)
- [Snort 检测规则](#snort-detection-rules)
- [Splunk 仪表盘](#splunk-dashboard)
- [关键结果](#key-results)
- [事件响应](#incident-response)
- [使用的工具](#tools-used)
## 项目概述
本项目展示了在家庭实验室环境中构建的完整 **DoS/DDoS 检测与响应 pipeline**。目标是模拟真实世界的网络攻击,使用自定义的 IDS 规则对其进行检测,并在专业的 SOC 仪表盘中可视化这些检测结果。
**完成的工作:**
- 使用 pfSense 设计并部署了具有 4 个区域的分段网络
- 使用 Nmap 执行了主动侦察(MITRE T1595)
- 使用 hping3 模拟了 SYN Flood、HTTP Flood 和 UDP Flood 攻击
- 使用映射到 MITRE ATT&CK 的自定义 Snort 规则检测了所有攻击
- 构建了带有严重性分类的实时 Splunk SIEM 仪表盘
- 配置了自动化告警,在模拟期间触发了 18 次以上
- 使用 Wireshark 捕获了数据包级别的证据
## 实验室架构
### 网络拓扑
```
INTERNET (WAN)
│
┌──────────────┐
│ pfSense │ ← Firewall / Router / DHCP
│ Firewall │
└──────┬───────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
LAN (192.168.1.x) OPT1 Workstation
│ (192.168.2.x) (192.168.3.x)
┌─────┴──────┐ │ │
│ │ Kali Linux Windows 10
Windows Ubuntu 192.168.2.5 192.168.3.2
Server Server [ATTACKER ] [Domain PC]
192.168.1.1 192.168.1.9
[DC/TARGET] [Snort+Splunk]
```
### 设备清单
| 设备 | 操作系统 | IP 地址 | 角色 |
|--------|-----|-----------|------|
| pfSense | FreeBSD | 192.168.1.2 / 192.168.2.1 / 192.168.3.1 | 防火墙 / 路由器 / DHCP |
| Windows Server 2025 | Windows Server | 192.168.1.1 | 域控制器 / IIS 目标 |
| Ubuntu Server | Ubuntu Linux | 192.168.1.9 | Snort IDS + Splunk SIEM |
| Windows 10 | Windows 10 | 192.168.3.2 | 域工作站 |
| Kali Linux | Debian Linux | 192.168.2.5 | 攻击机 |
### 网络区域
| 接口 | 子网 | 区域 | 信任级别 |
|-----------|--------|------|-------------|
| WAN | 动态 | Internet | 不受信任 |
| LAN | 192.168.1.0/24 | 服务器区 | 受信任 |
| OPT1 | 192.168.2.0/24 | 攻击者区 | 不受信任 |
| Workstation | 192.168.3.0/24 | 用户区 | 半信任 |
## 检测工具栈
```
LAYER 1 — Perimeter Defense
pfSense firewall enforces strict zone-based rules.
Only legitimate traffic passes. Everything else is
blocked, dropped, and logged to Splunk.
LAYER 2 — Intrusion Detection
Snort IDS monitors all LAN traffic using 8 custom
rules. Any DoS/DDoS pattern triggers an alert which
is written to snort.alert.fast and forwarded to Splunk.
LAYER 3 — SIEM Visibility & Response
Splunk ingests all logs from Snort and pfSense,
displays real-time severity levels, and fires
automated alerts when thresholds are breached.
```
### 日志流向
```
Snort (Ubuntu 192.168.1.9)
└─► /var/log/snort/snort.alert.fast
└─► Splunk UF (inputs.conf)
└─► index=security | sourcetype=fast_alert
└─► SOC Dashboard + Alerts
pfSense ──► Syslog UDP:5514
└─► index=pfsense | sourcetype=syslog
└─► Perimeter Firewall Panel
Windows Server/Win10 ──► Splunk UF
└─► WinEventLog:Security
└─► Brute Force + AD Panels
```
## 攻击模拟
### 阶段 1 — 侦察 (T1595)
```
# 来自 Kali Linux 的激进网络扫描
nmap -A 192.168.1.0/24
```
**发现结果:**
- 目标已识别:192.168.1.1 (Windows Server 2025)
- 端口 80 开放:Microsoft IIS httpd 10.0
- 域名:cis.net (Default-First-Site-Name)
- 在 48.9 秒内扫描了 256 个 IP
- Snort 检测到扫描:在 Splunk 中出现了 15 条 ICMP PING Nmap 告警
### 阶段 2 — SYN Flood (T1499.001)
```
sudo hping3 -S --flood -p 80 192.168.1.1
```
- **发送了 138,186 个数据包**
- 目标上 100% 丢包率
- Snort SID 1000002 持续触发
### 阶段 3 — HTTP Flood (T1499.002)
```
sudo hping3 -S -p 80 --flood --rand-source 192.168.1.1
```
- 在 Splunk 中有 **144,995 个检测事件**
- 检测到连续的端口使用模式
- Snort SID 1000008 触发
### 阶段 4 — UDP Flood (T1498)
```
sudo hping3 --udp --flood -p 80 192.168.1.1
```
- **15 分钟内发生 610,013 起事件**
- 模拟中规模最大的 volumetric 攻击
- Snort SID 1000004 触发
## MITRE ATT&CK 映射
| 战术 | 技术 | ID | 工具 | 证据 |
|--------|-----------|-----|------|---------|
| 侦察 | Active Scanning | T1595 | Nmap | 在 Splunk 中有 15 条 ICMP 告警 |
| 侦察 | Scanning IP Blocks | T1595.001 | Nmap -A | 48.9秒内扫描 256 个 IP |
| 影响 | Network DoS | T1498 | hping3 | 610,013 个 UDP flood 事件 |
| 影响 | Direct Network Flood | T1498.001 | hping3 --flood | 138,186 个 SYN 数据包 |
| 影响 | Reflection Amplification | T1498.002 | Snort 规则 | 部署了规则 SID 1000007 |
| 影响 | Endpoint DoS | T1499 | hping3 | 确认 100% 丢包率 |
| 影响 | SYN Flood | T1499.001 | hping3 -S | Snort SID 1000002 触发 |
| 影响 | Service Exhaustion | T1499.002 | hping3 HTTP | 144,995 个 HTTP flood 事件 |
## Snort 检测规则
**文件:** `/etc/snort/rules/local.rules`
```
# HTTP GET 检测 - T1595
alert tcp any any -> any 80 (msg:"HTTP GET Request Detected"; \
flow:to_server,established; content:"GET"; http_method; \
classtype:attempted-recon; sid:1000001; rev:1;)
# SYN Flood 检测 - T1499.001
alert tcp any any -> $HOME_NET any (flags:S; \
msg:"Potential DoS/DDoS SYN Flood Detected"; \
detection_filter:track by_dst, count 100, seconds 5; \
sid:1000002; rev:1;)
# ICMP Flood 检测 - T1498
alert icmp any any -> $HOME_NET any \
(msg:"Potential ICMP Flood Detected"; \
detection_filter:track by_dst, count 50, seconds 5; \
sid:1000003; rev:1;)
# UDP Flood 检测 - T1498
alert udp any any -> $HOME_NET any \
(msg:"Potential UDP Flood Detected"; \
detection_filter:track by_dst, count 50, seconds 5; \
sid:1000004; rev:1;)
# Port Scan 检测 - T1595.001
alert tcp any any -> $HOME_NET any (flags:S; \
msg:"Potential Port Scan Detected"; \
detection_filter:track by_src, count 20, seconds 5; \
sid:1000005; rev:1;)
# SSH Brute Force - T1110
alert tcp any any -> $HOME_NET 22 \
(msg:"Potential SSH Brute Force Detected"; \
detection_filter:track by_src, count 5, seconds 60; \
sid:1000006; rev:1;)
# DNS Amplification - T1498.002
alert udp any any -> $HOME_NET 53 \
(msg:"Potential DNS Amplification Attack"; \
detection_filter:track by_dst, count 100, seconds 5; \
sid:1000007; rev:1;)
# HTTP Flood 检测 - T1499.002
alert tcp any any -> $HOME_NET 80 \
(msg:"Potential HTTP Flood Detected"; \
detection_filter:track by_dst, count 100, seconds 10; \
sid:1000008; rev:1;)
```
## Splunk 仪表盘
### 关键检测查询
**DoS/DDoS 主检测:**
```
index=security sourcetype=fast_alert
| rex field=_raw "\{(?\w+)\}\s+(?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(?\d+)\s+->\s+(?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(?\d+)"
| bucket _time span=1m
| stats count as alert_count, dc(dest_port) as ports_targeted, values(proto) as protocols by _time, src_ip, dest_ip
| eval severity=case(
alert_count > 50, " HIGH",
alert_count > 20, " MEDIUM",
alert_count > 5, " LOW",
true(), "INFO"
)
| where severity!="INFO"
| sort -alert_count
```
**Top 攻击者 IP:**
```
index=security sourcetype=fast_alert
| rex field=_raw "(?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):\d+\s+->"
| stats count as attack_count by src_ip
| sort -attack_count
| head 10
```
### 仪表盘面板
| 面板 | 描述 | MITRE |
|-------|-------------|-------|
| 总事件 KPI | 所有安全事件的计数 (24小时) | — |
| DoS/DDoS 攻击 KPI | 检测到的活动攻击会话 | T1498/T1499 |
| 暴力破解 KPI | 失败的登录尝试 | T1110 |
| AD 变更 KPI | 组修改事件 | T1098 |
| 实时事件时间轴 | 随时间变化的事件折线图 | — |
| Top 攻击者 IP | 最高流量来源的柱状图 | T1595 |
| DoS/DDoS 攻击类型 | 带有严重性标签的饼图 | T1498/T1499 |
| 暴力破解账户 | 目标用户账户饼图 | T1110 |
| 边界防火墙 | pfSense 接口活动 | T1562.004 |
| 高/中级严重性 | 带有颜色编码的单值面板 | T1498/T1499 |
| 实时威胁订阅 | 实时的最近 20 条 Snort 告警 | — |
| 活动目录 | 组修改事件表 | T1098/T1069 |
## 关键结果
| 指标 | 数值 |
|--------|-------|
| 安全事件总数 | 1,528,725 |
| 活动 DoS/DDoS 攻击 | 4 (高严重性) |
| 暴力破解尝试 | 44 |
| SYN Flood 数据包 | 138,186 |
| HTTP Flood 事件 | 144,995 |
| UDP Flood 事件 (15 分钟) | 610,013 |
| 触发的 Splunk 告警 | 18+ |
| 部署的 Snort 规则 | 8 |
| 覆盖的 MITRE 技术 | 8 |
| Wireshark 捕获的数据包 | 800 |
## 事件响应
| 阶段 | 采取的行动 |
|-------|--------------|
| **准备阶段** | 部署 Snort 规则,配置 Splunk 告警,设置 pfSense 策略 |
| **识别阶段** | Snort SID 1000002/1000004/1000008 触发,Splunk 仪表盘确认了高严重性 |
| **遏制阶段** | 在 pfSense OPT1 处阻断 192.168.2.5,对 SYN 数据包应用速率限制 |
| **根除阶段** | 验证 IIS 服务已恢复,收紧 pfSense 防火墙规则 |
| **恢复阶段** | 确认 Splunk 中的正常流量基线,恢复域操作 |
| **经验教训** | 调整 Snort 阈值,预先配置 pfSense 速率限制 |
## 使用的工具
| 工具 | 版本 | 用途 |
|------|---------|---------|
| Oracle VirtualBox | 最新 | 所有虚拟机的 Hypervisor |
| pfSense | CE | 防火墙、路由器、DHCP 服务器 |
| Snort IDS | 3.x | 网络入侵检测 |
| Splunk Enterprise | 10.2.2 | SIEM、仪表盘、告警 |
| Splunk Universal Forwarder | 9.x | 从 Ubuntu 转发日志 |
| Kali Linux | 最新 | 攻击机 |
| hping3 | 最新 | DoS/DDoS 攻击模拟 |
| Nmap | 7.9x | 网络侦察 |
| Wireshark | 最新 | 数据包捕获与分析 |
| Windows Server 2025 | 10.0.26100 | 域控制器 / IIS 目标 |
| Windows 10 | 最新 | 域工作站 |
| Ubuntu Server | 最新 | IDS + SIEM 主机 |
## 截图
仪表盘
Wireshark I/O 图表
Dos/DDoS 告警
Wireshark 检测
## 许可证
本项目仅供教育目的。所有攻击模拟均在隔离的实验室环境中进行,未针对任何外部系统。
*日期:2026年6月21日*
Wireshark I/O 图表
Dos/DDoS 告警
## 许可证
本项目仅供教育目的。所有攻击模拟均在隔离的实验室环境中进行,未针对任何外部系统。
*日期:2026年6月21日*标签:CTI, DDoS防护, pfSense, 密码管理, 库, 应急响应, 网络安全靶场, 配置错误