HarryKlrr/iot-honeypot
GitHub: HarryKlrr/iot-honeypot
基于 Cowrie 的虚拟化 IoT 蜜罐项目,通过捕获 SSH/Telnet 攻击遥测数据并使用 Python 管道进行分析,实现物联网设备攻击行为量化与威胁情报报告生成。
Stars: 0 | Forks: 0
# IoT 蜜罐与威胁分析
**用于捕获和分析针对 IoT 的暴力破解活动的虚拟化中等交互蜜罐**
网络安全理学士 — 毕业设计 · 诺丁汉特伦特大学
[](https://github.com/cowrie/cowrie)
[](https://www.virtualbox.org/)
[](https://www.python.org/)
[]()
[](LICENSE)
## 概述
本项目在一个隔离的 VirtualBox 网络内部署了一个 **Cowrie** 中等交互蜜罐,将其配置为伪装成易受攻击的物联网 设备。该蜜罐暴露了 SSH 和 Telnet 服务 —— 这是 **Mirai** 及其变种等 IoT 僵尸网络最猛烈攻击的两个服务 —— 并以结构化 JSON 格式记录每一次连接、身份验证尝试以及登录后执行的命令。
随后,使用自定义的 **Python 分析 pipeline** 处理捕获的遥测数据,以量化攻击者行为,构建正在使用的凭据字典特征,重建攻击时间线,并生成记录在此仓库中的威胁情报发现。
在整个捕获窗口期间,该蜜罐记录了针对模拟设备的 **552 次身份验证尝试**,其中 **98.4% 失败** —— 这是基于字典的自动化暴力破解的明显标志,而非针对性的人工访问。
## 目标
1. 在完全隔离的虚拟环境中**部署**一个逼真、低风险的 IoT 蜜罐。
2. 安全地**捕获** SSH/Telnet 身份验证尝试及攻击后利用行为。
3. **量化**攻击量、成功/失败率以及时间模式。
4. **构建**针对 IoT 服务使用的用户名/密码字典特征,并将其映射到已知的僵尸网络凭据集。
5. 在 Python 中**自动化**分析和报告工作流,确保结果可复现。
6. 将原始日志**转化**为可操作、展示良好的威胁情报和防御建议。
## 工具与技术
| 类别 | 工具 |
|---|---|
| 蜜罐引擎 | [Cowrie](https://github.com/cowrie/cowrie) (中等交互 SSH/Telnet) |
| 虚拟化 | Oracle VirtualBox — 仅主机隔离网络 |
| 蜜罐宿主机 | Ubuntu Server 22.04 LTS |
| 对手模拟 | Kali Linux (Hydra / Nmap / Nikto / Dirb) |
| 流量重定向 | `iptables` (NAT 重定向 22→2222, 23→2223) |
| 日志格式 | Cowrie 结构化 JSON (`cowrie.json`) |
| 分析与可视化 | Python 3, pandas, matplotlib, NumPy |
| 参考框架 | MITRE ATT&CK, Cyber Kill Chain |
## 架构
```
VirtualBox Host-Only Network (192.168.56.0/24)
┌─────────────────────────┐ ┌──────────────────────────────┐
│ Kali Linux (Attacker) │ SSH :22 / Telnet :23 │ Ubuntu Server 22.04 (Sensor)│
│ Hydra · Nmap · Nikto │ ──────────────────────▶ │ ┌────────────────────────┐ │
│ Dirb · manual probing │ │ │ iptables NAT redirect │ │
└─────────────────────────┘ │ │ 22 → 2222 (SSH) │ │
│ │ 23 → 2223 (Telnet) │ │
│ └───────────┬────────────┘ │
│ ▼ │
│ ┌────────────────────────┐ │
│ │ Cowrie honeypot │ │
│ │ hostname: iot_device │ │
│ │ → var/log/cowrie.json │ │
│ └───────────┬────────────┘ │
└───────────────┼───────────────┘
▼
Python analysis pipeline
(credentials · timeline · IPs)
```
仅主机网卡确保蜜罐**无法访问公共互联网**,因此捕获的活动被限制在内部,实验室不会给第三方带来风险。

*高层系统架构:隔离的攻击层、蜜罐层和分析层。*
## 研究方法
本工作遵循五阶段 pipeline。完整细节见 [`docs/methodology.md`](docs/methodology.md)。
1. **环境构建** — 隔离的仅主机网络;在 VirtualBox 中配置 Ubuntu 传感器和 Kali 攻击机。
2. **蜜罐配置** — 安装 Cowrie 并将其调校为呈现为 IoT 设备 (`hostname = iot_device`),启用 SSH 和 Telnet,并使用 `iptables` 将标准端口重定向到 Cowrie 的高端口。见 [`config/`](config/)。
3. **攻击生成与捕获** — 从 Kali 对传感器发起基于字典的暴力破解 以及 Web/服务探测 (Nikto, Dirb),使用位于 [`wordlists/`](wordlists/) 的 IoT 风格凭据字典。
4. **数据处理** — 将 Cowrie JSON 解析到 pandas 中;将登录事件分类为成功/失败;聚合凭据、源 IP、会话和时间戳。见 [`analysis/`](analysis/)。
5. **报告** — 将发现可视化,并撰写包含防御建议的威胁情报报告。
## 主要发现
| 指标 | 数值 |
|---|---:|
| 总身份验证尝试次数 | **552** |
| 失败的身份验证 | **543 (98.4%)** |
| 成功的身份验证 | **9 (1.6%)** |
| 目标协议 | SSH (2222) · Telnet (2223) |
| 尝试的唯一用户名数 | 10 |
| 尝试的唯一密码数 | 20 |
| 凭据集特征 | 经典 IoT / **Mirai 家族** 默认凭据 |
**核心观察**
- **98.4% 的失败率**具有基于字典的自动化暴力破解的特征。仅成功的凭据 —— `root:root`, `admin:admin`, `admin:1234` —— 都是制造商默认凭据,且正是蜜罐被配置为接受的那三对凭据(约占 200 对字典遍历的 1.6%)。
- **与 Mirai 直接重合:** 10 个用户名中有 7 个,20 个密码中有 9 个与原始 **Mirai** 僵尸网络源代码中硬编码的凭据字典相匹配 —— 包括 IoT 特定的默认凭据 `xc3511` (XiongMai 摄像头), `vizxv` (Dahua DVR), `888888` 以及 `ubnt` (Ubiquiti)。这证实了蜜罐被正确地识别为了 IoT 目标。
- **时间特征表明其为自动化:** 运行 1 在不到一分钟内爆发完成;运行 2 持续了约 35 分钟,初始激增随后是限流尾部 (Hydra 自适应速率限制)。每个会话包含 1-5 次尝试(多线程工具),而非交互式的人工访问。
- **Web 探测:** 每次运行来自 Nikto + Dirb 的约 12,828 个 HTTP 请求,错误率高达 **99.1%** —— 完整记录了当前自动化基础设施针对的管理端点和漏洞特征清单。
- **侦察:** 在所有运行中,Nmap `-sV` 扫描正确地识别了模拟的 SSH (22) 和 Telnet (23) 服务的指纹。
所有捕获的流量均源自单一的隔离实验室源 (`192.168.56.10`);这是一项受控的内部研究,而非面向互联网的捕获,因此地理归属被视为用于实际部署的方法,而非现有发现。
## 仓库结构
```
iot-honeypot/
├── README.md # You are here
├── LICENSE # MIT
├── requirements.txt # Python dependencies for the analyser
├── .gitignore
│
├── config/ # Honeypot configuration (sanitised)
│ ├── cowrie.cfg # Cowrie overrides — IoT persona, SSH+Telnet
│ ├── userdb.txt # Authentication policy
│ └── iptables_rules.txt # Port-redirect NAT rules
│
├── wordlists/ # Credential dictionaries used in testing
│ ├── users.txt
│ └── passwords.txt
│
├── analysis/
│ └── enhanced_credential_analyzer.py # Python analysis & visualisation pipeline
│
├── data/ # Log inputs (see data/README.md)
│ ├── README.md # Expected schema + sanitisation policy
│ └── sample/
│ └── cowrie_sample.json # Small synthetic sample for reproducibility
│
├── results/ # Generated charts & analyst output
│ └── README.md
│
└── docs/
├── deployment_guide.md # Step-by-step build instructions
├── methodology.md # Detailed research methodology
└── threat-intelligence-report.md # Formal TI report (findings)
```
## 设置与复现
### 1. 构建蜜罐
按照 [`docs/deployment_guide.md`](docs/deployment_guide.md) 搭建隔离的 VirtualBox 网络,在 Ubuntu 传感器上安装 Cowrie,并应用 [`config/`](config/) 中的配置。
### 2. 运行分析 pipeline
```
# Clone
git clone https://github.com/HarryKlrr/iot-honeypot.git
cd iot-honeypot
# (推荐) virtual environment
python3 -m venv venv && source venv/bin/activate
# Dependencies
pip install -r requirements.txt
# 针对 Cowrie JSON logs 运行 (示例 log 位于 data/sample/)
python3 analysis/enhanced_credential_analyzer.py
```
该脚本会读取 Cowrie JSON,打印统计摘要,并将可视化结果写入 [`results/`](results/)。
## 结果
### SSH 暴力破解分析

*六面板 SSH 仪表盘 (运行 1,184 次尝试):热门用户名、热门密码、98.4% / 1.6% 的成功比例、攻击时间线、源 IP 分布以及每会话尝试分布。几乎均匀分布的用户名数量以及对 IoT 默认密码的集中关注,是基于字典的自动化暴力破解的典型特征。*
### Web 探测分析

*六面板 Web 仪表盘 (运行 1):热门请求路径、HTTP 状态码分布 (99.1% 错误)、Nikto/Dirb 工具归因、请求时间线、HTTP 方法以及错误率。*
### 跨运行可复现性

*运行 1 与运行 2 成等比例增长 (184 → 368 次尝试),且成功率恒定为 1.6% —— 证明蜜罐在负载增加的情况下能确定性地记录日志。*
其他图表 (`credential_analysis_run_2.png`, `web_analysis_run_2.png`, `run_comparison_web.png`,分析器控制台输出) 位于 [`results/`](results/)。证据截图 (Nmap, Hydra, tcpdump) 和架构图位于 [`docs/screenshots/`](docs/screenshots/) 和 [`docs/diagrams/`](docs/diagrams/)。
有关解释的发现和防御建议,请参见 [`docs/threat-intelligence-report.md`](docs/threat-intelligence-report.md)。
## 防御建议 (摘要)
- **消除默认凭据**,强制执行每个设备唯一的密码;完全禁用 Telnet。
- **限制管理接口** (SSH/Telnet) 仅在受信任的网络中使用;切勿将其暴露于公共互联网。
- **部署基于密钥的 SSH**,并在可行的情况下禁用密码身份验证。
- 对重复攻击者进行**速率限制和黑名单封禁** (例如 `fail2ban`),并将观察到的源 IP 加入威胁黑名单。
- **监控**此处识别出的凭据模式,将其作为 IoT 僵尸网络扫描的高置信度指标。
## 道德与负责任使用
该蜜罐在**完全隔离的仅主机网络**中运行,不连接公共互联网。未访问任何第三方系统,也未收集任何真实用户数据。此仓库中的配置文件已进行**脱敏处理** —— 秘密、密钥以及任何可识别主机身份的地址均已移除。提供的凭据字典均为已存在于公共领域的公开默认列表 (例如 Mirai 源代码发布版),且仅供防御性研究和教育之用。
## 作者
**Harry Klair** — 网络安全理学士 (荣誉),诺丁汉特伦特大学
作品集:[harryklrr.github.io](https://harryklrr.github.io) · GitHub:[@HarryKlrr](https://github.com/HarryKlrr)
## 许可证
基于 [MIT 许可证](LICENSE) 发布。标签:Python, 代码示例, 威胁情报, 开发者工具, 数据分析, 无后门, 物联网, 网络安全, 蜜罐, 证书利用, 逆向工具, 隐私保护