
DECeption with Evaluative Integrated Validation Engine (DECEIVE): пусть LLM сделает всю тяжёлую работу по созданию honeypot!
DECEIVE, DECeption with Evaluative Integrated Validation Engine (система обмана с интегрированной оценочной проверкой), — это высокоинтерактивная honeypot-система, не требующая больших усилий. В отличие от большинства высокоинтерактивных honeypot-систем, DECEIVE не предоставляет атакующим доступ к какой-либо реальной системе. ИИ выполняет всю работу по симуляции реалистичной honeypot-системы на основе настраиваемого системного промпта, который описывает, какой тип системы вы хотите симулировать. В отличие от многих других высокоинтерактивных honeypot-систем, требующих значительных усилий для наполнения реалистичными пользователями, данными и приложениями, ИИ-бэкенд DECEIVE сделает всё это за вас автоматически.
Эта версия DECEIVE симулирует Linux-сервер по протоколу SSH. Она логирует весь пользовательский ввод, ответы, возвращаемые LLM-бэкендом, а также сводку по каждой завершённой сессии. Она даже сообщит, если считает сессию пользователя безвредной, подозрительной или откровенно вредоносной.
⛔️⛔️ DECEIVE — это проект уровня proof-of-concept. Он не имеет production-качества. Пробуйте, учитесь на нём, но будьте осторожны при развёртывании в производственной среде. ⛔️⛔️
DECEIVE в первую очередь разрабатывается на MacOS 15 (Sequoia), но должен работать в любой UNIX-подобной системе, способной запускать Python3. Это включает другие версии MacOS, Linux и даже Windows (через Windows Subsystem for Linux).
Вы можете получить последнюю версию с помощью следующей команды:
git clone https://github.com/splunk/DECEIVE
В остальных инструкциях предполагается, что после завершения клонирования вы перешли в каталог репозитория.
DECEIVE использует uv для управления Python-зависимостями и виртуальным окружением. Если uv ещё не установлен, установите его с помощью автономного установщика Astral:
curl -LsSf https://astral.sh/uv/install.sh | sh
Затем синхронизируйте окружение проекта из корня репозитория:
uv sync
Файлы pyproject.toml и uv.lock являются источником истины для зависимостей. Этот проект намеренно не поддерживает запасной вариант requirements.txt.
SSH-серверу требуется пара ключей TLS для защищённой связи. Из корневого каталога репозитория создайте пару SSH-ключей следующей командой:
ssh-keygen -t rsa -b 4096 -f SSH/ssh_host_key
Скопируйте файл SSH/config.ini.TEMPLATE в SSH/config.ini:
Откройте файл SSH/config.ini и просмотрите настройки. При необходимости обновите значения, уделяя особое внимание значениям в секции [llm], где настраивается используемый LLM-бэкенд, и в секции [user_accounts], где можно настроить имена пользователей и пароли, которые должна поддерживать honeypot-система.
Отредактируйте файл SSH/prompt.txt, указав краткое описание типа системы, которой она должна притворяться. Здесь не обязательно вдаваться в детали, хотя чем больше деталей вы укажете, тем лучше будет симуляция. Можно описать систему на высоком уровне, например:
You are a video game developer's system. Include realistic video game source and asset files.
При желании вы можете добавить любые дополнительные детали, которые сочтёте полезными. Например:
You are the Internet-facing mail server for bigschool.edu, a state-sponsored university in Virginia. Valid user accounts are "a20093887", "a20093887-admin", and "mxadmin". Home directories are in "/home/$USERNAME". Everyone's default shell is /bin/zsh, except mxadmin's, which is bash. Mail spools for all campus users (be sure to include email accounts that are not valid for logon to this server) are in /var/spool/mail. Be sure to simulate some juicy emails there, but make them realistic. Some should be personal, but some should be just about the business of administering the school, dealing with students, applying for financial aid, etc. Make the spool permissions relaxed, simulating a misconfiguration that would allow anyone on the system to read the files.
Чтобы запустить honeypot-сервер DECEIVE, сначала убедитесь, что заданы все переменные окружения, необходимые выбранному LLM-бэкенду. Например, если вы используете любую из моделей OpenAI, задайте переменную OPENAI_API_KEY следующим образом:
export OPENAI_API_KEY="<your secret API key>"
Затем запустите SSH-honeypot из корня репозитория:
uv run python SSH/ssh_server.py
Можно также перейти в каталог SSH и выполнить:
uv run python ssh_server.py
Сервер запустится и будет ожидать входящие SSH-подключения на настроенном порту. Он не выводит никаких сообщений, но продолжает работать в foreground-режиме.
Когда сервер запущен (это может занять несколько секунд), подключитесь к нему на настроенном порту. Если вы работаете в Linux или UNIX-подобной системе, попробуйте следующую команду (подставьте "localhost" и "8022" в соответствии с вашей конфигурацией):
ssh guest@localhost -p 8022
После выполнения uv sync запустите все тесты из корня репозитория:
uv run pytest
Чтобы запустить только SSH-интеграционные тесты:
uv run pytest tests/test_ssh_integration.py
Интеграционные тесты запускают настоящий SSH-сервер на локальном случайном порту, подключаются к нему SSH-клиентом и используют детерминированный фейковый LLM-бэкенд, чтобы проверки не зависели от реального вывода модели.
Логи записываются в файл, указанный в параметре конфигурации log_file. Относительные пути log_file разрешаются относительно каталога, содержащего загруженный файл конфигурации, поэтому значение по умолчанию из шаблона записывает логи в SSH/ssh_log.log.
Логи DECEIVE хранятся в формате JSON Lines, где каждая строка является полным JSON-документом.
Ниже приведён полный пример простой SSH-сессии, в которой пользователь выполнил две команды (pwd и exit):