HelgeSverre/livewire-honeypot
GitHub: HelgeSverre/livewire-honeypot
高交互 Laravel/Livewire 蜜罐,捕获 RCE 载荷并在沙箱中分析提取 IOC。
Stars: 1 | Forks: 0
   
# Livewire Honeypot 一个高交互度的蜜罐,伪装成存在漏洞的 Laravel/Livewire 应用程序。它捕获针对已知 Livewire CVE 的利用尝试,存储上传的恶意文件(Webshell)和远程代码执行(RCE)载荷,并使用 SHA-256 去重;可选地,在沙箱 Docker 容器中执行这些载荷以提取妥协指标(IOCs)——包括恶意软件试图联系的 URL、IP 和域名。 系统运行分为两个独立进程以保障安全:**Web 服务器**用于捕获载荷(无 Docker 访问权限),**沙箱工作器**在隔离容器中分析载荷。 ## 工作原理 ``` Attacker → Nginx → FastAPI → SQLite ← Sandbox Worker (Docker) (capture) (polls jobs, writes IOCs) ``` 1. **伪装** — 提供看似真实的 Laravel 登录/注册页面,包含 Livewire `wire:` 属性、XSRF 令牌以及 `X-Powered-By: PHP/8.3.12` 头部。自动化扫描器会看到看似易受攻击的应用程序。 2. **捕获** — 所有 HTTP 请求在路由发生前通过 ASGI 中间层透明地记录到 SQLite(IP、头部、主体哈希、时间戳)。 3. **陷阱** — Livewire 端点接受文件上传和组件消息,如同真实框架。载荷被分类(PHP 代码、序列化对象、Shell 命令)并使用 SHA-256 去重存储。每个有意义的载荷会在 `sandbox_jobs` 队列中创建一个持久化任务。 4. **沙箱** — 独立工作器轮询待处理任务,并在临时 Docker 容器中执行每个载荷(只读文件系统、无网络、`cap_drop=ALL`)。`LD_PRELOAD` 钩子拦截 libc 网络调用以记录 C2(命令与控制)通信尝试。分析器提取 IOC 并使用启发式方法为潜在 C2 端点评分。 ## 针对的 CVE | CVE | CVSS | 概要 | 陷阱端点 | |-----|------|------|-----------| | [CVE-2024-47823](https://nvd.nist.gov/vuln/detail/CVE-2024-47823) | 9.8 严重 | **通过 MIME 类型绕过实现 Livewire 文件上传 RCE。** 文件扩展名根据 MIME 类型猜测而非验证文件名,允许 `.php` 上传伪装为图像。影响 Livewire < 2.12.7 和 < 3.5.2。 | `POST /livewire/upload-file` | | [CVE-2025-54068](https://nvd.nist.gov/vuln/detail/CVE-2025-54068) | 9.2 严重 | **Livewire 属性水合 RCE。** 组件属性更新中的对象类型未经过滤,导致注入载荷可在服务端执行。影响 Livewire 3.0.0-beta.1 至 3.6.3。 | `POST /livewire/message` | | [CVE-2025-14894](https://nvd.nist.gov/vuln/detail/CVE-2025-14894) | 严重 | **Livewire Filemanager 无限制上传 RCE。** 缺少文件类型与 MIME 验证,允许未认证上传可执行 PHP 文件。 | `POST /livewire/upload-file` | 一个 `*.php` 通用陷阱也会捕获对常见 Webshell 文件名的后利用探测(例如 `accesson.php`、`wp-login.php`、`admin.php`)。 ## 快速开始 **前提条件:** Python 3.11+ 和 [uv](https://docs.astral.sh/uv/getting-started/installation/)。 ``` git clone https://github.com/HelgeSverre/livewire-honeypot.git cd livewire-honeypot # Install dependencies uv sync # Start the web server (capture-only, no Docker needed) DATA_DIR=./data uv run uvicorn honeypot.main:app --reload --port 8000 # In a second terminal — start the sandbox worker (requires Docker) DATA_DIR=./data uv run python -m honeypot.worker # Run tests uv run pytest tests/ -v ``` Web 服务器可独立工作——即使没有运行沙箱工作器,也能捕获并存储所有内容。仅在需要自动化载荷分析时启动工作器。 ## 部署 ### 前提条件 - Ubuntu 24.04 VPS(具备 root 权限) - 指向服务器的域名(用于通过 certbot 配置 TLS) - 服务器上已安装 [uv](https://docs.astral.sh/uv/getting-started/installation/) ### 安装设置 ``` # 1. Clone the project git clone https://github.com/HelgeSverre/livewire-honeypot.git /opt/honeypot # 2. Run the bootstrap script (creates users, directories, firewall rules, installs services) cd /opt/honeypot sudo bash deploy/setup.sh # 3. Install Python dependencies and build the sandbox image uv sync docker build -t honeypot-sandbox sandbox/ # 4. Configure nginx — replace DOMAIN with your actual domain # IMPORTANT: The limit_req_zone directive must go in /etc/nginx/nginx.conf # inside the http {} block, not in the site config. See deploy/nginx.conf comments. cp deploy/nginx.conf /etc/nginx/sites-available/honeypot ln -sf /etc/nginx/sites-available/honeypot /etc/nginx/sites-enabled/ rm -f /etc/nginx/sites-enabled/default certbot --nginx -d YOUR_DOMAIN # 5. Start both services systemctl start honeypot honeypot-worker ``` ### 服务架构 | 服务 | 用户 | 用途 | Docker 访问 | |------|------|------|-------------| | `honeypot.service` | `honeypot` | Web 服务器 — 捕获请求和载荷 | 否 | | `honeypot-worker.service` | `sandbox` | 沙箱工作器 — 在 Docker 中分析载荷 | 是 | 两个服务共享 `/var/honeypot/` 目录用于 SQLite 数据库和载荷存储。Web 进程无 Docker 套接字访问权限,因此即使通过攻击流量被入侵,也无法在主机上创建容器。 ### 操作命令 ``` # View logs journalctl -u honeypot -f journalctl -u honeypot-worker -f # Restart services systemctl restart honeypot honeypot-worker # Upgrade cd /opt/honeypot && git pull && uv sync docker build -t honeypot-sandbox sandbox/ systemctl restart honeypot honeypot-worker ``` ### 配置 所有设置通过环境变量控制(在 systemd 单元文件中设置或在运行前导出): | 变量 | 默认值 | 描述 | |------|---------|------| | `DATA_DIR` | `/var/honeypot` | 所有数据的基础目录 | | `DB_PATH` | `$DATA_DIR/captures.db` | SQLite 数据库路径 | | `SANDBOX_TIMEOUT` | `60` | 每个沙箱运行的最大秒数 | | `SANDBOX_MEMORY` | `128m` | 容器内存限制 | | `SANDBOX_CPUS` | `0.5` | 容器 CPU 限制 | | `SANDBOX_MAX_CONCURRENT` | `3` | 最大并发沙箱容器数 | | `SANDBOX_IMAGE` | `honeypot-sandbox` | 沙箱使用的 Docker 镜像 | | `WORKER_POLL_INTERVAL` | `2.0` | 任务轮询间隔(秒) | ## 查询捕获数据 所有数据保存在单个 SQLite 数据库(默认:`/var/honeypot/captures.db`)中。 ``` # Recent requests sqlite3 /var/honeypot/captures.db \ "SELECT timestamp, source_ip, method, path, matched_trap FROM requests ORDER BY id DESC LIMIT 20;" # Unique payloads by frequency sqlite3 /var/honeypot/captures.db \ "SELECT sha256, filename, payload_type, times_seen, sandbox_status FROM payloads ORDER BY times_seen DESC;" # Top attacker IPs sqlite3 /var/honeypot/captures.db \ "SELECT ip, total_requests, first_seen, last_seen FROM attackers ORDER BY total_requests DESC LIMIT 10;" # Sandbox results with extracted IOCs (JSON) sqlite3 /var/honeypot/captures.db \ "SELECT payload_id, exit_code, duration_seconds, c2_urls_found, iocs FROM sandbox_runs ORDER BY id DESC LIMIT 5;" # Pending sandbox jobs sqlite3 /var/honeypot/captures.db \ "SELECT id, payload_sha256, status, created_at FROM sandbox_jobs ORDER BY id DESC LIMIT 10;" ``` `sandbox_runs.iocs` 中的 IOC 数据以 JSON 格式存储,键包括:`domains`、`ips`、`emails`、`urls`、`hashes`。按需提取并输入到威胁情报平台(MISP、OpenCTI 等)。 ## 项目结构 ``` src/honeypot/ main.py # FastAPI web app (capture-only, no Docker) worker.py # Standalone sandbox worker (polls SQLite, needs Docker) config.py # Settings from environment variables capture/ database.py # Async SQLite — requests, payloads, sandbox_jobs queue logger.py # ASGI middleware — logs every request payloads.py # SHA-256 dedup storage + payload classification facade/ routes.py # Laravel-fingerprinted pages (login, register, etc.) templates/ # Jinja2 HTML with Livewire wire: attributes static/ # Fake livewire.js (v3.5.1 fingerprint) traps/ livewire.py # POST /livewire/message, /upload-file, /preview-file php_catchall.py # Catch-all for *.php probing sandbox/ orchestrator.py # Docker container lifecycle + hardening analyzer.py # Artifact parsing + IOC extraction + C2 scoring deploy/ nginx.conf # Reverse-proxy with rate limiting honeypot.service # systemd unit (web) honeypot-worker.service # systemd unit (sandbox worker) setup.sh # VPS bootstrap script sandbox/ Dockerfile # Sandbox container image (PHP 8.3 + attacker tools) entrypoint.sh # Container entry-point with LD_PRELOAD network shim ``` ## 免责声明 这是一个用于收集恶意软件样本并观察攻击者在您所拥有的基础设施上行为的研究工具。它不是生产环境的安全产品。仅在您控制的系统上部署,并请注意捕获和执行攻击者载荷可能涉及法律风险。SQLite 数据库和载荷文件会无限制增长——请监控磁盘使用情况并根据需要实施保留策略。 ## 贡献 欢迎提交问题和 Pull Request。 ## 许可证 [MIT](LICENSE)标签:ASGI, AV绕过, CVE-2024-47823, CVE-2025-14894, CVE-2025-54068, Docker, EDR绕过, FastAPI, IOC, IP, Laravel, Livewire, Nginx, PHP 8.3.12, Python, RCE, SEO, SQLite, URL, Webshell, X-Powered-By, XSRF, 域名, 安全防御评估, 指标提取, 文件上传, 无后门, 沙箱, 漏洞仿真, 编程工具, 蜜罐, 证书利用, 请求拦截, 远程代码执行, 逆向工具, 高交互蜜罐