ShadowPLCs: 详尽的一套针对PLC的IDS

工控安全 1年前 (2023) admin
313 0 0

[1] Liu J, Lin X, Chen X, et al. Shadowplcs: A novel scheme for remote detection of industrial process control attacks[J]. IEEE Transactions on Dependable and Secure Computing, 2020, 19(3): 2054-2069.

大家好,今天分享一篇来自中科院的文章ShadowPLCs。本文提出的是一款针对工业控制系统(ICS)中的可编程逻辑控制器(PLC)的入侵检测系统(IDS)。平常的IDS文章主要是提出一些算法或者检测框架,但这篇文章是从对PLC代码逆向开始,来一步步构建IDS

背景介绍

首先给大家介绍一下工业控制系统ICS,如图1所示

ShadowPLCs: 详尽的一套针对PLC的IDS

ICS由控制中心(Control Center)和工业站点(Industrial Site)组成,连接两者的便是PLC。控制中心中包含工程师站和操作员站:工程师在工程师站上编写PLC控制程序(control program)并上传给PLC;操作员则在操作员站上依据控制程序进行操作,例如启动、暂停、检测等等指令。PLC则在工业站点上根据控制程序接受传感器和控制执行器来对工业过程进行控制。

PLC内部的控制程序,如图二中示例,是三阶段的循环:输入采样阶段、控制程序执行阶段、输出更新阶段。

ShadowPLCs: 详尽的一套针对PLC的IDS

PLC程序语言由IEC61131-3标准定义,主要有五种:梯形图(LD)、顺序功能图 (SFC)、功能块图 (FBD)、结构化文本 (ST) 和指令表 (IL)。图2中的程序便是梯形图语言。

控制中心可以进行PLC监控,如图3中,是西门子PLC的编程软件TIAPLC的实时监控,绿色线条就是通路,蓝色线条是非通路,也就是当I0.1这个bit的输入为1是,后续的蓝色虚线才会变成绿色通路。

ShadowPLCs: 详尽的一套针对PLC的IDS

攻击模型

从攻击者的角度,攻击分为两类:(1)虚假数据注入与 (2) 控制逻辑注入
我觉得这里对应的是图1中控制中心的两个站点:(1)虚假数据注入,也就是恶意注入非法数据,对应的就是攻击图1中的操作员站,例如中间人攻击或者破解协议篡改通信报文,来注入虚假的控制设定值或者过程值;(2)控制逻辑注入,也就是篡改或替换目标 PLC 上运行的原始控制逻辑,对应的就是攻击图1中的工程师站
根据以上两种攻击可以对应有以下攻击场景:1)非法地址访问攻击:攻击者有能力访问PLC的寄存器空间,而不需要知道工业过程,通过探究PLC正在使用的输入输出接口、定时器、计数器、关键参数等,来寻找关键攻击点;2)恶意数据注入攻击:攻击者知道了一些控制关键点,针对这些来攻击,例如强制对寄存器地址的写覆盖,这类攻击不易隐藏;3)配置篡改攻击:攻击者知道了一些工业过程信息,通过修改配置,例如计时器、PID参数等,发起延时攻击;4)控制逻辑感染攻击:攻击者能窃取PLC控制程序,修改控制逻辑;5)控制程序替换攻击:攻击者通过植入恶意控制代码并让PLC执行它们,以替换原有的控制程序,这种攻击隐蔽性很强。
前两个应该是属于虚假数据注入,而后三种应该是属于控制逻辑注入。由于ICS是循环执行固定程序,所以所有的状态指令都是可预测的,那么虚假数据注入攻击是很容易被常规的IDS所发现。而由于ICS缺少对网络流量的实时监控等安全措施,所以对控制逻辑注入攻击无法防御。这里其实为什么不加一些认证手段来保护通信呢?据我调研,许多PLC还是无认证的,部分有简单的密码登入,但也有文章找到了某PLC的密码存储位置规律而进行恶意篡改的零日攻击。

ShadowPLCs方案

主要分为两个阶段:(1)规则生成和(2)攻击检测
(1)规则生成:可以通过分析PLC控制代码,来生成规则,IDS签名集主要有三类白名单规则:1)有效地址规则:特定控制程序下的有效地址空间是固定的,不了解控制程序的暴力攻击很容易访问到非法地址,而被IDS发现;2)有效取值范围规则:PLC代码中含义重要的配置信息,例如定时器计数器PID值,也包括一些指令,例如“div”指令不能除以0,这些配置可以生成对应的一套规则;3)控制逻辑规则:控制逻辑是通过PLC中的各种寄存器变量(如输入寄存器、输出寄存器、中间寄存器、定时器、计数器等)相互配合完成自动化控制的目标,所以可以提取寄存器变量之间的逻辑关系进而生成控制逻辑规则。

ShadowPLCs: 详尽的一套针对PLC的IDS

4便是一个控制红绿灯的例子,可以根据PLC代码生成基于签名的检测规则。

2)攻击检测,又分为1)被动检测,和2)主动检测

ShadowPLCs: 详尽的一套针对PLC的IDS

1)被动检测主要通过对网络交换机进行网络流量的镜像,然后通过工业协议的深度解析,以检查信息是否符合(1)中的规则,以及检查非法链接、非法地址操作、非法取值等异常行为。

ShadowPLCs: 详尽的一套针对PLC的IDS

6便展示了一个例子,中的C1.0的值23超出了范围,属于非法越界;中的M30.0属于非法地址;中的IP和端口都不对,属于非法链接。

2)主动检测,也就是主动与PLC连接,按照通信协议格式构造网络数据包,一次性读取多个关联的寄存器变量,验证其是否满足(1)中的规则。

ShadowPLCs: 详尽的一套针对PLC的IDS

7展示了一个例子,dataItemMap<address, value>主动检测模块映射的PLC内存空间,以键值对形式存储,然后去对比(1)中生成的规则。

实现

以西门子S7-300系列进行ShadowPLCs的实现,整体框架如图8所示

ShadowPLCs: 详尽的一套针对PLC的IDS

阶段一,也就是规则生成阶段,使用反汇编来获取PLC源代码,由于西门子系列会将IEC-61131-3中的高级语言,例如STL语言,编译成MC7代码,在编译成二进制,本文将MC7代码反编译成STL语言,如图9所示。再自动分析STL程序,生成有效地址、有效值范围、控制逻辑等白名单规则

ShadowPLCs: 详尽的一套针对PLC的IDS

阶段二,也就是攻击检测阶段,这里基于的是对西门子S7Comm通讯协议的深度解析,从而能够进行被动的流量分析,和主动的读取检测。

验证

使用燃气管网平台,如图10所示,燃气管道分为高压管道、中压管道和低压管道三部分,每段管道通过一对压力转换器和开关控制燃气的压降。多个传感器负责收集管道的温度、流量和压力等测量值。现场使用了两台西门子S7-300 PLC和一个控制中心

ShadowPLCs: 详尽的一套针对PLC的IDS

物理过程如下:打开气泵产生高压;依次打开所有阀门,建设从门站到小区的燃气管道输送通道;打开所有压力转换器,将燃气压力降低到居民可以使用的范围内。当管道损坏时(通过泄漏阀模拟实现),会发生气体泄漏。离损坏最近的两个阀门和气泵立即关闭。当管路修复时(也是通过泄漏阀模拟实现),打开气泵,压力逐渐恢复正常。依次打开关闭的阀门,使管道恢复连通。物理环境如图11所示。

ShadowPLCs: 详尽的一套针对PLC的IDS

随后收集源程序,编写MC7STL之间的映射关系数据库,并成功反编译,如表2所示。

ShadowPLCs: 详尽的一套针对PLC的IDS

一个PLC程序文件一般由多个梯级组成,一个梯级由一条或多条指令组成。ShadowPLCs指定一个梯级通常提取一个控制逻辑规则和多个有效地址和有效值范围规则。

ShadowPLCs: 详尽的一套针对PLC的IDS

最后进行5种攻击,并于其他IDS进行比较

ShadowPLCs: 详尽的一套针对PLC的IDS

总结

这篇文章的一大优点在于非常的全面,从对PLC的代码如何逆向,逆向完抽取出规则,再根据规则,制定了一套被动(检测流量)+主动(与PLC通讯)的IDS方案,虽然检测上并没有什么炫丽的算法,只是利用白名单规则对比,但分析非常的详细。在这里分享给大家,与君共勉。


原文始发于微信公众号(COMPASS Lab):ShadowPLCs: 详尽的一套针对PLC的IDS

版权声明:admin 发表于 2023年4月12日 下午4:18。
转载请注明:ShadowPLCs: 详尽的一套针对PLC的IDS | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...