
Distribuisce banchi di prova SCADA/ICS virtuali realistici con nodi IEC 60870-5-104 e OPC-UA, consentendo simulazioni di attacco, generazione di pacchetti legittimi ed esercitazioni di sicurezza red-team.
Viene proposto un framework scalabile per distribuire automaticamente, localmente (o in remoto), un certo numero di macchine virtuali che replicano una rete SCADA (Supervisory Control And Data Acquisition). Questo include più host virtuali che emulano sensori e attuatori, con un'interfaccia Human Machine Interface (HMI) che controlla gli host. Il framework presentato contiene una raccolta di script di automazione che costruiscono e distribuiscono un numero variabile di macchine virtuali, pre-configurate per agire come Remote Terminal Unit (RTU), HMI o Data Historian. Il lavoro presentato include un'implementazione conforme agli standard di IEC 60870-5-104 (IEC104) e OPC Unified Architecture (OPC-UA), con la capacità di supportare altri protocolli come Modbus-TCP (Modbus) e IEC61850.
Ciò consente ai ricercatori di costruire testbed che possono essere configurati per replicare distribuzioni reali di reti SCADA. Il framework si basa su librerie open source ed è rilasciato sotto la licenza approvata dalla Free Software Foundation, GNU General Public License versione 3.
Generazione di pacchetti: L'obiettivo del primo caso d'uso è generare traffico di rete da un gran numero di dispositivi, con un alto livello di fedeltà di dominio, dove idealmente le informazioni di processo sarebbero incluse nel traffico. Come evidenziato in precedenza, creare dataset da un sistema reale non è sempre possibile: richiede molto lavoro manuale, è necessario individuare un punto di intercettazione adatto e ottenere l'approvazione degli operatori dell'impianto. Ciò può essere limitato dall'esercizio dell'impianto e dalle sue policy, poiché interferire con una rete in funzione può portare a circostanze impreviste e alla fuga di informazioni identificative. La generazione di pacchetti può essere utilizzata per testare le modifiche proposte alla rete SCADA prima della distribuzione nel sistema reale. Può anche eseguire test di stress dei dispositivi utilizzando pacchetti dall'aspetto legittimo. Casi d'uso di ricerca interessanti includono la sperimentazione di diversi paradigmi di rete, come ICN o IPv6, che non sono stati ancora applicati alle reti ICS.
Simulazioni di attacco: Questo caso prende in considerazione la simulazione di attacchi complessi ai sistemi SCADA e mira a eseguire un'analisi del rischio di una rete ICS replicata, senza influire negativamente sul sistema reale. Il testbed può essere utilizzato dai red team per tentare di compromettere i nodi del testbed, analizzando al contempo le conseguenze e ottenendo un'analisi completa delle catture di pacchetti. In caso di successo, il processo può essere ripetuto con ulteriori contromisure in atto, consentendo di testare le nuove contromisure in un contesto di sicurezza e di valutare come possano influire sui processi del sito. Le catture di rete dell'esercitazione del red team possono essere pubblicate come dataset aperti per verificare gli IDS, riproducibili e confermabili da altri ricercatori.
Benchmarking degli agenti: L'obiettivo di questo caso d'uso è supportare il benchmarking dei sistemi basati su agenti host, che tipicamente non vengono eseguiti su sistemi reali a causa delle restrizioni dei fornitori. A meno che l'agente non sia fidato dai fornitori, spesso ne è vietata la distribuzione, con il rischio di violazione del contratto. Utilizzando un testbed che rappresenta accuratamente il sito industriale reale, è possibile monitorare l'uso del software basato su agente senza causare interruzioni. A condizione che il testbed sia liberamente modificabile, funzionalmente accurato e in grado di integrarsi con hardware fisico, sarebbe possibile eseguire un benchmark dell'agente.
Estensione di hardware limitato: Il caso finale consiste nell'estendere un testbed fisico esistente per includere protocolli di comunicazione e configurazioni non possibili con l'hardware esistente. Ciò potrebbe richiedere l'uso di emulatori di rete, per estendere le apparecchiature di rete, e simulatori di processo, per estendere le apparecchiature di controllo di processo. Accoppiando hardware virtuale e fisico, è possibile creare un testbed complesso e altamente realistico, che consente di creare e analizzare distribuzioni su larga scala che combinano più protocolli e dispositivi. Questo caso d'uso può essere utilizzato insieme agli altri per migliorarne i risultati.
Clonare il repository e installare le dipendenze richieste:
git clone --recurse-submodules [email protected]:PMaynard/ICS-TestBed-Framework.git
sudo apt install openjdk-8-jdk maven
Build:
mvn clean package
mvn package -DskipTests # Salta i test.
Avvio di una RTU:
java -jar node/target/node-1.0.jar
shell> rtu
shell> rtu-iec104port 2404
shell> rtu-listen 127.0.0.1
shell> run
Avvio di una HMI:
java -jar node/target/node-1.0.jar
shell> hmi
shell> hmi-interval 1000
shell> remote-hosts 127.0.0.1
shell> run
Il profilo di configurazione predefinito distribuirà 1 HMI e 4 RTU. La HMI integrerà le RTU utilizzando IEC104 e OPC-UA. Le RTU sono configurate per restituire dati di processo casuali.
Utilizzare l'ultima versione di Vagrant anziché i pacchetti precompilati/di distribuzione, poiché questi script utilizzano funzionalità delle versioni più recenti di Vagrant. Dovrebbe funzionare se si utilizza Ubuntu 18.04.1 LTS.
git clone https://github.com/mitchellh/vagrant.git /opt/vagrant
cd /opt/vagrant
bundle install
bundle --binstubs exec
ln -sf /opt/vagrant/exec/vagrant /usr/local/bin/vagrant
Questo è un passaggio di sviluppo facoltativo. Crea un'immagine di macchina virtuale, pre-configurata per eseguire i nodi del testbed. Se non si desidera creare l'ultima versione, l'opzione predefinita è ottenere un'immagine stabile dal repository di immagini di Vagrant che resta allineato al ramo master.
Packer viene utilizzato per creare un'immagine di macchina virtuale adatta a VirtualBox e Vagrant:
cd vagrant_image
packer build vagrant-node.json
vagrant box add testbed-node vagrant.box
ATTENZIONE Servono almeno 4GB di RAM libera.
Aggiornare il Vagrantfile con eventuali informazioni aggiuntive, come indirizzo IP statico e utilizzo di RAM.
Le impostazioni IP predefinite sono 10.50.50.*. .200 è usato per la HMI e 101-105 per le RTU. La RAM predefinita allocata per VM è 512MB.
vagrant up
vagrant ssh hmi
vagrant ssh rtu-1 # 1-5
vagrant halt
vagrant destroy
È stato creato un dataset di esempio, utilizzando la configurazione di distribuzione predefinita. I PCAP possono essere scaricati da qui. Il MITM IEC104 è stato eseguito utilizzando il plugin ettercap disponibile qui
[Host-SCAN 13:45]: Ricognizione di rete di base utilizzando una scansione di rete ampia con Nmap. CMD: 'nmap -sn 10.50.50.*'
[Host-SCAN 13:47]: Ricognizione di rete di base alla ricerca di server [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} accessibili. CMD: 'nmap 10.50.50.* -p 2404'
[Host-SCAN 13:47]: Scansione completa delle porte dei nodi [RTU]{acronym-label="RTU" acronym-form="plural+short"} identificati. CMD: 'nmap 10.50.50.101-105 -A'
[Host-SCAN 13:49]: Una scansione attiva [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} che sonda i nodi utilizzando il protocollo [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} [^1]. CMD: 'nmap -Pn -n -d --script iec-identify.nse --script-args='iec-identify.timeout=500' -p 2404 10.50.50.101-105'
[Host-MITM 14:19]: Esegue un [MITM]{acronym-label="MITM" acronym-form="singular+short"} su RTU-1 e sulla HMI. CMD: 'ettercap -i enp0s8 -T -M arp -P spoof_104 /10.50.50.101/ /10.50.50.150/'
Di seguito è mostrata una ripartizione numerica del dataset:
Si prega di citare questo framework utilizzando il seguente formato:
@conference{
author = "Peter Maynard and Kieran McLaughlin and Sakir Sezer",
title = "An Open Framework for Deploying Experimental SCADA Testbed Networks",
journal = "5th International Symposium for ICS & SCADA Cyber Security Research",
year = "2018"
}
Il dataset può essere citato utilizzando il DOI: 10.6084/m9.figshare.6133457.v1
L'articolo completo è disponibile all'indirizzo: https://petermaynard.co.uk/publication/an-open-framework-for-deploying-experimental-scada-testbed-networks/
| Host | IP | IEC104 | OPC-UA | Other | Totale |
|---|
| HMI | 10.50.50.150 | 26,158 | 0 | 17,688 | 43,846 |
| Historian | 10.50.50.151 | 0 | 14,695 | 14,927 | 29,622 |
| RTU-1 | 10.50.50.101 | 3,592 | 2,940 | 5,543 | 12,075 |
| RTU-2 | 10.50.50.102 | 3,665 | 2,941 | 5,876 | 12,482 |
| RTU-3 | 10.50.50.103 | 3,668 | 2,940 | 5,793 | 12,404 |
| RTU-4 | 10.50.50.104 | 3,690 | 2,940 | 5,771 | 12,404 |
| RTU-5 | 10.50.50.105 | 3,576 | 930 | 7,933 | 12,442 |
| MITM | 10.50.50.99 | 2,390 | 0 | 3,449 | 5,839 |
| SCAN | 10.50.50.3 | 15 | 0 | 28,351 | 28,366 |