TinchoLay/ssh-honeypot
GitHub: TinchoLay/ssh-honeypot
一个用Python实现的SSH蜜罐,用于捕获并记录未授权的登录尝试。
Stars: 1 | Forks: 0
# 🍯 SSH 蜜罐
一个从零开始使用 Python 构建的多服务蜜罐。它模拟 SSH、HTTP 和 FTP 服务器,以捕获未经授权的访问尝试、分析攻击者行为并实时可视化数据。
已部署在 Microsoft Azure 的 Ubuntu 虚拟机上,并接收真实的互联网流量。
## 它的功能是什么?
当有人尝试连接到暴露的端口时,蜜罐会:
- 接受连接并模拟真实的服务器
- 捕获尝试的凭据(用户名和密码)
- 对攻击者的 IP 进行地理定位
- 使用 machine learning 对攻击者类型进行分类
- 识别所使用的工具(Hydra、Metasploit、自定义脚本等)
- 如果攻击者尝试下载,则捕获并分析恶意软件文件
- 查询 threat intelligence 数据库(AbuseIPDB、Shodan)
- 在实时 Web 仪表板中显示所有信息
## 功能特性
### 支持的协议
- **SSH**(端口 2222)— 具有真实响应的交互式虚假 shell
- **HTTP**(端口 8080)— 仿 TP-Link 路由器的虚假管理面板
- **FTP**(端口 2121)— 接受连接并拒绝凭据的 FTP 服务器
### 交互式 shell
SSH 蜜罐接受登录并打开一个虚假 shell。攻击者可以执行命令(`ls`、`whoami`、`cat /etc/passwd`、`ps aux` 等),并接收到模拟 Ubuntu 22.04 环境的真实响应。这些命令会被记录在日志中。
如果攻击者尝试使用 `wget` 或 `curl` 下载内容,蜜罐会模拟下载成功,同时在后台下载真实文件以进行分析。
### Machine Learning
使用 Random Forest 将每个攻击者分类为以下四个类别之一:
- `bot_fuerza_bruta` — 高速自动化脚本
- `scanner` — 扫描开放的端口和服务
- `script_kiddie` — 盲目使用已知工具
- `atacante_dirigido` — 行为较慢且类似人类,具有特定目标
模型每 100 次尝试会自动结合捕获的真实数据进行重新训练。
### 指纹识别
通过分析客户端的 SSH banner 来识别攻击者使用的工具。能够检测 Hydra、Metasploit、Paramiko、AsyncSSH、Nmap、Masscan、PuTTY、WinSCP 等。同时还会分析尝试的速度和规律性,以区分人类与 bot。
### 恶意软件捕获
当攻击者使用带有 URL 的 `wget` 或 `curl` 时,蜜罐会在后台下载该文件,计算其 MD5 和 SHA256 哈希值,并提交给 VirusTotal 查询。生成的报告会保存每个杀毒软件的检出率。
### Threat Intelligence
针对每个攻击者 IP 查询 AbuseIPDB 和 Shodan。显示历史举报记录、恶意置信度评分、已知开放端口及相关漏洞。
### 邮件告警
可选功能。如果某个 IP 在设定的时间窗口内超过配置的尝试次数阈值,系统将通过 Gmail SMTP 自动发送告警邮件。
### 实时 Web 仪表板
带有 WebSockets (Socket.IO) 的 Flask 面板,会随着每次新攻击自动更新。包含三个部分:
- **统计** — 各协议的攻击总数,热门用户名、热门密码、热门国家及实时日志
- **分析** — 按一天中的时间、星期几、国家/地区统计攻击的图表及时间演变
- **地图** — 显示攻击来源点的交互式世界地图(基于 Leaflet + CartoDB)
## 项目结构
```
ssh-honeypot/
├── honeypot.py # Punto de entrada — arranca todos los servicios
├── fake_shell.py # Shell SSH interactiva falsa
├── http_honeypot.py # Servidor HTTP honeypot
├── ftp_honeypot.py # Servidor FTP honeypot
├── logger.py # Logging central + geolocalización
├── shell_logger.py # Registro de comandos ejecutados
├── stats.py # Estadísticas en consola
├── mapa.py # Generador de mapa estático (folium)
├── dashboard.py # Dashboard Flask + WebSockets
├── ml_classifier.py # Clasificación ML de atacantes
├── fingerprint.py # Identificación de herramientas
├── malware_capture.py # Captura y análisis de malware
├── threat_intel.py # Consultas a AbuseIPDB y Shodan
├── alertas.py # Sistema de alertas por email
├── config.py # Configuración central
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── logs/ # Generado al correr (no incluido en repo)
├── attempts.json
├── http_attempts.json
├── ftp_attempts.json
├── shell_commands.json
├── fingerprints.json
├── ml_classifications.json
├── malware_captures.json
├── threat_intel.json
└── malware_samples/
```
## 技术栈
| 类别 | 技术 |
|---|---|
| 编程语言 | Python 3.11 |
| SSH 协议 | paramiko |
| Web 框架 | Flask + Flask-SocketIO |
| 机器学习 | scikit-learn (Random Forest) |
| 地图 | folium, Leaflet.js |
| 地理定位 | ip-api.com |
| Threat Intel | AbuseIPDB API, Shodan API |
| 恶意软件分析 | VirusTotal API |
| 可视化 | Chart.js |
| 基础设施 | Microsoft Azure (VM Ubuntu 22.04) |
| 容器 | Docker + Docker Compose |
## 本地安装
**环境要求:** Python 3.9+, pip
```
# 克隆仓库
git clone https://github.com/tu-usuario/ssh-honeypot.git
cd ssh-honeypot
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 运行 honeypot
python honeypot.py
```
仪表板将在 `http://localhost:5000` 提供。
## Azure 部署
该项目正在 Microsoft Azure 的 Ubuntu 22.04 虚拟机上运行。
### 部署步骤
1. 在 Azure 上创建 Ubuntu VM(可使用免费的 B1s 层级进行测试)
2. 配置 Network Security Group 以开放端口 2222、8080、2121 和 5000
3. 通过 SSH 连接到 VM
4. 安装 Python 和 Git,克隆仓库
5. 创建虚拟环境并安装依赖
6. 直接或使用 Docker 运行蜜罐
```
# 在 Azure VM 中
git clone https://github.com/tu-usuario/ssh-honeypot.git
cd ssh-honeypot
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 honeypot.py
```
### 使用 Docker
```
docker-compose up -d
```
### 可选环境变量
```
GEO_ENABLED=true # Geolocalización de IPs (default: true)
EMAIL_ENABLED=false # Alertas por email (default: false)
EMAIL_SENDER=tu@gmail.com
EMAIL_PASSWORD=app_password
EMAIL_RECEIVER=destino@gmail.com
ALERT_THRESHOLD=5 # Intentos antes de alertar (default: 5)
ALERT_WINDOW=60 # Ventana de tiempo en segundos (default: 60)
THREAT_INTEL_ENABLED=false # Consultas a AbuseIPDB/Shodan (default: false)
ABUSEIPDB_KEY=tu_api_key
SHODAN_KEY=tu_api_key
VIRUSTOTAL_KEY=tu_api_key
```
## 捕获的数据
### SSH (attempts.json)
```
{
"timestamp": "2026-05-14 14:37:23",
"ip": "185.220.101.45",
"country": "Germany",
"city": "Frankfurt",
"isp": "Tor Project",
"lat": 50.1109,
"lon": 8.6821,
"username": "root",
"password": "123456"
}
```
### ML 分类 (ml_classifications.json)
```
{
"timestamp": "2026-05-14 14:37:23",
"ip": "185.220.101.45",
"categoria": "bot_fuerza_bruta",
"confianza": 94.0,
"features": {
"velocidad_intentos_min": 45,
"usuarios_distintos": 3,
"passwords_distintas": 40,
"uso_diccionario": true,
"interactuó_shell": false,
"comandos_ejecutados": 0,
"variacion_temporal": 0.2
}
}
```
### 恶意软件捕获 (malware_captures.json)
```
{
"timestamp": "2026-05-14 14:38:01",
"ip": "185.220.101.45",
"url": "http://malware.ru/payload.sh",
"nombre_archivo": "payload.sh",
"tamaño_bytes": 4312,
"hashes": {
"md5": "d8e8fca2dc0f896fd7cb4cb0031ba249",
"sha256": "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2"
},
"virustotal": {
"maliciosos": 38,
"total_motores": 72,
"porcentaje": 52.8,
"tipo_malware": "Trojan.GenericKD"
}
}
```
## 真实部署观察结果
一旦服务器暴露在互联网上,以下是观察到的真实流量模式:
- 几分钟内就会收到首次连接尝试,无需进行任何公开宣传
- 大多数 SSH 流量来自自动化 bot,它们会按顺序尝试相同的凭据:`root:123456`、`admin:admin`、`user:password`
- HTTP 流量主要来自扫描管理面板的 scanner(`/login`、`/admin`、`/wp-admin`)
- 最活跃的 IP 对应于 Tor 出口节点、Linode/DigitalOcean 的 VPS 以及中国网段
- bot 的攻击速度极其稳定 — 尝试之间的间隔为毫秒级且无变化
## 构建此项目的收获
- SSH 协议的底层工作原理(密钥协商、身份验证、通道)
- 使用 Python 的 `socket` 实现原生 TCP 服务器
- 使用 paramiko 拦截和控制 SSH 会话
- 使用 Flask 和 WebSockets 实现实时更新
- 使用 scikit-learn 训练和集成分类模型
- 调用 REST API(ip-api、AbuseIPDB、Shodan、VirusTotal)
- 云端部署:在 Azure 上配置 VM、网络和 NSG
- 使用 Python 的 `threading` 进行并发处理
- 生产环境中的实际问题:后台执行、持久化日志、自动重启
## 道德与法律声明
本项目严格仅用于网络安全教育和研究目的。该蜜罐捕获的是试图未经授权访问我们自有服务器的攻击者的数据。不得用于攻击第三方系统或用于任何恶意目的。
## 作者
**Martín** — 网络安全与编程专业学生,立志成为 SOC Analyst。
[GitHub](https://github.com/tu-usuario) · [LinkedIn](https://linkedin.com/in/tu-perfil)
标签:Apex, IP 地址批量处理, Python, 威胁情报, 安全研究, 开发者工具, 无后门, 机器学习, 网络防御, 蜜罐, 证书利用