针对S7-300 PLC的隐形程序注入攻击

  • 一、摘要
  • 二、介绍
  • 三、场景分析
    • (一)损害可编程逻辑控制器的安全措施
    • (二)从PLC中窃取字节码
    • (三)将字节码反编译为STL代码
    • (四)感染控制逻辑代码
    • (五)先进的隐形注入攻击
      • (1)模拟真实的PLC
      • (2)将原始逻辑传输到TIA门户
  • 四、总结

一、摘要

  在本文中,我们展示了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的数据包。这样我们通过将更新新密码的相应数据包替换为删除块SDB0所需的数据包来创建自己的加载会话,并最终将我们精心编制的数据包序列作为新的加载过程推回到目标PLC。重放攻击完成后,我们发现PLC已更新,不再受密码保护。

(二)从PLC中窃取字节码

  在安全措施被破坏后,我们使用Python-snap7库与公开的PLC通信,并请求在目标设备中运行控制逻辑。使用Python-snap7库中的函数full_upload(type,block number)可以轻松完成此步骤。对于我们的示例应用程序,我们成功地将PLC中运行的程序上载到攻击者机器上,方法是将上述函数的参数替换为相应的块名称和编号,即我们分别设置参数为OB和1。

(三)将字节码反编译为STL代码

  我们需要识别在PLC中运行的用户程序的字节码集和相应的STL指令集,为了实现这一点,我们采用了离线除法,一个接一个地提取程序中使用的所有指令。我们打开TIA门户软件,并用10倍相同指令组成的特定代码对目标PLC进行编程。这里,我们使用了对程序没有影响的NOP 0指令。可以确定每个NOP 0指令在字节码中表示为OxF000。之后,我们将该代码下载到我们的PLC,并记录包含字节码的数据包,字节码表示10条NOP 0指令,如图2a所示,我们之后,我们在TIA门户软件中打开了正常程序(在我们的示例应用程序中使用),并在每个指令之前和之后插入NOP 0,然后将新程序下载到PLC。我们记录了包含这个新字节码的数据包,并标识了代表每个指令的每个十六进制字节,如图2b所示。在使用相应的十六进制字节提取所有指令后,我们创建了一个小型的成对映射数据库:将十六字节转换为相应的STL指令,并使用此映射数据库在线将原始机器字节码转换为其STL源代码。然而,尽管我们的映射数据库非常局限于程序中使用的指令,但这种方法可以开发为将所有十六进制字节映射到任何逻辑控制程序的STL指令。

图2

(四)感染控制逻辑代码

  成功反编译后,攻击者现在对PLC中运行的控制过程有足够的了解,并且破坏系统所需的一切就像用新指令替换一条或多条指令一样都很容易。下图3显示了Wireshark捕获的用户和攻击者字节码仅在四个字节内变化。值得一提的是,即使不知道PLC运行的程序,攻击者也可能跳过反编译过程,只是用全新的机器代码替换原始机器代码。如果没有安全措施来检查代码大小、周期时间等的变化,我们的方法可以实现,但另一方面,如果ICS操作员请求并比较受感染PLC中运行的在线代码与TIA门户上的离线代码,则可以轻松检测到这种攻击。

图3

(五)先进的隐形注入攻击

  为了隐藏正在进行的注入攻击,我们提出了一种新方法,我们方法的主要目标是阻止操作员从远程PLC上传实际受感染的代码,将其连接重定向到伪PLC,从而发送我们希望用户看到的未受感染的版本。这隐藏了我们正在进行的注入,并实现了完全的隐形攻击。

(1)模拟真实的PLC

  因为PN-DCP协议(数据链路层)存在漏洞,所以可以通过将ICS操作员连接到模拟真实远程设备的伪PLC(攻击者机器)上来受骗。PN-DCP协议主要用于发现设备或配置设备的名称、IP地址等。TIA门户通过广播称为“identify all”的特定数据包请求网络中的所有可访问设备,所有可用的S7 PLC将使用称为“identify ok”的特定响应数据包进行回复。每个PLC发送的响应数据包的有效载荷包含设备的所有详细信息,例如名称、IP地址、供应商名称、子网等。在这项工作中,我们的目标是阻止TIA门户到达远程PLC,并将其连接到伪PLC。具体做法如下:在旧会话期间,我们记录了TIA门户和远程PLC之间的“identify all”和“identify ok”数据包,然后修改了真实PLC的响应数据包,将PLC 192.168.0.1的IP地址替换为伪PLC 192.168.0.3的IP地址。如下图4。

图4   因此,TIA门户将我们的伪PLC注册为位于192.168.0.3的真实PLC。请注意,真正的和精心编制的“identify ok”数据包之间的唯一区别是IP地址。如果ICS操作员检查真实PLC和伪PLC之间的IP地址差异,则可能会发现异常。但在正常操作中,这种模拟可能不会被检测到,因为只有操作员明确检查Profinet接口的详细信息时,才会显示IP地址,而在正在进行的操作中,这是不需要的。

(2)将原始逻辑传输到TIA门户

  一旦ICS操作员怀疑远程PLC运行的逻辑程序与其应运行的逻辑程序不同,他将请求当前逻辑程序(在线程序),并将其与TIA门户上的逻辑程序(离线程序)进行比较,这使他能够检测到任何潜在的感染/修改。为了欺骗这次安全检查,我们记录了TIA门户和远程PLC之间的旧上传会话,然后在安全检查期间用原始代码而不是受感染的代码来修改被捕获的数据包。由于离线和在线程序完全匹配,这种隐形攻击可能会对相关ICS造成重大伤害,工程师不会检测到我们正在进行的注入攻击,除非他检查Profinet接口中连接设备的IP地址。

四、总结

  在本文中,我们提出了一种先进的隐形攻击方案,用于感染控制逻辑,包括漏洞攻击、反编译、注入和通过伪PLC方法隐藏感染。本文中的开发很有效,但一点也不复杂,这是因为S7-300 PLC仍然使用旧版本的S7协议,与现代S7 PLC(例如S7-1200/1500 PLC)使用的新版本(S7communication Plus)相比,该版本缺乏安全机制。因此,在我们未来的工作中,我们将研究我们的隐形攻击是否能够成功地针对现代S7 PLC。这将是一个更具挑战性的事实,因为S7comm plus支持改进安全性,实现反重放机制和完整性检查。

[1]Siemens. Modular PLC controllers SIMA TIC S7, 2014. Avail-
able at: http://www.automation.siemens.com/ mcms/programmable-
logic-controller/en/simatic-s7-controller.
[2]Electrical engineering Blog. The top most used PLC systems around the
world. Electrical installation & energy efficiency, May 2013. Available
at: http://engineering.electrical-equipment.org/electrical-distribution/the-
top-most-used-plc-systems-around-the-world.html.
[3]N. Falliere, Exploring Stuxnet’s PLC infection process, Sept. 2010.
[4]R. M. Lee, M. J. Assante, and T. Conway, "Analysis of the cy-
ber attack on the Ukrainian power grid," Technical report, SANS
E-ISAC, March 18 2016. Available at: https://ics.sans.org/media/E-
SAC_SANS_Ukraine_DUC_5. pdf
[5]G. liang, S. R. Weller, J. Zhao, F. Luo, and Z.Y . Dong, "The
2015 Ukraine blackout: Implications for false data injection at-
tacks," IEEE Transactions on Power Systems, 2016, doi: 10.1109/TP-
WRS.2016.2631891
[6]T. De Maizière, "Die Lage Der IT-Sicherheit in Deutschland 2014,"
The German Federal Office for Information Security,2014. Avaliable at:
https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/
Lageberichte/ Lagebericht2014.pdf
[7]J. Klick, S. Lau, D. Marzin, J. Malchow, and V . Roth, "Internet-facing
PLCs-a new back orifice," in Black Hat USA 2015, Las Vegas, USA,
2015.
[8]A. Spenneberg, M. Brüggemann, and H. Schwartke, "PLC-blaster: A
worm living solely in the PLC," in Black Hat Asia, Marina Bay Sands,
Singapore, 2016.
[9]N. Govil, A. Agrawal, N. O. Tippenhauer, "On Ladder Logic Bombs
in Industrial Control Systems," January, 2018, dio: 10.1007/978-3-319-
72817-9_8.
[10]A. Keliris, and M. Maniatakos, "ICSREF: A framework for automated
reverse engineering of industrial control systems binaries," in 26th
Annual Network and Distributed System Security Symposium, NDSS
2019.
[11]B. Lim, D. Chen, Y . An, Z. Kalbarczyk, and R. Iyer, "Attack induced
common-mode failures on plc-based safety system in a nuclear power
plant: Practical experience report," in 2017 IEEE 22nd Pacific Rim
International Symposium on Dependable Computing (PRDC), pages
205–210.
[12]K. Sushma, A. Nehal, Y . Hyunguk, and A. Irfan, "CLIK on PLCs!
Attacking Control Logic with Decompilation and Virtual PLC," 2019,
dio: 10.14722/bar.2019.23xxx.
[13]H. Hui, and K. Mclaughlin, "Investigating Current PLC Security Issues
Regarding Siemens S7 Communications and TIA Portal," 5th Interna-
tional Symposium for ICS & SCADA Cyber Security Research 2018
(ICS-CSR 2018), pages: 66-72, dio: 10.14236/ewic/ICS2018.8.
[14]D. Beresford, “Exploiting Siemens Simatic S7 PLCs,” Black Hat USA,
2011.
[15]M. Stouffer, V . Pillitteri, “Guide to industrial control systems (ics)
security,” NIST special publication, 2015.
[16]“Framework for improving critical infrastructure cybersecurity version
1.1,” National Institute of Standards and Technology, Tech. Rep., 2018,
Available at: https://doi.org/10.6028/NIST.CSWP .04162018.
[17]H. Wardak, S. Zhioua and A. Almulhem, "PLC access control: a
security analysis," 2016 World Congress on Industrial Control Sys-
tems Security (WCICSS), London, 2016, pp. 1-6, doi: 10.1109/WCI-
CSS.2016.7882935.

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

  1. 从入门到入土:[SEED-Lab]-SQL注入攻击|SQL Injection Attack Lab|详细说明|实验步骤|实验截图

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  2. 300英雄更新时显示服务器未知,《300英雄更新》,300英雄怎么手动更新 300英雄手动更新方法...

    APP版 300英雄怎么手动更新 300英雄手动更新方法方法一:去官网将最新补丁手动下载下来,更新界面右下角手动安装手动更新包.方法二:由于官网只能下载到最新的补丁,如果错过之前好几个版本的补丁的话, ...

  3. Command Injection命令注入攻击

    实验目的与要求 1.了解命令注入攻击攻击带来的危险性. 2.掌握命令注入攻击攻击的原理与方法 3.掌握防范攻击的方法 预备知识 在PHP中您可以使用下列5个函数来执行外部的应用程序或函数. (1) s ...

  4. 西门子s7 200smart与3台三菱e740变频器通讯程序

    西门子s7 200smart与3台三菱e740变频器通讯程序目的:西门子s7 200smart 控制3台三菱变频器通讯,通讯稳定,可靠 器件:西门子s7 200 smart的PLC,昆仑通态触摸屏(带 ...

  5. 【科软课程-信息安全】Lab12 SQL Injection Attack

    目录 1.0 概述 2.0 实验环境 3.0 实验任务 3.1 task1 熟悉SQL语句 3.2 task2 对SELECT语句的SQL注入攻击 3.3 task3 对UPDATE语句的SQL注入攻 ...

  6. s7 200 java_java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...

  7. nodejs mysql 注入_node.js sql 注入攻击防御方法 (sql Injection)

    sql 注入的原理和方法应该都知道了,这里记录一下node-mysql提供的现成的api https://github.com/felixge/node-mysql node-mysql 提供了接口 ...

  8. 作文未来的计算机医生300字,医生作文300字【3篇】

    无论是在学校还是在社会中,大家都经常接触到作文吧,作文是人们以书面形式表情达意的言语活动.你所见过的作文是什么样的呢?下面是小编帮大家整理的医生作文300字[3篇],希望能够帮助到大家. 医生作文30 ...

  9. 学计算机的心理300字,心理作文300字3篇

    心理作文300字3篇 在我们平凡的日常里,许多人都有过写作文的经历,对作文都不陌生吧,根据写作命题的特点,作文可以分为命题作文和非命题作文.还是对作文一筹莫展吗?以下是小编整理的心理作文300字3篇, ...

最新文章

  1. 浅谈Django的中间件与Python的装饰器
  2. windows下安装pygtk报g_assertion_message无法定位libglib-2.0-0.dll错误解决
  3. RocketMQ学习笔记(7)----RocketMQ的整体架构
  4. Google公开C++编码规范
  5. 深入C++面试题总结
  6. Centos7查看网络配置
  7. SQL 语句语法简介(一)
  8. C语言实现二维伊辛模型的蒙特卡罗方法模拟
  9. 《数据库实验》实验一:建立数据库和基本表结构
  10. 十七款PDF在线处理转换器,目前最全合集
  11. anaconda3怎么卸载干净,卸载anaconda3的方法是什么
  12. MATLAB中多行注释的三种方法
  13. Win10电脑只有一个C盘怎么分区分盘?
  14. mysql存储过程(通俗易懂)
  15. python jupter输入文字行_少儿Python编程_第十六讲:图形界面开发
  16. 在手机与计算机之间进行文件传输的方式,电脑和手机传输文件方法_电脑和手机如何传文件-win7之家...
  17. cocos2d-x创建新项目模板
  18. 三张图解释静态NAT、动态NAT、PAT
  19. 2022/12/1 组会
  20. Matlab相机标定可能遇到的报错

热门文章

  1. AtCoder Regular Contest 061--C - たくさんの数式 / Many Formulas(DFS)
  2. Kubernetes 是如何实现资源共享的
  3. 关于防重复提交出现 页面过期的问题
  4. 紫光云,做建筑产业的跃迁者
  5. APIC 基于postman实现自动化
  6. vue中引入高德js
  7. Lombok报错:You aren‘t using a compiler supported by lombok, so lombok will not work and has been disab
  8. SVG黑科技微信排版『左右视差滚动』模板代码
  9. “游戏发布 20 年之后,开发者喜提百万富翁”
  10. PPT2019无法使用mathtype的解决办法