
本周我们将介绍第六个研讨会案例研究:火车站列车停靠安全监控系统上的重放攻击。我们将全面介绍攻击策略、技术和程序 (TTP),并将包含关于重放攻击效果的实际演示,整个攻击场景还包括在前几个案例研究中介绍的 FCI 攻击和固件攻击。如果您对其他案例研究感兴趣,请参考以下链接:
- 案例研究 1:虚假数据/命令注入攻击
- 案例研究 2:OT 网络 ARP 欺骗攻击
- 案例研究 3:Modbus 通道上的 DDoS 攻击
- 案例研究 4:HMI-PLC 控制链上的中间人攻击
- 案例研究 5:无人机固件攻击与防御
程序设计目的:本次网络攻击案例研究的目的是开发一个研讨会,旨在展示对铁路 OT 系统内车站列车停靠安全监控摄像头系统进行重放攻击的实际演示。在攻击场景中,重放攻击由 OT 系统内的一名经验丰富的网络攻击者执行,该攻击者利用了成功的摄像头固件攻击。具体来说,该攻击针对位于车站停靠区域的列车检测摄像头,该摄像头是列车监控系统的关键安全机制。该场景涉及红队攻击者将恶意固件植入列车检测摄像头,从而破坏其功能。然后,使用这个被入侵的摄像头来捕获视频片段,随后将其重放并发送回车站控制室。本次攻击的目标是破坏安全监控系统并欺骗车站操作员,从而突出 OT 系统中固有的漏洞以及网络攻击对关键基础设施的潜在影响。
攻击者向量:固件攻击,重放攻击
重要提示:所演示的攻击案例用于不同级别的 IT-OT 网络安全 ICS 课程的教育和培训,请勿将其应用于任何真实世界的系统。
演示视频:https://youtu.be/nTv7dcfjZts?si=h-ptx8jN6Gs1Q1JK
# Author: Yuancheng Liu
# Created: 2024/03/11
# Version: v_0.1.4
# Copyright: Copyright (c) 2024 LiuYuancheng
# License: MIT License
简介
本案例研究旨在创建一个简化的铁路列车检测监控系统仿真,该系统是火车站停靠辅助系统中的双重安全机制。主要目标是使用此平台来说明重放攻击对系统的潜在影响。该项目包括两个主要部分:
-
铁路 OT 系统车站停靠辅助系统:在我们的铁路仿真设置中,我们将设计一种机制,使车站操作员能够管理铁路停靠程序。该系统采用双重安全检查机制,同时使用列车位置/运动传感器和列车视觉检测摄像头。当任一传感器检测到有列车在运动中进入车站时,它会触发列车制动器以降低列车的速度。
-
OT 系统重放攻击演示:本节将演示一个场景,其中红队攻击者渗透到铁路系统 OT 网络中,然后通过对列车位置传感器信号控制链进行虚假数据注入 (FCI) 攻击来攻击停靠的双重安全检查机制,并通过摄像头视频重放攻击来破坏安全摄像头检测系统。
该演示利用了列车检测安全摄像头系统、虚假数据注入、摄像头固件攻击、摄像头视频重放攻击以及论文 PAtt: Physics-based Attestation of Control Systems 中概述的动态固件证明算法。
铁路 OT 系统车站停靠辅助系统简介
在我们的铁路 OT 系统中,每个车站的入口停靠区域都配备了两个不同的传感器:
-
一个位于铁路旁边的列车运动和位置检测传感器。
-
一个面向停靠区域的列车物体检测监控摄像头。
这两个传感器的任务都是检测列车进入车站时的运动。系统工作流程如下图所示:

当列车接近车站并进入停靠准备区时:
-
连接到车站控制 PLC 的位置和运动检测传感器会检测到列车的存在,从而提示 PLC 发送信号,指示列车到达车站的 HMI(在工作流程图中以蓝色信号部分表示)。
-
同时,列车物体检测摄像头会将经过列车的视频片段流式传输到专用的列车检测计算机。该计算机利用计算机视觉 (CV) 物体检测算法来识别列车并计算其速度,随后将此信息发送到 HMI(在绿色信号部分中进行了说明)。
-
HMI 处理来自 PLC 和列车检测计算机的数据,评估列车是否正在减速并相应地管理车站的运营。
OT 车站停靠监控系统重放攻击演示
攻击演示将侧重于破坏两种安全机制:列车运动检测传感器和列车物体检测摄像头。
对于连接到 PLC 的运动检测传感器,红队攻击者可以通过虚假数据注入攻击来操纵其传感器状态。
对于列车物体检测摄像头,黑客很难通过中间人攻击来修改视频流中的字节数据。相反,攻击者将在摄像头上实施固件攻击以建立“后门”。随后,将执行以下步骤来实施重放攻击:
-
发起固件攻击以将后门注入到摄像头中。
-
利用摄像头的后门来录制一段指示未检测到列车的视频。
-
在对 PLC-HMI 部分进行虚假数据注入攻击的同时,攻击者会将预先录制的视频传输到列车检测计算机,从而触发重放攻击。
通过结合对 PLC 的虚假数据注入攻击和对摄像头的重放攻击,红队攻击者可以破坏车站停靠辅助系统,使车站 HMI 和操作员无法检测到用于停靠的进站列车。
重放攻击的关键策略、技术和程序 (TTP)
监控摄像头重放攻击的策略、技术和程序 (TTP) 涉及攻击者可能采取的几个步骤,以拦截、操纵和重放来自 OT(运营技术)系统中监控摄像头的视频片段。
侦察
-
策略:识别 OT 系统内的目标监控摄像头。
-
技术:收集有关摄像头的制造商和型号、位置、网络配置以及任何现有安全措施的信息。
-
程序:红队攻击者将扫描网络服务以查找摄像头托管的 RTSP 视频服务器主机,根据摄像头管理页面查找摄像头的型号,然后从在线文档中查找一些摄像头 API。
拦截和分析
-
策略:监控监控摄像头与监控/录制系统之间的通信。
-
策略:捕获通过网络传输的视频片段和相关数据包。
-
程序:红队攻击者将分析摄像头连接数据包的详细信息,以查找连接的视频处理计算机,从而识别重放攻击目标。
重放
-
策略:将操纵后的视频片段重放到监控/录制系统或操作员。
-
策略:确保重放的片段与攻击者的目标一致,例如隐藏未经授权的访问、篡改或其他恶意活动。
-
程序:红队攻击将预先保存的虚假视频发送到视频处理计算机,以扰乱列车检测安全机制。
背景知识
在本节中,我们将介绍重放攻击和实时流协议的基本知识,该协议用于将摄像头视频发送到列车图像 CV 检测计算机。
重放攻击
在 OT 系统网络攻击中,重放攻击经常被用来针对使用复杂协议或处理大数据流的通信通道或控制链。这种方法不同于传统的攻击方法,如 FDI/FCI(虚假数据注入/虚假命令注入)或中间人 (MitM) 攻击。重放攻击不是直接篡改数据或命令,而是涉及拦截和重新传输先前捕获的数据包。在处理复杂协议或高容量数据流时,这种方法可能特别有效,它允许攻击者利用通信过程中的漏洞,而无需直接更改传输的信息。
重放攻击是一种网络攻击,攻击者捕获有效的网络传输,然后在以后重新传输它。主要目标是欺骗系统,使其接受数据的重新传输作为合法的传输。此外,重放攻击是危险的,因为它很难检测。而且,即使原始传输已加密,它也可能成功。
攻击者可以发起重放攻击来获得对系统或网络的未授权访问。此外,重放攻击可以通过重复的请求淹没系统来扰乱系统的正常运行。攻击者可以计划通过拦截和重新传输网络上的数据包来执行此攻击。此外,可以通过重放录制的音频或视频传输来成功执行重放攻击。
一个简单的重放图如下所示:

参考:https://www.baeldung.com/cs/replay-attacks
OT(运营技术)系统中对摄像头进行重放攻击涉及从摄像头捕获视频片段,更改或重放它,然后将其发送回以欺骗系统或其操作员。这种类型的攻击可能会产生各种影响,具体取决于摄像头在 OT 系统中的特定应用。
实时流协议
为了使重放攻击可以轻松实现,我们用于摄像头的视频协议是 RTSP(未加密)。
实时流协议 (RTSP) 是一种应用层网络协议,专为多路复用和数据包化 多媒体传输流(如交互式媒体、视频和音频)在合适的传输协议上进行传输而设计。RTSP 用于娱乐和通信系统中,以控制流媒体 服务器。RealNetworks 在 1996 年开发了 RTSP,旨在控制流媒体服务器中的娱乐和通信系统。RTSP 利用用户数据报协议 (UDP) 和实时传输协议 (RTP)。RTSP 是用于从 IP 摄像头流式传输视频数据的标准协议,并支持可靠的分段流式传输,使用户能够在仍在下载流时观看流。该协议还提供了广泛的自定义选项,以帮助您构建自己的流式传输应用程序并添加新功能。RTSP 的主要缺点是它没有被广泛用于通过 Internet 广播多媒体。
下面显示了一个 RTSP 在运行中的示例,其中视频和音频数据通过单独的基于 UDP 的 RTP 流进行传输:

该协议用于在端点之间建立和控制媒体会话。媒体服务器的客户端发出诸如 play、record 和 pause 等命令,以方便实时控制从服务器到客户端(视频点播)或从客户端到服务器的媒体流。
参考https://www.informit.com/articles/article.aspx?p=169578&seqNum=3
项目设计
在本节中,我们将介绍如何设计铁路 OT 系统车站停靠辅助系统以及重放攻击的详细步骤。
铁路 OT 系统车站停靠辅助系统的设计
列车安全监控摄像头是使用配备摄像头模块的 Raspberry Pi 3B+ 构建的。在物理设置中,在铁路车站的指定减速区之前,放置了两个热反射传感器。这些传感器连接到 PLC 以用于列车检测目的。在这些传感器旁边,安装了我们的监控摄像头以进一步检测接近的列车。摄像头捕获视频片段,然后将其传输到专用的视频处理计算机。我们的程序利用计算机视觉 (CV) 算法来执行运动和列车物体检测。
摄像头和传感器的位置如下图所示:

在我们的数字孪生真实世界模拟器中,我们忠实地复制了此配置。当列车通过传感器和摄像头检测区域时:
-
PLC 将来自传感器的电信号转换为数字格式,并将其传输到人机界面 (HMI)。HMI 显示列车检测结果,并根据检测时间和列车长度计算列车的速度
speed-val-1。 -
同时,在摄像头的视频处理计算机上运行的运动检测程序会触发列车物体检测算法以确认列车的通过。随后,它会计算列车的速度
speed-val-2。
如果两个速度值(speed-val-1 和 speed-val-2)中的任何一个超过指定的列车停靠速度,则车站控制 HMI 会发出信号以指示列车减速。
详细的操作场景如下图所示:

监控摄像头重放攻击的设计
正如前面铁路 OT 系统站台对接辅助系统工作流程的介绍中所述,存在两种安全机制:列车运动检测传感器和列车物体检测摄像头。对于连接到 PLC 的运动检测传感器,恶意行为者可以通过虚假数据注入攻击来改变其状态。然而,通过中间人攻击来操纵列车物体检测摄像头的视频流中的字节数据对于黑客来说是具有挑战性的。因此,攻击者选择对摄像头执行固件攻击,创建一个“后门”以方便重放攻击,步骤如下:
-
实施固件攻击,使摄像头能够运行带有后门的修改后的固件。
-
利用摄像头的后门录制一段没有列车通过的铁路视频。
-
在对 PLC-HMI 界面进行虚假数据注入攻击的同时,中断从摄像头传输到列车检测计算机的视频流。随后,重放上一步中预先录制的视频。
详细的攻击流程如下所示:

通过对 PLC 进行虚假数据注入攻击和对摄像头进行重放攻击,红队攻击者破坏了站台对接辅助系统,导致站台 HMI 和操作员无法检测到即将进站的列车。
程序设置
开发环境
Python 3.7.4, C
需要额外库
-
Python OpenCV (需要安装以进行运动检测和目标跟踪)
Raspberry PI install opencv:
sudo pip3 install opencv-contrib-python==3.4.3.18
sudo apt-get install libhdf5-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqt4-test
sudo apt-get install libqtgui4
sudo apt-get update
-
numpy (图像编码/解码需要)
pip install numpyHardware (Raspberry PI3B+ with Camera module)
硬件需求
Raspberry PI3B+ with Camera module. https://projects.raspberrypi.org/en/projects/getting-started-with-picamera

程序文件列表
| 程序文件 | 执行环境 | 描述 |
|---|---|---|
| cameraClient.py | python3.7 | 此模块将创建一个在 Raspberry PI 上运行的客户端程序,以捕获摄像头图像并将图像反馈到连接的摄像头服务器。 |
| cameraServer.py | python3.7 | 此模块将创建一个摄像头查看器服务器,通过 UDP 客户端连接到 |
| pattChecker.py | python3.7 | 此模块将创建一个摄像头固件 PATT 检查函数。 |
| pattClient.py | python3.7 | 此模块创建一个文件 PATT 检查客户端,并在服务器连接并向其发送地址列表时反馈 PATT 值。 |
| pattServer.py | python3.7 | 此模块将创建一个 PATT 文件检查器程序。它会将 PATT 字节检查列表发送到客户端,并比较反馈的 PATT 值。 |
| udpCom.py | python3.7 | 此模块将提供 UDP 客户端和服务器通信 API。 |
| udpComTest.py | python3.7 | 此模块将提供一个多线程测试用例程序,以使用端口 5005 测试 UDP 通信模块。 |
| firmwareSample | 测试模式下使用的固件示例文件。 | |
| my_video.h264 | 用于显示攻击情况的 H264 视频。 |
程序用法/执行
通信协议
系统使用 UDP 进行摄像头视频流控制和认证检查。
| 摄像头客户端 + 服务器和 PATT 检查器 + 验证器将通过具有不同端口的 UDP 相互通信。 |
|---|
| 摄像头客户端 [ UDP 服务器端口:5005] <= 图像请求 <= 摄像头服务器 [UDP 客户端] |
| 摄像头客户端 [ UDP 服务器端口:5005] => 编码图像 => 摄像头服务器 [UDP 客户端] |
| PATT 检查器 [ UDP 服务器端口:5006] <= 随机地址列表 <= PATT 验证器 [UDP 客户端] |
| PATT 检查器 [ UDP 服务器端口:5006] => cameraClient PATT 值 => PATT 验证器 [UDP 客户端] |
通信详细图如下所示:

运行程序
固件更新认证:在本节中,我们将创建一个固件检查器和一个验证器程序,以使用 PATT(基于物理的控制系统认证)算法进行固件认证。在 Raspberry PI 中运行的检查器将根据验证器发送的随机字节地址计算摄像头固件(摄像头客户端)的 PATT 哈希值。验证器会将固件的 PATT 值与其本地文件的计算结果进行比较,以给出认证结果。
在 Raspberry PI 上运行程序:
IOT IP camera program: python cameraClient.py
Attestation program checker: python pattClient.py
在 Host Computer 上运行程序:
IOT camera targets detection program: python cameraServer.py
Attestation program verifier: python pattServer.py
认证程序验证器将显示如下结果:

详细用法请查看 doc 文件夹中的 Usage menu.pdf。
参考
-
PATT 固件认证:https://www.usenix.org/system/files/raid2019-ghaeini.pdf
-
RTSP 视频协议:https://www.informit.com/articles/article.aspx?p=169578&seqNum=3
感谢阅读,如果您有任何问题和建议,请随时给我留言。如果您能提供一些意见并分享任何改进建议,我们将不胜感激,以便我们能够改进我们的工作~
上次编辑者:LiuYuancheng([email protected]),于 2024 年 3 月 26 日,如果您有任何问题,请随时给我留言。
No comment for this article.