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 检测与响应 ![MITRE ATT&CK](https://img.shields.io/badge/MITRE%20ATT%26CK-T1498%20%7C%20T1499%20%7C%20T1595-red) ![Splunk](https://img.shields.io/badge/SIEM-Splunk%2010.2.2-orange) ![Snort](https://img.shields.io/badge/IDS-Snort%203.x-blue) ![pfSense](https://img.shields.io/badge/Firewall-pfSense-green) ![状态](https://img.shields.io/badge/Status-Complete-brightgreen) ## 目录 - [项目概述](#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 主机 | ## 截图 仪表盘 Screenshot 2026-06-21 214017 Wireshark I/O 图表 Screenshot 2026-06-21 215202 Dos/DDoS 告警 Screenshot 2026-06-21 214506 Wireshark 检测 Screenshot 2026-06-21 214711 ## 许可证 本项目仅供教育目的。所有攻击模拟均在隔离的实验室环境中进行,未针对任何外部系统。 *日期:2026年6月21日*
标签:CTI, DDoS防护, pfSense, 密码管理, 库, 应急响应, 网络安全靶场, 配置错误