博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[工控安全]西门子S7-400 PLC固件逆向分析(一)
阅读量:4334 次
发布时间:2019-06-07

本文共 1887 字,大约阅读时间需要 6 分钟。

mailto:wangkai0351@126.com

 

【未经同意禁止转载】

 

 不算前言的前言:拖了这么久,才发现这个专题没有想象中的简单,学习的路径大致是Step7->S7comm->MC7 code->firmware,我会用尽量简短的语言把前两部分讲清楚,前两部分的知识或者经验扎实的话对整个PLC CPU的体系结构会产生全面而感性的认知。

  从上周五到这周三,困在西门子PLC固件逆向分析上已经有几天时间了,昨天我突然意识到可能是我现在的知识储备并能够支撑我的“雄心壮志”,因此我选择返回原点,再把和固件分析相关的知识如S7comm和MC7 code再仔细研究一遍,确保理解完全;再一个就是多给国外相关的研究者发送Email求助,目前为止发出了七封Email,只收到了两封回复,其中一封说关于这个的研究是confident,不能share,对此我表示理解;第二封邮件表达了愿意伸出援手的善意,我还在继续和他用蹩脚的英文进行交流。最后,昨天晚上走在路上,想到西门子公司PLC的产品线少说也有七八条,光是S7系列的就是迭代了十几年,主控芯片体系结构更是形形色色,包含了ASIC/FPGA,为此付出努力的员工成千上万,凭借自己几天的时间没头绪也不是什么着急的事儿,只能说慢慢来吧。

SFC(System Function Chart):

SFB(System Function block):

FB(Function Block):

DB(Data Block):

SDB(System Data Block):

0.1  固件的定义

IEEE的软件工程术语标准词典中对固件(firmware)的定义如下

The combination of a hardware device and computer instructions and data that reside as read-only software on that device.

简单翻译,硬件设备、计算机指令和作为只读软件驻留在设备上的数据的集合。最后一句话中又是数据又是软件让人感觉矛盾,我的理解是:不同的体系结构(如哈佛/冯诺依曼)对数据和软件的区分不同。

1.1  固件型号

本次实验中要分析的PLC 为Siemens S7-400系列的412-5H,具体的订货号为6ES7 412-5HK06-0AB0。固件下载网址为https://cache.industry.siemens.com/dl/files/550/109474550/att_832504/s1/4125hk06_v601.exe?download=true

 

1.2 CPU_HD

从这个文件的命名可以大致猜测,HD=hardware describe,是硬件描述的意思。从下图展示的文件内容也印证了这个猜测。在Step7中的firmware update对话框中,首先要手动选择并加载该文件,之后由Step7读取该文件内容,主要读取该固件对应的版本号(V601)和适用CPU的订货号(6ES7 412-5HK06-0AB0),当且仅当此时PLC CPU的订货号相符,才可以在线更新固件。CPU_HD文件后续还引导Step7在线固件更新程序寻找其他固件文件,分别有BG_ABL(包含PLC的订货号)、CPU_RK(写到ROM/flash内定义实时操作系统和主要固件功能)、CPU_KO(Lattice FPGA的比特流文件)和CPU_SG。

在Step7的在线更新固件功能中,固件文件的加载顺序是CPU_HD->CPU_ABL->CPU_RK->CPU_KO->CPU_SG。

CPU_HD文件全部内容

1.3 CPU_KO

从下图展示的文件起始内容可以看出,该文件是Lattice公司 FPGA芯片比特流配置文件,该FPGA工程的top名为f3k31.ncd。初步猜测FPGA的目的在于执行用户控制逻辑的MC7 code,这也可以理解,因为如果执行MC7 code和通信(S7/HTTP)由同一个CPU完成的话,势必会影响MC7 code的精确实时周期执行。对于Lattice FPGA的二进制比特流文件的逆向分析,目前网络上已经有了一些公开资料,尝试将比特流文件逆向成寄存器网表(netlist)。其次,从软/硬件角度分别寻找CPU和FPGA之间的接口(MC7 code中必定会调用SFC/SFB等操作系统函数)。

【未经同意禁止转载】

转载于:https://www.cnblogs.com/bianmu-dadan/p/7503314.html

你可能感兴趣的文章
Linux下修改mysql root密码
查看>>
zoj 3329 概率dp
查看>>
Tomcat工作原理
查看>>
spring IOC篇二:xml的核心逻辑处理(doLoadBeanDefinitions(inputSource, encodedResource.getResource()))...
查看>>
JavaScript原理学习
查看>>
一个简单遮罩弹窗效果
查看>>
jquery easyui 1.4.1 验证时tooltip 的位置调整
查看>>
老子《道德经》第四十一章
查看>>
Erlang(起个中文名:易浪)不能错过的盛宴
查看>>
iOS 使用UI控件的外观协议UIAppearance进行设置默认UI控件样式
查看>>
手机端wap站网页播放腾讯视频代码
查看>>
js笔记 - ajax中的get和post说明
查看>>
nginx+tomcat+redis实现会话共享
查看>>
C++简单文件操作
查看>>
七牛云的存储对象的地区改变之后
查看>>
修改AspNetSqlMembershipProvider的密码规则
查看>>
TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子...
查看>>
JQuery系列(8) - JQuery插件开发
查看>>
想当然是编程最大的坑,记更新删除过期cookie无效有感
查看>>
classmethod和staticmethod
查看>>