当前位置:首页 > 网络黑客 > 正文内容

【安全研究】S7commPlus协议研究

访客4年前 (2021-04-02)网络黑客382

  01.概述

  最近入手了一个新版本西门子S7-1200PLC,固件版本为V4.2.3,通信协议为S7comm-Plus,已经全面支持通信过程的认证和数据加密。其实,早在2016年4月PLC蠕虫被提出之后,V4.0及其之后的固件版本已全面启用S7comm-Plus协议,安全性有较大的提升,简单粗暴的重放攻击再也不那么凑效了。2019年8月的blackhat大会上,以色列研究人员成功开发出模拟TIA Portal的伪工作站,可成功与新版本的西门子PLC(S7-1200、S7-1500)进行交互,并进行启/停、逻辑篡改等各种操作,这似乎意味着PLC蠕虫在高版本的PLC中同样可以实现。

  要实现对新版本PLC的攻击,研究S7comm-Plus协议、理解整个通信握手、认证加密过程是必经之路,国内绿盟、启明已通过对核心通信DLL文件进行逆向分析,实现了对PLC的启/停攻击。

  本文主要详述了作者通过对blackhat2017、2019的相关论文的研读,多次试验以及初步逆向、动态调试分析,形成的对S7comm-Plus协议的一些个人理解。文章仅供交流学习,不足之处望指正以促共同进步。

  02.环境配置

  整个试验研究的基本环境配置如下:Win7x64虚拟机、

  PLC:S7-1200, 6ES7 212-1BE40-0X0B

  Firmware: V4.2.3

  Software:TIA Portal V14

  S7Comm-Plus Wireshark dissector plugin:V0.0.8

  

  文章中将协议分为了P2-、P2、P3等三个版本,不同版本的TIA Portal软件与不同PLC组合,通信使用了不同的协议版本:

  

  按照此种分类方法,我的研究环境中使用的是P2-版本协议,但是通信数据中很明显是P3版本的协议:

  

  经与作者、西门子求证,新版本的S7-1200PLC均使用了P3版本协议。另外,配置了TIA Portal V13、V14、V14SP1、V15等4个版本进行了比较,得出以下基本结论:1、固件版本为V4.2及其以上的S7-1200PLC,必须使用V14及其以上的TIA Portal进行配置(V13只支持到V4.1版本固件);2、V13同时支持32位和64位操作系统,V14及其以上只支持64位系统了;3、V14不Win10系统;4、V14、V14SP1版本的核心通信DLL(OMSp_core_managed.dll)版本相同,V15的版本已更新,V13、V14、V15三个版本的TIA Portal对应的此DLL详细信息如下:

  

  因此,可根据目标PLC固件版本选择合适的TIA版本进行安装。

  03.通信过程分析

  3.1 握手过程

  S7Comm-plus协议的TCP/IP实现依赖于面向块的ISO传输服务,其OSI模型如下:

  

  继承了上一个版本中引入“session id”来防重放攻击,新版本的协议中更是引入了密钥保护、数据加密的机制,且对每一个带有操作功能的数据包均实行加密,由此更加有效应对重放攻击、中间人攻击、会话劫持等攻击。上位机(TIA)与PLC通信交互的基本过程如下图所示:

  

  1、Handshakeinitiation: 通信握手初始化,即CR/CC数据包部分;

  2、Challenge:TIA与PLC建立S7Comm-Plus Connection,PLC端生成20个字节随机数,反馈给TIA端;

  3、StructSecurityKey:TIA与PLC建立S7Comm-Plus Connection,TIA端根据随机数(Challenge)并结合公钥,生成认证数据;

  4、ACK:TIA与PLC建立S7Comm-PlusConnection,PLC端使用私钥对认证数据(StructSecurityKey)进行解密,认证成功后,回复TIA端OK,通信建立成功;

  5、Function:TIA端向PLC发送带有功能操作的数据(如PLC启/停);

  以上每一个步骤的数据交互中,均带有相同的“session id”,对通信过程进行抓包,具体数据如下所示:

  

  

  对通信建立过程(即S7Comm-Plus connection)中的认证过程进一步分析:

  

  1、TIA向PLC发送M1开启会话,使用了“CreateObject”功能码创建了“ClassServerSession”的对象:

  

  2、PLC响应TIA的请求,回复M2,M2包含 PLC固件版本和20个字节的随机数ServerSessionChallenge,同时包含了session id:

  

  3、TIA收到M2后,根据随机数(20个字节的随机数,在实际计算的过程中只选取了中间的16个字节,首位各2个未参与实际计算)并结合公钥,使用了复杂的加密算法(包括基本的异或XOR,Hash如SHA-256,MACs如HMAC-SHA-256、CBC-MAC,AES-CTR mode, AES-ECB mode、ECC)生成认证数据,响应PLC并回复M3,认证数据中需要关注的重点部分为“StructSecurityKey”的结构,该结构中长度为180字节的“SecurityKeyEncryptedKey”又为重中之重字段:

  

  

  4、PLC收到M3后,使用私钥对加密数据进行解密、认证,认证成功则向TIA回复M4数据包(上图中长度为86的数据包)。

  5、认证成功之后,TIA向PLC发送带有功能操作的数据包,TIA使用私有算法(使用了会话密钥)对数据包内容计算得到32个字节的IntergrityPart字段,PLC收到功能码数据包后,首先校验IntergrityPart字段,验证通过则执行相应功能码动作。

  

  从基本通信过程可以看出,M3数据包中的加密字段生成是与PLC成功建立通信的关键,随后计算IntergrityPart部分是成功操纵PLC的关键。数据加密的过程是一个复杂的密码学算法实践过程,从上图中可以看出,Wireshark插件已经对数据中的大部分字段进行了正确解释,但是少数字段,如“StructSecurityKey”中的“SecurityKeyEncryptedKey”字段未被完全识别,在此结合文章和实际数据包,对180字节的“SecurityKeyEncryptedKey”中的进行具体识别。

  Wireshark识别的结构和文章中对该字段的分解如下图所示:

  

  

  对实际数据进行进一步分解与对应:

  

  Magic byte:0xFEE1DEAD为magic,4个字节为固定不变,且为小端模式;

  Length:字段的长度,即为180;

  Symmetric key checksum:8个字节,即文章中提到的KDK ID Header;

  Public key checksum:8个字节,即文章中提到的Public key ID Header;

  此8个字节,对于所有相同型号和固件的S7-1200PLC计算出的结果均相同,因为西门子对同类同型号的PLC使用了相的Public key,而此处的checksum即是Public key计算SHA-256并取前8个字节。在实验中,通过动态调试可以获取S7-1200PLC的Public key如下图内容所示的40个字节:

  

  文章中亦指明了PLC的Public key信息存储于TIA的安装目录:Siemens/Automation/Portal V14/Data/Hwcn/Custom/Keys) ,但其文件为加密方式存放。

  EG1:20个字节;

  EG2:20个字节;

  通信过程中,TIA随机生成20字节作为PreKey,使用类椭圆曲线加密算法和PLC的Public key加密PreKey,等到内容即为EG1和EG2的内容;

  Kxv3:20个字节,此处的内容未被完全理解,即文章中标注的Nonce;

  IV:16个字节,AES Counter模式加密的初始数据;

  Encrypted Challenge:16个字节,此内容为使用AES-CTR mode对M2中的20个字节随机数中的16个字节,连同IV部分进行加密的结果,即:AES-CTR(Challenge,KEK,IV)

  Encrypted KDK:24个字节,使用AES-CTR(Challenge,KDK,IV)计算得到;

  Encrypted Checksum: 16个字节,使用AES-ECB(Checksum,ECK),其中,Checksum=TB-HASH(CS,EncryptedKDK,Encrypted Challenge)

  对各个加密数据字段进行一一对应和识别之后,回过头再来看整个密钥生成算法和交换过程,思路慢慢变得清晰稍许:

  

  

  梳理一下整个过程中的关键点:

  1、识别输入数据:最明显的输入数据是PLC Public key,这个是可以直接获取的,另外是PreKey,PreKey为TIA随机生成的20个字节随机数,可在动态调试中从内存中抓取;Challenge,可从M2数据中获取;

  2、各种复杂的密码算法:关于其中的类椭圆曲线加密算法,使用了一个固定的40个字节key,代表了160位的椭圆曲线点,椭圆曲线的基点G硬编码于OMSp_core_managed.dll文件中,动态调试过程中亦可从内存抓取,S7-1500和S7-1200的分别G如下所示:

  

  

  04.总结

  基于对西门子最新的S7Comm-Plus通信协议的初步分析,整个过程使用了非常复杂的认证加密手段,想要破解和绕过并非一件简单的事情。但是,由于通信过程中认证是单方面的,即TIA对PLC进行了认证,而PLC未对TIA进行认证,因此可以伪造TIA与PLC建立通信;另外,相类型、固件版本的PLC使用了相同的private-public密钥对,则意味着完成对一个S7-1200的成功攻击,即实现了对所有S7-1200的攻击。

  虽然通信过程中的认证加密异常复杂,文章中已经实现了对新版本S7-1500PLC的攻击,攻击思路总结如下:

  1、通过动态调试抓取加密认证所需要的输入数据,如TIA产生的随机数和M2返回的Challenge;

  2、定位到相应的加密函数;

  3、使用加密函数对输入数据进行计算,得到正确的数据包字段,对字段进行组合成完整数据包发往PLC校验。(此处有两种思路:① 文章中指出使用Python的Ctypes模块包裹核心通信DLL:OMSp_core_managed.dll,构造正确的输入参数,实现整个加密认证过程;② 对加密过程进行动态调试,厘清加密认证过程,定位相关功能函数,同时配合逆向分析将功能函数抠取,构造函数的输入参数,完成整个加密认证过程。)

  【转载声明】

  本文属于博智安全非攻研究院原创技术文章,已在安全客发表(转载请注明原始出处和作者。

  【安全研究】S7commPlus协议研究之动态调试

  网络黑客开始看上机器人?机器人被入侵会怎么样?

  超100个漏洞将3万门禁暴露给黑客

  马杜罗:委内瑞拉电力系统再遭攻击 再次大停电

  Moxa:工业互联网时代的网络安全

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:https://therlest.com/107370.html

分享给朋友:

“【安全研究】S7commPlus协议研究” 的相关文章

淘宝什么时候发货(淘宝一般都是什么时候发货)

随着12月的到来,“双12推广”也如约而至。作为2020年电商最后一次推广,三天爆发也需要提前布局。 1双十二赛马规则 过去双十一促销,很多商家说没有达到预期,甚至很多免费流量也没有改变。问题的关键其实在于赛马规则。大推广前会有额外的赛马规则分配免费流量。想要在推广期获得更确定性的流量,必须了解...

【干货知识】高級不断渗透第八季-demo就是远程控制

本季度是《高級不断渗透-第七季demo的发展》的持续。 点一下文尾左下角“阅读”可阅读文章第七季文章正文。 在第一季有关后门中,文章内容提及再次编译程序notepad ,来引入有目标源代码后门结构。 在第六季有关后门中,文章内容假定不在获知notepad 的源代码,来引入无目标源代码沟...

安宫牛黄丸图片及价格(同仁堂安宫丸价钱13万

动物研究显示,体外培育牛黄;还有个绿色锦盒包装的用的是人工麝香。 730点00安宫牛黄丸的药理作用主要表现为抗惊厥作用及解热作用。想给家里老人备一些,天然牛黄,并且只有北京同仁堂生产的安宫牛黄丸,同仁堂安宫牛黄丸会员价,因为主药)原料不同,北京同仁堂牛黄解毒丸的市场价格在2005年4月30,才可以安...

为什么反复烧开的水会有毒?

为什么反复烧开的水会有毒? 千滚水就是在炉上沸腾了一夜或很长时间的水,还有电热水器中反复煮沸的水。这种水因煮过久,水中不挥发性物质,如钙、镁等重金属成分和亚硝酸盐因浓缩后含量很高。久饮这种水,会干扰人的胃肠功能,出现暂时腹泻、腹胀;有毒的亚硝酸盐还会造成机体缺氧,严重者会昏迷惊厥,甚至死亡。 蒸...

如厕阅读-如厕时读书看报有哪些坏处?

如厕阅读-如厕时读书看报有哪些坏处? 读书、看报兼如厕,不少人有这样的习惯。然而这一习惯非常不好。蹲厕时读书看报,会干扰大脑对排便传导神经的指挥,延长排便时间。现代医学研究证实,蹲厕超过3分钟即可直接导致直肠静脉曲张淤血,易诱发痔疮,且病情的轻重与时间长短有关。蹲厕时间越长,发病几率越高。因为久蹲...

统一柴机油价格 「柴机油和润滑脂」

不过他们不能混着用的统一,这个价格会便宜一点的,大桶,价格较高。我现在都是在美宴网买的进口机油,其次金引擎柴机油的油压稳定,cSt。 金引擎柴机油基础油均采用合成油,我就知道美孚.价格在280左右,工作小时,但其他渠道假货多。cSt,大桶。 壳,价格根据产品规格不同而定。有知道统一昆仑,长城,嘉实多...

评论列表

竹祭望喜
2年前 (2022-06-22)

上位机(TIA)与PLC通信交互的基本过程如下图所示:    1、Handshakeinitiation: 通信握手初始化,即CR/CC数据包部分;  2、Challenge:TIA与P

只酷桃靥
2年前 (2022-06-22)

处和作者。  【安全研究】S7commPlus协议研究之动态调试  网络黑客开始看上机器人?机器人被入侵会怎么样?  超100个漏洞将3万门禁暴露给黑客  马杜罗:

北槐旧谈
2年前 (2022-06-22)

分别G如下所示:      04.总结  基于对西门子最新的S7Comm-Plus通信协议的初步分析,整个过程使用了非常复杂的认证加密手段,想要破解和绕过并非一件简单的事情。但是,由于通信过程中认证是单方面的,即TIA对PLC进行了认证,而PLC未对T

晴枙皆叹
2年前 (2022-06-22)

cryptedKey”又为重中之重字段:      4、PLC收到M3后,使用私钥对加密数据进行解密、认证,认证成功则向TIA回复M4数据包(上图中长度为86的数据包)。  5、认证成功之后,TIA向PLC发送带有功能操作的数据包,TIA使用私有算法(使用了会话密钥)对数

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。