查看原文
其他

倍福PLC安全评估实战

格物实验室 绿盟科技研究通讯 2021-03-12
0x01 前言
CX9020是倍福公司生产的PLC,运行Microsoft Windows Embedded Compact 7操作系统,广泛运用在运动控制领域。

下图就是安全评估的目标PLC。本文会从固件逆向分析的角度来简单介绍下安全评估的方法。

0x02 固件提取和解包

CX9020的固件是存储在SD卡中,所以可以很容易通过读卡器读取到其中的固件。同时官网也开放了固件下载,可以获取到不同版本的固件(https://download.beckhoff.com/download/software/embPC-Control)。

该固件是典型的WINCE固件,版本为Windows Embedded Compact 7。其中System文件夹包含一些关键的自定义程序文件:

NK.bin文件中则包含了windows系统文件和额外自定义的一些组件。对于NK.bin无法直接查看,需要用解包工具提取里面的文件。

提取工具需要用到Github上开源的eimgfs以及wince开发工具包中的cvrtbin,viewbin,通过将这些工具结合起来使用就能把NK.bin里的文件提取出来,相关命令如下:

#查看NK.bin信息,获取起始地址和长度信息

>>>viewbin.exe   NK.bin

ViewBin...   NK.bin

Image Start = 0x80200000,   length = 0x039A8B30

                Start address = 0x80201000

Checking record   #88 for potential TOC (ROMOFFSET = 0xFD13FEC4)

Checking record   #91 for potential TOC (ROMOFFSET = 0xFD15DEE8)

Checking record   #181 for potential TOC (ROMOFFSET = 0xFE3C3EDC)

Checking record   #293 for potential TOC (ROMOFFSET = 0xFF2C2EC0)

Checking record   #339 for potential TOC (ROMOFFSET = 0x00000000)

Found pTOC  = 0x83ba40c4

ROMOFFSET =   0x00000000

Done.

#将NK.bin转为NK.nb0

>>>cvrtbin.exe   -r -a 0x80200000 -w 32 -l 0x039A8B30 NK.bin

...

...

...

start 83af9d0c   length 000211f4

start 83b1af00   length 00051000

start 83b6bf00   length 000381c4

start 83ba40c4   length 00000054

start 83ba4118   length 00004a18

Progress...

0%Done.

#将NK.nb0里面文件全部dump出来,bins是提取到的文件夹
 

>>>eimgfs.exe   NK.nb0 -extractall -fs xip –d bins


通过以上步骤,NK.bin里面的文件已经全部提取出来,一共有628个文件。
0x03 动态调试
逆向分析不仅需要静态分析,动态调试也是必不可少的,通过动态调试的方法往往能发现一些安全性问题,相对于Vxworks一类的固件,WINCE是非常方便进行动态调试的。

首选先把IDA PRO的wince debug server上传到PLC中并运行,该程序启动后会自动监听端口并且等待调试器连接。

启动调试服务端后,用IDA连接后便可以进行动态调试了。

0x04 安全问题1——拒绝服务
在上面的准备工作之后,就可以进行接下来的安全评估工作。首先,最开始的主要目标是web端,因为网页的交互和处理比较复杂,比较容易出现安全问题。但是安全评估对象使用的并不是标准的HTTP协议,而是使用了微软编写的HTTP Server,对协议进行安全评估比较困难。所以,我们把注意力放在了HTTP之上的应用层。通过手动的方法先快速对web层进行测试,具体方法是对网页输入超长的字符串提交之后,看看是否会存在安全问题,在这个过程中,发现了一个拒绝服务问题,触发之后直接会让设备web服务端无法正常工作:

通过调试器,我们快速定位到了崩溃点,并分析了崩溃原因。在mdp.dll处理函数中,有一处字符串编码转换处理,会将转换的编码结果输出到栈上,由于把输入字符串长度作为MultiByteToWideChar函数的cchWideChar,也就是输出的缓冲区大小(宽字节数),会导致缓冲区溢出发生,造成内存破坏从而引发拒绝服务。

0x05 安全问题2——授权绕过
在对web端进行简单的测试后,我们把目光转向了Remote Display服务,该服务提供远程桌面服务,通过该服务用户可以进行桌面级操作。

由于这个倍福自带的CeRDisp不仅实现了远程桌面服务,还实现了授权功能,在用户设置密码后,使用远程桌面进行访问的时候要输入安全密码,如下图:

通过使用IDA简单分析了授权流程,发现该服务授权机制是存在缺陷的,可以直接被绕过。在CeRDisp.exe中,可以看到在检测密码之后,仅仅发送了一个判断密码正确与否的标志给客户端,而没有采取其他动作(如关闭连接之类的操作)来防止客户端继续进行连接流程,造成了只要修改客户端的判断代码忽略错误标志即可绕过授权强制进行登入。

0x06 总结
发现安全问题之后,我们将安全问题直接通报给厂商。至此,厂商已经发布安全通告和更新固件。

(https://download.beckhoff.com/download/Document/product-security/Advisories/advisory-2019-006.pdf)

时间线如下:

2019/07/26

2019.7.26  漏洞通报厂商

2019/08/16

 厂商已经确认漏洞并完成分析

2019/09/03

厂商发布安全通告并提供更新固件



安全评估不仅需要一些独特的思路,更重要的是足够的耐心,目睫之论,以供参考。
关于格物实验室

格物实验室专注于工业互联网、物联网和车联网三大业务场景的安全研究。 致力于以场景为导向,智能设备为中心的漏洞挖掘、研究与安全分析,关注物联网资产、漏洞、威胁分析。目前已发布多篇研究报告,包括《物联网安全白皮书》、《物联网安全年报2017》、《物联网安全年报2018》、《国内物联网资产的暴露情况分析》、《智能设备安全分析手册》等。与产品团队联合推出绿盟物联网安全风控平台,定位运营商行业物联网卡的风险管控;推出固件安全检测平台,以便快速发现设备中可能存在的漏洞,以避免因弱口令、溢出等漏洞引起设备控制权限的泄露。


内容编辑:格物实验室 陈杰   责任编辑:肖晴

期回顾

本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。

关于我们


绿盟科技研究通讯由绿盟科技创新中心负责运营,绿盟科技创新中心是绿盟科技的前沿技术研究部门。包括云安全实验室、安全大数据分析实验室和物联网安全实验室。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。

绿盟科技创新中心作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。

我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。

长按上方二维码,即可关注我

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存