SaiKrishna-Masetti/aws-honeypot-threat-intel
GitHub: SaiKrishna-Masetti/aws-honeypot-threat-intel
基于 AWS 部署的 Cowrie 蜜罐,提供从攻击捕获、日志解析到威胁情报报告自动生成的完整解决方案。
Stars: 0 | Forks: 0
# AWS 蜜罐威胁情报
我在 AWS 上部署了一个 Cowrie SSH/Telnet 蜜罐,并让其运行了大约 6 个月。在此期间,它记录了来自 **7,241 个独立 IP 地址**在 **139,027 个会话**中的 **1,001,468 个事件**。本仓库包含了我用于处理这些日志的分析脚本,以及根据它们生成的威胁情报报告。
## 项目功能
该蜜罐位于 AWS EC2 实例上,伪装成一个易受攻击的 SSH 服务器。攻击者通过自动扫描发现它,尝试暴力破解进入,一旦获得 shell,他们就会运行命令、下载恶意软件并尝试进一步扩散。Cowrie 捕获了所有内容——每一次登录尝试、每一条命令、每一个文件下载。
然后,我将日志从服务器上拉取下来,编写了一个 Python 脚本来深入解析 JSON 日志文件,并输出一份完整的 Word 文档格式的威胁情报报告,其中包含图表和表格。
## 主要发现
| 指标 | 数值 |
|--------|-------|
| 事件总数 | 1,001,468 |
| 收集周期 | 2025 年 9 月 10 日 – 2026 年 3 月 10 日(181 天) |
| 独立源 IP 数 | 7,241 |
| 会话总数 | 139,027 |
| 登录尝试次数 | 126,042(成功率 68.6%) |
| 独立恶意软件样本数 | 3,824 |
| 捕获的命令数 | 102,632 |
| 涉及国家数 | 30 |
| 映射的 MITRE ATT&CK 技术 | 7 |
攻击最多的国家是中国(超过 28.7 万个事件),其次是香港和印度尼西亚。最常见的凭据是 `root/3245gs5662d34` 和 `root/root`——这混合了看起来像针对性僵尸网络凭据和常见的默认密码嫌疑对象。
进入后,大多数攻击者运行侦察命令(`uname`、`whoami`,检查 CPU 信息和内存),注入 SSH 密钥以进行持久化,并尝试从外部 C2 服务器下载恶意软件。我提取了 18 个独立的 C2 URL,并按 SHA256 哈希值编录了 3,824 个独立的恶意软件样本。
## 架构
```
┌───────────────────────────────────────┐
│ AWS EC2 (t2.micro) │
│ │
┌──────────────────┐ │ ┌─────────────────────────────────┐ │
│ Attacker Traffic │──────▶│ │ Docker │ │
│ Port 22 ───────────────▶│ │ Port 22 → 2222 (Cowrie SSH) │ │
│ Port 23 ───────────────▶│ │ Port 23 → 2223 (Cowrie Telnet)│ │
└──────────────────┘ │ └─────────────────────────────────┘ │
│ │
┌──────────────────┐ │ ┌─────────────────────────────────┐ │
│ Admin (My IP) │──────▶│ │ Real SSH on port 22222 │ │
│ Port 22222 │ │ └─────────────────────────────────┘ │
└──────────────────┘ └──────────────────┬────────────────────┘
│ docker cp + SCP
▼
┌───────────────────────────────────────┐
│ Local Machine │
│ Logs → Google Drive → Colab Analysis │
│ → Threat Intel Report (.docx) │
└───────────────────────────────────────┘
```
### 安全组规则
| 规则 | 端口 | 来源 | 用途 |
|------|------|--------|---------|
| SSH (蜜罐) | 22 | 0.0.0.0/0 | 对互联网开放 —— 吸引攻击者 |
| Telnet (蜜罐) | 23 | 0.0.0.0/0 | 对互联网开放 —— Cowrie Telnet 陷阱 |
| SSH (管理) | 22222 | 仅限我的 IP | 安全的管理访问 |
## 我是如何构建它的
### 1. EC2 设置
在 AWS 上启动了一个 **t2.micro** 实例——Cowrie 非常轻量级,所以不需要更大的实例。配置安全组将端口 22 和 23 暴露给互联网(这正是重点——让攻击者进来),同时将真正的 SSH 端口限制为仅限我的 IP。我将 EC2 实例的实际 SSH 守护进程更改为监听端口 22222:
```
# /etc/ssh/sshd_config
Port 22222
```
这释放了端口 22 用于蜜罐,并保持我的管理访问被锁定。我通过 PowerShell 在端口 22222 上通过 SSH 连接到实例进行所有管理任务。
### 2. 蜜罐部署
在 EC2 实例上安装了 Docker 并在容器中运行 Cowrie。Docker 中的端口映射处理了路由:
```
ports:
- "22:2222" # External SSH → Cowrie SSH
- "23:2223" # External Telnet → Cowrie Telnet
```
因此,从攻击者的角度来看,他们正在访问端口 22 上的正常 SSH 服务器。Docker 将其转发到 Cowrie 的内部端口 2222,在那里它模拟真实的 shell 环境并记录所有内容——登录尝试、命令、文件下载,所有内容都写入容器内的 JSON 日志文件中。
实际的 EC2 系统从未暴露给攻击者。即使有人成功“登录”,他们也被限制在 Cowrie 的模拟环境中,无法访问真实主机。
### 3. 日志收集
一旦我有足够的数据,我分两步提取了日志:
- 使用 `docker cp` 将日志目录从 Cowrie 容器复制到 EC2 主机
- 使用 `scp` 和我的 SSH 密钥(在端口 22222 上)将日志从 EC2 传输到我的本地机器
然后我将日志上传到 Google Drive,以便我可以在 Colab 中使用它们。
### 4. 分析与报告生成
在 Google Colab 中编写了一个 Python 脚本,该脚本:
- 解析来自 Cowrie 的所有 JSON 日志文件
- 对源 IP、凭据、命令、会话进行计数和排名
- 按意图对入侵后命令进行分类(侦察、持久化、防御规避等)
- 使用 ip-api.com API 为排名靠前的攻击 IP 查找地理位置和 ISP 数据
- 将观察到的活动映射到 MITRE ATT&CK 技术
- 使用 matplotlib 生成 7 种不同的图表类型(面积图、条形图、饼图)
- 使用 python-docx 构建完整的 Word 文档报告,包括表格、嵌入图表、样式化标题和标题页
## MITRE ATT&CK 覆盖范围
| 技术 ID | 名称 | 战术 | 观察次数 |
|---|---|---|---|
| T1595 | 主动扫描 | 侦察 | 132,770 |
| T1110 | 暴力破解 | 凭据访问 | 39,611 |
| T1078 | 有效账户 | 初始访问 | 86,431 |
| T1059 | 命令和脚本解释器 | 执行 | 108,773 |
| T1105 | 入口工具传输 | 指挥与控制 | 15,235 |
| T1572 | 协议隧道 | 指挥与控制 | 113 |
## 有趣的观察
**SSH 密钥注入无处不在。** 超过 10,000 个会话包含一个序列,即删除现有的 `.ssh` 目录,创建一个新目录,并放入一个受攻击者控制的授权密钥。这就是实践中的 T1098(账户操纵)——一旦植入了该密钥,即使密码更改,攻击者也拥有持久访问权限。
**峰值日:2025 年 12 月 16 日** 当天有 210,913 个事件——几乎是日均值的 40 倍。值得调查这是单个僵尸网络 ramping up 还是协调扫描活动。
**大多数攻击是自动化的。** 平均会话持续时间仅为 5.5 秒。这些不是人类在四处 poking——它们是登录、运行少量命令、投放恶意软件并转移到下一个目标的脚本。
**SSH 端口上的 HTTP 请求。** 317 个连接发送了 `GET / HTTP/1.1` 作为其 SSH 版本字符串。这些是发现端口 22 开放并无论如何都尝试 HTTP 的 Web 扫描器,这告诉你大规模扫描是多么不加区分。
## 仓库结构
```
├── README.md ← You're here
├── report/
│ └── cowrie_threat_report.docx ← Final threat intelligence report
├── notebooks/
│ └── honeypot_analysis.ipynb ← Google Colab notebook
├── scripts/
│ └── honeypot_analysis.py ← Standalone analysis script
└── visuals/
├── daily_events.png
├── top_source_ips.png
├── geo_distribution.png
├── credential_pie.png
├── top_usernames.png
├── top_passwords.png
└── command_categories.png
```
## 依赖项
除标准库外仅有三个 pip 包:
```
pip install python-docx matplotlib requests
```
其他所有内容(`json`、`collections`、`datetime`、`pathlib`、`hashlib` 等)都是 Python 内置的。
## 下次我会做哪些改变
- **实时将日志管道传输到 S3**,而不是使用 docker cp + scp 手动复制它们。这会让整个流程更加自动化。
- **添加更多蜜罐协议。** Cowrie 处理 SSH 和 Telnet,但在其旁部署 HTTP、RDP 和 SMB 蜜罐将提供更广泛的攻击者行为视图。
- **将日志馈送到 SIEM 中。** 将分析作为批处理作业运行是可行的,但流式传输到 Splunk 或 Wazuh 将实现实时警报和关联。
- **自动化报告生成**,按每周一次的节奏进行,这样你就可以在趋势发展时发现它们,而不是一次分析 6 个月的数据。
## 作者
**Sai Krishna Masetti**
- [LinkedIn](https://www.linkedin.com/in/sai-krishna-masetti)
- [作品集](https://saikrishna-masetti.github.io/)
标签:ATT&CK映射, AWS, DAST, DPI, IP 地址批量处理, PoC, Python, SSH蜜罐, Telnet, 僵尸网络, 威胁情报, 威胁狩猎, 安全研究报告, 底层分析, 开发者工具, 恶意软件分析, 无后门, 暴力破解, 网络信息收集, 网络安全审计, 自动化报告, 蜜罐, 证书利用, 请求拦截, 进程注入, 逆向工具, 速率限制处理