赞
踩
论文作者:Junjiao Liu, Xiaodong Lin, Xin Chen,Hui Wen,Hong Li,Yan Hu,Jiawei Sun,Zhiqiang Shi and Limin Sun
论文连接:https://ieeexplore.ieee.org/document/9301471
Welkin Chan. 一种针对系统攻击的远程检测方案.
该论文的检测思想很完备,从主动与被动的两种角度出发构建检测方式。同时,该论文从工控流程本身出发,以两类攻击方式:恶意数据注入以及控制逻辑注入为主,将攻击场景设定成非法地址访问攻击、恶意数据注入攻击、篡改配置攻击、控制逻辑干扰攻击、控制程序替换攻击五种,按照这些攻击方式在工控过程中的向量分布构想检测方案。
首先通过对PLC代码分析获取有效地址规则、有效值范围规则、控制逻辑规则。
然后,被动检测通过对通信数据流分析的方式,对数据流按照协议规则进行分解,提取出源端口、源地址等要素,按照三种白名单依次分析是否有非法连接、操作非法地址、非法值。
主动检测针对恶意数据注入、密钥配置以及控制程序被篡改或替换等攻击,通过与PLC主动建立连接,按协议构建网络数据包,读取寄存器变量,在不影响PLC正常运作的情况下对PLC的存储空间进行映射,并将映射所获取的内存空间中的值与有效值呵控制逻辑白名单进行对比,以验证是否遭到注入、篡改或替换等攻击。
优点:
缺点:
随着针对工业控制系统(ICS)的攻击越来越多,工业控制系统(ICS)安全变得越来越重要。尽管过去已经提出了许多现成的工业网络入侵检测机制,但攻击者总能找到独特的伪装方法来绕过检测并破坏实际的工业控制过程。为了缓解这一缺陷,我们提出了一种新的检测工业过程控制攻击的方案,称为ShadowPLC。具体来说,该方案首先自动分析PLC的控制代码,然后提取PLC的关键参数,包括有效寄存器地址、有效值范围和控制逻辑规则,作为评估攻击的基础。通过与PLC的主动通信和对网络流量的被动监控,从不同角度实时检测攻击行为。我们以西门子S7-300系列PLC为例实现了一个原型系统。使用部署在天然气管网平台上的两台西门子S7-300 PLC对我们的方案进行了评估。实验表明,该方案能够在不影响PLC正常工作的情况下实时并准确地检测过程控制攻击。与其他四种具有代表性的检测模型相比,该方案具有更好的检测性能,检测准确率达97.3%。
工控系统环境由控制中心和工业厂点构成,连接控制中心和工业厂点的便是PLC。PLC是一种带有微处理器的数字逻辑控制器,这些微处理器通过编程定义控制逻辑,以维持物理过程的预期状态。PLC通过监测网络连接到控制中心。工程站将过程控制程序下载到PLC,然后PLC根据程序指示的控制逻辑自动控制工业生产。操作员站点通过从PLC请求工业现场的测量数据来监控工业过程。必要时,操作员可向PLC发送控制命令,对生产过程进行相应操作。在工业厂点,PLC连接到传感器和执行器,控制程序使用传感器数据作为输入并设置输出以激活执行器。
(PLC内部结构)
(PLC工作流程)
PLC的工作过程在循环扫描中执行。当PLC处于运行状态时,其运行周期可分为三个基本阶段:
国际电工委员会标准IEC 61131-3是PLC语言的国际标准,规定了控制逻辑编程中的语法、语义和显示,并对以前的编程语言进行了部分修改,形成了当前通用的五种语言:梯形图(LD),顺序功能图(SFC)、功能框图(FBD)、结构化文本(ST)和指令表(IL)。
(TIA在线检测PLC程序的运行状态)
几乎所有的PLC编程软件都提供了一种程序监控模式,允许远程直观地监控PLC程序的运行状态。如图3所示,TIA门户V13在线监控西门子S7-300 PLC的梯形图程序。它主动与PLC通信,以获取当前运行状态并以图形方式显示。图3中的梯形图逻辑可以转换为数学表达式(I0.0&M30.0)|(I0.1&┒DB20.DBX0.0)| M30.0 = Q0.0。此时,在PLC中,输入寄存器I0.0和I0.1、中间寄存器M30.0和M30.1、数据块DB20.DBX0.0(原文次数少写了个字母)和输出寄存器Q0.0的值分别为1,0,1,0,1,1。
将它们引入到数学逻辑运算中,我们可以得到与图3相同的结果。这是一种低干扰方法,不会影响PLC的正常运行。受此启发,我们的入侵检测方案从PLC代码中提取检测规则,并使用低干扰方法与PLC通信,映射其内存中的当前信息,对工业控制过程进行实时远程监控,并发现过程控制攻击行为。
对于攻击者来说,攻击ICS的最终目标是在不被高级IDS或工厂操作员检测到的情况下操作物理进程。在本节中,我们首先讨论正在考虑的对手模型,然后介绍五种典型的攻击场景。
在这项工作中,我们调查了近年来对PLC的网络攻击,将主要的攻击方法分为两类:1)虚假数据注入。2)控制逻辑注入。
基于上面讨论的对手模型,我们考虑了以下攻击场景,这可能会严重破坏工业控制过程:非法地址访问攻击、恶意数据注入攻击、配置篡改攻击、控制逻辑感染攻击和控制程序替换攻击。在本文中,我们只关注这五个工业过程控制攻击场景,并且不考虑物理攻击、固件攻击、侧信道攻击等,因为它们可能不太可行或有害,或者可以被现有的IDSs检测到。
(1) 非法地址访问攻击。在此攻击场景中,假设攻击者面对的是黑盒PLC,但对手有能力远程访问PLC的寄存器空间。为了有效地攻击PLC,对手将首先探测PLC的寄存器空间,以找到关键的攻击执行点。例如探索PLC使用的输入和输出接口、定时器、计数器、关键参数。这种攻击很容易发动,对手不需要知道实际的工业过程。
(2) 恶意数据注入攻击。假设对手已经知道PLC中的一些关键控制点,如寄存器Q0.0,以控制阀门的开启或关闭。常见的攻击方法是强制对寄存器地址执行写操作,覆盖寄存器的当前值。例如,在污水净化完成之前,阀门关闭。此时,寄存器Q0.0为“0”。对手强行将“1”注入Q0.0,覆盖了Q0.0的实际状态,导致阀门打开,污水泄漏。这种攻击简单而粗鲁,效果显著,但不易隐藏。
(3) 篡改配置攻击。假设对手对工业过程有所了解,他们通过恶意篡改关键程序配置信息间接破坏工业过程。例如,篡改计时器和计数器设置等,会发起释放攻击。
(4) 控制逻辑感染攻击。假设对手有能力窃取PLC的当前控制程序。它们通过感染控制程序干扰实际的工业过程。例如,将I/O寄存器中的值替换为内存中的某个可控值,以控制执行器的状态、插入/删除指令-s/梯级、替换方程式中的运算符、修改设定点、修改控制流行列式(影响控制逻辑条件分支决策的变量)等。
(5) 控制程序替换攻击。在此攻击场景中,对手不会感染原始PLC控制程序,而是植入恶意控制代码并尝试让PLC执行它们。由于这种攻击完全由对手控制,以摧毁他们想要完成的任何工业过程,因此具有很强的隐蔽性,具有破坏性,随时可以发动。典型的攻击,如数据执行攻击、碎片攻击和噪声填充攻击。
最先进的ICS(Industrial Control System) 的IDS本质上是周期性地监控ICS网络消息的内容,并验证它们是否发生了重大变化。由于它们在ICS网络中是恒定的或可预测的,因此这些IDS对非法地址访问攻击和恶意数据注入攻击具有一定的检测效果。然而,ICS网络流量缺乏对程序配置、控制逻辑运行状态等的实时监控,因此IDSs对控制逻辑感染攻击和控制程序替换攻击的检测效果一般较差。
控制逻辑是在控制实际工业过程的PLC中重复执行的程序。PLC代码携带最全面和完整的控制过程信息,如触点、线圈、指令等,它们以常量值或寄存器地址的形式作为变量,仅通过镜像ICS网络流量是无法获取这些信息的。而通过分析PLC代码,可以识别出IDS签名集主要有三种白名单规则:有效地址规则、有效值范围规则和控制逻辑规则。
1) 有效地址规则。PLC内部的有效地址空间是固定的,它与控制程序有关。在正常情况下,控制中心只访问一些有效地址,并且读取大多数操作,因为有效地址存储当前设备状态信息。由于缺乏对ICS的了解,许多攻击者使用暴力方法感染易受攻击的寄存器。如果存在超出有效地址范围的访问,则可以快速识别这种异常行为。
2) 有效的值范围规则。PLC代码包含重要的配置信息,一旦它们被篡改,被PLC控制的设备稳定状态就会被破坏。举个例子,设置点信息,如计时器和计数器,篡改它们可能会导致提前或延迟攻击;一些关键变量的数值范围,如离心式变频器驱动器的频率转换范围在807Hz和1210Hz之间;又如一些特殊指令也会影响数值范围,如“div”指令不能除以0,否则会导致设备故障。我们分析PLC代码并生成有效的值范围规则来监控PLC中的关键配置信息。
3) 控制逻辑规则。ICS通过PLC程序的控制逻辑指导工业生产过程。常用的控制方法有开关逻辑控制、模拟控制、运动控制、过程控制等。PLC中的各种寄存器变量(如输入寄存器、输出寄存器、中间寄存器、定时器、计数器等)相互配合以完成自动化控制目标。因此,我们解析PLC代码,提取寄存器变量之间的逻辑关系,然后生成控制逻辑规则。使用这些规则作为基线,检测恶意攻击,如PLC控制逻辑感染或程序替换。
如图4所示,我们以单向交通灯控制为例,演示如何使用PLC代码生成基于签名的检测规则。单向交通灯控制程序包含两个文件。一个文件是程序源代码,它是信号灯的自动控制程序。另一个文件是PLC变量表,它记录变量名称、实际PLC地址和数据类型。我们首先查询变量表并替换源代码中的变量名。
如图4的前两个块,即PLC Control Code的所示,例如“Run”<-> I0.0,“Stop”<-> I0.1和“Tag_1”<-> M0.0。
即PLC控制代码的右侧双引号包括一栏为“name”一栏,对应着地址。然后对代码指令进行词汇、语法和语义分析,生成有效地址规则,如有效地址I0.0、I0.1、M0.0、T2、T0;有效的值范围规则,如T2∈ [0,60s];和控制逻辑规则,如I0.0&¬I0.1→ M0.0,M0.0&¬T2→ T0。
因此,由PLC Control Code、PLC Variable Table组合,可以生成控制逻辑规则、有效值范围规则以及有效地址规则,一一对应图四中的三个板块。
注:这个PLC控制代码是西门子S7-400PLC代码的指令集,可关注公众号信安科研人,发送“西门子指令集”获取pdf版文件。
该论文提出了一种主动和被动相结合的入侵检测方案。如图5所示,该IDS包括两部分:被动检测引擎和主动检测引擎。被动检测引擎通过被动监控网络流量来检测异常行为,如非法地址操作和非法值冲突。主动检测引擎主动与PLC进行通信,以低中断和轮询映射PLC的存储空间,并实时监控工业控制过程中的异常情况。
攻击者很难绕过主动和被动相结合的入侵检测方案,并且很难隐藏自己。因为他们需要不断模拟工业生产现场的正常状态,符合控制逻辑,甚至需要篡改设备的固件或网络通信模块,而不是通过简单的ARP欺骗和重放数据包等传统手段欺骗IDS和控制中心。
被动检测引擎首先镜像(复制数据流)流经工业交换机的网络流量,通过深入解析工业控制协议,提取五元组信息(源IP、目的IP、源端口、目的端口、传输层协议)、操作地址、操作指令和具体值。然后检查上述信息是否符合有效地址白名单和有效值范围白名单,并检测非法连接、非法地址操作、非法值等异常行为。
如图6所示,网络信息列表的红色部分表示异常。计数器C1.0的有效范围在0到20之间,但网络中C1.0的值为23,因此报警为C1.0非法越界。在第2行数据里面,M30.0不在有效地址规则的白名单中,因此M30.0是非法地址。第3行数据里面, IP 192.168.20.4和端口35555是新连接,不在白名单中,因此将被认作是非法连接。
算法1显示了被动检测的过程:
第1行表示深度解析协议,并提取五个元组、地址、操作和值。
第2行是非法连接检测。当网络流量中出现未知IP、未知端口和未知通信时,会报警以非法链接。
第4行检测非法地址。当网络流量中存在PLC实际未使用的地址时,会报警以非法地址;
第6行表示检测到非法值范围。当值超出范围等时,会报警以非法值范围。
主动检测引擎主要检测程序控制逻辑的异常,防止重要的内存地址被注入恶意数据、密钥配置以及控制程序的被篡改或替换。控制逻辑规则通常由多个寄存器变量组成。这些变量一度可以被用来检测PLC的当前程序运行状态,由于PLC与控制中心之间的通信网络是静态的,工业现场状态监测采用请求-响应方式,无法满足同时监测相关的多寄存器变量的要求。
我们主动地与PLC建立连接,根据通信协议格式构建网络数据包,一次读取多个相关寄存器变量,并在不影响PLC正常运行的情况下映射PLC的存储空间。具体的说,主动检测模块首先主动连接到PLC并映射相应的内存空间,然后验证它们是否满足有效值范围白名单和控制逻辑白名单。
图7展示了控制逻辑攻击检测的例子DataItemMap<address,value> 表示被主动检测模块映射的内存空间。寄存器地址和参数值则是<>中的键值对(图7中的蓝色字体),即左边是寄存器地址,右边是寄存器的值。控制逻辑规则是检测基准,如第一行的DB20.DBX0.06&DB20.DBX0.0 | (DB20.DBX0.1&¬DB20.DBX0.0)|M32.0 →Q0.0。
如果任意一个结果,即DB20.DBX0.6 & DB20.DBX0.0或DB20.DBX0.1&¬DB20.DBX0.0或M32.0中任意一个结果为1,则Q0.0输出1,否则输出0。因此,1&1|(0&¬0)|0→ 1与控制逻辑规则1匹配,这意味着行为正常。同样,红色表示1&0 |(0&0)→ 0, 0 & (10 = 0) & ¬0 → 1和1&0 | (0&¬1) 0→ 1与控制逻辑规则不匹配规则2及规则3,它将警告PLC可能的控制逻辑攻击,并可定位可疑寄存器和代码段。
主动检测引擎以主动、低干扰和轮询的方式检测PLC是否被攻击,其核心部分如算法2所示。
首先,与PLC(1号线)建立通信连接;然后攻击检测(第2行至第16行);
最后,当有任务更改需求时,连接断开,任务被销毁(第17行,第18行)。
在攻击检测阶段,第一步是加载控制逻辑规则、有效值范围规则和有效地址规则(第4行),以获取寄存器地址和数据类型。其次,根据协议格式构建请求包并发送到PLC(第5行、第6行)。第7行和第8行表示接收响应数据并解析协议以提取寄存器变量值;最后,检查有效值范围和控制逻辑是否存在异常(第9行至第15行)。第16行表示请求频率的设置,以实现对PLC的低干扰。
阶段一: 基于PLC代码生成攻击检测规则
1、 在进行攻击检测前,需要提取检测规则,这就需要对PLC代码进行分析。一般来说,有两种方法获取PLC代码,一种是直接从官网等获取源代码,另一种是通过反编译机器代码。本工作使用第二种方法。
反编译的流程见图9这里需要知道STL是 statement list的缩写。如图9,按照MC7代码的特征值对原数据字节进行分块,并按照特征(见TABLE 1)对分的块进行语义分析,也就是按照MC7的结构进行数据分块。
反编译完成后,就到了检测规则的生成阶段。
1、首先对西门子S7-300/400的STL程序文本文件进行预处理,预处理主要包括代码段剪切和程序压缩。通过代码段切割,可以划分STL的主程序段;程序压缩可以消除不影响控制逻辑的不必要指令,减少程序自动分析和白名单规则提取的负担。
2、经过预处理后,我们对STL程序进行了自动分析。通过词法分析和语法分析,解决了操作类型、地址类型、比较条件等问题,推测了过程变量最可能的数据类型和取值范围,提取了有效地址白名单和有效取值范围白名单。通过语义分析,可以准确提取过程变量之间的相关性,提取控制逻辑白名单。阶段1的具体流程见下图
阶段二:
在此阶段,我们将介绍进程控制攻击检测的实现细节。在这项工作中,我们采用低干扰、主被动相结合的入侵检测方法,并且不影响PLC的正常运行。据我们所知,这是首次将主动和被动相结合应用于ICS攻击检测的工作。如图8所示,我们的过程控制攻击检测由两部分组成:被动检测引擎和主动检测引擎。在攻击检测之前,将有效值范围白名单、有效地址白名单和控制逻辑白名单植入检测引擎。两个检测引擎同时运行并协同工作,从不同角度检测ICS的攻击行为。
ICS协议的深度解析是ICS网络入侵检测的基础。S7通信(S7comm)是西门子S7-300/400系列PLC采用的专用通信协议。控制中心上传/下载PLC程序、控制命令的读/写请求以及PLC对应的响应均按照本协议执行。
在图8中,主动检测引擎和被动检测引擎相互协作,从不同角度检测异常行为。被动检测引擎首先镜像流经工业交换机的网络流量,然后深入解析S7comm协议,提取五个元组、操作、地址和值,最后匹配有效地址白名单和有效值范围白名单,检测非法链接、非法操作地址和非法值。
特别地,主动检测引擎通过低干扰、切片、轮询和主动分组发送来读取有效地址空间的当前值。主动检测引擎首先加载控制逻辑规则,并根据S7comm协议格式构造多地址读取数据包。然后,它与PLC通信以发送和接收数据。最后,验证控制逻辑是否异常。
几个IDS 对五种不同攻击检测的准确率结果如上图,这里不再赘述。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。