ethalkunal/Raspberry_Pi_Detection_Lab
GitHub: ethalkunal/Raspberry_Pi_Detection_Lab
一个基于两台树莓派构建的检测工程实验室,集成Cowrie蜜罐与Loki/Grafana轻量SIEM,通过32次MITRE ATT&CK对手模拟验证了91%的检测覆盖率。
Stars: 0 | Forks: 0
# Raspberry Pi 检测工程实验室
一个基于两台 Raspberry Pi 构建的检测工程实操实验室。我部署了一个 Cowrie SSH/Telnet 蜜罐,将日志发送到自建的 Loki+Grafana SIEM,然后跨 9 个 MITRE ATT&CK 战术执行了 32 次对手模拟攻击——实现了 **91%** 的真阳性检测率,平均检测时间为 **3 秒**。
## 架构
```
Attacker (Mac/Kali)
└── Tailscale VPN
├── Pi 3B — Honeypot (armv7l, 921MB RAM)
│ Cowrie SSH honeypot port 22 → 2222
│ Cowrie Telnet port 23 → 2223
│ auditd 19 detection rules
│ Promtail log shipper → Loki
│
└── Pi 4B — SIEM (aarch64, 3.7GB RAM)
Loki 3.1.1 log aggregation
Grafana 13.0.1 dashboards
Promtail local log shipping
```
所有流量均通过 Tailscale 传输。没有将任何服务暴露在公共互联网上。
## 结果
| 指标 | 值 |
|--------|-------|
| 执行攻击数 | 跨 9 个 MITRE ATT&CK 战术 32 次 |
| 真阳性 | 29 |
| 检测覆盖率 | **91%** |
| 平均检测时间 | **3 秒** (命令),10秒 (暴力破解) |
| 编写的检测规则 | 10 条 LogQL 规则 |
| 日志源 | Cowrie JSON, auditd, syslog, auth.log |
### 按战术覆盖率
| 战术 | 覆盖率 |
|--------|----------|
| 侦察 | 67% |
| 初始访问 | 67% |
| 执行 | 100% |
| 发现 | 100% |
| 权限提升 | 100% |
| 凭据访问 | 100% |
| 持久化 | 100% |
| 命令与控制 | 100% |
| 防御规避 | 100% |
## 技术栈
| 组件 | 工具 | 版本 |
|-----------|------|---------|
| SSH 蜜罐 | Cowrie | 2.9.17 |
| 日志聚合 | Loki | 3.1.1 |
| 仪表盘 | Grafana | 13.0.1 |
| 日志传输 | Promtail | 3.1.1 |
| 主机审计 | auditd | 4.0.2 |
| VPN | Tailscale | 1.96.4 |
## 检测规则 (LogQL)
完整规则见 [`configs/detection_rules.yaml`](configs/detection_rules.yaml)。
**DR-001 — SSH 暴力破解爆发 (T1110)**
```
sum(count_over_time({job="cowrie"} | json | event_id="cowrie.login.failed" [1m])) > 20
```
**DR-002 — 蜜罐登录成功 (T1110) — 严重**
```
{job="cowrie"} | json | event_id="cowrie.login.success"
```
**DR-004 — 敏感文件读取 (T1003.008)**
```
{job="cowrie"} | json | event_id="cowrie.command.input"
|~ "(?i)(etc/passwd|etc/shadow|etc/sudoers|sshd_config|authorized_keys|id_rsa)"
```
**DR-007 — 侦察工具执行 (T1105)**
```
{job="auditd"} |~ "key=\"recon\""
```
**DR-008 — 持久化 — cron/SSH 密钥写入 (T1053.003) — 严重**
```
{job="auditd"} |~ "key=\"(persistence|ssh_key)\""
```
## 主要发现
1. **Cowrie 捕获所有内容** — 每个命令都以亚秒级精度记录,包括失败的下载尝试 (`cowrie.session.file_download.failed`)
2. **完全检测持久化** — crontab 篡改、authorized_keys 追加以及 useradd 均被捕获
3. **3 秒平均检测时间** — 从命令执行到 Grafana 中生成结构化日志事件
4. **逼真的威胁场景** — 蜜罐接受常见的 IoT 密码,与真实世界中的攻击模式相匹配
## 仪表盘

仪表盘显示:
- SSH 暴力破解速率 (失败的登录/5分钟)
- 蜜罐会话连接速率
- 实时攻击者命令流
- 蜜罐登录成功 (严重警报)
## 仓库结构
```
├── README.md
├── configs/
│ ├── cowrie.cfg # Cowrie honeypot configuration
│ ├── cowrie.service # systemd unit file
│ ├── detection_rules.yaml # 10 LogQL detection rules
│ └── grafana_dashboard.json # Importable Grafana dashboard
├── scripts/
│ ├── bootstrap_honeypot.sh # Pi 3B setup (SSH hardening, auditd)
│ ├── bootstrap_siem.sh # Pi 4B setup
│ ├── install_cowrie.sh # Cowrie honeypot install
│ ├── install_loki_grafana.sh # Loki + Grafana SIEM install
│ ├── ship_logs.sh # Promtail log shipping config
│ └── attack_catalog.sh # 32-attack adversary emulation script
├── docs/
│ ├── threat_model.md # 32 attacks across 9 ATT&CK tactics
│ └── detection_matrix.md # Real TP/FN outcomes per attack
└── evidence/ # Grafana screenshots
```
## 如何复现
**要求:** 两台 Raspberry Pi (3B + 4B)、Tailscale 账户、安装有 nmap、hydra、sshpass 的 Mac/Linux。
```
# Bootstrap 蜜罐 Pi
scp scripts/bootstrap_honeypot.sh pi3@:~/
ssh -p 2200 pi3@ 'bash bootstrap_honeypot.sh'
# 安装 Cowrie
scp scripts/install_cowrie.sh pi3@:~/
ssh -p 2200 pi3@ 'bash install_cowrie.sh'
# 在 SIEM Pi 上安装 Loki + Grafana
scp scripts/install_loki_grafana.sh pi4@:~/
ssh pi4@ 'bash install_loki_grafana.sh'
# 将日志从蜜罐 Ship 到 SIEM
scp scripts/ship_logs.sh pi3@:~/
ssh -p 2200 pi3@ 'bash ship_logs.sh '
# 运行攻击目录
bash scripts/attack_catalog.sh
```
通过 SSH 隧道访问 Grafana:
```
ssh -L 3000:localhost:3000 pi4@
# 打开 http://localhost:3000
```
导入 [`configs/grafana_dashboard.json`](configs/grafana_dashboard.json) 以获取预构建的仪表盘。
## 经验教训
- **COWRIE_STDOUT=yes** — 现代版的 Cowrie 2.9.17 需要在 systemd 中设置此环境变量以保持在前台运行。Cowrie README 中未对此进行说明——通过阅读源码才发现。
- **Python 3.13 移除了 `cgi` 模块** — 导致 python-honeypots 包损坏;Cowrie 提供了充足的 SSH/Telnet 覆盖能力。
- **Pi 3B 至少需要 2.5A 供电** — 供电不足会导致 LED 闪烁的启动循环。
- **Tailscale** — 无需端口转发;Pi 通过单个身份验证 URL 加入 tailnet。
标签:aarch64, armv7l, Grafana, IP 地址批量处理, LogQL, Loki, Promtail, Raspberry Pi, SSH安全, Tailscale, Telnet蜜罐, VPN, 内存执行, 凭证访问, 协议分析, 命令与控制, 安全实验室, 安全运营, 审计日志, 家庭实验室, 应用安全, 扫描框架, 插件系统, 无控制台执行, 无线安全, 权限提升, 私有化部署, 红队行动, 网络安全, 蜜罐, 证书利用, 轻量级SIEM, 防御规避, 隐私保护