前言
KUKA是世界领先的机器人制造商之一,该公司生产的KUKA机器人在国内外的工业控制领域有着广泛的应用。这类设备动辄就是几百万价格,入门门槛非常之高,本人在机缘巧合之下接触到这个机器人设备并对其进行了快速的安全测试和漏洞挖掘。
测试目标
本次测试目标为KUKA KR C4机器人,他主要由3个部分组成:手操器,控制器,机械臂。下面简单介绍这三个部分:
1.手操器:实际上就是工业系统的HMI,KUKA称之为SmartPAD,通过接受操作人员的操作指令,对控制器下达相关指令。同时也可以读取机器人的状态等相关信息并呈现出来。下图就是KUKA KR C4配套的手操器,该手操器通过一个“特殊”的数据线连接控制器,这个数据线具体是什么从外观上没法看出来。
2.控制柜:机器人的大脑,它不仅能够运行已经组态好的程序,同时也能执行手操器下达的指令,从而控制比如说机器臂等外部设备。由于它是机器人的核心,所以是安全测试的主要目标。从官方资料显示,里面运行的windows 7系统(最新版的是windows 10,老版本的为windows XP),实际就是一个简化版的PC机。下图就是不同型号控制柜的样子:
3.机械臂:机器人的外围机械系统,接受控制器指令改变姿态执行动作,由于机器臂不是测试的重点目标,本身也具有一定的危险性,所以在测试之前应该先将其与控制器的连接断开,防止测试时候出现安全事故。下图就是一个机械臂的示意图:
总体的架构示意图如下所示:
结构梳理
控制柜相当于一个PC机,插上鼠标,键盘和显示器就可以直接对其进行操作,为了方便分析,将主要程序(文件夹C:/KRC)从控制柜通过U盘拷贝出来。下面就是该文件夹的内容。
1.SmartHMI就是手操器显示的界面程序,直接和操作员打交道,从文件名(如下图所示)可以看出,该程序主要是由C#编写的,分析时应该使用dnspy进行反编译分析。
2.VxWin是一个让非实时的windows系统运行高实时性系统Vxworks的解决方案,由于机器人控制需要实时性,windows显然满足不了要求,所以通过VxWin可以让windows系统运行Vxworks虚拟机,执行机器人控制任务。下图摘自百度百科
3.ROBOTER文件夹存放着Vxworks内核/驱动模块/配置信息,是控制器核心中的核心,通过Vxworks系统来直接控制外围的机械系统。这部分可以使用IDA进行相关的逆向分析,指令集和宿主机的一致(X86架构)。
4.smartPAD文件夹存放着手操器一部分的固件文件(如下图),初略地浏览下,发现是WinCE的固件(这里是ARM架构的),说明手操器运行的是wince系统(微软发布的嵌入式系统)。
在kcpui_app.exe发现了手操器是通过rdp与控制柜进行通信的,也就是说手操器应该是连接控制柜的内部网口:
可以看到有个用户kukauser,密码是“68kuka1secpw59”,该用户和密码已经在网上被披露,严格来说,这是存在安全风险的。(该用户和密码不能随便改变,这会导致机器人无法正常工作)。
漏洞挖掘
对于windows系统的安全测试,无非是信息搜集,对暴露的端口进行探测,再对相应的服务进行突破,从下面结果来看,远程桌面(3389)并没有暴露出来。
其中49001~49010是提供WorkVisual(KUKA机器人的组态软件)进行连接使用的,下图就是相关服务定义,数据交互使用的是.NET的WCF(TCP)框架,这里应该是存在一些未授权引发的安全问题,但是需要大量的逆向工作,所以跳过这部分(可以留作后面研究),选择最熟悉的服务telnet(23)和SMB(445)。
Telnet服务
直接通过telnet连接,可以看到Vxworks login信息,说明这是windows里的Vxworks虚拟机暴露出的端口。
先上弱口令爆破工具,直接跑了很久也没跑出来,后来直接放弃,开始从Vxworks固件入手。
一、Vxworks固件加载地址
从内核最开头的地方往下翻,使用IDA立马找到一个疑似加载地址的地方:
二、符号表
使用十六进制编辑器工具从后往前翻,很快能找到20个字节为一组的符号表:
三、编写脚本
得到固件加载地址和符号表偏移就可以修复符号:
使用IDA对Vxworks内核符号表进行恢复后,很清楚地找到了一个隐藏的硬编码用户(得到的密码哈希再通过碰撞得到一个可用的密码):
通过发现的账号密码,可以直接登陆Vxworks,获得一个Vxworks Shell,由于Vxworks是核心系统,该漏洞危害不言自明。
SMB服务
说到SMB服务,首先考虑使用MSF检测是否存在永恒之蓝漏洞,但是遗憾的是MSF提示目标可能已经打上了补丁。
直接进入系统查看,发现SMB共享了文件夹(C:/KRC/ROBOTER),但是只能被target用户访问,也就是前面说的kukauser没法使用。起初以为该target用户使用了和kakauser一样的密码,发现并不对,接着尝试从该系统中导出target用户的NTLM hash,通过cmd5查找原始密码,仍然没有成功,猜测该用户应该使用了和kukauser一样的高强度密码。
柳暗花明又一村,搜索关键字“target”,在某个exe找到了直接target用户的账号和密码,如下:
通过该用户密码,成功登陆了SMB服务,获取了对ROBOTER文件夹的完全控制权,由于该文件存放着Vxworks内核/系统模块/配置等,所以对其修改删除将会导致严重的生产事故。
总结
经过了对KUKA机器的快速测试,在半天时间内,发现了两个非常严重的硬编码凭证漏洞。在官方没有披露用户密码情况下,通过逆向工程的手段,找到了潜在的硬编码用户。发现漏洞后本人第一时间通报给CNVD,CNVD给这两个漏洞分配了编号,由于其认为是简单的信息泄露漏洞,只给了5.5的评分XD~~~
但是和CISA沟通之后,CISA认为是严重的漏洞,并发布了安全通告,给两个漏洞分配了编号CVE-2021-33016和CVE-2021-33014,链接地址 https://us-cert.cisa.gov/ics/advisories/icsa-21-208-01
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-7-28 09:52
被wmsuper编辑
,原因: