本文提出了一个可扩展的框架,用于在本地(或远程)自动部署多台虚拟机,以复现监控与数据采集(SCADA)网络。该框架包括多个模拟传感器和执行器的虚拟主机,并由人机界面(HMI)控制这些主机。 该框架包含一组自动化脚本,用于构建和部署数量可变的虚拟机,这些虚拟机预先配置为充当远程终端单元(RTU)、HMI 或数据历史记录器(Data Historian)。本工作包含符合标准的 IEC 60870-5-104(IEC104)和 OPC 统一架构(OPC-UA)实现,并具备支持 Modbus-TCP(Modbus)和 IEC61850 等其他协议的能力。
这使研究人员能够构建可配置为复现真实 SCADA 网络部署的测试平台。该框架基于开源库构建,并在自由软件基金会批准的许可证(GNU General Public License version 3)下发布。
数据包生成:第一个用例的目标是从大量设备生成网络流量,并具有高度的领域保真度,理想情况下流量中应包含过程信息。如前所述,从实时系统创建数据集并不总是可行的:这非常耗费人力,需要找到合适的分流点并获得工厂运营方的批准。这可能会受到工厂运营和策略的限制,因为干扰正在运行的网络可能导致不可预见的情况并泄露可识别信息。数据包生成可用于在将拟议的 SCADA 网络更改部署到实时系统之前对其进行测试。它还可以使用看似合法的数据包对设备进行压力测试。有趣的研究用例包括对尚未应用于 ICS 网络的不同网络范式(如 ICN 或 IPv6)进行实验。
攻击模拟:该用例考虑对 SCADA 系统进行复杂攻击的模拟,旨在对复制的 ICS 网络进行风险分析,同时不影响实时系统。红队可以使用该测试平台尝试攻破测试平台节点,同时分析后果并进行完整的数据包捕获分析。如果攻击成功,可以在部署额外对策的情况下重新执行该过程,从而在安全背景下测试新对策及其对现场流程的影响。红队演练的网络捕获可以发布为开放数据集,用于验证 IDS,其他研究人员可以复现并确认其结果。
代理基准测试:该用例的目标是支持基于代理的主机系统基准测试,由于供应商限制,这类测试通常不会在实时系统上执行。除非代理获得供应商的信任,否则通常被禁止部署,否则会有违约风险。通过使用能够准确代表真实工业现场的测试平台,可以在不造成干扰的情况下监控基于代理的软件的使用情况。只要测试平台可以自由修改、功能准确并且能够与物理硬件集成,就可以对代理进行基准测试。
扩展受限硬件:最后一个用例是扩展现有的物理测试平台,以包含现有硬件无法实现的通信协议和配置。这可能需要使用网络模拟器来扩展网络设备,以及使用过程模拟器来扩展过程控制设备。通过将虚拟硬件和物理硬件耦合在一起,可以创建复杂且高度逼真的测试平台,从而能够创建和分析结合多种协议和设备的大型部署。此用例可以与其他用例一起使用,以增强其效果。
克隆仓库并安装所需依赖:
git clone --recurse-submodules [email protected]:PMaynard/ICS-TestBed-Framework.git
sudo apt install openjdk-8-jdk maven
构建:
mvn clean package
mvn package -DskipTests # Skip tests.
启动一个 RTU:
java -jar node/target/node-1.0.jar
shell> rtu
shell> rtu-iec104port 2404
shell> rtu-listen 127.0.0.1
shell> run
启动一个 HMI:
java -jar node/target/node-1.0.jar
shell> hmi
shell> hmi-interval 1000
shell> remote-hosts 127.0.0.1
shell> run
默认配置将部署 1 个 HMI 和 4 个 RTU。HMI 将使用 IEC104 和 OPC-UA 集成各 RTU。各 RTU 配置为返回随机过程数据。
请使用最新版本的 Vagrant,而不是预构建/发行版包,因为这些脚本使用了最新版本 Vagrant 的功能。如果使用 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
这是一个可选的开发步骤。它会构建一个预先配置好用于运行测试平台节点的虚拟机镜像。如果你不想创建最新版本,默认选项是从 Vagrant 的镜像仓库获取一个与 master 分支保持同步的稳定镜像。
Packer 用于创建适用于 VirtualBox 和 Vagrant 的虚拟机镜像:
cd vagrant_image
packer build vagrant-node.json
vagrant box add testbed-node vagrant.box
警告 你至少需要 4GB 可用内存。
根据需要向 Vagrantfile 中添加任何附加信息,例如静态 IP 地址和内存使用情况。
默认 IP 设置为 10.50.50.*。.200 用于 HMI,101-105 用于 RTU。每台虚拟机默认分配的内存为 512MB。
vagrant up
vagrant ssh hmi
vagrant ssh rtu-1 # 1-5
vagrant halt
vagrant destroy
使用默认部署配置创建了一个示例数据集。PCAP 可以从此处下载。IEC104 MITM 是使用位于此处的 ettercap 插件执行的。
[主机-扫描 13:45]:使用 Nmap 全网扫描进行基本网络侦察。CMD:'nmap -sn 10.50.50.*'
[主机-扫描 13:47]:基本网络侦察,查找可访问的 [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} 服务器。CMD:'nmap 10.50.50.* -p 2404'
[主机-扫描 13:47]:对已识别的 [RTU]{acronym-label="RTU" acronym-form="plural+short"} 节点进行完整端口扫描。CMD: 'nmap 10.50.50.101-105 -A'
[主机-扫描 13:49]:使用 [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} 协议探测节点的主动 [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'
[主机-MITM 14:19]:对 RTU-1 和 HMI 执行 [MITM]{acronym-label="MITM" acronym-form="singular+short"}。CMD:'ettercap -i enp0s8 -T -M arp -P spoof_104 /10.50.50.101/ /10.50.50.150/'
数据集的数量明细如下所示:
请使用以下格式引用该框架:
@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"
}
数据集可以使用 DOI 引用:10.6084/m9.figshare.6133457.v1
完整论文可在以下网址找到:https://petermaynard.co.uk/publication/an-open-framework-for-deploying-experimental-scada-testbed-networks/
| 主机 | IP | IEC104 | OPC-UA | 其他 | 总计 |
|---|
| 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 |