Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
DECEIVE — DECeption with Evaluative Integrated Validation Engine (DECEIVE): Let an LLM do all the hard honeypot work! | Kitploit
Инструменты/GitHubGitHub/cisco-talos/deceive
Defensive ToolsNetwork SecurityThreat IntelligenceIntrusion DetectionAI SecurityLog Analysis
GitHubcisco-talos/deceive

DECEIVE

DECeption with Evaluative Integrated Validation Engine (DECEIVE): Let an LLM do all the hard honeypot work!

Репозиторий
2884116 дней назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

DECEIVE

Киберпреступник взаимодействует с призрачной ИИ-управляемой системой-ловушкой

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).

Установка

Получите последнюю версию кода из GitHub

Вы можете получить последнюю версию с помощью следующей команды:

root@kitploit:~
git clone https://github.com/splunk/DECEIVE

В остальных инструкциях предполагается, что после завершения клонирования вы перешли в каталог репозитория.

Установка зависимостей

DECEIVE использует uv для управления Python-зависимостями и виртуальным окружением. Если uv ещё не установлен, установите его с помощью автономного установщика Astral:

root@kitploit:~
curl -LsSf https://astral.sh/uv/install.sh | sh

Затем синхронизируйте окружение проекта из корня репозитория:

root@kitploit:~
uv sync

Файлы pyproject.toml и uv.lock являются источником истины для зависимостей. Этот проект намеренно не поддерживает запасной вариант requirements.txt.

Создание SSH-ключа хоста

SSH-серверу требуется пара ключей TLS для защищённой связи. Из корневого каталога репозитория создайте пару SSH-ключей следующей командой:

root@kitploit:~
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-система.

Расскажите DECEIVE, что она эмулирует

Отредактируйте файл SSH/prompt.txt, указав краткое описание типа системы, которой она должна притворяться. Здесь не обязательно вдаваться в детали, хотя чем больше деталей вы укажете, тем лучше будет симуляция. Можно описать систему на высоком уровне, например:

root@kitploit:~
You are a video game developer's system. Include realistic video game source and asset files.

При желании вы можете добавить любые дополнительные детали, которые сочтёте полезными. Например:

root@kitploit:~
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-системы

Чтобы запустить honeypot-сервер DECEIVE, сначала убедитесь, что заданы все переменные окружения, необходимые выбранному LLM-бэкенду. Например, если вы используете любую из моделей OpenAI, задайте переменную OPENAI_API_KEY следующим образом:

root@kitploit:~
export OPENAI_API_KEY="<your secret API key>"

Затем запустите SSH-honeypot из корня репозитория:

root@kitploit:~
uv run python SSH/ssh_server.py

Можно также перейти в каталог SSH и выполнить:

root@kitploit:~
uv run python ssh_server.py

Сервер запустится и будет ожидать входящие SSH-подключения на настроенном порту. Он не выводит никаких сообщений, но продолжает работать в foreground-режиме.

Проверка работы

Когда сервер запущен (это может занять несколько секунд), подключитесь к нему на настроенном порту. Если вы работаете в Linux или UNIX-подобной системе, попробуйте следующую команду (подставьте "localhost" и "8022" в соответствии с вашей конфигурацией):

root@kitploit:~
ssh guest@localhost -p 8022

Запуск автоматических тестов

После выполнения uv sync запустите все тесты из корня репозитория:

root@kitploit:~
uv run pytest

Чтобы запустить только SSH-интеграционные тесты:

root@kitploit:~
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):

root@kitploit:~
{"timestamp": "2025-01-10T20:37:55.018+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "SSH connection received", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 59, "funcName": "connection_made", "created": 1736541475.0183098, "msecs": 18.0, "relativeCreated": 13872.790813446045, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": null}
{"timestamp": "2025-01-10T20:37:55.177+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "Authentication success", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 75, "funcName": "begin_auth", "created": 1736541475.1775439, "msecs": 177.0, "relativeCreated": 14032.02486038208, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "username": "guest", "password": ""}
{"timestamp": "2025-01-10T20:37:57.456+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "LLM response", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 174, "funcName": "handle_client", "created": 1736541477.4568708, "msecs": 456.0, "relativeCreated": 16311.351776123047, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "V2VsY29tZSB0byBHYW1lRGV2IENvcnAncyBEZXZlbG9wbWVudCBFbnZpcm9ubWVudAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBXZWxjb21lLCBndWVzdCEgCiAgIExhc3QgbG9naW46IFR1ZSBPY3QgMjQgMTQ6MzI6MTUgMjAyMyBmcm9tIDE5Mi4xNjguMS4xMAogICBQcm9qZWN0czoKICAgICAtIEZhbnRhc3lRdWVzdAogICAgIC0gU3BhY2VFeHBsb3JlcnMKICAgICAtIFJhY2luZ01hbmlhCiAgIFN5c3RlbSBTdGF0dXM6IEFsbCBzeXN0ZW1zIG9wZXJhdGlvbmFsCiAgIFJlbWVtYmVyIHRvIGNvbW1pdCB5b3VyIGNoYW5nZXMhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmd1ZXN0QGRldi13b3Jrc3RhdGlvbjp+JCA="}
{"timestamp": "2025-01-10T20:37:59.333+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "User input", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 184, "funcName": "handle_client", "created": 1736541479.3334038, "msecs": 333.0, "relativeCreated": 18187.88480758667, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "cHdk"}
{"timestamp": "2025-01-10T20:38:00.189+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "LLM response", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 200, "funcName": "handle_client", "created": 1736541480.189375, "msecs": 189.0, "relativeCreated": 19043.855905532837, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "L2hvbWUvZ3Vlc3QKCmd1ZXN0QGRldi13b3Jrc3RhdGlvbjp+JCA="}
{"timestamp": "2025-01-10T20:38:01.944+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "User input", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 184, "funcName": "handle_client", "created": 1736541481.944072, "msecs": 944.0, "relativeCreated": 20798.552989959717, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "ZXhpdA=="}
{"timestamp": "2025-01-10T20:38:04.132+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "Session summary", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 151, "funcName": "session_summary", "created": 1736541484.1324642, "msecs": 132.0, "relativeCreated": 22986.945152282715, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "The user issued basic commands like `pwd` to check the current working directory and `exit` to terminate the session. This activity is typical of a benign user checking their environment upon logging in and then closing the session. There is no indication of reconnaissance, exploitation, or any post-foothold activity such as privilege escalation or data exfiltration. The actions appear to be standard and routine.\n\nJudgement: BENIGN", "judgement": "BENIGN"}
{"timestamp": "2025-01-10T20:38:04.139+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "SSH connection closed", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 65, "funcName": "connection_lost", "created": 1736541484.139776, "msecs": 139.0, "relativeCreated": 22994.2569732666, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": null}

На что обратить внимание:

  • Временные метки всегда указаны в UTC. UTC||GTFO!
  • Поле task_name содержит уникальное значение, которое назначается при получении SSH-подключения и используется во всех записях лога этой сессии.
  • Поле «message» покажет, к какому типу относится запись:
    • SSH connection received
    • Authentication success
    • User input
    • LLM response
    • Session summary
    • SSH connection closed
  • Некоторые из этих типов записей также содержат поле details с дополнительной информацией:
    • Сообщения User input содержат base64-кодированную копию всего пользовательского ввода в поле details, а также поле interactive (true/false), которое указывает, была ли команда интерактивной или неинтерактивной (т.е. вошёл ли пользователь через терминальную сессию или передал команду в командной строке SSH).

Участие в разработке

Вклад приветствуется! Пожалуйста, отправляйте pull request'ы или открывайте issues, чтобы обсудить любые изменения или улучшения.

Лицензия

Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.

Скачать инструмент
  • Сообщения LLM response содержат base64-кодированную копию всего смоделированного ответа в поле details.
  • Сообщения Session summary содержат не только сводку команд, но и предположение о том, какую цель они могли преследовать. Также присутствует поле judgement, содержащее одно из значений: "BENIGN", "SUSPICIOUS" или "MALICIOUS".
  • Поскольку это honeypot, не предназначенный для использования реальными пользователями, ОН БУДЕТ ЛОГИРОВАТЬ ИМЕНА ПОЛЬЗОВАТЕЛЕЙ И ПАРОЛИ! Они находятся в сообщениях Authentication success, в полях username и password.