
Высокоинтерактивный honeypot, имитирующий уязвимое приложение Laravel/Livewire. Перехватывает RCE-эксплойты и веб-шеллы, нацеленные на CVE-2024-47823, CVE-2025-54068 и CVE-2025-14894, а затем анализирует их в изолированных Docker-контейнерах для извлечения индикаторов компрометации (IOCs).
Высокоинтерактивная ловушка (honeypot), маскирующаяся под уязвимое приложение Laravel/Livewire. Она перехватывает попытки эксплуатации известных CVE в Livewire, сохраняет загруженные вредоносные файлы (веб-шеллы) и payload-ы для удалённого выполнения кода (RCE) с дедупликацией по SHA-256, а при желании выполняет их в изолированном Docker-контейнере для извлечения индикаторов компрометации (IOC) — URL, IP-адресов и доменов, с которыми вредонос пытается установить связь.
Система работает как два отдельных процесса в целях безопасности: веб-сервер, который перехватывает payload-ы (без доступа к Docker), и sandbox-воркер, анализирующий их в изолированных контейнерах.
Attacker → Nginx → FastAPI → SQLite ← Sandbox Worker (Docker)
(capture) (polls jobs, writes IOCs)
Фасад — Отдаёт реалистичные страницы входа/регистрации Laravel с Livewire-атрибутами wire:, XSRF-токенами и заголовками X-Powered-By: PHP/8.3.12. Автоматические сканеры видят то, что выглядит как реальное уязвимое приложение.
Перехват — Каждый HTTP-запрос прозрачно логируется в SQLite (IP, заголовки, хеш тела, метка времени) слоем ASGI-промежуточного ПО до того, как происходит какая-либо маршрутизация.
Ловушки — Livewire-эндпоинты принимают загрузку файлов и сообщения компонентов точно так же, как это делал бы настоящий фреймворк. Payload-ы классифицируются (PHP-код, сериализованные объекты, shell-команды) и сохраняются с дедупликацией по SHA-256. Каждый интересный payload создаёт постоянную задачу в очереди sandbox_jobs.
Песочница — Отдельный процесс-воркер опрашивает очередь ожидающих задач и выполняет каждый payload в эфемерном Docker-контейнере (read-only файловая система, без сети, cap_drop=ALL). Shim на основе LD_PRELOAD перехватывает сетевые вызовы libc для логирования попыток связи с C2 (command-and-control). Анализатор извлекает IOC и оценивает потенциальные C2-эндпоинты с помощью эвристик.
| CVE | CVSS | Краткое описание | Эндпоинт-ловушка |
|---|---|---|---|
| CVE-2024-47823 | 9.8 Critical | RCE при загрузке файлов в Livewire через обход MIME-типа. Расширения файлов определяются по MIME-типу, а не проверяются по имени файла, что позволяет загружать .php-файлы, замаскированные под изображения. Затрагивает Livewire < 2.12.7 и < 3.5.2. | POST /livewire/upload-file |
| CVE-2025-54068 | 9.2 Critical | RCE через гидратацию свойств в Livewire. Процесс гидратации не санитизирует типы объектов при обновлении свойств компонента, что позволяет выполнять внедрённые payload-ы на стороне сервера. Затрагивает Livewire 3.0.0-beta.1 — 3.6.3. | POST /livewire/message |
| CVE-2025-14894 | Critical | Неограниченная загрузка файлов с RCE в Filemanager Livewire. Отсутствие проверки типа файла и MIME-типа позволяет неаутентифицированную загрузку исполняемых PHP-файлов. | POST /livewire/upload-file |
Ловушка-перехватчик *.php также захватывает пост-эксплуатационное сканирование распространённых имён веб-шеллов (например, accesson.php, wp-login.php, admin.php).
Предварительные требования: Python 3.11+ и uv.
git clone https://github.com/HelgeSverre/livewire-honeypot.git
cd livewire-honeypot
# Установка зависимостей
uv sync
# Запуск веб-сервера (только перехват, Docker не нужен)
DATA_DIR=./data uv run uvicorn honeypot.main:app --reload --port 8000
# Во втором терминале — запуск sandbox-воркера (требуется Docker)
DATA_DIR=./data uv run python -m honeypot.worker
# Запуск тестов
uv run pytest tests/ -v
Веб-сервер работает автономно — он перехватывает и сохраняет всё даже без запущенного sandbox-воркера. Запускайте воркер, когда хотите автоматический анализ payload-ов.
Примечание: Каталог
src/находится в пути Python черезpyproject.toml(src-layout), поэтомуhoneypot.main:appуказывает наsrc/honeypot/main.py.
Вам понадобится:
Полное развёртывание — это одна команда после создания VPS. Скрипт выполняет все шаги от «пустого дроплета» до «работающего сервиса с TLS»: apt-пакеты, пользователи и группы, Python venv, sandbox-образ, nginx, certbot и правила файрвола.
# 1. Создайте дроплет за $6/мес (Ubuntu 24.04, 1 ГБ RAM достаточно).
# На DigitalOcean:
doctl compute droplet create veritron-honeypot \
--size s-1vcpu-1gb \
--image ubuntu-24-04-x64 \
--region fra1 \
--ssh-keys "$(doctl compute ssh-key list --format ID --no-header | head -1)" \
--wait
# 2. Укажите A-запись вашего домена на IP дроплета.
# Дождитесь разрешения DNS, прежде чем продолжать.
dig +short your-domain.example # должен вернуть IP дроплета
# 3. Скопируйте проект на дроплет.
rsync -az --exclude='.git' --exclude='.venv' --exclude='data' \
./ root@<droplet-ip>:/opt/honeypot/
# 4. Запустите bootstrap-скрипт. Передача домена включает TLS через certbot.
ssh root@<droplet-ip> 'cd /opt/honeypot && [email protected] \
bash deploy/setup.sh your-domain.example'
Всё. Ловушка теперь обслуживает поддельную страницу входа Laravel/Livewire по HTTPS, сохраняет каждый запрос в SQLite и готова анализировать payload-ы в Docker-песочнице.
deploy/setup.sh идемпотентен — повторный запуск безопасен. По порядку он: