akashreddygaddam/suricata-ids-traffic-analysis

GitHub: akashreddygaddam/suricata-ids-traffic-analysis

一个基于Suricata和Python的家用网络入侵检测实验环境,用于在隔离网络中检测、分析攻击流量并将告警日志可视化。

Stars: 0 | Forks: 0

# Suricata 网络 IDS 与流量分析 一个基于 **Suricata** 构建的家用实验环境网络入侵检测系统(NIDS),部署用于在隔离的 VMware 实验网络中检测和分析侦察、扫描和暴力破解流量。包含一个自定义的 **Python 工具**,用于将原始的 Suricata 告警日志解析为可读的摘要报告、CSV 导出以及可视化图表。 ![Python](https://img.shields.io/badge/python-3.12-blue) ![Suricata](https://img.shields.io/badge/IDS-Suricata%207.0.3-orange) ![License](https://img.shields.io/badge/license-MIT-green) ![Category](https://img.shields.io/badge/Blue%20Team-Detection%20Engineering-red) ## 概述 该项目模拟了一个由 Suricata 传感器监控的小型企业网络网段。使用攻击机(Kali Linux)针对目标主机生成真实的侦察、扫描和暴力破解流量,同时加载了完整 Emerging Threats Open 规则集(约 52,000 个特征码)的 Suricata 对流量进行实时检测并生成告警。然后,使用 Python 脚本将这些告警解析为攻击者摘要、特征码分类和时间线图表。 **项目意义:** 搭建检测工具并理解告警*为什么*会或不会触发是 Tier 1 SOC 的核心工作——该项目侧重于检测与分流方面,是对我的 [Cowrie SSH 蜜罐项目](https://github.com/akashreddygaddam/cowrie-ssh-honeypot)(侧重于欺骗和攻击者行为捕获)的补充。 ## 架构 ┌─────────────────┐ ┌──────────────────────┐ │ Kali Linux │ ───► │ Ubuntu 传感器 VM │ │ (攻击者) │ │ Suricata IDS │ │ 192.168.50.20 │ │ 192.168.50.10 │ └─────────────────┘ │ Interface: ens33 │ │ Ruleset: ET Open │ │ (52,000+ 特征码) │ └──────────┬───────────┘ │ ▼ /var/log/suricata/eve.json │ ▼ suricata_report.py (Python) │ ┌─────────────┼─────────────┐ ▼ ▼ ▼ alerts_report.csv top_signatures.png alert_timeline.png 所有虚拟机均运行在隔离的 VMware **Host-only 网络 (VMnet2, 192.168.50.0/24)** 上——没有任何流量离开实验室,并且传感器使用第二个连接 NAT 的网络适配器专门用于更新规则。 ## 测试的攻击场景 | 攻击类型 | 工具 | 触发的特征码 | |---|---|---| | TCP SYN 扫描 | `nmap -sS` | ET SCAN Potential SSH Scan | | NULL / Xmas 扫描 | `nmap -sN` / `-sX` | (规避技术——参见经验教训) | | 操作系统及服务检测 | `nmap -sV -O` | SURICATA ICMPv4 unknown code | | 漏洞扫描 | `nmap --script vuln` | ET SCAN Suspicious inbound to MySQL/PostgreSQL/MSSQL/Oracle SQL, ET SCAN Potential VNC Scan | | SSH 暴力破解 | `hydra` (8 个并行线程) | ET SCAN Potential SSH Scan | | 主机指纹识别 | Kali DHCP 请求 | ET INFO Possible Kali Linux hostname in DHCP Request Packet | ## 示例输出 ============================================================ SURICATA ALERT SUMMARY REPORT Total alerts analyzed: 44 Top Attacking IPs: 192.168.50.20 31 alerts 0.0.0.0 9 alerts 192.168.50.10 4 alerts Top Signatures Triggered: [12] GPL ICMP PING *NIX [9] ET INFO Possible Kali Linux hostname in DHCP Request Packet [8] SURICATA ICMPv4 unknown code [5] ET SCAN Potential SSH Scan [2] ET SCAN Suspicious inbound to mySQL port 3306 [2] ET SCAN Suspicious inbound to Oracle SQL port 1521 [2] ET SCAN Potential VNC Scan 5800-5820 [2] ET SCAN Suspicious inbound to MSSQL port 1433 [2] ET SCAN Suspicious inbound to PostgreSQL port 5432 Alerts by Severity: Severity 1: 9 alerts Severity 2: 15 alerts Severity 3: 20 alerts ![Top Signatures](https://static.pigsec.cn/wp-content/uploads/repos/cas/71/71970fc4e914cfce99d23ad2c176c5f6e5f4adaf770b9deeb890289a78c9af0a.png) ![Alert Timeline](https://static.pigsec.cn/wp-content/uploads/repos/cas/27/27da7bd0fa53361f8dac470a9733a64b32fe034db31ca6ac9c1d0bbc9d4467a9.png) ## 关键发现 / 学到的经验 - **`HOME_NET` 配置错误会悄无声息地破坏检测。** 我的前几次攻击运行没有产生*任何*告警,尽管流量明显已经到达传感器。根本原因:Suricata 默认的 `HOME_NET` 覆盖了整个 `/24` 子网——包括攻击者自己的 IP——因此要求流量来自 `$EXTERNAL_NET` 的规则永远无法匹配。将 `HOME_NET` 缩小到仅受保护的主机(`/32`)后,立刻修复了检测问题。这是一种在现实中非常常见的配置错误。 - **并非所有的攻击工具都会触发所有的特征码。** 一个专门针对基于 `libssh` 的暴力破解工具编写的特征码在针对 Hydra/OpenSSH 流量时从未被触发,因为客户端 banner 不匹配——这很好地提醒了我们,基于特征码的检测是特定于模式的,而不是通用的。 - **基于阈值的规则需要足够的流量才能触发。** “ET SCAN Potential SSH Scan”规则要求在 120 秒内从一个源发起 5 个新连接;少量分散的登录尝试没有达到这个门槛,直到流量被整合为快速的并行连接。 - **其他项目遗留的配置可能会悄无声息地破坏新项目。** 同一台虚拟机上仍然启用了一条旧的 NAT 重定向规则(来自另一个 SSH 蜜罐项目),并且正在将所有 SSH 流量从端口 22 悄悄重定向走——导致了类似“connection refused”的错误,这看起来像是 Suricata 的问题,但实际上是 nftables 的遗留配置造成的。 ## 如何运行 1. 在隔离的 Host-only 网络上设置两台虚拟机。 2. 在传感器上安装 Suricata:`sudo apt install suricata` 3. 将 `/etc/suricata/suricata.yaml` 中的 `HOME_NET` 设置为仅受保护的主机(参见 `suricata.yaml.example`)。 4. 更新规则:`sudo suricata-update` 5. 运行 Suricata:`sudo suricata -c /etc/suricata/suricata.yaml -i -D` 6. 从攻击虚拟机产生流量。 7. 解析结果: ``` pip install -r requirements.txt python3 suricata_report.py ``` ## 展示的技能 - Suricata 部署、配置和规则调整 - 网络分段和隔离实验环境设计(VMware Host-only 网络) - 基于特征码的检测概念(HOME_NET/EXTERNAL_NET、阈值、规则类别) - 使用行业标准工具进行攻击模拟(侦察、扫描、暴力破解) - Python 日志解析、数据聚合和可视化(pandas、matplotlib) - 对网络和检测配置错误的根本原因排查 ## 仓库结构 suricata-ids-traffic-analysis/ ├── README.md ├── suricata_report.py ├── requirements.txt ├── suricata.yaml.example ├── sample_logs/ │ └── eve.json.sample └── output/ ├── alerts_report.csv ├── top_signatures.png └── alert_timeline.png
标签:Metaprompt, Python, Suricata, 安全运营, 扫描框架, 插件系统, 无后门, 日志解析, 现代安全运营, 证书伪造, 逆向工具