Come costruire e valutare un honeypot per sistemi industriali
I Sistemi di Controllo Industriale o Industrial Control Systems (ICS) sono utilizzati per la gestione dei processi industriali. Questi sistemi gestiscono infrastrutture critiche, come impianti di produzione di energia elettrica, sistemi di trasporto, raffinerie di petrolio, fabbriche chimiche e, in generale, impianti di produzione di vario genere. Per loro natura, gli ICS sono in genere applicazioni mission-critical a cui si richiede la massima availability, dovendo gestire procedure molto delicate e ad alto rischio. Gli ICS sono spesso gestiti tramite un sistema di controllo di supervisione e acquisizione dati (SCADA), che fornisce un’interfaccia utente grafica per consentire agli operatori di osservare facilmente lo stato di un sistema, ricevere eventuali allarmi che indicano il funzionamento fuori banda o per inserire le regolazioni del sistema per gestire il processo sotto controllo. La maggior parte degli ICS rientra in un sistema di controllo di processi continui, generalmente gestiti tramite un Programming Logic Controller (PLC), o alternativamente di processi discreti (gestiti da un DPC).
Oggi, nell’era dell’Industria 4.0 e dell’Industrial Internet of Things (IIoT) [1], gli ICS possono essere interconnessi alla Intranet aziendale e, volenti o nolenti, anche ad Internet stessa. Questa esigenza di connessione espone inevitabilmente gli ICS a gravi problemi di sicurezza, che per loro natura possono riguardare la sicurezza e la salute dei cittadini di un ampio territorio: pensiamo per esempio alla gestione di una diga idroelettrica. Sono stati per questo motivo inclusi nella definizione di Perimetro Nazionale, così come stabilito dal DPCM 15 giugno 2021 (GU Serie Generale n.198 del 19-08-2021).
LOGistICS, è un sistema di emulazione e monitoraggio per ICS, che abbiamo sviluppato grazie soprattutto ad un lavoro di tesi magistrale del Dott. Emanuele Bosimini, co-supervisionato dal Prof. Stefano Bistarelli. Il cuore di LOGistICS è rappresentato da un honeypot [2] per ICS. Gli honeypot sono componenti hardware/software utilizzati come “esche” per attirare eventuali attaccanti: il loro scopo è quindi quello di esporre solo l’interfaccia vulnerabile di un servizio fittizio (honeypot a bassa interazione), anche se possono essere dotati inoltre di una logica interna (media/alta interazione). Gli honeypot possono quindi essere utilizzati per registrare eventuali attacchi diretti verso di essi e dare così la possibilità di studiare i loro pattern, in modo di comprendere meglio il loro comportamento (attacchi zero-day inclusi).
In LOGistICS ci siamo concentrati su due tipici protocolli ICS, come S7comm (un protocollo proprietario di Siemens) e Modbus (un protocollo aperto) di Schneider Electric, ampiamente utilizzati anche nell’automazione domestica. LOGistICS è composto da i) un honeypot altamente personalizzabile che emula i due suddetti servizi ICS, ii) uno sniffer che registra il traffico e iii) un nodo di monitoraggio, in grado di analizzare e tracciare i dati registrati. Inoltre abbiamo implementato un ulteriore nodo di test localmente distribuito con lo scopo di valutare la capacità dell’honeypot nel registrare efficacemente tali eventi. In Figura 1 viene mostrata l’architettura dei vari nodi che compongono LOGistICS, con i simboli di alcune delle tecnologie utilizzate. Tutto il sistema è a basso impatto energetico, dato che il nodo di monitoraggio utilizza un MiniPC, mentre quello di honeypot viene eseguito su un Raspberry Pi 4.
I modelli di PLC emulati sono rappresentati attraverso file csv, ed è quindi possibile aggiungere nuovi modelli a piacimento. Al momento LOGistICS fornisce l’emulazione di 4 PLC che supportano il protocollo Modbus (Schneider, Toshiba, Beckhoff, Panasonic), mentre per quanto riguarda S7comm i PLC emulati sono le versioni S7-300, S7-400 e S7-1200. L’emulazione di S7comm è basata su un’estensione del progetto Snap7.[1] La documentazione Siemens ufficiale a riguardo è infatti molto scarsa, e non esistono API open-source per poter interagire con i PLC menzionati. Emulare questo servizio è stato quindi abbastanza complesso, dovendo in alcuni casi effettuare il reverse-hexdump dei messaggi per comprendere la loro struttura, in particolare i valori dei campi SZL: System-Zustands Listen è infatti la terminologia con cui Siemens fa riferimento agli stati interni del PLC, e quindi alle sue proprietà. Per esempio, l’array di byte SZL W_16_0232 index W_16_0004 contiene informazioni sul livello di protezione della CPU, e i checksum della configurazione hardware e del programma utente. È stato quindi necessario modificare i valori di default presenti in Snap7 allo scopo di renderli più simili a PLC di diverse tipologie.
Fornendo un’elevata personalizzazione dei modelli PLC infatti, il nostro intento è stato quello di ingannare gli strumenti di riconoscimento. Un honeypot deve essere infatti il più difficilmente riconoscibile come tale, in modo da evitare che un attaccante lo individui e se ne allontani. In particolare, il noto strumento di scansione nmap,[2] grazie agli script ausiliari eseguibili dal Nmap Scripting Engine (NSE), è in grado di eseguire una scansione accurata dei servizi Modbus e S7comm. Due script che abbiamo utilizzato sono s7-info.nse e modbus-discover.nse. Tutti i template PLC implementati per entrambi i protocolli sono stati riconosciuti da questi script come effettivamente PLC di quella precisa tipologia. Un simile risultato è stato ottenuto utilizzando strumenti come PLC Scan e Modscan, direttamente disponibili nella distribuzione Moki Linux.
Inoltre, abbiamo anche la sua capacità di camuffamento utilizzando Honeyscore, uno strumento implementato come modulo nella suite di test di penetrazione Metasploit. I parametri richiesti per Honeyscore consistono semplicemente in una API-key di Shodan API (per utilizzare le informazioni fornite appunto da Shodan)[3] e un “target”, che corrisponde all’indirizzo IP da valutare. Come risultato, Questo strumento riporta un valore compreso tra 0 e 1, dove 1 equivale alla certezza che l’IP corrisponda ad un honeypot: in questo caso è importante ottenere un valore inferiore a 0.5, dato che molti tool, come per esempio Shonydanza,[4] utilizzano questa soglia per filtrare automaticamente gli IP identificati come honeypot. Nel nostro caso, abbiamo ottenuto un punteggio di 0 per Modbus e 0.3 per S7comm.
Infine, per valutare la capacità del nostro honeypot di registrare veri attacchi provenienti da tool ben conosciuti, abbiamo utilizzato Metaploit[5] e Industrial Exploitation Framework (ISF)[6], simile al primo ma dedicato interamente a sistemi industriali. Sono stati utilizzate 5 vulnerabilità ben conosciute (tre S7comm e due Modbus), individuate dagli identificativi 19831.rb, 38964.rb, 19833.rb, 42691.rb, quantum_140_plc_control. In tutti gli esperimenti effettuati l’attacco è risultato pienamente riuscito (lato tool di penetration) e registrato (lato honeypot).
L’ultimo passo è stato quello di lasciare LOGistICS in ascolto su Internet, anche se su una rete domestica collegata tramite ISP (non una rete aziendale). Il numero di eventi giornalieri registrati è mostrato in Figura 2. Su questi dati abbiamo poi effettuato un’analisi a posteriori, per eliminare il rumore di fondo provocato da motori di ricerca come Shodan. Nel mese analizzato (Gennaio 2021), abbiamo rilevato 301 attacchi tramite protocollo Modbus, e 6 attacchi al protocollo S7comm. Per un’analisi più approfondita, rimandiamo all’articolo scientifico in cui sono stati pubblicati i risultati ottenuti [3].
L’utilizzo di strumenti di Deception Technology,[7] come gli Honeypot, è fondamentale per poter riconoscere e studiare nuovi attacchi avanzati. In un futuro dove questi diventeranno sempre più sofisticati e impattanti, la messa in sicurezza di sistemi ICS è fondamentale tanto per un’azienda quanto per il Paese, al fine di evitare spionaggio industriale e sabotaggio di strutture vitali.
BIBLIOGRAFIA
[1] Boyes, H., Hallaq, B., Cunningham, J., Watson, T. (2018). “The industrial internet of things (IIoT): An analysis framework”. Computers in Industry. 101: 1–12. doi:10.1016/j.compind.2018.04.015. ISSN 0166-3615.
[2] Nawrocki, M., Wählisch, M., Schmidt, T. C., Keil, C., & Schönfelder, J. (2016). “A survey on honeypot software and data analysis.” arXiv preprint arXiv:1608.06249.
[3] Bistarelli, S., Bosimini E., Santini, F. (2021). A Medium-Interaction Emulation and Monitoring System for Operational Technology. ARES 2021: 118:1-118:7
Note
[1] Snap7: http://snap7.sourceforge.net
[2] Nmap: https://nmap.org
[3] Shodan: https://www.shodan.io
[4] Shonydanza: https://securityonline.info/shonydanza/
[5] Metaploit: https://www.metasploit.com
[6] Industrial Exploitation Framework: https://github.com/dark-lbp/isf
[7] https://it.wikipedia.org/wiki/Deception_technology
Articolo a cura di Francesco Santini
Francesco Santini è Professore Associato presso il Dipartimento di Matematica e Informatica dell’Università degli Studi di Perugia. Si occupa da quasi venti anni di Intelligenza Artificiale e Cybersecurity, con un approccio integrato. È docente di corsi riguardanti la sicurezza per corsi di laurea magistrale in informatica e in master universitari di primo livello su protezione del dato e forensics. È relatore di tesi sulle materie di insegnamento. Organizza il programma di training CyberChallenge.it per studenti di scuole superiori e laurea triennale, ed è membro del Cybersecurity National Lab. presso il nodo di Perugia.