Mahmoud-AlNajjar47/keylogger-detection-lab
GitHub: Mahmoud-AlNajjar47/keylogger-detection-lab
一个结合键盘记录器攻击模拟与 SIEM 检测规则的教育实验室,帮助蓝队团队练习终端威胁的检测与分析。
Stars: 0 | Forks: 0
# 🔐 键盘记录器检测实验室
## ⚠️ 免责声明
本项目**严格用于教育和授权的安全测试目的**。
在未经**明确书面许可**的情况下在任何系统上运行此软件,均属于违反计算机欺诈法律的违法行为(例如:埃及网络犯罪法第 175/2018 号、CFAA、计算机滥用法)。
作者对任何滥用行为**不承担任何责任**。
## 📋 概述
本实验室演示了针对常见终端威胁的完整攻击检测生命周期:
| 组件 | 描述 |
|---|---|
| `src/keylogger.py` | 基于 Python 的键盘记录器(红队模拟) |
| `src/log_analyzer.py` | 蓝队日志解析器和关键词警报器 |
| `detection/splunk_rules.spl` | 6 条 Splunk SPL 检测查询语句 |
| `detection/wazuh_rules.xml` | 5 条具有关联性的 Wazuh 自定义规则 |
## 🎯 MITRE ATT&CK 映射
| 战术 | 技术 | ID |
|---|---|---|
| Collection | Input Capture: Keylogging | T1056.001 |
| Exfiltration | Exfiltration Over Alternative Protocol | T1048 |
| Persistence | Boot/Logon Autostart: Registry Run Keys | T1547.001 |
## 🔴 红队 – 键盘记录器功能
- 带有时间戳和活动窗口上下文的**击键捕获**
- 启动时的**剪贴板捕获**
- **按应用程序记录**(了解你当前正在哪个应用中输入)
- 通过 SMTP 的**电子邮件外泄模拟**(可配置的时间间隔)
- 采用 **JSON-lines 输出**格式,方便 SIEM 采集
- 带有定期刷新的**磁盘持久化**
### 运行(仅在隔离的实验室 VM 中)
```
pip install -r requirements.txt
python src/keylogger.py
# 按 ESC 停止
```
### 日志输出示例 (`keylog.json`)
```
{"timestamp": "2024-11-01T10:23:45Z", "host": "LAB-PC", "os": "Windows 10", "window": "Google Chrome", "key": "p"}
{"timestamp": "2024-11-01T10:23:45Z", "host": "LAB-PC", "os": "Windows 10", "window": "Google Chrome", "key": "a"}
{"timestamp": "2024-11-01T10:23:46Z", "host": "LAB-PC", "os": "Windows 10", "window": "Google Chrome", "key": "[CLIPBOARD: hunter2]"}
```
## 🔵 蓝队 – 检测与分析
### 1. 日志分析器(本地)
```
python src/log_analyzer.py --file keylog.json
```
输出内容包括:
- 会话时间线(主机、OS、开始/结束时间)
- 按应用程序划分的击键明细
- 剪贴板捕获事件
- 敏感关键词命中(password、token、api_key 等)
- 还原的输入文本
### 2. Splunk 检测规则
文件:`detection/splunk_rules.spl`
| 规则 | 检测目标 | 严重程度 |
|---|---|---|
| Rule 1 | 加载 pynput / keyboard hook 的 Python 进程 | HIGH |
| Rule 2 | 来自非邮件进程的出站 SMTP | MEDIUM |
| Rule 3 | 写入磁盘的键盘记录文件 | HIGH |
| Rule 4 | 通过 Windows API 实现的底层 keyboard hook | CRITICAL |
| Rule 5 | Registry Run key 持久化 | HIGH |
| Rule 6 | 10 分钟内 Hook + SMTP 的关联性 | CRITICAL |
### 3. Wazuh 自定义规则
文件:`detection/wazuh_rules.xml` — 部署至 `/var/ossec/etc/rules/local_rules.xml`
| Rule ID | Level | 检测目标 |
|---|---|---|
| 100100 | 12 | 命令行中的 pynput / keyboard API |
| 100101 | 12 | 磁盘上创建的键盘记录文件 |
| 100102 | 10 | 来自非邮件进程的意外 SMTP |
| 100103 | 13 | Registry Run key 持久化 |
| 100104 | 15 | **关联性:同一主机上的 Hook + SMTP(10 分钟内)** |
## 🏗️ 架构
```
Attacker endpoint
│
├── keylogger.py ← T1056.001: captures keystrokes + clipboard
│ ├── Writes keylog.json to disk → triggers Rule 100101 (Wazuh) / Rule 3 (Splunk)
│ └── SMTP email every 5 min (optional) → triggers Rule 100102 (Wazuh) / Rule 2 (Splunk)
│
Sysmon (on endpoint)
│
├── Event 1 (Process Create) → Rule 100100
├── Event 3 (Network Conn) → Rule 100102
├── Event 11 (File Created) → Rule 100101
└── Event 13 (Registry Set) → Rule 100103
│
SIEM (Splunk / Wazuh)
│
└── Correlation Rule 100104 / SPL Rule 6
└── Alert → SOC Analyst
```
## 🔍 SOC 分析师将如何调查此事
1. **初始警报**:Wazuh Rule 100104 (level 15) 触发 → 创建工单
2. **分类筛选**:检查 `agent.name`、`win.eventdata.image`、`win.eventdata.commandLine`
3. **关联查询**:搜索该主机在过去 24 小时内的所有活动
4. **证据收集**:
- 哪些应用程序成为了目标?
- SMTP 连接是否成功?(检查防火墙日志)
- 键盘记录器是否已持久化?(检查 registry/autorun)
5. **遏制**:隔离主机,终止进程,移除持久化键
6. **IOCs**:`keylogger.py` 的哈希值、SMTP 目标 IP、registry key 路径
## 🛠️ 实验室设置建议
| 组件 | 工具 |
|---|---|
| 受害端 VM | Windows 10 (VirtualBox / VMware) |
| 终端遥测数据 | Sysmon + Wazuh agent |
| SIEM | Wazuh Manager 或 Splunk(免费试用版) |
| 网络隔离 | Host-only adapter(无互联网连接) |
## 📁 项目结构
```
keylogger-detection-lab/
├── src/
│ ├── keylogger.py # Malware simulation
│ └── log_analyzer.py # Blue-team log parser
├── detection/
│ ├── splunk_rules.spl # Splunk SPL queries
│ └── wazuh_rules.xml # Wazuh custom rules
├── requirements.txt
└── README.md
```
## 🧠 关键要点
- 键盘记录器可以通过**进程行为**、**文件系统事件**和**网络异常**来检测——而不仅仅是依靠特征码
- **关联规则**(结合多个微弱信号)可以显著减少漏报
- 结构化的 JSON 日志可使 SIEM 采集和分析速度显著提升
- 相同的 Sysmon event ID(1、3、11、13)能够覆盖键盘记录器之外的大量恶意软件行为
*作为 SOC 检测工程项目集的一部分而构建。所有测试均在隔离的实验室环境中进行。*
标签:Python, SIEM检测规则, Wazuh, 无后门, 网络安全, 逆向工具, 键盘记录, 隐私保护