faisal-kh-alkanhal/Suricata-IDS-Lab

GitHub: faisal-kh-alkanhal/Suricata-IDS-Lab

基于 Suricata 构建的蓝队入侵检测实验室,通过自定义检测规则和攻击模拟验证网络威胁检测能力。

Stars: 0 | Forks: 0

# Suricata IDS 实验室 一个基于 Ubuntu Server 22.04 构建的家庭网络入侵检测系统,使用自定义 Suricata 规则来检测真实的攻击模式,包括端口扫描、暴力破解尝试和 HTTP 异常。 构建为一个实操性的蓝队项目,以展示网络威胁检测和 SOC 分析师技能。 ## 实验室架构 ``` ┌─────────────────────────────────────────────────┐ │ HOME LAB NETWORK │ │ │ │ [Attack Machine] ──────► [Suricata VM] │ │ Host / Kali Linux Ubuntu Server │ │ nmap, curl, hydra 22.04 LTS │ │ (generates test traffic) (monitors + alerts) │ └─────────────────────────────────────────────────┘ ``` **技术栈:** Suricata 8.0.5 · Ubuntu Server 22.04 · jq · 自定义检测规则 ## 检测规则 所有规则都是在 `/etc/suricata/rules/local.rules` 中从头编写的。没有使用任何社区规则集,每一个触发的告警都源自为本实验室编写的逻辑。 | # | 规则名称 | 模拟攻击 | 技术 | |---|-----------|-----------------|-----------| | 1 | SCAN nmap SYN Sweep | `nmap -sS` 端口扫描 | TCP SYN 标志 + 阈值 | | 2 | BRUTE FORCE SSH Login | 重复的 SSH 连接 | 内容匹配 + 速率阈值 | | 3 | DNS Query Suspicious TLD | 对 `.xyz` 及其他域名的 DNS 查询 | DNS 关键字匹配 | | 4 | HTTP Admin Panel Access | `curl /admin` 端点探测 | HTTP URI 内容匹配 | ### 规则:端口扫描检测 ``` alert tcp $EXTERNAL_NET any -> $HOME_NET any ( msg:"Nmap SYN Sweep"; flags:S; threshold:type both, track by_src, count 20, seconds 3; sid:1000001; rev:1; ) ``` 当单一来源在 3 秒内发送超过 20 个 SYN 数据包时触发,这是 nmap 默认扫描的特征。对阈值进行了调整,以减少合法流量上的误报,同时捕获自动化扫描器。 ### 规则:SSH 暴力破解 ``` alert tcp $EXTERNAL_NET any -> $HOME_NET 22 ( msg:"SSH Brute Force Attack"; flow:to_server,established; content:"SSH"; threshold:type both, track by_src, count 5, seconds 60; sid:1000002; rev:1; ) ``` 检测来自同一源 IP 的重复 SSH 登录尝试。按源进行追踪,因此来自多个 IP 的分布式攻击将需要单独的检测方法(在下方作为局限性注明)。 ### 规则:可疑 DNS 查询 ``` alert dns any any -> any any ( msg: "DNS Query For Suspicious TLD"; dns.query; pcre:"/\.(xyz|top|biz)/i"; sid:1000003; rev:1; ) ``` 标记针对可疑域名的出站 DNS 查询,该 TLD 通常与恶意软件 C2 基础设施相关。在实际环境中,这会与威胁情报源配合使用。 ### 规则:HTTP 管理面板探测 ``` alert http $EXTERNAL_NET any -> $HOME_NET any ( msg:"HTTP Admin Panel Access Attempt"; http.uri; content:"/admin"; nocase; sid:1000004; rev:1; ) ``` 检测对常见管理路径的请求。使用 `http.uri` 粘性缓冲区进行精确的 URI 匹配,而不是原始内容检查。 ## 攻击模拟与结果 每条规则均通过生成匹配的流量并确认在 `fast.log` 中触发告警来进行验证。 ### 模拟命令 ``` # 规则 1:Port scan nmap -sS # 规则 2:SSH brute force hydra -l root -P /usr/share/wordlists/rockyou.txt ssh:// # 规则 3:Suspicious DNS nslookup test.malicious.xyz # 规则 4:HTTP admin probe curl http:///admin ``` ### 告警输出示例 (`fast.log`) ``` 05/24/2026-15:53:04.609359 [**] [1:1000001:1] Nmap SYN Sweep [**] [Classification:(null)] [Priority: 3] {TCP} 192.168.32.131:62961 -> 192.168.32.130:106 05/24/2026-15:12:00.462001 [**] [1:1000002:1] SSH Brute Force Attack [**] [Classification(null)] [Priority: 3] {TCP} 192.168.32.131:48766 -> 192.168.32.130:22 05/24/2026-15:17:00.310172 [**] [1:1000003:1] DNS Query For Suspicious TLD [**] [Classification: (null)] [Priority: 3] {UDP} 192.168.32.131:56961 -> 192.168.32.2:53 05/24/2026-15:24:24.563944 [**] [1:1000004:1] HTTP Admin Panel Access Attempt [**] [Classification: (null)] [Priority: 3] {TCP} 192.168.32.131:53482 -> 192.168.32.130:80 ``` ## 告警分析 使用 `jq` 针对结构化 JSON 日志(`eve.json`)对告警进行分析。 ``` # 按规则名称统计告警 cat /var/log/suricata/eve.json \ | jq -r 'select(.event_type=="alert") | .alert.signature' \ | sort | uniq -c # Top attacking source IPs cat /var/log/suricata/eve.json \ | jq -r 'select(.event_type=="alert") | .src_ip' \ | sort | uniq -c ``` | 规则 | 触发告警数 | 备注 | |------|-------------|-------| | SCAN nmap SYN Sweep | 4 | 如预期在首次运行扫描时触发 | | BRUTE FORCE SSH | 4 | hydra 运行期间有多个触发窗口 | | DNS .xyz Query | 3 | 每次 nslookup 尝试时触发 | | HTTP Admin Access | 1 | 在两个 curl 请求上触发 | ## 关键发现与局限性 **运作良好的方面:** - 基于阈值的规则有效地区分了攻击流量和噪声 - `http.uri` 粘性缓冲区比原始内容提供了更可靠的 HTTP 匹配 - `eve.json` JSON 日志记录使得使用 jq 进行事后分析变得简单直接 **发现的局限性:** - SSH 暴力破解规则按单一源 IP 进行追踪 —— 分散在许多 IP 上的分布式攻击将规避此检测。更好的方法是在应用层聚合失败的认证事件(例如通过 SIEM 中的日志关联) - `.xyz` DNS 规则会对合法的 `.xyz` 域名产生误报。在生产环境中,这将被动态威胁情报源取代 - 仅以 IDS 模式运行,不执行阻断。转向 IPS 模式需要仔细调整阈值,以避免丢弃合法流量 ## 仓库结构 ``` suricata-ids-lab/ ├── README.md ├── rules/ │ └── local.rules ├── screenshots/ │ ├── alerts-fast-log.png │ └── jq-analysis.png └── logs/ └── sample-eve.json ``` ## 展示技能 `网络流量分析` · `IDS 规则编写` · `威胁检测逻辑` · `日志分析` · `Linux 管理` · `攻击模拟` · `蓝队 / SOC`
标签:IDS/IPS, Metaprompt, Suricata, 入侵检测系统, 安全数据湖, 插件系统, 现代安全运营, 红队行动, 网络安全, 网络安全审计, 隐私保护