
Honeypot per IoT e Tecnologia Operativa
| 📢 ATTENZIONE!!! |
|---|
| Questo repository è stato spostato su The Honeynet Project :) |
RIoTPot è un honeypot a interazione ibrida, focalizzato principalmente sull'emulazione di protocolli IoT e OT, sebbene sia anche in grado di emulare altri servizi. In sostanza, RIoTPot funge da servizio proxy per altri honeypot inclusi nel sistema. Pertanto, puoi eseguire qualsiasi honeypot e altri servizi insieme a RIoTPot. Inoltre, è disponibile un'applicazione web UI che puoi utilizzare per gestire il tuo instradamento.
L'honeypot viene fornito con diversi servizi a bassa interazione pronti all'uso. Poiché questi servizi sono scritti come plugin, sono supportati solo su Linux; tuttavia, puoi avviare RIoTPot senza di essi. La tabella seguente contiene l'elenco dei servizi inclusi in RIoTPot per impostazione predefinita, la loro porta interna e la porta proxy.
| Servizio | Porta Interna | Porta Proxy |
|---|---|---|
| Echo | 20007 | 7 |
| SSH | 20022 | 22 |
| Telnet | 20023 | 23 |
| HTTP | 28080 | 80 |
| Modbus | 20502 | 502 |
| MQTT | 21883 | 1883 |
| CoAP | 25683 | 5683 |
Indice
L'architettura di RIoTPot si basa su connessioni proxy verso servizi interni e circostanti (o esterni) (ad esempio, honeypot, servizi completi, container, host remoti, ecc.).
A tal fine, l'honeypot gestisce un certo numero di proxy definiti dall'utente che inoltrano le connessioni tra servizi e RIoTPot 1.
In questo modo, RIoTPot può decidere come e dove instradare gli attacchi in arrivo.
La logica utilizzata per determinare come gestire l'attacco in arrivo è implementata sotto forma di middleware 2.
Per gestire servizi, middleware e proxy, RIoTPot è dotato di una REST API 3 e di un'interfaccia webapp UI 4 già pronti all'uso.
L'interfaccia utente è accessibile tramite il browser all'indirizzo localhost:2022 e puoi interagire con gli endpoint API all'indirizzo localhost:2022/api/swagger che mostra un'interfaccia Swagger.
Figura 1 mostra l'architettura di RIoTPot, incluse le due applicazioni principali che lo costituiscono (RIoTPot stesso e RIoTPot UI) e i loro componenti, e una sezione per racchiudere servizi esterni (o adiacenti).
RIoTPot è scritto in Golang5. Ogni istanza di RIoTPot espone proxy registrati (in base alla loro porta) su richiesta. Per servire un proxy, deve avere un servizio associato e la porta proxy deve essere disponibile (attualmente, RIoTPot non accetta più servizi in esecuzione sulla stessa porta). Quando un proxy è stato associato e servito, gli aggressori saranno in grado di inviare messaggi a RIoTPot su quella porta, inoltrando i messaggi al servizio associato e viceversa all'aggressore6.
Per facilità di accesso, più istanze di RIoTPot possono essere gestite dall'app web RIoTPot UI.
Oltre a gestire i proxy registrati in ciascuna istanza, l'interfaccia utente consente di creare, utilizzare e modificare i profili.
Ogni profilo contiene un certo numero di proxy denominati in base a protocolli o altri servizi, facendo sì che un'istanza di RIoTPot assomigli a un dispositivo reale (ad esempio, un assistente domestico).
In poche parole, i profili accelerano il processo di configurazione e provisioning di un'istanza di RIoTPot con configurazioni specifiche.
L'interfaccia utente è scritta utilizzando la libreria front-end React JavaScript (usiamo Typescript per questo progetto) e la libreria di gestione dello stato Recoil.
Poiché RIoTPot è piuttosto piccolo, al momento non utilizza un database.
Eseguire RIoTPot è relativamente semplice. In generale, hai tre opzioni. La prima è scaricare una release di RIoTPot; puoi scegliere di scaricare l'ultima release o una precedente. La seconda opzione è compilare il progetto da solo. L'ultima opzione è utilizzare il codice sorgente per creare un container Docker con RIoTPot e alcune applicazioni aggiuntive per potenziare l'honeypot.
Info: Questa guida è pensata per utenti senza esigenze particolari, che desiderano un'esperienza semplice e pronta all'uso.
Ogni release si presenta in una cartella denominata riotpot con un binario eseguibile (anch'esso) chiamato riotpot e una cartella plugins piena di vari servizi (o honeypot a bassa interazione).
È importante mantenere la struttura interna delle cartelle affinché RIoTPot funzioni correttamente.
📁 riotpot
┕ riotpot
┕ 📁 plugins
I servizi interni e circostanti non sono accessibili tramite Internet. I servizi interni sono integrati e accessibili solo a RIoTPot. Questi servizi vengono caricati all'avvio e non possono essere eliminati, ma possono essere arrestati. I servizi circostanti devono essere nella stessa rete di RIoTPot. I servizi esterni devono inserire RIoTPot nella whitelist solo. ↩
I middleware sono attualmente in fase di sviluppo. ↩
L'API di RIoTPot non deve essere esposta a Internet. Ad ogni modo, l'API attualmente accetta solo connessioni da localhost. Questo potrebbe essere modificato in futuro, fornendo una whitelist di host e autenticazione standard. ↩
Sebbene l'interfaccia web possa essere utilizzata come componente separato, è integrata nel binario di RIoTPot. ↩
Sebbene l'applicazione di base sia interoperabile, i servizi interni (plugin) possono essere utilizzati solo in ambienti Linux, FreeBSD e macOS. Prevediamo di superare questa limitazione sostituendo i plugin con microservizi che comunicano tramite gRPC. ↩
Per motivi etici e di sicurezza, RIoTPot non consente richieste non sollecitate verso l'esterno, ovvero shell inverse e simili non sono consentite. ↩