协议网关是一种小型设备,可在机床,传感器,各种执行器和运行工厂,水坝,发电厂和工厂的计算机之间提供关键任务命令转换。这些网关类似于家用路由器:它们还具有连接到不同网络的多个接口,并且同样容易受到各种攻击。如果此类设备发生故障,则控制系统与机器之间的通信将丢失。运营商不会看到发生了什么事。实际上,他们甚至无法分辨机器,涡轮机或发电机是否在安全运行。即使出现明显问题,网关的故障也不会允许操作员发出启动或停止过程的命令。
类似的情况必须在2015年12月对乌克兰电网的攻击:攻击者可以通过将损坏的固件上载到变电站来访问电网控制中心并禁用协议网关。这阻止了公用事业工程师恢复服务的所有尝试,因为无法传输来自控制系统的用于闭合断路器的命令。
在SANS ICS(美国教育和研究组织SANS工业控制系统研究所的下属部门)和电源分析和信息交换中心(E-ISAC-一种将北美电力市场的参与者聚集在一起的结构)的事件报告中,网关固件已损坏。协议被称为“桥梁爆炸”。这非常准确地描述了发生的情况,因为攻击者破坏了关键链接-转换器,而转换器只是充当控制器和变电站之间的桥梁。
控制网络和执行网络之间的交互结构。来源(以下,除非另有说明):趋势科技
由于其位置,协议网关可以成为工业设施设备链中最薄弱的链接,并且攻击者可以出于两个重要原因来攻击此类设备:
- 网关不太可能最终由安全代理或注册系统监视的关键资产清单。因此,攻击不太可能被注意到。
- 翻译问题很难诊断,因此协议网关设计中的缺陷使高级攻击者可以进行非常隐蔽的攻击。
网关类型
根据运行模式,可以区分网关的两个系列:
- 实时网关(实时网关)在流量可用时转发流量-每个进入的数据包都将立即进行评估,转换和转发;代表:Nexcom NIO50,Schneider Link 150,Digi One IA;
- 数据站-使用接口映射表异步工作-无需等待读取请求以从连接的PLC接收数据,而是定期请求PLC的状态更新并将接收到的数据存储在内部缓存中以按需发布。
协议网关的第二个重要特征是它们支持和转换的协议类型。通过此属性,设备可以分为三类:
- , , , Modbus TCP Modbus RTU, — , ;
- , , , Modbus RTU → Profibus, — , ;
- , , , Modbus TCP → Profibus, — , .
在《迷失在翻译中:工业协议翻译错误》 研究中,我们研究了第一批网关的漏洞。为此,我们组装了一个由以下组件组成的测试台:
- 模糊器,为测试的网关生成传入流量-例如,当测试从Modbus TCP到Modbus RTU的转换时,模糊器生成Modbus TCP测试用例,
- 网关-研究设备,
- 模拟器-一种模拟接收站的设备,例如,实现从属设备的Modbus RTU的PLC-这是必要的,因为如果链中没有从属设备,则某些协议网关可能无法正常工作,
- 嗅探器,它收集有关传出流量(即广播协议)的信息,
- 传入和传出流量的分析器。
用于研究协议网关漏洞的测试台架框图
实际测试台架
为了建模主要的Modbus节点,我们使用了开源软件QmodMaster,并为从设备pyModSlave建模,使其适应我们的需求,例如从/ dev / ttyUSB0接收数据。
我们将Wireshark用于Modbus TCP,将IONinja用于Modbus RTU,以拦截流量。我们编写了特殊的解析器,将这两个程序的输出转换为解析器可以理解的通用语法。
我们在BooFuzz的基础上实现了模糊器,并添加了Boofuzz-modbus项目的一些模块,这些模块根据Apache许可进行分发。我们使模糊器可移植到各种ICS协议,并用它测试了几种Modbus实现。
以下是我们在检查各种协议网关时发现的一些攻击类型:
- 攻击协议翻译器
- 凭证的重用和配置的解密,
- 流量放大
- 特权升级。
协议翻译器攻击
实时网关将数据包从一种协议转换为另一种协议,将源协议标头替换为目标协议标头。来自不同供应商的网关以不同方式处理无效数据包。例如,其中一些接收到长度指定不正确的数据包时,而不是调整长度或丢弃它,而是照原样广播。此功能使您可以为Modbus TCP精心设计错误长度的数据包,以便在转换为Modbus RTU后仍保持正确。此外,如果将其读取为Modbus RTU数据包,则与Modbus TCP等效数据包相比,它将具有完全不同的含义。
攻击数据包:在Modbus TCP中,它包含一个读取寄存器的命令,但在Modbus RTU中,它已经是一个写入多个位单元的命令
使用Modbus TCP语义解析此数据包时,它将被解释为从ID = 3的块中读取输入寄存器(功能代码04)的命令。但是在Modbus RTU的语义上,它被解释为将多个位单元(功能代码15和0F)写入ID = 1的块中。
此漏洞很严重,因为协议网关无法正确处理数据包,因此完全无辜的读取请求会变成写入命令。高级攻击者可以利用此漏洞绕过专门的工业网络防火墙,该防火墙阻止来自非白名单IP地址的写入命令。
结果,仅一个命令就足以(例如)禁用传感器以监视发动机的性能和安全性(温度传感器和转速计),同时保持发动机的运转。如果工程师和操作人员没有注意到这一点,则发动机可能已经进入临界模式并发生故障,但没人知道这一点,因为温度计和转速计已停用。
重用凭证和解密配置
当与MGate Manager远程控制程序通信时,Moxa网关使用专有协议。当MGate Manager启动时,会提示工程师输入用户名和密码来访问协议网关,此后McGate Manager会自动重置配置,以便用户可以更改设置。当现场工程师完成协议网关的配置并单击“退出”按钮时,配置将被压缩,加密并上载到网关。
Moxa网关配置步骤
此过程中存在两个可以滥用的安全漏洞。
-重用
工程师登录时,会将密钥传递给MGate Manager,以对密码进行哈希处理。但是,在经过测试的固件中,该机制的实现方式是,黑客可以拦截工程师的加密密码以进入系统,然后使用该密码以管理员权限登录,即使不知道文本形式的密码也是如此。
-配置
解密通过网络传输的加密配置包含一个加密密钥,允许黑客转储和解密它。
加密的配置包含用于解密它的AES密钥。非常便于黑客入侵
对于解密,我们使用了从设备固件中提取的专有解密库。该配置包含配置文件,SQLite数据库和安全外壳(SSH)密钥。下面是我们自己的协议网关的解密配置示例,我们设法拦截了该配置。
Moxa MGate 5105解密的配置文件
扩大流量
因为数据站彼此异步广播协议,所以可以将多个写一位请求合并为一个请求,以更好地利用串行总线。例如,黑客可以调用函数15(写几位),在数据站它将被转换为1条记录,其中ID = 2,ID = 4的1条,ID = 5的1条,ID = 6的1条。因此,一个Modbus TCP条目会转换为四个Modbus RTU条目,从而在串行总线上造成轻微的拥塞。
一个写入单元的TCP命令变成了四个RTU命令,
请注意,这种放大不会导致拒绝服务(DoS),但过载的RS-485总线仍会导致异常行为。
特权升级
在MGate 5105-MB-EIP上,我们发现了特权升级漏洞CVE-2020-885,该漏洞允许非特权用户执行提升特权的命令。
问题的根源是在Ping实用程序的Web界面中缺少对用户输入的过滤。
Mgate Ping实用程序界面
借助最少的技术知识,无特权的用户可以使用简单的HTTP GET请求在root用户的上下文中启动Telnet守护程序,并使用root shell获得完全的远程访问。
我们的建议
在检查了各种工业协议网关的操作细节之后,我们为供应商,安装者或最终用户提出了许多建议。
- - . . .
- — , , . ICS- . Trend Micro — TXOne Networks, OT .
- , — /, . , , , MQTT.
- OT , .