Jyot-tipsoc/honeypot-threat-lab

GitHub: Jyot-tipsoc/honeypot-threat-lab

一个生产级医疗物联网蜜罐系统,通过模拟脆弱设备诱捕攻击者,实现威胁情报采集、GeoIP 归属分析及实时攻击可视化。

Stars: 1 | Forks: 1

# 🏥 医疗物联网欺骗蜜罐网络 一个适用于医疗环境的完整、生产级 **物联网蜜罐系统**。模拟脆弱的医疗物联网设备(SSH/Telnet/Web 面板),捕获攻击者行为,通过 GeoIP 数据丰富日志,并在实时威胁情报仪表板上可视化所有信息。 ## 📐 架构概述 ``` Internet / Test Network │ ▼ ┌─────────────────────────────────────────────────────┐ │ HONEYPOT LAYER │ │ ┌──────────────┐ ┌──────────────────────────┐ │ │ │ Cowrie │ │ Fake IoT Web Panel │ │ │ │ SSH :2222 │ │ Flask App :8080 │ │ │ │ Telnet :2223 │ │ (unauthenticated admin) │ │ │ └──────┬───────┘ └────────────┬─────────────┘ │ └─────────┼───────────────────────-─┼─────────────────┘ │ JSON logs │ JSON logs ▼ ▼ ┌─────────────────────────────────────────────────────┐ │ DATA PIPELINE LAYER │ │ ┌───────────┐ ┌────────────┐ ┌──────────────┐ │ │ │ Filebeat │──▶│Elasticsearch│ │ Log Parser │ │ │ │(log ship) │ │ :9200 │ │ + GeoIP │ │ │ └───────────┘ └────────────┘ │ + IoC extract│ │ │ └──────┬───────┘ │ └──────────────────────────────────────────┼──────────┘ │ ▼ ┌─────────────────────────────────────────────────────┐ │ VISUALIZATION LAYER │ │ ┌──────────────────────────────────────────────┐ │ │ │ Threat Dashboard :5000 (via Nginx :80) │ │ │ │ • Live attack feed • World map │ │ │ │ • Top IPs/creds • Timeline chart │ │ │ │ • Malware hashes • IoC report │ │ │ └──────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘ ``` ## 📁 项目结构 ``` honeypot-project/ ├── docker-compose.yml ← Orchestrates all 7 containers │ ├── cowrie/ ← SSH/Telnet honeypot │ ├── Dockerfile │ └── etc/ │ ├── cowrie.cfg ← Device impersonation config │ └── userdb.txt ← Weak credentials (trap) │ ├── fake_panel/ ← Fake IoT web admin panel │ ├── Dockerfile │ └── app.py ← Flask app, logs every click │ ├── filebeat/ │ └── filebeat.yml ← Ships logs to Elasticsearch │ ├── dashboard/ ← Threat intelligence dashboard │ ├── Dockerfile │ ├── app.py ← Flask API + template server │ └── templates/ │ └── dashboard.html ← Full interactive UI │ ├── scripts/ │ ├── Dockerfile ← Log parser container │ ├── parser.py ← GeoIP enrichment + SQLite indexing │ └── ioc_extractor.py ← IoC report generator (Week 3) │ ├── nginx/ │ └── nginx.conf ← Reverse proxy config │ ├── tests/ │ └── simulate_attacker.py ← Generates fake traffic for testing │ ├── docs/ │ └── architecture.md ← Detailed architecture notes │ └── setup.sh ← One-command setup script ``` ## 🚀 快速开始(分步指南) ### 前置条件 | 要求 | 版本 | 检查命令 | |---|---|---| | Linux(推荐 Ubuntu 22.04) | 任意 | `uname -a` | | Docker | ≥ 24.0 | `docker --version` | | Docker Compose | ≥ 2.0 | `docker compose version` | | RAM | ≥ 4 GB | `free -h` | | 磁盘 | ≥ 10 GB | `df -h` | ### 步骤 1 — 克隆仓库 ``` git clone https://github.com/YOUR_USERNAME/honeypot-project.git cd honeypot-project ``` ### 步骤 2 — 运行设置脚本 ``` chmod +x setup.sh ./setup.sh ``` 此脚本将执行以下操作: 1. 检查是否已安装 Docker/Compose 2. 为 Elasticsearch 调优 `vm.max_map_count` 3. 创建本地日志目录 4. 构建所有 Docker 镜像 5. 启动全部 7 个容器 6. 等待 Elasticsearch 变为健康状态 ### 步骤 3 — 验证所有服务是否正在运行 ``` docker compose ps ``` 你应该看到所有服务的状态均为 `Up`: ``` NAME STATUS cowrie_honeypot Up (healthy) fake_iot_panel Up filebeat Up elasticsearch Up (healthy) threat_dashboard Up log_parser Up nginx_proxy Up ``` ### 步骤 4 — 访问仪表板 打开浏览器: ``` http://localhost:5000 ← Threat Intelligence Dashboard http://localhost:8080 ← Fake IoT Admin Panel (honeypot) http://localhost:9200 ← Elasticsearch raw API ``` ### 步骤 5 — 使用模拟流量进行测试(开发环境) 如果你想立即在仪表板中填充数据,而不想等待真实攻击者: ``` # 运行攻击者模拟器(仅针对本地日志文件 — 安全) python3 tests/simulate_attacker.py \ --log $(docker inspect cowrie_honeypot --format '{{range .Mounts}}{{.Destination}}{{end}}' | grep cowrie)/cowrie.json \ --events 200 ``` 或者直接写入挂载卷: ``` python3 tests/simulate_attacker.py --log /tmp/cowrie_test.json --events 100 ``` 刷新仪表板——你将在约 30 秒内看到攻击数据出现。 ### 步骤 6 — 手动测试 SSH 蜜罐 ``` # 尝试连接到 Cowrie(安全 — 它是一个 honeypot) ssh root@localhost -p 2222 # 密码: root(或来自弱凭据列表中的任意一个) # 你将进入一个 fake shell — 输入命令并查看日志 ``` ``` # 查看实时 Cowrie 日志 docker compose logs -f cowrie ``` ### 步骤 7 — 生成 IoC 报告(第 3 周) ``` # 对实时数据库运行 IoC extractor docker compose exec log_parser python3 /app/ioc_extractor.py \ --db /app/db/honeypot.db \ --out /app/db # 将报告复制到本地机器 docker cp log_parser:/app/db/ioc_report.txt ./ioc_report.txt docker cp log_parser:/app/db/ioc_report.json ./ioc_report.json cat ioc_report.txt ``` ## 🗓️ 四周工程路线图 ### 第 1 周 — 环境搭建与设备模拟 **目标:** 部署并配置蜜罐,使其能令人信服地模拟医疗物联网设备。 **任务:** ``` # 1. 构建并启动所有容器 ./setup.sh # 2. 验证 Cowrie 正在监听 nmap -p 2222,2223 localhost # 3. 检查 fake SSH banner(看起来像 Philips 医疗设备) nc -v localhost 2222 # 4. 验证 fake web panel 正在提供 IoT admin UI curl -I http://localhost:8080 # 5. 查看容器隔离(确保 honeypot 无法访问真实网络) docker network inspect honeypot-project_honeypot_net ``` **交付物:** Cowrie 返回 `SSH-2.0-OpenSSH_7.4 (Philips IntelliVue IoT Gateway v3.2.1)` 标语。Web 面板显示逼真的、无需身份验证的管理界面。 ### 第 2 周 — 暴露与数据捕获 **目标:** 确认所有攻击者交互都被完整记录。 **任务:** ``` # 1. 模拟 SSH brute-force(从第二个终端) for pass in root admin password 123456 toor; do sshpass -p "$pass" ssh -o StrictHostKeyChecking=no root@localhost -p 2222 \ "uname -a; cat /etc/passwd" 2>/dev/null || true done # 2. 查看出现在 Cowrie 日志中的事件 docker compose exec cowrie tail -f var/log/cowrie/cowrie.json | python3 -m json.tool # 3. 检查 web panel 日志(每次点击都被记录) curl -X POST http://localhost:8080/admin \ -d "username=admin&password=admin123" docker compose logs fake_panel # 4. 验证 Elasticsearch 已接收事件 curl http://localhost:9200/honeypot-events/_count ``` **交付物:** 每个连接、登录尝试和命令都能看到对应的 JSON 日志条目。仪表板显示实时数据。 ### 第 3 周 — 日志解析与威胁情报提取 **目标:** 从原始日志中提取结构化的 IoC。 **任务:** ``` # 1. 运行 IoC extractor docker compose exec log_parser python3 /app/ioc_extractor.py # 2. 直接从数据库查询攻击者 IP docker compose exec log_parser python3 - <<'EOF' import sqlite3, json conn = sqlite3.connect("/app/db/honeypot.db") rows = conn.execute(""" SELECT src_ip, country, COUNT(*) as hits FROM events GROUP BY src_ip ORDER BY hits DESC LIMIT 10 """).fetchall() for r in rows: print(r) EOF # 3. 检查捕获的恶意软件 docker compose exec cowrie ls var/lib/cowrie/downloads/ 2>/dev/null || echo "No drops yet" # 4. 导出 credential spray 列表 docker compose exec log_parser python3 - <<'EOF' import sqlite3 conn = sqlite3.connect("/app/db/honeypot.db") rows = conn.execute(""" SELECT username, password, COUNT(*) as n FROM events WHERE event_type='AUTH_FAIL' GROUP BY username, password ORDER BY n DESC LIMIT 20 """).fetchall() print("USERNAME PASSWORD ATTEMPTS") for r in rows: print(f"{r[0]:<18} {r[1]:<18} {r[2]}") EOF ``` **交付物:** 包含攻击者 IP、恶意软件哈希、凭据对和可疑命令的 `ioc_report.txt` 和 `ioc_report.json`。 ### 第 4 周 — 仪表板与地理位置分析 **目标:** 在世界地图上可视化攻击源,并对漏洞利用技术进行分类。 **任务:** ``` # 1. 打开 dashboard xdg-open http://localhost:5000 # Linux # 或在浏览器中打开 http://localhost:5000 # 2. 检查 geolocation 是否正常工作 curl "http://localhost:5000/api/map_data" | python3 -m json.tool | head -40 # 3. 获取国家/地区明细 curl "http://localhost:5000/api/country_stats" | python3 -m json.tool # 4. 获取 timeline 数据 curl "http://localhost:5000/api/timeline" | python3 -m json.tool # 5. 截图:map、timeline、top IPs、credential spray、command list # 这些将放入你的最终报告中 # 6. 为 README 生成最终 IoC 报告 docker compose exec log_parser python3 /app/ioc_extractor.py \ --db /app/db/honeypot.db --out /app/db docker cp log_parser:/app/db/ioc_report.txt ./docs/final_ioc_report.txt ``` **交付物:** 带有世界地图的正常运行仪表板,所有图表均已填充数据,最终的 IoC 报告已提交至代码库。 ## 🔧 常用命令参考 ``` # ── 启动 / 停止 ────────────────────────────────────────────── docker compose up -d # Start all services docker compose down # Stop all services docker compose down -v # Stop + delete ALL data (fresh start) docker compose restart cowrie # Restart just Cowrie # ── 日志 ───────────────────────────────────────────────────── docker compose logs -f cowrie # Live Cowrie SSH logs docker compose logs -f log_parser # GeoIP enrichment progress docker compose logs -f dashboard # Dashboard API logs docker compose logs -f fake_panel # Web panel interaction logs # ── 数据库查询 ────────────────────────────────────────────────── # 在 parser 容器内打开 SQLite shell docker compose exec log_parser python3 -c " import sqlite3; conn = sqlite3.connect('/app/db/honeypot.db') print(conn.execute('SELECT COUNT(*) FROM events').fetchone()) " # ── Elasticsearch ───────────────────────────────────────────── curl http://localhost:9200/_cat/indices?v # List all indices curl http://localhost:9200/honeypot-events/_count # Event count curl http://localhost:9200/honeypot-events/_search?size=1 | python3 -m json.tool # ── Cowrie 管理 ───────────────────────────────────────────────── # 查看捕获的文件/恶意软件 docker compose exec cowrie ls var/lib/cowrie/downloads/ # ── 网络隔离检查 ─────────────────────────────────────────── docker network ls docker network inspect honeypot-project_honeypot_net ``` ## 🔒 安全说明 | 规则 | 原因 | |------|--------| | 在 VM 或隔离的云实例中运行 | 防止攻击者访问你的真实系统 | | 切勿将端口 9200(Elasticsearch)暴露到互联网 | 无身份验证 = 数据泄露 | | 保持端口 5000(仪表板)仅限内部访问 | 仅限分析师查看 | | 仅在外部暴露 2222、2223、8080 端口 | 这些是蜜罐诱捕端口 | | 使用 `docker compose down -v` 清除捕获的恶意软件 | 分析完成后执行 | | 本项目仅供**你自己的隔离网络使用** | 切勿针对你不拥有的系统 | ## 📊 仪表板功能 | 面板 | 描述 | |-------|-------------| | **统计卡片** | 事件总数、身份验证失败次数、独立 IP 数、国家/地区数、命令数、恶意软件投放数 | | **世界地图** | Leaflet.js 地图,为每个攻击者 IP 带有圆形标记(大小由事件数量决定) | | **攻击时间轴** | 48 小时的每小时事件量图表 | | **实时信息流** | 最后 50 个事件,包含类型徽章、IP、位置、凭据/命令 | | **热门攻击者 IP** | 按总命中数排名的条形图 | | **热门凭据** | 尝试次数最多的用户名/密码对 | | **热门命令** | 在虚假环境中最常执行的 Shell 命令 | | **恶意软件哈希** | 所有捕获的文件投放的 SHA256 及 VirusTotal 链接 | | **国家/地区统计** | 按来源国家/地区划分的攻击量 | 仪表板每 **15 秒** 自动刷新一次。 ## 📚 技术栈 | 组件 | 技术 | 原因 | |-----------|-----------|-----| | SSH/Telnet 蜜罐 | [Cowrie](https://github.com/cowrie/cowrie) | 专为记录暴力破解 + Shell 交互而构建 | | Web 蜜罐 | Python Flask | 轻量级,易于针对任何设备配置文件进行自定义 | | 日志传送 | Filebeat | 经过实战考验的日志转发器,原生集成 ES | | 搜索与存储 | Elasticsearch | 对攻击事件进行全文搜索 + 聚合 | | GeoIP | ip-api.com | 提供免费的 IP 地理定位及 ISP 信息,无需 API 密钥 | | 本地数据库 | SQLite | 零配置,适用于仪表板查询的快速响应 | | 仪表板 | Flask + Chart.js + Leaflet | 纯 Web 实现,无需构建步骤 | | 反向代理 | Nginx | 分析师工具的统一入口点 | | 编排 | Docker Compose | 一键部署,强隔离性 | ## 📄 许可证 MIT 许可证 —— 仅限教育和授权的安全研究使用。 ## 🤝 贡献 / 扩展 扩展建议: - 添加 MQTT 蜜罐(端口 1883)以模拟医疗设备消息传递 - 集成 VirusTotal API 以自动查找恶意软件哈希 - 当新攻击者获取 Shell 访问权限时添加 Slack/电子邮件告警 - 与 MISP 集成以进行威胁情报共享 - 添加 DICOM 协议蜜罐(端口 11112)以模拟 PACS 系统
标签:CISA项目, 威胁情报, 安全, 开发者工具, 版权保护, 物联网, 蜜罐, 证书利用, 请求拦截, 超时处理, 逆向工具