
Хоніпот для IoT и операционных технологий
| 📢 ВНИМАНИЕ!!! |
|---|
| Этот репозиторий был перемещён в проект Honeynet :) |
RIoTPot — это гибридный honeypot взаимодействия, в первую очередь ориентированный на эмуляцию протоколов IoT и OT, хотя он также способен эмулировать другие сервисы. По сути, RIoTPot действует как прокси-сервис для других honeypot-ов, включённых в систему. Поэтому вы можете запускать любые honeypot-ы и другие сервисы вместе с RIoTPot. Кроме того, есть веб-приложение с пользовательским интерфейсом, которое вы можете использовать для управления маршрутизацией.
Honeypot поставляется с несколькими низкоинтерактивными сервисами, готовыми к использованию. Поскольку эти сервисы написаны как плагины, они поддерживаются только на Linux; однако вы можете запустить RIoTPot без них. В следующей таблице приведён список сервисов, включённых в RIoTPot по умолчанию, их внутренние порты и прокси-порты.
| Сервис | Внутренний порт | Прокси-порт |
|---|---|---|
| Echo | 20007 | 7 |
| SSH | 20022 | 22 |
| Telnet | 20023 | 23 |
| HTTP | 28080 | 80 |
| Modbus | 20502 | 502 |
| MQTT | 21883 | 1883 |
| CoAP | 25683 | 5683 |
Содержание
Архитектура RIoTPot основана на прокси-соединениях с внутренними и окружающими (или внешними) сервисами (например, honeypot-ами, полноценными сервисами, контейнерами, удалёнными хостами и т.д.). Для этого honeypot управляет рядом определённых пользователем прокси, которые ретранслируют соединения между сервисами и RIoTPot 1. Таким образом, RIoTPot может решать, как и куда направлять входящие атаки. Логика, используемая для определения того, как обрабатывать входящую атаку, реализована в виде промежуточных слоёв 2. Для управления сервисами, промежуточными слоями и прокси RIoTPot поставляется с REST API 3 и веб-интерфейсом 4 «из коробки». Веб-интерфейс доступен через браузер по адресу localhost:2022, а с конечными точками API можно ознакомиться по адресу localhost:2022/api/swagger, где отображается интерфейс Swagger.
Рисунок 1 показывает архитектуру RIoTPot, включая два основных приложения, составляющих RIoTPot (сам RIoTPot и RIoTPot UI), и их компоненты, а также раздел для внешних (или смежных) сервисов.
RIoTPot написан на Golang5. Каждый экземпляр RIoTPot предоставляет зарегистрированные прокси (на основе их порта) по требованию. Чтобы обслуживать прокси, должен быть привязан сервис, и порт прокси должен быть доступен (в настоящее время RIoTPot не принимает несколько сервисов, работающих на одном порту). Когда прокси привязан и обслуживается, злоумышленники смогут отправлять сообщения RIoTPot на этот порт, ретранслируя сообщения привязанному сервису и обратно атакующему6.
Для удобства доступа несколькими экземплярами RIoTPot можно управлять из веб-приложения RIoTPot UI.
В дополнение к управлению прокси, зарегистрированными в каждом экземпляре, UI позволяет создавать, использовать и редактировать профили.
Каждый профиль содержит ряд прокси, названных в честь протоколов или других сервисов, что делает экземпляр RIoTPot похожим на реальное устройство (например, домашний помощник).
Короче говоря, профили ускоряют процесс настройки и предоставления экземпляра RIoTPot с конкретными конфигурациями.
UI написан с использованием библиотеки React для фронтенда на JavaScript (для этого проекта мы используем Typescript) и библиотеки управления состоянием Recoil.
Поскольку RIoTPot довольно мал, на данный момент он не использует базу данных.
Запуск RIoTPot относительно прост. В целом у вас есть три варианта. Первый — скачать релиз RIoTPot; вы можете выбрать как последний, так и предыдущий релиз. Второй вариант — собрать проект самостоятельно. Последний вариант — использовать исходный код для создания Docker-контейнера с RIoTPot и некоторыми дополнительными приложениями для расширения функциональности honeypot.
Информация: Это руководство предназначено для пользователей без особых потребностей, которые хотят получить простой опыт «из коробки».
Каждый релиз поставляется в папке с именем riotpot, содержащей исполняемый бинарный файл (также) с именем riotpot и папку plugins, заполненную различными сервисами (или низкоинтерактивными honeypot-ами).
Важно сохранять внутреннюю структуру папок для правильной работы RIoTPot.
📁 riotpot
┕ riotpot
┕ 📁 plugins
Внутренние и окружающие сервисы недоступны через Интернет. Внутренние сервисы интегрированы и доступны только для RIoTPot. Эти сервисы загружаются при запуске и не могут быть удалены, но их можно остановить. Окружающие сервисы должны находиться в той же сети, что и RIoTPot. Внешние сервисы должны заносить RIoTPot в белый список только. ↩
Промежуточные слои в настоящее время находятся в разработке. ↩
API RIoTPot не должен быть доступен из Интернета. Независимо от этого, в настоящее время API принимает соединения только с локального хоста. В будущем это может быть изменено путём предоставления белого списка хостов и стандартной аутентификации. ↩
Хотя веб-интерфейс может использоваться как отдельный компонент, он встроен в бинарный файл RIoTPot. ↩
Хотя базовое приложение кроссплатформенно, внутренние сервисы (плагины) могут использоваться только в средах Linux, FreeBSD и macOS. Мы планируем преодолеть это ограничение, заменив плагины микросервисами, общающимися через gRPC. ↩
По этическим соображениям и соображениям безопасности RIoTPot не допускает нежелательных запросов наружу, т.е. реверс-шеллы и тому подобное запрещены. ↩