HarryKlrr/iot-honeypot

GitHub: HarryKlrr/iot-honeypot

基于 Cowrie 的虚拟化 IoT 蜜罐项目,通过捕获 SSH/Telnet 攻击遥测数据并使用 Python 管道进行分析,实现物联网设备攻击行为量化与威胁情报报告生成。

Stars: 0 | Forks: 0

# IoT 蜜罐与威胁分析 **用于捕获和分析针对 IoT 的暴力破解活动的虚拟化中等交互蜜罐** 网络安全理学士 — 毕业设计 · 诺丁汉特伦特大学 [![蜜罐](https://img.shields.io/badge/Honeypot-Cowrie-2b9348)](https://github.com/cowrie/cowrie) [![平台](https://img.shields.io/badge/Platform-VirtualBox-1f6feb)](https://www.virtualbox.org/) [![分析](https://img.shields.io/badge/Analysis-Python%203-3776ab)](https://www.python.org/) [![协议](https://img.shields.io/badge/Protocols-SSH%20%7C%20Telnet-orange)]() [![许可证](https://img.shields.io/badge/License-MIT-yellow.svg)](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) ``` 仅主机网卡确保蜜罐**无法访问公共互联网**,因此捕获的活动被限制在内部,实验室不会给第三方带来风险。 ![系统架构](https://static.pigsec.cn/wp-content/uploads/repos/cas/f8/f8703e99e720351f450f37988eed839450db560adc943b81926ad459c22627e5.png) *高层系统架构:隔离的攻击层、蜜罐层和分析层。* ## 研究方法 本工作遵循五阶段 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](https://static.pigsec.cn/wp-content/uploads/repos/cas/4d/4d9548ebe65785b37a80bf9ce3ea544ab86bbcfb7d7e89c3f57bdbe42f7e56e2.png) *六面板 SSH 仪表盘 (运行 1,184 次尝试):热门用户名、热门密码、98.4% / 1.6% 的成功比例、攻击时间线、源 IP 分布以及每会话尝试分布。几乎均匀分布的用户名数量以及对 IoT 默认密码的集中关注,是基于字典的自动化暴力破解的典型特征。* ### Web 探测分析 ![Web 攻击分析 — 运行 1](https://static.pigsec.cn/wp-content/uploads/repos/cas/af/af0e92c94b74c772f58caf35f710fe7a66440e61a405baf77ed9ee79592bbd41.png) *六面板 Web 仪表盘 (运行 1):热门请求路径、HTTP 状态码分布 (99.1% 错误)、Nikto/Dirb 工具归因、请求时间线、HTTP 方法以及错误率。* ### 跨运行可复现性 ![SSH 跨运行比较](https://static.pigsec.cn/wp-content/uploads/repos/cas/12/125ef70f8f816b18cfaa799a82d0242794fc0580366aa71bf51ec50221a43702.png) *运行 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, 代码示例, 威胁情报, 开发者工具, 数据分析, 无后门, 物联网, 网络安全, 蜜罐, 证书利用, 逆向工具, 隐私保护