工控安全
一、专业术语
SCADA:数据采集与监视控制系统 ICS:工业控制系统 DCS:分布式控制系统/集散控制系统 PCS:过程控制系统ESD:应急停车系统 PLC:可编程序控制器(Programmable Logic Controller) RTU:远程终端控制系统 IED:智能监测单元HMI:人机界面(Human Machine Interface) MIS:管理信息系统(Management Information System) SIS: 生产过程自动化监控和管理系统(Supervisory Information System) MES:制造执行管理系统 上位机:可以直接发出操控命令的计算机,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等)。 下位机:可以直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。
二、协议和术语科普
工业控制网络的协议分类
- 传统控制网络: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,特别是校验部分会有不同。
功能码有效范围在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
- 工控安全入门(一)—— Modbus协议
- ModbusTCP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析Modbus所含功能码以及模拟器
- Modbus协议及其攻防
- 使用Python攻击Modbus协议
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:数据,该数据是一个可选字段来携带数据,例如存储器值,块代码,固件数据等。
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
机构工控安全事件分析报告
工控攻防演示设计
实际上目前公开的西门子PLC漏洞,最好用的还是s7-300的启停攻击。
Modbus的启动攻击/拒绝服务器也比较好复现。
REF
- 工业互联网安全:架构与防御
- 工业控制网络安全技术与实践
- 工业互联网安全百问百答(科普向)
- 灯塔实验室
- 工控安全Wiki - Tide安全团队
- 工控安全入门系列 1-10
- 公众号:湘雪尘奕(视频挺多的,入门友好,也有后续深入的内容)
- 公众号SupCERT,工控协议标签
- 如何入门工控安全
- 基于智能学习与业务感知的工控安全监测体系建设
- 一种针对工控系统攻击的远程检测方案(工控系统安全)
- 工控蜜罐Conpot部署和入门指南