
Implanta ambientes de teste virtuais realistas de SCADA/ICS com nós IEC 60870-5-104 e OPC-UA, permitindo simulações de ataques, geração legítima de pacotes e exercícios de segurança de red-team.
É proposto um framework escalável para implantar automaticamente, localmente (ou remotamente), um número de máquinas virtuais que replicam uma rede SCADA (Supervisory Control And Data Acquisition). Isso inclui múltiplos hosts virtuais que emulam sensores e atuadores, com uma Interface Homem-Máquina (HMI) controlando os hosts. O framework apresentado contém uma coleção de scripts de automação que constroem e implantam um número variável de máquinas virtuais, pré-configuradas para atuar como Unidade Terminal Remota (RTU), HMI ou Historiador de Dados. O trabalho apresentado inclui uma implementação em conformidade com os padrões de IEC 60870-5-104 (IEC104) e OPC Unified Architecture (OPC-UA), com capacidade de suportar outros protocolos como Modbus-TCP (Modbus) e IEC61850.
Isso permite que pesquisadores construam bancadas de teste que podem ser configuradas para replicar implantações reais de redes SCADA. O framework é construído sobre bibliotecas de código aberto e é lançado sob a licença aprovada pela Free Software Foundation, GNU General Public License versão 3.
Geração de Pacotes: O objetivo do primeiro caso de uso é gerar tráfego de rede a partir de um grande número de dispositivos, com um alto nível de fidelidade de domínio, onde idealmente as informações do processo seriam incluídas no tráfego. Como destacado anteriormente, criar conjuntos de dados a partir de um sistema em produção nem sempre é possível: é um trabalho intensivo, é necessário localizar um ponto de captura adequado e obter aprovação dos operadores da planta. Isso pode ser restringido pela operação e pelas políticas da planta, pois a interferência em uma rede em funcionamento pode levar a circunstâncias imprevistas e vazar informações identificáveis. A geração de pacotes pode ser usada para testar alterações propostas na rede SCADA antes de serem implantadas no sistema em produção. Também pode realizar testes de estresse de dispositivos usando pacotes com aparência legítima. Casos de uso de pesquisa interessantes incluem a experimentação com diferentes paradigmas de rede, como ICN ou IPv6, que não foram aplicados a redes ICS.
Simulações de Ataque: Este caso considera a simulação de ataques complexos a sistemas SCADA e visa realizar análise de risco de uma rede ICS replicada, sem afetar adversamente o sistema em produção. A bancada de teste pode ser usada por red teams na tentativa de comprometer os nós da bancada, enquanto analisam as consequências e obtêm análise completa de captura de pacotes. Se forem bem-sucedidos, o processo pode ser repetido com contramedidas adicionais em vigor, permitindo testar as novas contramedidas no contexto da segurança e como isso pode afetar os processos do local. As capturas de rede do exercício da red team podem ser publicadas como conjuntos de dados abertos para verificação de IDS, que podem ser reproduzidos e ter os resultados confirmados por outros pesquisadores.
Benchmarking de Agentes: O objetivo deste caso de uso é apoiar a avaliação comparativa de sistemas baseados em agentes de host, que normalmente não são executados em sistemas em produção devido a restrições do fornecedor. A menos que o agente seja confiável pelos fornecedores, muitas vezes é proibido implantá-lo, com risco de violação de contrato. Ao usar uma bancada de teste que represente com precisão o local industrial real, é possível monitorar o uso do software baseado em agente sem causar interrupções. Desde que a bancada de teste seja livremente modificável, funcionalmente precisa e possa ser integrada a hardware físico, seria possível realizar uma avaliação comparativa do agente.
Extensão de Hardware Limitado: O último caso é estender uma bancada de teste física existente para incluir protocolos e configurações de comunicação que não eram possíveis com o hardware existente. Isso pode exigir o uso de emuladores de rede, para estender o equipamento de rede, e simuladores de processo, para estender o equipamento de controle de processo. Ao acoplar hardware virtual e físico, é possível criar uma bancada de teste complexa e altamente realista, permitindo que grandes implantações que combinam múltiplos protocolos e dispositivos sejam criadas e analisadas. Este caso de uso pode ser usado junto com os outros para aprimorar seus resultados.
Clone o repositório e instale as dependências necessárias:
git clone --recurse-submodules [email protected]:PMaynard/ICS-TestBed-Framework.git
sudo apt install openjdk-8-jdk maven
Compilar:
mvn clean package
mvn package -DskipTests # Skip tests.
Iniciar uma RTU:
java -jar node/target/node-1.0.jar
shell> rtu
shell> rtu-iec104port 2404
shell> rtu-listen 127.0.0.1
shell> run
Iniciar uma HMI:
java -jar node/target/node-1.0.jar
shell> hmi
shell> hmi-interval 1000
shell> remote-hosts 127.0.0.1
shell> run
O perfil de configuração padrão implantará 1 HMI e 4 RTUs. A HMI integrará as RTUs usando IEC104 e OPC-UA. As RTUs são configuradas para retornar dados de processo aleatórios.
Use a versão mais recente do Vagrant em vez dos pacotes pré-construídos/de distribuição, pois esses scripts usam recursos das versões mais recentes do Vagrant. Não deve haver problemas se estiver usando 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
Este é um passo opcional de desenvolvimento. Ele cria uma imagem de máquina virtual, pré-configurada para executar os nós da bancada de teste. Se você não quiser criar a versão mais recente, a opção padrão é obter uma imagem estável do repositório de imagens do Vagrant, que permanece em sincronia com o branch master.
Packer é usado para criar uma imagem de máquina virtual adequada para VirtualBox e Vagrant:
cd vagrant_image
packer build vagrant-node.json
vagrant box add testbed-node vagrant.box
AVISO Você precisará de pelo menos 4GB de RAM livre.
Atualize o Vagrantfile com qualquer informação adicional, como endereço IP estático e uso de RAM.
As configurações de IP padrão são 10.50.50.*. .200 é usado para HMI e 101-105 para RTUs. A RAM padrão alocada por VM é 512MB.
vagrant up
vagrant ssh hmi
vagrant ssh rtu-1 # 1-5
vagrant halt
vagrant destroy
Um conjunto de dados de exemplo foi criado usando a configuração de implantação padrão. Os PCAPs podem ser baixados aqui. O MITM IEC104 foi realizado usando o plugin do ettercap localizado aqui
[Host-SCAN 13:45]: Reconhecimento básico de rede usando uma varredura ampla da rede com Nmap. CMD: 'nmap -sn 10.50.50.*'
[Host-SCAN 13:47]: Reconhecimento básico de rede à procura de servidores [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} acessíveis. CMD: 'nmap 10.50.50.* -p 2404'
[Host-SCAN 13:47]: Varredura completa de portas dos nós [RTUs]{acronym-label="RTU" acronym-form="plural+short"} identificados. CMD: 'nmap 10.50.50.101-105 -A'
[Host-SCAN 13:49]: Uma varredura ativa [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} que sonda os nós usando o protocolo [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]: Executa um [MITM]{acronym-label="MITM" acronym-form="singular+short"} na RTU-1 e na HMI. CMD: 'ettercap -i enp0s8 -T -M arp -P spoof_104 /10.50.50.101/ /10.50.50.150/'
Uma discriminação numérica do conjunto de dados é mostrada abaixo:
Por favor, cite este framework usando o seguinte 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"
}
O conjunto de dados pode ser citado usando o DOI: 10.6084/m9.figshare.6133457.v1
O artigo completo pode ser encontrado em: https://petermaynard.co.uk/publication/an-open-framework-for-deploying-experimental-scada-testbed-networks/
| Host | IP | IEC104 | OPC-UA | Outros | Total |
|---|
| 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 |