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, 僵尸网络, 威胁情报, 威胁狩猎, 安全研究报告, 底层分析, 开发者工具, 恶意软件分析, 无后门, 暴力破解, 网络信息收集, 网络安全审计, 自动化报告, 蜜罐, 证书利用, 请求拦截, 进程注入, 逆向工具, 速率限制处理