
IoT- und Betriebstechnologie-Honeypot
| 📢 ACHTUNG!!! |
|---|
| Dieses Repository wurde zum Honeynet-Projekt verschoben :) |
RIoTPot ist ein Hybrid-Interaktion-Honeypot, der sich hauptsächlich auf die Emulation von IoT- und OT-Protokollen konzentriert, aber auch andere Dienste emulieren kann. Im Wesentlichen fungiert RIoTPot als Proxy-Dienst für andere im System enthaltene Honeypots. Daher können Sie jeden Honeypot und andere Dienste zusammen mit RIoTPot ausführen. Darüber hinaus gibt es eine Webanwendung (UI), mit der Sie Ihr Routing verwalten können.
Der Honeypot wird mit mehreren gebrauchsfertigen Low-Interaction-Diensten geliefert. Da diese Dienste als Plugins geschrieben sind, werden sie nur unter Linux unterstützt; Sie können RIoTPot jedoch auch ohne sie starten. Die folgende Tabelle enthält die Liste der standardmäßig in RIoTPot enthaltenen Dienste, deren interne Ports und Proxy-Ports.
| Service | Interner Port | Proxy-Port |
|---|---|---|
| Echo | 20007 | 7 |
| SSH | 20022 | 22 |
| Telnet | 20023 | 23 |
| HTTP | 28080 | 80 |
| Modbus | 20502 | 502 |
| MQTT | 21883 | 1883 |
| CoAP | 25683 | 5683 |
Inhaltsverzeichnis
Die RIoTPot-Architektur basiert auf Proxy-Verbindungen zu internen und umgebenden (oder externen) Diensten (z. B. Honeypots, vollständige Dienste, Container, entfernte Hosts usw.).
Dazu verwaltet der Honeypot eine Reihe von benutzerdefinierten Proxys, die Verbindungen zwischen Diensten und RIoTPot weiterleiten 1.
Auf diese Weise kann RIoTPot entscheiden, wie und wohin eingehende Angriffe weitergeleitet werden.
Die Logik zur Bestimmung, wie der eingehende Angriff behandelt wird, ist in Form von Middlewares 2 implementiert.
Zur Verwaltung von Diensten, Middlewares und Proxys wird RIoTPot standardmäßig mit einer REST-API 3 und einer Webapp-UI 4 ausgeliefert.
Die UI ist über Ihren Browser unter localhost:2022 erreichbar, und Sie können mit API-Endpunkten unter localhost:2022/api/swagger herumspielen, die eine Swagger-Oberfläche anzeigen.
Abbildung 1 zeigt die RIoTPot-Architektur, einschließlich der beiden Hauptanwendungen, die RIoTPot bilden (RIoTPot selbst und RIoTPot UI) und ihrer Komponenten, sowie einen Abschnitt, der externe (oder angrenzende) Dienste umschließt.
RIoTPot ist in Golang5 geschrieben. Jede RIoTPot-Instanz stellt registrierte Proxys (basierend auf ihrem Port) bei Bedarf bereit. Um einen Proxy zu bedienen, muss ein gebundener Dienst vorhanden sein und der Proxy-Port muss verfügbar sein (derzeit akzeptiert RIoTPot nicht mehrere Dienste, die auf demselben Port laufen). Sobald ein Proxy gebunden und bedient wurde, können Angreifer Nachrichten an RIoTPot auf diesem Port senden, wobei die Nachrichten an den gebundenen Dienst und zurück an den Angreifer weitergeleitet werden6.
Zur einfachen Verwaltung können mehrere Instanzen von RIoTPot über die RIoTPot-UI-Webapp verwaltet werden. Neben der Verwaltung der in jeder Instanz registrierten Proxys können Sie mit der UI Profile erstellen, verwenden und bearbeiten. Jedes Profil enthält eine Reihe von Proxys, die nach Protokollen oder anderen Diensten benannt sind, sodass eine RIoTPot-Instanz einem realen Gerät ähnelt (z. B. einem Haushaltsassistenten). Kurz gesagt, Profile beschleunigen den Prozess der Einrichtung und Bereitstellung einer RIoTPot-Instanz mit spezifischen Konfigurationen. Die UI ist mit der React-Frontend-JavaScript-Bibliothek (wir verwenden Typescript für dieses Projekt) und der Recoil-Statusverwaltungsbibliothek geschrieben. Da RIoTPot relativ klein ist, verwendet es derzeit keine Datenbank.
RIoTPot auszuführen ist relativ einfach. Insgesamt haben Sie drei Optionen. Die erste ist, ein RIoTPot-Release herunterzuladen; Sie können entweder das neueste Release oder ein früheres wählen. Die zweite Option ist, das Projekt selbst zu bauen. Die letzte Option ist, den Quellcode zu verwenden, um einen Docker-Container mit RIoTPot und einigen zusätzlichen Anwendungen zu erstellen, um den Honeypot zu erweitern.
Info: Diese Anleitung richtet sich an Benutzer ohne besondere Anforderungen, die eine einfache Out-of-the-Box-Erfahrung wünschen.
Interne und umgebende Dienste sind nicht über das Internet erreichbar. Interne Dienste sind integriert und nur für RIoTPot zugänglich. Diese Dienste werden beim Start geladen und können nicht gelöscht, aber gestoppt werden. Umgebende Dienste müssen sich im selben Netzwerk wie RIoTPot befinden. Externe Dienste müssen RIoTPot ausschließlich auf die Whitelist setzen. ↩
Middlewares befinden sich derzeit in der Entwicklung. ↩
Die RIoTPot-API darf nicht dem Internet ausgesetzt werden. Die API akzeptiert derzeit dennoch nur Verbindungen von localhost. Dies kann in Zukunft geändert werden, indem eine Whitelist von Hosts und eine Standardauthentifizierung bereitgestellt werden. ↩
Obwohl die Weboberfläche als separate Komponente verwendet werden kann, ist sie in die RIoTPot-Binärdatei eingebettet. ↩
Während die Basisplattform interoperabel ist, können interne Dienste (Plugins) nur in Linux-, FreeBSD- und macOS-Umgebungen verwendet werden. Wir planen, diese Einschränkung zu überwinden, indem wir Plugins durch Microservices ersetzen, die über gRPC kommunizieren. ↩
Aus ethischen und sicherheitstechnischen Gründen erlaubt RIoTPot keine unaufgeforderten Anfragen nach außen, d. h. Reverse Shells und dergleichen sind nicht erlaubt. ↩