工控安全

一、专业术语

SCADA:Supervisory Control And Data Acquisition,即数据采集与监视控制系统,涉及到组态软件、数据传输链路(如:数传电台、GPRS等)。SCADA系统是以计算机为基础的DCS与电力自动化监控系统;它应用领域很广,可以应用于电力、冶金、石油、化工、燃气、铁路等领域的数据采集与监视控制以及过程控制等诸多领域。 在电力系统中,SCADA系统应用最为广泛,技术发展也最为成熟。它在远动系统中占重要地位,可以对现场的运行设备进行监视和控制,以实现数据采集、设备控制、测量、参数调节以及各类信号报警等各项功能,即我们所知的"四遥"功能.RTU(远程终端单元),FTU(馈线终端单元)是它的重要组成部分.在现今的变电站综合自动化建设中起了相当重要的作用。 ICS:工业控制系统 DCS:分布式控制系统/集散控制系统,是以微处理器为基础,采用控制功能分散、显示操作集中、兼顾分而自治和综合协调的设计原则的新一代仪表控制系统。 它采用控制分散、操作和管理集中的基本设计思想,采用多层分级、合作自治的结构形式。其主要特征是它的集中管理和分散控制。目前DCS在电力、冶金、石化等各行各业都获得了极其广泛的应用。 PCS:过程控制系统ESD:应急停车系统 PLC:Programmable Logic Controller,可编程序控制器。可编程逻辑控制器是种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。 RTU:远程终端控制系统 IED:智能监测单元HMI:人机界面(Human Machine Interface) MIS:管理信息系统(Management Information System) SIS:生产过程自动化监控和管理系统(Supervisory Information System) MES:制造执行管理系统 HMI:人机界面 上位机:可以直接发出操控命令的计算机,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等)。 下位机:可以直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。 IT:Information Technology,信息技术,用于检索或传输信息的硬件和软件。 OT:Operation Technology,操作技术,是工厂内的自动化控制系统操作专员为自动化控制系统提供支持,确保生产正常进行的专业技术。

二、协议和术语科普

工业控制网络的协议分类

  • 传统控制网络:CCS(Coordinated Control System ,协调控制系统)、DCS(Distributed Control System,分布式控制系统)等。
  • 现场总线:CAN、DeviceNet、CCL-Link、Profibus-DP等。
  • 工业以太网:EtherNet/IP、EtherCAT、HSE、Pfofinet、EPA、PowerLink、Modbus、Tenet、Wnet等。
  • 工业无线网:IEEE 802.11(a/b/g/n)、Rfieldbus、ZigBee等。

基于控制精度划分为:实时网络协议、非实时网络协议。

1.Modbus通讯协议

Modbus(Modicon's BUS的简称)是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。是全球第一个真正用于工业现场的总线协议。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。 Modbus是一种应用层消息传输协议,位于OSI模型的第7层。通过此协议,控制器之间、控制器经由网络(如以太网)和其他设备之间可以通信。

使用系统保留端口502访问Modbus,这也是TCP/IP协议唯一为工控系统协议保留的端口。

Modbus比其他通信协议使用的更广泛的主要原因有:

  • 公开发表并且无版权要求
  • 易于部署和维护
  • 对供应商来说,修改移动本地的比特或字节没有很多限制

Modbus允许多个 (大约240个) 设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和远程终端控制系统(RTU)。

Modbus协议

Modbus的协议栈仅仅是在传统ISO/OSI模型的基础上对数据链路层应用层做了定义。

modbus是一种主从协议,主设备的一方向从设备的一方下达指令,从设备的一方根据指令做出反应并回复主设备,主设备可以有多个从设备。

具体来说,工作人员的计算机可认为是master,而PLC之类的具体设备就是slave了。

每个设备有自己的“代号”,主设备通过“代号”来找到某一个对应的设备,当然也可以使用广播的方式,代号0即为广播。

modbus定义了自己的数据单元,功能码与具体的数据组成了PDU(协议数据单元 Protocol Data Unit),所谓的功能码也就是代表了主向从下达的指令是什么,这是很重要的一个知识,后面我们会具体讲功能码代指的功能,数据也就是这次指令要用到的“参数”。

只有PDU并不够,我们还需要知道从设备的“代号”才能知道数据往哪发,还要想办法保证数据的完整性、一致性和可靠性。所以在PDU的基础上我们还需要添加一个地址,和一个差错校验,这就构成了ADU(Application Data Unit)。

但要注意,由于三种Modbus在传输中存在差异,所以ADU,特别是校验部分会有不同。

ADU和PDU

功能码有效范围在1~255之间。其中大部分都是保留的,如128-255为异常响应保留。

Modbus TCP

1997年施耐德推出了基于TCP/IP的Modbus TCP。

可以通过wireshark对Modbus的流量包进行抓取进而观察Modbus TCP的数据格式

Transaction identifier : 事务标识符
Protocol identifier : 默认为0
Length : 数据的长度
Unit identifier : 从机地址,因为使用了TCP/IP所以用ip地址来标识从机,所以该位可忽视,或者做进一步分发
Function code : modbus的功能码
Data :具体的数据

Modbus 0x5a

DEF CON 25 - Ics Village - Arnaud Soullié - Fun With Modbus 0x5a Nothing New Still Relevant? 展示过的fun with 0x5a,这个0x5a的功能码是由施耐德自己实现的非标准的功能码,该功能码实现了Modbus标准未允许的功能。在defcon中大佬为我们展示了以下几项: - 获取项目和PLC信息 - 开启、停止PLC - 下载程序 - 更改程序

fun-with-modbus-0x5a video Fun with Modbus 0x5A

REF

2.Siemens S7协议

属于第7层(应用层)的协议,用于西门子设备之间进行交换数据,通过TSAP,可加载MPI,DP,以太网等不同物理结构总线或网络上,PLC一般可以通过封装好的通讯功能块实现。

S7以太网协议本身也是TCP/IP协议簇的一员,S7协议在OSI中的位置相当于将物理层和数据链路层之上的协议进行了定义,S7comm的协议栈修改程度更高,在应用层组织的数据经过COTP协议、TPKT协议的进一步处理后,最终通过TCP进行传输

更多关于S7协议详细介绍见这里 工控协议——S7通讯协议

2.1 S7comm协议

S7comm的结构主要分为三部分:

  • Header:主要是数据的描述性信息,包含长度信息,PDU参考和消息类型常量,最重要的是要表明PDU的类型
  • Parameter:参数,随着不同类型的PDU会有不同的参数
  • Data:数据,该数据是一个可选字段来携带数据,例如存储器值,块代码,固件数据等。

S7comm抓包

3.TPKT

Transport Service ontop of the TCP,简写:TPKT,通过TCP的传输服务。介于TCP和COTP之间。属于传输服务类的协议,它为上层的COTP和下层TCP进行了过渡。功能为在COTP和TCP之间建立桥梁,其内容包含了上层协议数据包的长度。一般与COTP一起发送,当作Header段。我们常用的RDP协议(remote desktop protocol,windows的远程桌面协议)也是基于TPKT的,TPKT的默认TCP端口为102(RDP为3389)

4.COTP

Connection-Oriented Transport Protocol,即面向连接的传输协议,它的传输必然是依赖于连接的,所以在传输数据前必然有类似TCP握手建立链接的操作。

其他工控协议

IEC 60870-5-104、EtherNet/IP、Tridium Niagara Fox、Crimson V3、OMRON FINS、PCWorx、ProConOs、MELSEC-Q。按需求自行查阅资料。

三、威胁建模

安全故障分析模型(物理侧)

现有的分析评价方法主要包括:故障树分析法、事件树分析法、可靠性框图法、马尔可夫分析法、GO-FLOW法、多层流模型、贝叶斯网络等。

故障树分析法(FAT)

Fault Tree Analysis

事件树分析法(ETA)

Event Tree Analysis

STAMP

System-Theoretic Accident Model and Process,系统理论模型和流程分析法

网络安全威胁模型(信息侧)

常见的威胁建模方法:

工控领域主流威胁模型:Kill Chain工控模型、ATT&CK工控模型。

1.Kill Chain工控模型

2.ATT&CK工控模型

四、威胁模式分析

主要分析要素:威胁目标对象、威胁向量、威胁影响。

五、安全防御

工业互联网安全实施框架

六、风险评估

七、工控安全漏洞案例分析

  • 震网攻击:通过改变PLC控制器运行命令,控制离心机异常运行,同时伪造离心机的运行数据,导致SCADA系统的故障诊断功能无法正常运行,最终损坏离心机。
  • BlackEnergy3:在通过控制断路器切断输电线路的同时,使用DoS攻击电力服务系统。

八、调查取证

九、攻击分析

因为工控圈信息相对封闭,所以目前公开信息最全的就是西门子(SIEMENS)公司的 PLC s7 - 300/400 启动攻击漏洞,自己实践学习这个工控协议漏洞算是相对容易的。

参考复现资料: - S7-300 启停实验 - 西门子S7通信过程及重放攻击分析 - 西门子S7comm协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析S7comm所含功能码以及UserData功能(path1) - 西门子S7comm协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析S7comm所含功能码以及UserData功能(path2) - 西门子S7comm协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析S7comm所含功能码以及UserData功能(path3) - 工控协议——S7通讯协议 - Industrial Exploitation Framework

十、工控安全分析

工控安全研究方向

  • 协议分析:工控私有协议分析,挖掘通信过程中的协议安全漏洞;
  • 固件分析:分析工控设备固件系统安全,挖掘设备系统的安全漏洞;
  • 应用分析:分析具体工控设备应用程序,包括各种语言的代码审计、二进制逆向、VxWorks固件逆向等;

固件分析思路

1、解压固件,获取文件系统;

2、查看系统中相关组件、服务配置及敏感文件(/etc/passwd、/usr/bin、/usr/sbin等);

3、逆向分析固件文件,查看是否存在版本漏洞;

4、查找固件应用目录;

5、分析固件应用服务等默认配置安全问题;

6、对固件应用进行反编译或者解密;

7、逆向分析固件应用安全问题;

8、结合实际设备进行综合性安全测试;

REF: - 【工控安全】从固件逆向看工控安全 - 以施耐德NOE 771固件为例进行固件逆向分析讲解 - 工控漏洞挖掘方法之固件逆向分析 - https://paper.seebug.org/613/

固件分析工具

  • binwalk
  • Ghrida
  • ubi_reader
  • yaffshiv
  • jefferson
  • Ida_pro
  • jd-gui
  • LuacGUI

机构工控安全事件分析报告

工控攻防演示设计

实际上目前公开的西门子PLC漏洞,最好用的还是s7-300的启停攻击。

Modbus的启动攻击/拒绝服务器也比较好复现。

REF