# Hacking: Schneider Electric Building Automation

I sistemi ICS controllano i processi industriali in tutto il mondo. Tutto, dalle ferrovie, ai semafori, alle raffinerie di petrolio, agli edifici commerciali, è controllato da almeno un PLC connesso a un terminale operatore HMI o a un software di controllo SCADA. Alcune delle recenti preoccupazioni legate ad essi è la possibile violazione da parte di cyber criminali o di enti governativi. In entrambi i casi i risultati potrebbero essere devastanti (il disastro di Bhopal nello stabilimento di Union Carbide è costato oltre 30.000 vite). Nonostante ciò, questi sistemi sono insolitamente vulnerabili all'hacking e alle attività dannose.

In questo tutorial mostrerò come hackerare un sistema di controllo industriale di Schneider Electric, uno dei maggiori produttori al mondo di sistemi ICS e per la Buinding Automation. A causa della debole sicurezza integrata in fase di sviluppo, problema molto diffuso nei prodotti IIoT, alcuni di questi sistemi sono incredibilmente facili da violare e prenderne il controllo.

### Conosciamo meglio il nostro target

[Schneider Electric](https://www.se.com/ww/en/) è una società con sede a Parigi, leader mondiale nel settore del controllo industriale. Sono stati tra i pionieri in questo campo introducendo molti concetti innovativi poi replicati dai concorrenti, e hanno anche il merito di aver sviluppato il protocollo di comunicazione più utilizzato nei sistemi di controllo industriale: il [Modbus](https://it.wikipedia.org/wiki/Modbus).

Schneider Electric all'interno del proprio vasto catalogo conta anche una gamma di PLC dedicati all'automazione degli edifici.

![Un server della famiglia SmartStruxure](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rNPpuMAedv2MKWV2H%2F-M7rQEuRt-2iULv2ohvN%2Fimage.png?alt=media\&token=e571e9cb-e6d2-4d7f-a6ad-18d0f2e88f8f)

Uno dei loro prodotti, lo SmartStruxure Automation Server, viene utilizzato negli edifici commerciali per controllare e automatizzare i numerosi sistemi tra cui riscaldamento e raffreddamento, illuminazione, sicurezza, ecc. Nel 2016, il ricercatore indipendente Karn Ganeshen ha individuato una vulnerabilità 0-day, oggetto poi di una patch da parte di Schneider, che permetteva di entrare nel server con una shell e acquisire i privilegi di root.

Ma andiamo con ordine.

### Trovare i server Schneider Automation con Shodan

Possiamo trovare questi server di automazione su Shodan cercando:

`"schneider electric" automation`

![I risultati su Shodan](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rR6wRhoB_jYQsfd7v%2F-M7rRVDvdcXI15t3A1Tf%2Fimage.png?alt=media\&token=99cffe87-224b-422a-8c57-fa70561a9d30)

Come possiamo notare, compare un lungo elenco di dispositivi direttamente connessi a Internet, con il relativo indirizzo IP pubblico. Nel nostro caso userò un prodotto dimostrativo all'interno della rete locale.

## La vulnerabilità

La vulnerabilità in oggetto consente all'autore dell'attacco di connettersi al server di automazione con una shell SSH utilizzando le credenziali predefinite e di ottenere facilmente i privilegi di "root". Così facendo, l'attaccante non possiede solo la "scatola", ma l'intero edificio!

### Connessione al Building Automation Server

Innanzitutto, colleghiamoci al nostro server con una shell SSH. Userò Kali Linux, ma dal momento che questo hack è molto semplice può essere eseguito usando qualsiasi distribuzione, senza l'ausilio di strumenti di hacking particolari come ad es. Metasploit.

```
root@kali:~# ssh <IP_address> -l admin
```

Dopo che ci siamo connessi il server ci chiederà una password. Utilizziamo la password predefinita "**admin**".

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rR6wRhoB_jYQsfd7v%2F-M7rVqqA2wGM_2H6ZbuS%2Fimage.png?alt=media\&token=ca784c3e-2d80-4934-ad5f-07c1f4d86c1e)

A questo punto siamo all'interno dell'account amministratore di Automation Server. Possiamo digitare `help` per vedere quali comandi possiamo usare con questo account.

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rR6wRhoB_jYQsfd7v%2F-M7rW72KM4l4xoSugzsT%2Fimage.png?alt=media\&token=2a8f1840-eef6-4f0f-a1a4-06d022a4117e)

Ad esempio, digitiamo `release`. Il sistema risponde con le informazioni sulla versione del server. Inoltre, va notato che uno dei comandi è `reboot`, che potrebbe essere utile nel caso di un attacco DoS.

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rR6wRhoB_jYQsfd7v%2F-M7rWbCHzgYfNl2t55MD%2Fimage.png?alt=media\&token=42026215-05d1-4833-9417-5c4a7b1df2b1)

Possiamo inoltre vedere il tempo trascorso dall'ultimo avvio digitando il comando `uptime`. Questa informazione è sempre molto utile in fase di attacco perchè può indicare, normalmente, il tempo trascorso da quando il sistema ha subito una patch di aggiornamento.

```
admin:> uptime
```

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rWcfHRz711IYI3rF9%2F-M7rX821PpCtWGZFqjdh%2Fimage.png?alt=media\&token=15b983a2-d426-4c1d-888f-224f453dd0f7)

Uno dei punti deboli di questo sistema è che possiamo usare il comando Linux pipe "|" per inoltrare ulteriori comandi al server sottostante. Facendo un esempio pratico, possiamo vedere il file "passwd" sul server digitando:

```
admin:> uptime | cat /etc/passwd
```

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rWcfHRz711IYI3rF9%2F-M7rXtB992nrrAgqCUsW%2Fimage.png?alt=media\&token=0338aed7-00c2-4070-9b3c-0c9b5e16989e)

In questo modo abbiamo elencato tutti gli account presenti sul server. Naturalmente questo file contiene solo gli account e non le password, che invece si trovano nel file **/etc/shadow** accessibile unicamente con i diritti di **root**.

### Privilege escalation

La fase di privilege escalation, nella maggior parte dei casi in campo IT, richiede procedure a volte lunghe e complesse, indipendentemente che si stia attaccando una macchina Windows o Linux. Ma come ho detto, nel campo OT non sempre i livelli di sicurezza sono (in questo caso, "erano") adeguati. Possiamo ottenere il livello di root semplicemente digitando:

```
admin:> sudo -i
```

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rY7VTOMOYKCgbsMMo%2F-M7rYs10PhwWlYTVZ5_K%2Fimage.png?alt=media\&token=e4095735-5f99-44a8-9751-4d7e4d2cc2f0)

**Boom!** La configurazione predefinita di questo server di automazione dell'edificio non ha password per l'account "root", quindi è sufficiente premere Invio quando viene richiesta una password.

Come possiamo vedere, il prompt diventa verde e indica che siamo root!

Dato che ora abbiamo i privilegi di root siamo in grado di fare praticamente qualsiasi cosa. Digitiamo `cat /etc/shadow` per vedere se riusciamo a recuperare gli hash delle password nella cartella **/etc/shadow**.

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7rY7VTOMOYKCgbsMMo%2F-M7rZljwjPAzFAx9xeM0%2Fimage.png?alt=media\&token=d09ac0b2-1e6d-4abd-ac0b-8a9abc524c29)

Ed ecco che siamo riusciti a ottenere tutti gli account e i loro hash delle password! Se necessario, potremmo scoprirle attraverso un attacco brute-force come **hashcat** per recuperare le password in chiaro.

È probabile che il file di configurazione per Automation Server sia nella directory **/etc**. Entriamo in questa cartella ed elenchiamo tutti i file e le directory.

```bash
root:> cd /etc
root:> ls -l
```

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7r_t2Uvf41pMeWItqz%2F-M7r_yZKZZ1sqYcrk5EY%2Fimage.png?alt=media\&token=c1b9556f-c31e-4eea-a85d-c88b24f14096)

Se scorriamo questo elenco troviamo un file chiamato "whitelist.rules", che probabilmente contiene le regole per la connessione al server. Apriamolo.

```
root:> cat whitelist.rules
```

![](https://2848401822-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7qg_d2uMmQ2XyRcX0x%2F-M7r_t2Uvf41pMeWItqz%2F-M7raMELIWURJMTS5o5d%2Fimage.png?alt=media\&token=36f76aa1-b8ac-4804-aebb-aabb8aec7530)

L'amministratore di sistema non ha mai impostato "whitelist.rules" su questo server e, di conseguenza, chiunque può connettersi.

Infine, poiché abbiamo i privilegi di root possiamo aggiungere un nuovo utente che possano fare da backdoor. Prima di partire, posso aggiungermi agli utenti, concedermi i privilegi di root e aggiungermi a whitelist.rules, in modo che anche se l'amministratore dovesse correggere questa vulnerabilità avrò comunque un account e potrò accedere ancora a questo server.

```
root:> useradd cyberhood
```

Questo esempio risale alle vulnerabilità scoperte nel 2016 e riconosciute da Schneider Electric, che successivamente ha aggiornato i propri sistemi al fine di impedire un accesso così facile al server. Maggiori informazioni le puoi [trovare qui](https://download.schneider-electric.com/files?p_Doc_Ref=SEVD-2016-025-01).

**N.B.** Lo scopo di questa guida non è certo quello di screditare un produttore a discapito di un altro, ma vuole unicamente evidenziare quanto lavoro ci sia da fare sui **prodotti OT di tutti i principali produttori** al fine di renderli "**secure by design**", progettati e costruiti con criteri di sicurezza intrinseca.

## **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 comprendere 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.
