[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所示
ICS由控制中心(Control Center)和工业站点(Industrial Site)组成,连接两者的便是PLC。控制中心中包含工程师站和操作员站:工程师在工程师站上编写PLC控制程序(control program)并上传给PLC;操作员则在操作员站上依据控制程序进行操作,例如启动、暂停、检测等等指令。PLC则在工业站点上根据控制程序接受传感器和控制执行器来对工业过程进行控制。
而PLC内部的控制程序,如图二中示例,是三阶段的循环:输入采样阶段、控制程序执行阶段、输出更新阶段。
PLC程序语言由IEC61131-3标准定义,主要有五种:梯形图(LD)、顺序功能图 (SFC)、功能块图 (FBD)、结构化文本 (ST) 和指令表 (IL)。图2中的程序便是梯形图语言。
控制中心可以进行PLC监控,如图3中,是西门子PLC的编程软件TIA对PLC的实时监控,绿色线条就是通路,蓝色线条是非通路,也就是当I0.1这个bit的输入为1是,后续的蓝色虚线才会变成绿色通路。
攻击模型
ShadowPLCs方案
图4便是一个控制红绿灯的例子,可以根据PLC代码生成基于签名的检测规则。
(2)攻击检测,又分为1)被动检测,和2)主动检测
1)被动检测主要通过对网络交换机进行网络流量的镜像,然后通过工业协议的深度解析,以检查信息是否符合(1)中的规则,以及检查非法链接、非法地址操作、非法取值等异常行为。
图6便展示了一个例子,①中的C1.0的值23超出了范围,属于非法越界;②中的M30.0属于非法地址;③中的IP和端口都不对,属于非法链接。
2)主动检测,也就是主动与PLC连接,按照通信协议格式构造网络数据包,一次性读取多个关联的寄存器变量,验证其是否满足(1)中的规则。
图7展示了一个例子,dataItemMap<address, value>主动检测模块映射的PLC内存空间,以键值对形式存储,然后去对比(1)中生成的规则。
实现
以西门子S7-300系列进行ShadowPLCs的实现,整体框架如图8所示
阶段一,也就是规则生成阶段,使用反汇编来获取PLC源代码,由于西门子系列会将IEC-61131-3中的高级语言,例如STL语言,编译成MC7代码,在编译成二进制,本文将MC7代码反编译成STL语言,如图9所示。再自动分析STL程序,生成有效地址、有效值范围、控制逻辑等白名单规则
阶段二,也就是攻击检测阶段,这里基于的是对西门子S7Comm通讯协议的深度解析,从而能够进行被动的流量分析,和主动的读取检测。
验证
使用燃气管网平台,如图10所示,燃气管道分为高压管道、中压管道和低压管道三部分,每段管道通过一对压力转换器和开关控制燃气的压降。多个传感器负责收集管道的温度、流量和压力等测量值。现场使用了两台西门子S7-300 PLC和一个控制中心
物理过程如下:打开气泵产生高压;依次打开所有阀门,建设从门站到小区的燃气管道输送通道;打开所有压力转换器,将燃气压力降低到居民可以使用的范围内。当管道损坏时(通过泄漏阀模拟实现),会发生气体泄漏。离损坏最近的两个阀门和气泵立即关闭。当管路修复时(也是通过泄漏阀模拟实现),打开气泵,压力逐渐恢复正常。依次打开关闭的阀门,使管道恢复连通。物理环境如图11所示。
随后收集源程序,编写MC7与STL之间的映射关系数据库,并成功反编译,如表2所示。
一个PLC程序文件一般由多个梯级组成,一个梯级由一条或多条指令组成。ShadowPLCs指定一个梯级通常提取一个控制逻辑规则和多个有效地址和有效值范围规则。
最后进行5种攻击,并于其他IDS进行比较
总结
这篇文章的一大优点在于非常的全面,从对PLC的代码如何逆向,逆向完抽取出规则,再根据规则,制定了一套被动(检测流量)+主动(与PLC通讯)的IDS方案,虽然检测上并没有什么炫丽的算法,只是利用白名单规则对比,但分析非常的详细。在这里分享给大家,与君共勉。
原文始发于微信公众号(COMPASS Lab):ShadowPLCs: 详尽的一套针对PLC的IDS