
Безопасный low-code фреймворк времени выполнения для deception, использующий ИИ для виртуализации систем.
Каркас среды выполнения обмана
Beelzebub — это open-source среда выполнения обмана, которая разворачивает адаптивные обманные сервисы на базе LLM для протоколов SSH, HTTP, TCP, TELNET и MCP. Он выходит за рамки пассивных honeypot'ов, активно вовлекая атакующих в реалистичные взаимодействия, собирая высокоточную информацию об угрозах и обнаруживая атаки с помощью prompt injection на AI-агентов.

CommandPlugin или HTTPPlugin и зарегистрируйте его через init() без изменения ядра
./install.sh # asks local or Docker, checks prerequisites, and starts it
Неинтерактивный режим: `./install.sh --local` или `./install.sh --docker`. Используйте
`./install.sh --local --no-run` для установки и сборки без запуска локальной
среды выполнения. На хостах без прав root локальная установка не запускается автоматически, если
конфигурация по умолчанию включает привилегированные порты.
### Локальная установка (Go)```bash
make start # installs any declared plugins, compiles them in, and runs
make docker # builds an image with declared plugins baked in, then runs it
### Использование Helm (Kubernetes)```bash
helm install beelzebub ./beelzebub-chart
# Upgrade:
helm upgrade beelzebub ./beelzebub-chart
Beelzebub поставляется со структурированным CLI. Запустите beelzebub --help, чтобы увидеть все доступные команды.
beelzebub runЗапускает все настроенные сервисы обмана.```bash beelzebub run [flags]
Flags: -c, --conf-core string Path to core configuration file (default "./configurations/beelzebub.yaml") -s, --conf-services string Path to services configuration directory (default "./configurations/services/") -m, --mem-limit-mib int Memory limit in MiB, -1 to disable (default 100)
### `beelzebub validate`
Анализирует и проверяет все файлы конфигурации без запуска каких-либо сервисов. Полезно в CI-пайплайнах. См. [Проверка конфигурации](https://github.com/beelzebub-labs/beelzebub/blob/HEAD/docs/configuration-validation.md) для описания архитектуры проверки и справочника правил.```bash
beelzebub validate --conf-core ./configurations/beelzebub.yaml --conf-services ./configurations/services/
beelzebub pluginУстановка, просмотр списка и удаление плагинов, загружаемых с GitHub. См. Система плагинов.```bash beelzebub plugin install github.com/your-org/beelzebub-myplugin beelzebub plugin list beelzebub plugin remove myplugin
### `beelzebub version`
Выводит версию, SHA коммита, дату сборки и информацию о среде выполнения Go.```bash
beelzebub version
Beelzebub предоставляет стабильный публичный SDK в pkg/plugin для расширения рантайма обмана без изменения основного кода.
// CommandPlugin generates text responses for SSH, TCP, TELNET, and HTTP services. type CommandPlugin interface { Metadata() Metadata Execute(ctx context.Context, req CommandRequest) (string, error) }
// HTTPPlugin generates full HTTP responses with status code, headers, and body. type HTTPPlugin interface { Metadata() Metadata HandleHTTP(r *http.Request) HTTPResponse }
### Написание плагина```go
package myplugin
import (
"context"
"github.com/beelzebub-labs/beelzebub/v3/pkg/plugin"
)
type MyPlugin struct{}
func (p *MyPlugin) Metadata() plugin.Metadata {
return plugin.Metadata{
Name: "MyPlugin",
Description: "Custom deception response generator",
Version: "1.0.0",
Author: "your-name",
}
}
func (p *MyPlugin) Execute(_ context.Context, req plugin.CommandRequest) (string, error) {
return "simulated response to: " + req.Command, nil
}
func init() {
plugin.Register(&MyPlugin{})
}
beelzebub plugin install github.com/your-org/myplugin # also appends to the config
make start # local: install declared plugins → build → run (needs Go) make docker # docker: image with plugins baked in → run (needs Docker)
| Command | Что делает |
|---|---|
| `plugin install <link>` | получает плагин, подключает его и пересобирает; также добавляет его в `configurations/plugins.yaml` |
| `plugin install` | устанавливает всё, что объявлено в `configurations/plugins.yaml` |
| `plugin list` | показывает установленные плагины и то, что скомпилировано в бинарный файл |
| `plugin update [name]` | повторно получает по указанному ref и заново фиксирует коммит |
| `plugin remove <name>` | удаляет плагин из `configurations/plugins.yaml`, отключает его и выводит шаг пересборки |
Источники плагинов развёртывания настраиваются в `configurations/plugins.yaml`:```yaml
plugins:
- source: github.com/your-org/myplugin
- source: github.com/your-org/[email protected]
Будущая конфигурация времени выполнения для каждого плагина может находиться в configurations/plugins/
в виде одного YAML-файла на каждый плагин.
Каждый репозиторий плагина должен содержать манифест plugins.yaml и саморегистрироваться в init()
(см. Написание плагина):```yaml
name: myplugin
version: 1.0.0
module: github.com/your-org/myplugin # must match its go.mod
entrypoint: . # package that calls plugin.Register (default ".")
min-core-version: v3.8.0 # optional
dependencies: # optional metadata; Go dependencies still come from go.mod
Установленные плагины компилируются в бинарный файл Beelzebub и выполняются в том же
процессе, что и среда выполнения. Устанавливайте плагины только из репозиториев, которым вы доверяете.
## Наблюдаемость
### Метрики Prometheus
Beelzebub предоставляет метрики Prometheus на настроенной конечной точке (по умолчанию: `:2112/metrics`):
| Метрика | Описание |
|--------|-------------|
| `beelzebub_events_total` | Всего событий обмана во всех сервисах |
| `beelzebub_events_ssh_total` | События SSH |
| `beelzebub_events_http_total` | События HTTP |
| `beelzebub_events_tcp_total` | События TCP |
| `beelzebub_events_telnet_total` | События TELNET |
| `beelzebub_events_mcp_total` | События MCP |
### Интеграция с RabbitMQ
Публикуйте все события обмана в очередь сообщений для последующей интеграции с SIEM:```yaml
core:
tracings:
rabbit-mq:
enabled: true
uri: "amqp://guest:guest@localhost:5672/"
События публикуются в виде структурированного JSON в очередь event.
make test.unit
make test.dependencies.start make test.integration make test.dependencies.down
beelzebub validate
## Качество кода
- **CI**: GitHub Actions при каждом коммите и pull request
- **Статический анализ**: CodeQL и Go Report Card
- **Покрытие**: отслеживается через [Codecov](https://codecov.io/gh/beelzebub-labs/beelzebub)
- **Ревью кода**: все вклады проходят рецензирование
## Лицензия
Beelzebub распространяется под [лицензией GNU GPL v3](https://github.com/beelzebub-labs/beelzebub/blob/HEAD/LICENSE).
## Вклад в проект
Команда Beelzebub приветствует вклад и участие в проекте. Если вы хотите сообщить об ошибках, добавить новые функции или задать вопросы, пожалуйста, обратитесь к нашему [Руководству для участников](https://github.com/beelzebub-labs/beelzebub/blob/HEAD/CONTRIBUTING.md) за подробной информацией. Мы призываем всех участников и мейнтейнеров соблюдать наш [Кодекс поведения](https://github.com/beelzebub-labs/beelzebub/blob/HEAD/CODE_OF_CONDUCT.md) и развивать дружелюбное и уважительное сообщество.
Удачного хакерства!
## Справочник по конфигурации
Beelzebub использует двухуровневую систему конфигурации:
1. **Основная конфигурация** (`beelzebub.yaml`) глобальные настройки: логирование, трассировка, Prometheus
2. **Конфигурации сервисов** (`services/*.yaml`) один файл на каждый сервис-приманку
### Основная конфигурация```yaml
core:
logging:
debug: false
debugReportCaller: false
logDisableTimestamp: true
logsPath: ./logs
tracings:
rabbit-mq:
enabled: false
uri: "amqp://guest:guest@localhost:5672/"
prometheus:
path: "/metrics"
port: ":2112"
Переопределение переменных окружения поддерживается для всех полей (например, BEELZEBUB_RABBITMQ_ENABLED). Конфигурация сервисов также может быть передана целиком через BEELZEBUB_SERVICES_CONFIG в виде JSON-массива.
Каждый сервис-приманка определяется в отдельном YAML-файле, размещённом в каталоге services/. Поле protocol определяет используемый механизм обмана. Команды используют regex для сопоставления запросов и либо статический handler, либо ссылку на plugin для динамических ответов.
При использовании плагина LLMHoneypot настоятельно рекомендуется применять защитные ограничения, чтобы предотвратить взлом LLM или иные манипуляции, способные скомпрометировать honeypot. Подробности см. в документации плагина LLMHoneypot.
MCP-сервисы обмана (Model Context Protocol) предоставляют инструменты-приманки, предназначенные для обнаружения атак с помощью prompt injection против агентов на основе LLM.
Инструмент-приманка зарегистрирован в списке инструментов агента, но при нормальной работе не должен вызываться. Любой вызов сигнализирует о том, что атака с помощью prompt injection успешно обошла защитные ограничения агента. Это обеспечивает:

mcp-8000.yaml:```yaml apiVersion: "v1" protocol: "mcp" address: ":8000" description: "MCP Honeypot" tools:
Доступно через `http://beelzebub:port/mcp` (транспорт Streamable HTTP).
### HTTP-сервис обмана
HTTP-сервисы обмана отвечают на веб-запросы настраиваемыми ответами на основе сопоставления с шаблонами URL. Поддерживают TLS, статические обработчики, ответы на основе LLM и генератор бесконечного лабиринта.
**Имитация WordPress** (`http-80.yaml`):```yaml
apiVersion: "v1"
protocol: "http"
address: ":80"
description: "Wordpress 6.0"
commands:
- regex: "^(/index.php|/index.html|/)$"
handler: |
<html><header><title>Wordpress 6 test page</title></header>
<body><h1>Hello from Wordpress</h1></body></html>
headers:
- "Content-Type: text/html"
- "Server: Apache/2.4.53 (Debian)"
- "X-Powered-By: PHP/7.4.29"
statusCode: 200
- regex: "^(/wp-login.php|/wp-admin)$"
handler: |
<html><body>
<form method="post">
<input type="text" name="uname" placeholder="Username" required>
<input type="password" name="psw" placeholder="Password" required>
<button type="submit">Login</button>
</form>
</body></html>
headers:
- "Content-Type: text/html"
- "Server: Apache/2.4.53 (Debian)"
statusCode: 200
- regex: "^.*$"
handler: "<html><body><h1>Not found!</h1></body></html>"
headers:
- "Content-Type: text/html"
statusCode: 404
LLM-powered HTTP service добавьте fallbackCommand с plugin: LLMHoneypot, чтобы генерировать динамические ответы для любого несопоставленного запроса.
Бесконечный генератор лабиринтов используйте plugin: MazeHoneypot, чтобы развернуть Apache-подобный список каталогов, который бесконечно расширяется, заманивая автоматические сканеры и краулеры.
Службы обмана SSH поддерживают как статические ответы на команды, так и интерактивные сеансы на базе LLM с историей беседы для каждого сеанса.
SSH на базе LLM (OpenAI):```yaml apiVersion: "v1" protocol: "ssh" address: ":2222" description: "SSH interactive GPT-4o" commands:
**SSH на базе LLM** (локальный Ollama):```yaml
apiVersion: "v1"
protocol: "ssh"
address: ":2222"
description: "SSH Ollama Llama3"
commands:
- regex: "^(.+)$"
plugin: "LLMHoneypot"
serverVersion: "OpenSSH"
serverName: "ubuntu"
passwordRegex: "^(root|qwerty|123456)$"
deadlineTimeoutSeconds: 60
plugin:
llmProvider: "ollama"
llmModel: "codellama:7b"
host: "http://localhost:11434/api/chat"
Статический SSH:```yaml apiVersion: "v1" protocol: "ssh" address: ":22" description: "SSH interactive" commands:
### Сервис обмана TELNET
Сервисы обмана TELNET эмулируют терминальные устройства (маршрутизаторы, коммутаторы, устаревшие системы) с полным процессом аутентификации и интеграцией LLM.
**TELNET на базе LLM**:```yaml
apiVersion: "v1"
protocol: "telnet"
address: ":23"
description: "TELNET LLM"
commands:
- regex: "^(.+)$"
plugin: "LLMHoneypot"
serverName: "router"
passwordRegex: "^(admin|root|password|123456)$"
deadlineTimeoutSeconds: 120
plugin:
llmProvider: "openai"
llmModel: "gpt-4o"
openAISecretKey: "sk-1234"
Статическая симуляция Cisco IOS:```yaml apiVersion: "v1" protocol: "telnet" address: ":23" description: "Cisco IOS Router" commands:
### Сервис обмана TCP
Сервисы обмана TCP охватывают бинарные и текстовые протоколы: базы данных, брокеры сообщений, службы каталогов, удалённый доступ и многое другое. Поддерживаются режим только с баннером, интерактивное сопоставление по регулярным выражениям и интеграция с LLM.
**Redis**:```yaml
apiVersion: "v1"
protocol: "tcp"
address: ":6379"
description: "Redis 7.0.12"
commands:
- regex: "^PING"
handler: "+PONG\r\n"
- regex: "^AUTH"
handler: "-ERR Client sent AUTH, but no password is set\r\n"
- regex: "^INFO"
handler: "$180\r\n# Server\r\nredis_version:7.0.12\r\nos:Linux 5.15.0-76-generic x86_64\r\ntcp_port:6379\r\n\r\n"
- regex: "^(.+)$"
handler: "-ERR unknown command\r\n"
deadlineTimeoutSeconds: 60
serverName: "redis-prod-01"
LDAP / Active Directory:```yaml apiVersion: "v1" protocol: "tcp" address: ":389" description: "Active Directory LDAP Domain Controller" banner: "0\x84\x00\x00\x00\x10\x02\x01\x01\x61\x84\x00\x00\x00\x07\x0a\x01\x00\x04\x00\x04\x00" commands:
**PostgreSQL на основе LLM**:```yaml
apiVersion: "v1"
protocol: "tcp"
address: ":5432"
description: "PostgreSQL 15.3"
commands:
- regex: "^(.+)$"
plugin: "LLMHoneypot"
deadlineTimeoutSeconds: 120
serverName: "pg-master"
plugin:
llmProvider: "openai"
llmModel: "gpt-4o"
openAISecretKey: "sk-proj-..."
prompt: "You are simulating a PostgreSQL 15.3 server. Respond to incoming TCP data as a PostgreSQL server would."
Дополнительные примеры конфигураций доступны в configurations/services/ для Memcached, MS-SQL, SMB, RDP, VNC и MQTT.
