wojtekn24/Threat-detection-and-incident-response
GitHub: wojtekn24/Threat-detection-and-incident-response
一套包含六个动手实验的威胁检测与事件响应课程项目,从日志分析逐层构建到可运行的 SIEM 检测堆栈。
Stars: 0 | Forks: 0
# 🛡️ 威胁检测与事件响应实验



来自某大学课程关于威胁检测与事件响应的六个实践实验 —— 逐层构建检测堆栈,从原始日志/流量分析,一直到通过模拟攻击验证可运行的 SIEM。
**日志与流量可见性 → 端点保护 → 网络 IDS → 漏洞扫描 → 漏洞利用 → SIEM 关联与攻击模拟**
## 🔧 工具与技术
`Wireshark` · `Windows Event Viewer` · `Windows Defender` · `ClamAV` · `Suricata` · `Nmap` · `Metasploit` · `Metasploitable2` · `Elasticsearch` · `Kibana` · `Sysmon` · `Winlogbeat` · `Atomic Red Team` · `rsyslog` · `NXLog`
## 📁 目录
- [实验 02 — 日志与网络流量分析](#lab-02--log--network-traffic-analysis)
- [实验 04 — 端点检测与响应](#lab-04--endpoint-detection--response)
- [实验 06 — 使用 Suricata 进行网络入侵检测](#lab-06--network-intrusion-detection-with-suricata)
- [实验 08 — 蓄意脆弱主机的漏洞发现](#lab-08--vulnerability-discovery-on-a-deliberately-vulnerable-host)
- [实验 10 — 使用 Metasploit 进行扫描与漏洞利用](#lab-10--scanning--exploitation-with-metasploit)
- [实验 12 — SIEM 部署与攻击模拟](#lab-12--siem-deployment--attack-simulation)
## 实验 02 — 日志与网络流量分析
模拟了真实的端点活动 —— 创建用户账户、安装/卸载软件、传输和删除文件、浏览网页 —— 同时从双向捕获由此产生的证据:使用 **Wireshark** 捕获网络流量,并使用原生 OS 日志记录主机活动,涵盖了一台 Windows 主机和一台 Linux 主机。

故意触发了失败的 SSH 登录(错误的用户名/密码),随后进行了一次成功的登录,以观察日志中的对比:

定位并审查了每个 OS 存放日志的位置 —— Windows 上的 **Event Viewer**,Linux 上的 `/var/log/`(`/var/log/syslog`、`/var/log/apache2/`、`/var/log/vsftpd.log`)—— 并通过 Linux 上的 `tcpdump`/`tcpflow` 和 Windows 上的 `pktmon` 在两者上启用了实时捕获。

检查了每个 OS 上正在运行并设置为自动启动的服务/应用程序:

**集中化日志:** 在 Kali 主机上配置了 `rsyslog`,以接收来自 Linux 服务器(TCP/UDP)的日志,并通过 **NXLog** 接收来自 Windows 主机的日志 —— 此外还配置了 `logrotate`(`daily`、`rotate 10`、`compress`、`missingok`、`notifempty`),以便随着时间的推移保持日志易于管理。

**核心结论:** 确认了每个 OS 默认日志记录开箱即用*能*捕获和*不能*捕获的内容 —— 例如,默认情况下两个 OS 都不记录文件复制/删除操作,而 Windows 需要 Local Security Policy / `auditpol` 才能进行更深层的身份验证日志记录 —— 这正是集中式日志记录 + SIEM(见[实验 12](#lab-12--siem-deployment--attack-simulation))旨在弥补的差距。
## 实验 04 — 端点检测与响应
探索了 Windows 内置的 EDR(**Windows Defender**)和一种开源替代方案(**ClamAV**)在对抗真实和模拟恶意软件时的实际表现 —— 而不仅仅是理论。

**第一轮 — EICAR 测试文件:** 下载了行业标准 [EICAR 测试文件](https://www.eicar.org/) 以确认基线特征码检测。

**第二轮 — 一个“干净”的 zip:** 第一个压缩包解压时没有任何 Defender 反应 —— 直到直接打开其中一个包含的文件,此时 Defender 悄无声息地删除了它。这表明 Defender 是对*访问*做出反应,而不仅仅是对磁盘上的存在做出反应。
**第三轮 — 一批 30 个伪装的恶意软件样本:** 解压第二个包含 30 个文件(重命名的已知恶意软件样本)的压缩包引发了一波检测:

Windows Defender 漏掉了 30 个文件中的 10 个。将同一组文件与 **VirusTotal** 进行交叉比对,发现几乎所有 30 个文件实际上都被那里的至少一个 AV 引擎标记了(主要是木马/后门),这凸显了经典的**单引擎盲点**:没有任何单一的 AV/EDR 产品能提供全面覆盖 —— 分层检测(或像 VirusTotal 这样的多引擎服务)捕获的数量明显多于任何单一产品。
**第四轮 — Linux 上的 ClamAV:** 安装了 **ClamAV**,使用 `clamscan -r` 扫描相同的 30 个文件批次,并比较了结果。

ClamAV 检测出了 30 个中的 15 个 —— 包括一些针对 Windows 的恶意软件家族(`Win.Dropper`、`Win.Trojan`)—— 并通过特征码正确标记了 EICAR 文件。
**核心结论:** 两个独立的 AV/EDR 引擎,在针对相同文件集进行测试时,产生了不同(且都不完整)的检测率 —— 这是分层/EDR 加网络检测策略之所以存在的具体、第一手证据。
## 实验 06 — 使用 Suricata 进行网络入侵检测
将 **Suricata** 部署为网络 IDS,演练了它的三种操作模式,然后根据真实攻击流量构建并验证了自定义规则集。

| 模式 | 用途 |
|---|---|
| **Sniffer** (`-v`) | 实时读取并将数据包打印到控制台 |
| **Packet Logger** (`-l`) | 将捕获的数据包写入磁盘以供日后分析 |
| **NIDS** | 根据规则匹配流量并生成警报 |
**编写自定义规则**(`local.rules`),涵盖 12 个不同的检测场景,包括:
```
alert icmp any any -> any any (msg:"Ping detected"; sid:1000001; rev:1;)
```
- 端口扫描检测(端口 1–1024)
- FTP 暴力破解(3 次以上失败登录)
- SMB DoS / 缓冲区溢出模式
- 通过 Telnet/RDP 进行的 Shellcode 注入 / 可疑的 `sudo`、`su`、`runas`
- 畸形 HTTP 方法和 HTTP 500/302 响应
- SQL 暴力破解(MySQL/PostgreSQL/SQLite)
- 异常的 TCP 标志组合(`URG`、`PSH`、`RST`)

还通过 **MISP** 风格的规则源集成了外部威胁情报 —— **URLhaus**(恶意 URL 黑名单)和 **SSL Blacklist**(标记与僵尸网络 C2 关联的恶意 TLS 证书 / JA3 指纹)。
**根据真实攻击流量验证检测**(使用 `nmap` 和 `netcat` 生成):
| 攻击 | 结果 |
|---|---|
| TCP Connect 扫描 | ✅ 已检测 |
| SYN(隐蔽)扫描 | ✅ 已检测 |
| Shellcode / 命令注入 | ✅ 已检测 |
| 暴力破解登录尝试 | ✅ 已检测 |
| 自定义/畸形 TCP 标志 | ✅ 已检测 |
| HTTP 方法枚举 | ✅ 已检测 |
| 畸形 HTTP 方法 | ❌ 未检测到 |




**核心结论:** 编写规则只是工作的一半 —— 验证每个规则是否真正能在真实流量中触发(并理解*为什么*某个规则没有触发),才是区分看起来正确的规则集和真正有效的规则集的关键。
## 实验 08 — 蓄意脆弱主机的漏洞发现
搭建了 **Metasploitable2** 作为一个故意脆弱的目标,并从 Kali 攻击主机上对其进行手动枚举 —— 这是在[实验 10](#lab-10--scanning--exploitation-with-metasploit) 中进行漏洞利用的侦察基础。

手动枚举涵盖:
- 监听服务和端口:`ss -tulnp`
- 系统/内核及已安装的软件包版本
- 用户账户和密码策略信息
- 提权面:`find / -perm -4000 -type f` (SUID)、`find / -perm -2000 -type f` (SGID) 以及全局可写(`777`)文件


- 服务 banner 抓取(FTP、SSH、SMTP 版本)和 `nmap --script vuln` 扫描,发现了多个已知漏洞 —— 包括 **FTP 匿名登录**:

还执行了 FTP 暴力破解,以确认弱/默认凭证暴露情况。
**核心结论:** 本实验是漏洞评估中“侦察 → 发现列表”的半程;实验 10 将针对同一目标,将每个发现转化为概念验证漏洞利用。
## 实验 10 — 使用 Metasploit 进行扫描与漏洞利用
实验 08 的漏洞利用对应部分:使用 Metasploit 自带的辅助扫描器扫描 **Metasploitable2**(与早期的 Nmap/vuln 脚本结果交叉核对),然后针对 **8 个不同的漏洞**构建了可运行的概念验证漏洞利用,最后验证了每个漏洞是否都可以被缓解。

| # | 漏洞 | 端口 | CVSS | 影响 |
|---|---|---|---|---|
| 1 | vsftpd 2.3.4 后门 | 21 | 9.8 | 远程 shell |
| 2 | VNC 默认凭证 | 5900 | 10.0 | 身份验证绕过 ("password") |
| 3 | Ingreslock 后门 | 1524 | — | 未经身份验证的 root shell |
| 4 | rexec/rlogin 配置错误 | 512–514 | 10.0 | 无密码登录 |
| 5 | Java RMI Server | 1099 | — | RCE + 文件访问 |
| 6 | PostgreSQL | 5432 | — | 未经授权的文件访问 |
| 7 | UnrealIRCd 3.2.8.1 后门 | 6667 | — | root 访问权限 |
| 8 | Samba `usermap_script` | 139/445 | — | 以 root 身份执行 RCE |
**每个漏洞的概念验证:**








从 vsftpd shell 中,读取了 `/etc/passwd` 和 `/etc/shadow` 以确认全系统影响。
**修复与复测** —— 随后对每个漏洞进行了缓解,并重新运行相同的漏洞利用以确认其不再有效:
- **vsftpd** —— 移除了受损的软件包
- **VNC** —— 使用 `vncpasswd` 更改了默认密码
- **Ingreslock / rlogin** —— 注释掉了 `/etc/inetd.conf` 中的相关服务条目
- **Java RMI** —— 在防火墙处阻止了该端口:`sudo iptables -A INPUT -p tcp --dport 1099 -j DROP`
- **PostgreSQL** —— 更改了默认数据库密码
- **UnrealIRCd** —— 阻止了该端口:`sudo iptables -A INPUT -p tcp --dport 6667 -j DROP`
- **Samba** —— 注释掉了脆弱的 `usermap_script` 配置条目
打补丁后,所有 8 次后续漏洞利用尝试均告失败,从而确认了修复效果。
## 实验 12 — SIEM 部署与攻击模拟
从零开始构建了一个可运行的 SIEM pipeline,然后使用 **Atomic Red Team** 对其进行红队测试,以查看它能捕获和无法捕获的内容。
**构建:** 在 Linux 主机上安装 Elasticsearch + Kibana,并配置为单节点运行:
```
# elasticsearch.yml
cluster.name: my-cluster
xpack.security.enabled: false
discovery.type: single-node
network.host: 0.0.0.0
```
```
# kibana.yml
server.name: kibanaserver
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
```
**遥测:** 在 Windows 主机上部署了 **Sysmon** + **Winlogbeat**,指向 Elasticsearch/Kibana 实例,然后加载了 SIEM 仪表板。

**使用 Atomic Red Team 进行攻击模拟** —— 在受监控的 Windows 主机上运行真实的 MITRE ATT&CK 映射技术,并检查 SIEM 是否捕获了它们:
| 技术 | 结果 |
|---|---|
| LSASS 内存转储(凭证访问) | ✅ 已检测 — 捕获了完整的命令行 |
| 系统网络配置发现 | ✅ 已检测 |
| PowerShell 执行策略绕过 | ✅ 已检测 |
| 端口扫描 (Nmap) | ❌ 未检测到 |
| SMB 暴力破解 | ❌ 未检测到 |
| 本地用户/组创建 | ❌ 未检测到 |



**核心结论 —— 也是最真实的一条:** 大约一半的模拟技术未被检测到,这很可能是因为端点审计策略/遥测源存在差距,而不是 SIEM/查询问题。这个差距本身就是有用的结果:它表明**部署 SIEM ≠ 拥有检测覆盖范围** —— 你必须针对每种技术验证覆盖范围,而不是想当然。
## 🎯 展示的技能
- 将 Windows Event Logs 与网络数据包捕获 (Wireshark) 相关联
- 使用 rsyslog / NXLog 集中跨平台日志,并保持良好的日志轮转习惯
- 跨两个独立引擎实证评估 AV/EDR 的检测效能
- 根据真实攻击流量编写、调整和验证 Suricata NIDS 规则
- 集成外部威胁情报源(MISP 风格:URLhaus、SSL Blacklist)
- 手动漏洞枚举(服务、SUID/SGID、凭证、banner)
- 使用 Metasploit 利用 8 个真实漏洞,随后验证修复效果
- 从零开始构建 SIEM pipeline(Elasticsearch、Kibana、Sysmon、Winlogbeat)
- 使用 Atomic Red Team 对 SIEM 进行紫队测试,并如实评估检测差距标签:CTI, Elastic Stack, Metaprompt, 入侵检测系统, 安全数据湖, 流量重放, 网络安全实验, 越狱测试