PLC脆弱性评估及相应解决方案

Vulnerability analysis of S7 PLCs: Manipulating the security mechanism

文章目录

  • 一、摘要
  • 二、相关技术介绍
    • (一)隔离网络(air-gapped network)
    • (二)S7CommPlus会话
    • (三)S7CommPlus抗重放机制
      • (1)抗重放机制流程
      • (2)密钥生成算法
  • 三、脆弱性分析
    • (一)未经授权修改PLC状态
    • (二)通信DOS攻击
    • (三)会话劫持(ARP攻击)
    • (四)删除主程序块
  • 四、应对措施
    • (一)改变哈希算法的输入
    • (二)限制会话的生命周期


一、摘要

工业控制系统(ICS)广泛运用于关键基础设施中,而可编程逻辑控制器(PLC)是它的重要组件。PLC提供了网络和现实世界中的交互服务,因此一直是网络攻击的目标。本文对PLC组件中安全机制的有效性进行深入分析,特别是S7commplus通信协议,该协议是实现Siemens端点和PLC之间的通信。本文主要对S7协议通信过程抗重放机制,以及TIA Portal和PLC会话过程中存在的漏洞应对措施进行重点介绍。


二、相关技术介绍

(一)隔离网络(air-gapped network)

通过无法访问互联网的封闭网络保护重要资产,攻击者不能与隔离网络直接通过网络接触,传统攻击渗透手段都会失效,但是隔离网络并不代表绝对安全,虽然隔离了网络访问,但由于网络维护、数据交互等原因,无法阻断物理介质数据传输和物理设备的接入,如光盘、U盘等移动数据载体、键盘、鼠标等硬件设备、移动笔记本、临时热点等未按规定接入等,这些行为极有可能成为突破隔离网络的桥梁。

(二)S7CommPlus会话

PLC脆弱性评估及相应解决方案_第1张图片
(1)TIA Portal在网络内广播,寻找与之通信的组件
(2)PLC接受到广播的信息,向TIA回复收到
(3)TIA Portal与PLC通过TCP三次握手,实现连接
(4)TIA Portal与PLC交换COTP连接信息(COTP是面向连接的传输协议,在进行TCP连接之后,COTP会纯属CR和CC两个包,CR是 connection request,CC是connection confirm,之后COTP会发送DT包,也就是data数据包。)
(5)TIA Portal首先发送S7数据包
(6)PLC回复一个包含1字节和20字节的抗重放攻击的challenge
(7)TIA Portal回复一个包含抗重放字节和一个132字节长度数组的数据包,这是抗重放响应
(8)TIA Portal向PLC发送所请求的操作包,并对每个包进行20字节的完整性检查
(9)TCP会话终止

(三)S7CommPlus抗重放机制

(1)抗重放机制流程

TIA和PLC开启会话后,PLC会给TIA发送一个单字节和一个20字节抗重放的challenge,如下图所示:
4标识的就是单字节的位置,5标识的是一个20字节的数据。需要注意的是单字节和20字节所在的位置是固定的,不同的两次会话,challenge的内容不同,但位置是一致的。
PLC脆弱性评估及相应解决方案_第2张图片
TIA接收到后,会将位置4的单字节加上0x80计算,然后回复一个132字节长度的数组,既下图位置8所示。
PLC脆弱性评估及相应解决方案_第3张图片
PLC接收到TIA的answer后,进行密钥认证,完成通信的认证过程。

(2)密钥生成算法

PLC脆弱性评估及相应解决方案_第4张图片
1.TIA随机生成20字节的PreKey,使用类椭圆算法和公钥加密PreKey,作为Keying material 1。
2.TIA根据PreKey计算KDF,并由此生成CEK,CS,KEK。
3.TIA将challen和KDK结合,使用AES-CTR加密算法和KEK进行加密,结果作为Keying material 3。
4.TIA用CS和Keying material 3 进行哈希运算,得到结果TB-HASH。
5.TIA使用AES-ECB算法和CEK来加密TB-HASH并得到结果Keying material 2

三、脆弱性分析

(一)未经授权修改PLC状态

由于TIA Portal执行的所有操作都可以使用S7协议发送到PLC,通过修改PLC变量值,设置密码,以及修改PLC状态实现对PLC的重新编程,这可能会导致过程的中断。攻击者希望通过构造欺骗数据包来远程修改PLC状态,而欺骗数据包和正常的数据包相比,只有抗重放字节,完整性检验序列,序列号不同。此外,需要注意的是,即使在不同的S7会话中,所有抗重放字节都是基于相同的加密密钥和必要的字节生成。也就是说,只要攻击者能够识别序列号和PLC本身直接的关系,那么去修改编程逻辑的攻击是可行的。

(二)通信DOS攻击

这是通过向PLC发送一个设计好的数据包来建立并维护新的S7会话的DOS攻击。这将阻止TIA门户连接到PLC。因为如果已经存在一个现有的会话,那么S7-1211C将不允许启动一个新的会话。

与PLC在同一局域网上的主机可以通过通常的握手和交换COTP数据包来启动与PLC的TCP连接。通过使用包含适当的抗重放字节的数据包响应来自PLC的挑战包,然后是“S7-ACK”包,攻击者可以阻止来自TIA门户的真正连接。为了保持一个正常的会话活动,例如在进程执行时要求另一端等待,这种等待似乎是无限期的,任何一端连接都可以回复这样一个S7-ACK数据包。“S7-ack”数据包缺乏抗重放会完整性检查功能。在这种情况下,虽然PLC将继续运行预编程的逻辑,但它是不会停止的,也无法重新配置。手动重启可能会终止现有的会话,但是网络中受损的主机或设备可能会重新启动一个新的DOS会话。

(三)会话劫持(ARP攻击)

通过与传统的网络攻击手段结合,通过设计好数据包实现ARP劫持。
PLC脆弱性评估及相应解决方案_第5张图片

(四)删除主程序块

该漏洞通过删除PLC的主程序块,导致TIA Portal 提供错误或者不完成的PLC信息。而这一过程可通过重放TIA Portal中异常用例下捕获到的S7来实现。

四、应对措施

(一)改变哈希算法的输入

TIA和PLC会话过程会分配服务器序号,但这些序号并没有利用到,而且在不同的会话中可以重复使用。此外,前文介绍过PLC发送的20字节的challenge,而只有16位用于抗重放攻击,有4位是浪费掉的。可以考虑将服务器序号和challenge中的剩余4位输入哈希算法中,来生成加密密钥。

(二)限制会话的生命周期

在TIA Potral和PLC会话过程中,如果TIA没有接收到终止TCP连接的数据包或者是没有接收到PLC发送的S7数据包,那么TCP连接将会一直保持。由于PLC中用于通信的资源是有限的,可以通过耗尽PLC的通信资源来实现DOS攻击。具体解决办法就是更新PLC的配置,如果管理员没有特殊的配置,那么在给定时间段内没有接受到合法的S7包,将会断开连接。

你可能感兴趣的:(网络安全,安全)