Hacking: attaccare un PLC con Stuxnet

Stuxnet docet...

Per illustrare come sia possibile attaccare un PLC e quali potrebbero essere le conseguenze di ciò diamo un'occhiata al worm Stuxnet.

Introduzione a Stuxnet

Stuxnet è un worm indipendente, destinato esclusivamente ai sistemi di controllo di supervisione e acquisizione dati (SCADA) di Siemens. Il worm è stato progettato per attaccare specifici PLC Siemens e ha sfruttato quattro vulnerabilità 0-day. La versione finale di Stuxnet è stata scoperta per la prima volta in Bielorussia nel giugno 2010 da Sergey Ulasen di Kaspersky Labs. Una versione precedente di Stuxnet era già stata scoperta nel 2009. Tuttavia, il worm è stato sviluppato molto prima, probabilmente già nel 2005. Stuxnet è stato progettato principalmente per danneggiare una centrale nucleare situata a Natanz, in Iran. Sfortunatamente però Stuxnet si è diffuso in oltre 115 paesi, il che dimostra come anche un attacco mirato potrebbe diffondersi e causare danni al di fuori del suo scopo principale.

Il worm è stato appositamente progettato per modificare la velocità del rotore delle centrifughe all'interno della centrale nucleare di Natanz, causandone l'esplosione. Ciò che è interessante con Stuxnet è che si trattava di un worm mirato, progettato con cura per causare danni solo se fossero stati soddisfatti determinati criteri, il che significa che la maggior parte degli impianti in cui si è successivamente diffuso non avrebbero dovuto subire danni. In effetti, Stuxnet aumenterebbe la velocità del rotore delle centrifughe solo se l'architettura del sistema di controllo industriale corrispondesse all'impianto nucleare di Natanz. Per la sua struttura e complessità, Stuxnet è stata definita come una minaccia persistente avanzata (APT). Un APT raccoglie i dati ed esegue i comandi continuamente per un lungo periodo di tempo senza essere rilevato. Questo è anche noto come attacco "basso e lento".

Come funziona

Il worm Stuxnet è stato portato nella struttura di Natanz attraverso un'unità flash USB, consentendogli di attaccare il sistema dall'interno. Ciò era considerato uno dei prerequisiti per l'attacco in quanto la struttura di Natanz non era direttamente accessibile da Internet ma potretto tramite air gap.

Un PLC Simatic S7-300

Dopo l'esecuzione, il worm si è diffuso su tutta la rete fino a quando non ha trovato un sistema operativo Windows con STEP 7.

Siemens Step 7

STEP 7 è il software di programmazione Siemens progettato per i propri PLC. Il computer che esegue STEP 7 è noto come computer di controllo e interagisce direttamente con e invia comandi al PLC. Una volta arrivato con successo al computer di controllo STEP 7, Stuxnet ha manipolato i blocchi di codice inviati dal computer di controllo, eseguito comandi pericolosi sul PLC e fatto girare le centrifughe a una frequenza superiore rispetto a quanto inizialmente programmato.

Il software STEP 7 utilizza una libreria chiamata s7otbxdx.dll per eseguire la comunicazione con il PLC. Ad esempio, se un blocco di codice deve essere letto dal PLC viene chiamata la routine "s7blk_read". Stuxnet usa una tecnica di DLL hijacking per intercettare tutti i comandi provenienti da STEP 7 e WinCC (il sistema SCADA di Siemens) e, a sua volta, li inoltra alla libreria originale dopo averne modificato il contenuto. In questo modo invia comandi imprevisti al PLC restituendo agli utenti un loop di valori di funzionamento normale.

L'attacco di tipo DLL hijacking sulle librerie STEP 7

Gli attacchi al PLC sono stati eseguiti ogni 27 giorni circa per rendere l'attacco furtivo e difficile da rilevare, che rappresenta una parte centrale di un APT. Stuxnet ha inoltre rilevato il computer di controllo e visualizzato un output falso sul software STEP 7. Questo passaggio dell'attacco era una parte fondamentale nota come "inganno". Gli ingegneri situati nella centrale nucleare non hanno ricevuto alcuna indicazione di errori, supponendo che le centrifughe stessero ruotando alla frequenza corretta. Ricevendo un output falso in STEP 7, essi presumevano che il tracollo fosse stato causato da un errore umano anzichè da un malware. Stuxnet ha anche nascosto il codice direttamente sul PLC dopo l'infezione ed è stato quindi definito anche un rootkit del PLC.

Un esempio di sistema SCADA basato su Siemens WinCC

Per la sua diffusione in rete Stuxnet ha sfruttato una delle vulnerabilità 0-day dei sistemi operativi Windows. Esso infatti si è diffuso attraverso il protocollo di condivisione dei file Server Message Block (SMB) come documentato nel rapporto sulla vulnerabilità CVE-2008-4250 nel National Vulnerability Database. La vulnerabilità ha consentito l'esecuzione di codice in modalità remota, diffondendosi in modo aggressivo sulla rete locale. Il worm aveva diverse altre funzionalità, come l'auto-replica, si aggiornava usando un centro di comando e controllo, conteneva un rootkit di Windows che nascondeva i suoi file binari e tentava di aggirare i sistemi di sicurezza presenti sui computer (anti-virus e anti-malware).

Le conseguenze del suo attacco

Stuxnet è conosciuta come la prima arma digitale del mondo e ha distrutto circa 1.000 centrifughe all'interno della centrale di Natanz. Gli attacchi informatici che causano danni fisici hanno rivoluzionato il modo in cui gli esperti di sicurezza informatica eseguono l'analisi delle minacce, nonché il modo in cui i produttori di PLC li progettano.

Se vogliamo trovargli un merito, Stuxnet ha spazzato via la convinzione che i sistemi ICS fossero inviolabili, sicuri perchè isolati e perchè così diversi dai tradizionali dispositivi presenti nel mondo IT.

Ma la conseguenza più grande è determinata dal fatto che per la prima volta un ente governativo, in questo caso quello americano insieme a quello israeliano, ha creato un'arma informatica in grado di causare danni a persone e cose. Non si era ancora visto qualcosa del genere e di questa entità, hackers e malwares avevano finora l'obiettivo di estorcere denaro, rubare informazioni o infrangere barriere politiche, ma nessuno aveva superato la soglia del danno tangibile.

Hacking di un PLC

Una parte di Stuxnet consisteva nell'utilizzare i PLC di destinazione come strumento hacker mediante un rootkit del PLC e manipolando la comunicazione tra il computer di controllo (SCADA) e il PLC stesso. Mirando entrambi questi dispositivi Stuxnet è riuscito a raggiungere il suo obiettivo e allo stesso tempo ha ingannato gli operatori, avendo così abbastanza tempo per distruggere le centrifughe. Stuxnet come APT è un attacco sofisticato che richiede una significativa raccolta di informazioni e risorse per essere eseguito. È inoltre necessario disporre di conoscenze approfondite sui protocolli di comunicazione proprietari in uso e sull'architettura dei PLC target, in particolare per la realizzazione del rootkit. Il suo codice è ora pubblicamente disponibile e può essere studiato in modo approfondito.

Un sistema di controllo industriale (ICS) e un PLC fanno uso di più protocolli di comunicazione. Tra i più utilizzati troviamo Profinet, Profibus e Modbus. La maggior parte di essi sono stati concepiti all'origine senza misure di sicurezza integrate, con la conseguenza di permettere l'esecuzione di codice in modalità remota, lo sniffing dei pacchetti e gli attacchi replay a causa della mancanza di autenticazione e crittografia.

Profinet utilizza l'hardware Ethernet tradizionale, che lo rende compatibile con la maggior parte delle apparecchiature. Profinet è ampiamente utilizzato nel settore dell'automazione e il suo design si basa sul modello Open Systems Interconnection (OSI). Profinet consente la comunicazione bidirezionale ed è il protocollo di comunicazione preferito per i PLC Siemens Simatic.

Profibus è uno standard di comunicazione internazionale per bus di campo. Viene utilizzato per collegare insieme più dispositivi e consente la comunicazione bidirezionale. Esistono due tipi di Profibus: Profibus Decentralized Peripherals (DP) e Profibus Process Automation (PA). Una limitazione con Profibus è che è in grado di comunicare solo con un dispositivo alla volta. La nuova versione di Profibus è standardizzata in IEC 61158.

Modbus è un protocollo di comunicazione seriale progettato e pubblicato da Modicon (Schneider Electric) nel 1979. Modbus esegue una comunicazione di tipo master e slave, con un numero massimo di dispositivi fino a 247. Il computer di controllo - HMI o SCADA - normalmente funge da master, mentre i dispositivi di automazione, o i PLC, sono gli slave. È stato originariamente progettato come protocollo di comunicazione per PLC e successivamente è diventato uno standard internazionale per il collegamento di più dispositivi industriali. Modbus è facile da implementare, economico e ampiamente accettato come standard di comunicazione. Esistono almeno tre varianti del protocollo Modbus: American Standard Code for Information Interchange (ASCII), unità terminale remota (RTU) e TCP/IP.

Esistono diversi scanner Metasploit che consentono il rilevamento e lo sfruttamento di Modbus e Profinet. Scanner simili in Python sono disponibili anche su GitHub. Nel 2011 Dillon Beresford, ingegnere senior per la ricerca delle vulnerabilità presso Dell, ha lanciato exploit remoti verso la serie di PLC Simatic di Siemens attravero Profinet, che comunica utilizzando la porta TCP 102.

Ciò che è interessante di questi exploit è che scaricano e visualizzano la memoria, e sono in grado di effettuare comandi ON/OFF sull'unità centrale di elaborazione (CPU) del PLC. Un esempio è l'exploit chiamato "remote-memory-viewer", che esegue l'autenticazione utilizzando una password backdoor codificata nel PLC Simatic S7-300 di Siemens. In questo exploit, il modulo di avvio/arresto della CPU esegue il codice shell verso il PLC e lo accende/spegne da remoto. Lo stesso exploit start/stop può essere trovato per la serie S7-1200. Inoltre, iniettando shellcode, è anche possibile ottenere l'accesso remoto al PLC.

A causa della mancanza di controlli di integrità, i PLC più vecchi eseguono comandi indipendentemente dal fatto che vengano ricevuti da una fonte legittima. La ragione di ciò è che non ci sono checksum sui pacchetti di rete. È stato dimostrato che una serie di attacchi replay funziona contro un gran numero di PLC, il che consente all'attaccante di inviare comandi di esecuzione in remoto. Pertanto, lo sfruttamento dei PLC in remoto con strumenti open source costituisce una grave minaccia per i sistemi SCADA.

Durante il BlackHat USA nel 2011, Beresford ha presentato una demo live creata per le serie Siemens Simatic S7-300 e 1200. Gli exploit utilizzati durante la sua demo sono programmati in Ruby, reso compatibile con il Metasploit Framework.

Gli exploit remoti su ICS erano una parte essenziale del worm Stuxnet. Tuttavia, Beresford ha dimostrato come sia possibile ottenere l'accesso remoto a un PLC utilizzando la password hardcoded integrata nel software, e per certi versi rappresenta un passo avanti rispetto a quanto fatto in Stuxnet.

Ma succede solo con Siemens?

Meglio precisarlo: questo non è esclusivamente un problema di Siemens. Rockwell Automation ha anche sperimentato un buffer overflow su stack che potrebbe consentire l'accesso remoto al sistema iniettando codice arbitrario, secondo CVE-2016-0868 del National Vulnerability Database. La vulnerabilità è stata segnalata il 26 gennaio 2016 e riguardava il PLC MicroLogix 1100. Inoltre, ci sono molti altri exploit e scanner disponibili nel progetto Metasploit che possono essere utilizzati per eseguire comandi da remoto su diversi modelli di PLC.

Il computer di controllo può anche essere utilizzato come strumento di hacker principalmente a causa di vari exploit software, alcuni dei quali garantiscono il controllo della workstation di un sistema SCADA o ICS. Ciò consente all'attaccante di manipolare i dati inviati al PLC ed eseguire il pivoting all'interno della rete. Un exploit creato da James Fitts, collaboratore del Exploit Database, consente a un utente malintenzionato remoto di immettere codice arbitrario nel software di programmazione PLC di Fatek, WinProladder, come documentato CVE-2016-8377 del National Vulnerability Database.

Anche se l'hacker può attivare l'exploit in remoto, quest'ultimo richiede comunque l'interazione dell'utente, come una visita a una pagina Web dannosa o l'apertura di un file infetto, per sfruttarlo correttamente. L'exploit è un buffer overflow su stack disponibile in Ruby per l'importazione di Metasploit. Le applicazioni programmate in C sono spesso più vulnerabili agli overflow del buffer rispetto ad altri linguaggi di programmazione e ci sono molti pacchetti software basati su C in uso nei sistemi di controllo industriale. Ad esempio, l'iniezione di shellcode attraverso una vulnerabilità di buffer overflow può consentire l'accesso remoto al sistema o essere utilizzato per l'escalation dei privilegi.

Siamo spacciati?

La mancanza di sicurezza nei sistemi di controllo industriale è una delle principali preoccupazioni per la sicurezza. Un PLC è stato originariamente progettato per funzionare solo come operatore automatico in un sistema di controllo industriale e non per essere collegato a componenti esterni e raggiungibile da Internet. Tuttavia, l'evoluzione nella progettazione di ICS ha iniziato a esporre i PLC a Internet, che può essere mostrato attraverso ricerche utilizzando strumenti come Shodan. I PLC si basano su reti con protezione "air-gapped" e accesso fisico limitato come misura di sicurezza.

Le reti air-gapped hanno più volte dimostrato di essere un design imperfetto e non sono in alcun caso un legittimo argomento di sicurezza nei moderni ICS. Ciò è stato dimostrato dall'attacco di Stuxnet, che si è diffuso in oltre 115 paesi, infettando le infrastrutture critiche in tutto il mondo anche se la maggior parte dei sistemi di controllo sono stati progettati in isolamento. Questo cambiamento negli ambienti ICS e nelle infrastrutture critiche implica che i PLC sono esposti a una maggiore minaccia alla sicurezza rispetto a prima.

(Grazie al lavoro di Siv Hilde Houmb e Erik David Martin da cui è tratto questo articolo)

Nota importante

Lo scopo di questo articolo è unicamente didattico e informativo. Ogni azione non autorizzata verso qualunque sistema di controllo presente su una rete pubblica o privata è illegale! Le informazioni contenute in questo ed altri articoli hanno lo scopo di far com‌prendere quanto sia necessario migliorare i sistemi di difesa, e non di fornire strumenti per effettuarne l'attacco. Violare un sistema informatico è perseguibile penalmente e può causare gravi danni a cose e persone, in modo particolare se si parla di ICS. Tutti i test che vengono illustrati nei tutorials sono stati effettuati in laboratori isolati, sicuri, o autorizzati dal produttore.

Stay safe, stay free.