一、概述
随着等保2.0的普及,工控安全大家也越来越重视,研究工控安全的小伙伴也越来越多。工控安全主要包括工控设备私有协议的安全分析,工控设备固件系统安全以及工控设备应用程序安全等。西门子PLC广泛应用于工业控制系统,本文主要描述西门子PLC系列S7-300的攻击过程与思路,并介绍演示一些适合小伙伴们学习的工控工具和框架。如有错误之处,欢迎指正,共同学习进步。
二、环境描述
前几天疫情待在家,PLC的设备拿不到,但是咱的任务不能落下呀,我在网上找了一个好用的S7模拟器,压缩包打开如下:

其实我们需要用到的是serverdemo.exe,也就是我们平时的PLC设备,我将构造代码和它进行连接并执行一些类似停启的操作。但是用它的clientdemo.exe也能相互连接,我给大家看一下连接图:

1、192.168.198.1为本机ip,用ipconfig查看填写(serverdemo.exe)
2、先点击start启动server,简单明了很直接哈(serverdemo.exe)
3、这是查看下面日志就显示server started(serverdemo.exe)
4、client上填写连接server的ip182.168.198.1(clientdemo.exe)
5、点击connect连接(clientdemo.exe)
6、这时继续查看server的日志,显示client已经added(serverdemo.exe)
如果大家还需要进一步细致的需求可以设置其他参数哈
S7工控模拟器下载地址:https://download.csdn.net/download/weixin_43977912/12201820

三、实验过程
(1)我们开启serverdemo.exe,设置好ip后

(2)接下来我们需要构造代码来连接模拟器,这里我用的是ISF(Industrial Exploitation Framework),ISF是一款基于python编写的类似metasploit的工控漏洞利用框架,这是工控前辈们的研究成果哈。下图大家可以大致看一下Exploit模块,包含了普遍性较高的工控协议的一些漏洞利用模块。
ISF下载地址:https://github.com/dark-lbp/isf

(3)我们选取s7_300_400_plc_control这个模块,是用来对S7-300/400 PLC 启停的脚本,ISF这个框架对工控初学者是十分友好的,它的模块可以在kali里面使用,如下图所示:

(4)在使用s7_300_400_plc_control这个模块之前我们看一下它是怎么写的,下图是它的核心代码,用来对S7-300/400 PLC 的启停,可能初学的小伙伴会十分好奇,这里面负责start和stop的一大串十六进制数字是什么意思。其实这些是遵循S7-Comm通讯协议,拥有固定的表达规范。这些https://www.freebuf.com/articles/ics-articles/188159.html这位工控大佬讲的很详细啦,不懂的小伙伴可以去恶补一下,我这里就不累述了。

(5)接着我们在kali里面设置s7_300_400_plc_control模块,发现只需要设置目标ip就行,我们填上server的ip(192.168.198.1),command选项已经默认是2(stop plc),我们就不需要改动了,然后我们直接run运行exploit,发现显示已经运行成功,如下图所示:

(6)这时我们查看我们的S7模拟器,发现已经显示STOP运行成功,证明非常顺利!

(7)在模拟器上运行成功后,几天后我回到实验室,决定对真正的S7-300进行一下基本测试,先正常开启PLC设备,指示灯是绿色,显示run

(8)在kali上运行的步骤和之前一样,只要把target设置成S7-300的ip就行,运行也成功,指示灯已经变成了橙色,并显示STOP。

(9)在kali与plc的通信过程中,我也抓取了一些S7-Comm包进行分析,发现完全符合正常的plc通信,当然小伙伴们除了停启还想做其他的操作,比如读取、上传等功能,都可以按照下图的功能码自己编写一些测试代码进行更深入的研究。


总结
演示到这里就结束啦,可以看到直接启停plc以及控制PLC输出是非常危险的,也是非常容易的。S7Comm协议主要用于S7-200,S7-300和S7-400 PLC之间的通信,该协议不像S7CommPlus的加密协议(S7-1500等)来防止重放攻击那样,不涉及任何反重放攻击机制,可以被攻击者轻易利用。
显然,西门子博途系列如S7-1200v4.0和S7-1500使用S7CommPlus协议更加安全,但是经典的S7-300等PLC设备真的没有任何安全防护措施吗?其实不然,从设备层面来讲,硬件组态界面的CPU模块均有protection选项卡可以选择保护级别来设置密码进行口令保护;从开发层面来讲,尽量采用背景数据块和多重背景的数据传递方式,且多采用间接寻址的编程方式;从用户层面来讲,在内存容量利用许可的条件下,不要删除被认为是无用的程序,或者利用EEPROM的反写入功能,及一些需要设置的内存保持功能。这样就能大大提高使用PLC设备的安全性啦。本文主要是给像我一样的工控初学者一些学习的建议与方向,希望大家一起努力进步,为我国的工控安全事业添砖加瓦。

如果想了解更多安全知识,或者有问题,都可以关注以下公众号,私信我:

工控安全| 西门子S7-300攻击分析相关推荐

  1. 西门子s7协议 android,工控协议 | 西门子S7协议学习分享

    原标题:工控协议 | 西门子S7协议学习分享 *本文作者:gongmo,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. 0×1前言 随着网络安全的发展,工控安全也越发的走进信息安全人员的工作 ...

  2. C# 机器视觉工控通讯------西门子PLC之S7协议上位机通讯

    C# 机器视觉工控通讯------西门子PLC之S7协议上位机通讯 使用步骤 1.引入库 项目添加应用HslCommunication.dll和代码代码如下(示例): dll官方支持网站> us ...

  3. 兴达易控CHNet-S7300MD西门子200/300/400PLCmpi转以太网处理器

    品牌:Endaic 型号:CHNet-S7300MD 产品简介 CHNetS7-S7300MD用于西门子S7-200/SMART S7-200/S7-300/S7-400/西门子数控840D.840D ...

  4. 改行了 写一篇 PLC 相关的 西门子 S7 300/400 控制器

    改行了,非常喜欢喜欢现在的工作,由于工作原因,要保密公司相关知识,所以分享一个简单点的内容. 测试单片机PLC的IP地址,并读取PLC相关地址的数据. 如下图,填入 PLC的IP地址: 10.23.7 ...

  5. 工控系统的全球安全现状:全球漏洞实例分析

    工控系统的全球安全现状:全球漏洞实例分析 一.摘要 ​ 运营技术(OT).网络和设备,即工业环境中使用的所有组件,在设计时并未考虑到安全性.效率和易用性是最重要的设计特征,然而,由于工业的数字化,越来 ...

  6. 工控2月补丁星期二:西门子、施耐德电气修复近50个漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 本周二,工业巨头西门子和施耐德电气公司共发布了15份安全公告,修复了近50个漏洞. 西门子 西门子发布了9份安全公告,修复了27个漏洞.从CVS ...

  7. 工控补丁星期二:西门子、施耐德电气修复40个漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 2022年,西门子和施耐德电气公司发布新一轮安全公告,共计修复了40个漏洞. 西门子 西门子发布五份安全公告,共修复14个漏洞.从CVSS评分来 ...

  8. 西门子、施耐德、三菱、RA:全球主要工控协议及端口解析

    写在前面 大家好,我是小智,智能制造之家号主~ 说到工业协议,前面我们已经原创了很多: 最全整理工业通讯上的领域各种总线+协议+规范+接口-数据采集与控制 最详细的工业网络通讯技术与协议总结解读(现场 ...

  9. BlackHat上的工控蠕虫病毒 绿盟科技工控研究员用SCL语言编写实现 录像让你亲眼看看...

    本文将展示的是一种新型的PLC蠕虫病毒,该病毒可以不借助上位PC机,仅通过PLC之间进行互相传播.该病毒的实现思路,适用于多个厂家的PLC设备,并且可以在一定规则范围内相互进行传播.本文采用西门子PL ...

  10. 工业互联网与工控安全

    一.工业背景 1.行业特性 传统信息系统旨在利用计算机.互联网技术实现数据处理与信息共享,而工业控制系统旨在利用计算机.互联网.微电子以及电气等技术,使工厂的生产和制造过程更加自动化.效率化.精确化, ...

最新文章

  1. 谷歌自锤Attention:纯注意力并没那么有用,Transformer组件很重要
  2. 英伟达_如何超越英伟达?
  3. 数学建模 分支限界算法求解整数规划原理以及编程实现
  4. 职场十个方法 让专业气质成为你的符号!
  5. 现代软件工程系列 学生读后感 梦断代码 软件难做
  6. 杜绝网上压根没测过就乱写之 《oracle mybatis 返回自增主键 》
  7. java 小数点保留_Java小数点位数保留
  8. 《Python CookBook2》 第一章 文本 - 测试一个对象是否是类字符串 字符串对齐
  9. 动作识别0-02:mmaction2(SlowFast)-官方数据训练测试-ucf101
  10. static taint IoT vul location
  11. 高盛为什么认为中国AI领域将超越美国?
  12. Swipe 移动端滑动插件使用详解
  13. java语言中线程最高优先数是_在 Java 中,高优先级的可运行线程会抢占低优先级线程。( )_学小易找答案...
  14. 从“领域变迁”的视角,来看钉钉的“退让”与“进取”
  15. 最完整的Windows系统安装教程(Win7、Win10、Win11)
  16. 设置 CSDN 皮肤的方法,修改成自己喜欢的皮肤
  17. AST反混淆实战-高级难度
  18. 玉米社:竞价推广优化怎么做?竞价推广优化技巧
  19. 鸿蒙系统大文件夹怎么调整大小,文件太大怎么变小
  20. 最实用的深度学习教程 Practical Deep Learning For Coders (Kaggle 冠军 Jeremy Howard 亲授)

热门文章

  1. tinyxml初体验
  2. python storm连接mysql_python ORM storm中的复合外键引用
  3. php实现小说字典功能_PHP实现微信小程序人脸识别刷脸登录功能
  4. java 新项目计划_项目计划 - KerryJava - 博客园
  5. Shopee2022届校园招聘提前批笔试
  6. 解决ubuntu 20.04 打不开设置的问题
  7. kettle在linux定时任务_linux环境下kettle部署(JDK安装配置,kettle安装配置,资源库配置,定时执行job)...
  8. Windows10视频文件服务器启动失败,Win10安全中心服务启动失败的解决方法
  9. 自动驾驶 2-3 软件架构 Software Architecture
  10. 神经网络- 吴恩达Andrew Ng CNN卷积神经网络 论文等资料汇总