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 密码,与真实世界中的攻击模式相匹配 ## 仪表盘 ![检测实验室仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/c884684bec215128.png) 仪表盘显示: - 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, 防御规避, 隐私保护