A Stealth Program Injection Attack against S7-300 PLCs(针对S7-300 PLC的隐形程序注入攻击)

本文揭示了西门子S7-300 PLC的潜在安全风险,通过重放攻击破坏其密码保护,从PLC窃取字节码并反编译为STL代码。研究了如何执行注入攻击并隐藏痕迹,实现隐形程序注入,同时提出了防御建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、摘要

  在本文中,我们展示了S7-300 PLC的脆弱性,并证明了利用PLC中运行的逻辑程序的执行过程是可行的。我们讨论了一种危及密码保护的PLC的重放攻击,然后展示了如何从目标检索字节码并将字节码反编译为STL源代码。之后,我们将介绍如何执行典型的注入攻击,这表明即使对代码进行非常微小的修改也足以伤害目标系统。最后,我们将重放攻击与注入方法相结合,以实现更强大的攻击——隐形程序注入攻击——它可以通过使用伪PLC来隐藏先前的修改,模拟真实受感染的设备。对于真实场景,我们使用S7-300 PLC在真实工业环境中实施了所有攻击。我们最终建议采取缓解措施来保护系统免受此类威胁。

二、介绍

  我们的重点是研究利用西门子S7-300可编程逻辑控制器的可能性,下图1显示了我们在本工作中执行的五种攻击场景的概述,包括:
(1) 危及可编程逻辑控制器的安全性。
(2) 从PLC中窃取控制逻辑程序。
(3) 将盗取的字节码反编译为STL源代码。
(4) 感染控制逻辑代码。
(5) 对ICS操作员隐藏正在进行的注入攻击。

攻击场景概述

图1

三、场景分析

(一)损害可编程逻辑控制器的安全措施

  西门子PLC通常有密码保护,以防止未经授权访问和篡改其设备中运行的逻辑程序。本文中,我们使用重放攻击,删除PLC设置的密码,而不改变目标PLC的当前配置。PLC上的典型重放攻击包括记录与TIA门户/PLC发送的特定请求/响应相关的数据包序列,然后在未经授权的情况下将捕获的/精心编制的数据包发送到目标。从技术上讲,当将密码写入S7-300 PLC时,它实际上嵌入SDB块中,SDB块由静态字节0x3042定义,精确地说是在块编号0000:0x30303030中,因此,在执行任何函数或命令之前,加载过程首先检查SDB0块(0x304230303030),以查看是否已设置密码。我们这里有两种情况:
  (1)PLC没有密码,我们可以通过在PLC和TIA门户之间发送之前捕获的包含设置新密码的加载过程序列,轻松设置新密码。
  (2)PLC已经有了一个密码,我们想用一个新的密码更新它,或者完全删除密码。在本文中,我们只对第二种情况感兴趣,即PLC已经有密码保护。
  对于PLC已经有密码保护的情况,块SDB0有一个密码,要更新/删除密码,在进行任何更改之前,用户应始终提供旧密码。当合法用户使用新密码更新PLC时,PLC无法用新密码直接覆盖SDB0。这意味着PLC首先需要清除此块以前的内容中,然后将新密码写入该块。这个有趣的发现触发了这样一个想法:在用新密码更新旧密码期间,我们可以使用捕获旧的加载过程序列来操纵密码的设置。我们使用Wireshark作为网络嗅探器记录TIA门户和PLC之间的整个密码修改过程,过滤生成的数据包,只保留负责删除块SDB0内容的数据包,忽略将新密码写入SDB0的数据包。这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值