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, 威胁情报, 安全研究, 开发者工具, 无后门, 机器学习, 网络防御, 蜜罐, 证书利用