欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

WINDOWS 10 IOT CORE远程命令执行漏洞验证及建议

来源:本站整理 作者:佚名 时间:2019-03-28 TAG: 我要投稿

1、概述
近日,安天微电子与嵌入式安全研发部(安天微嵌)针对SafeBreach[1]公司披露的Windows IoT[2]操作系统的安全漏洞进行了详细分析和验证。攻击者利用该漏洞可实现对目标设备的完全控制,如远程命令执行、文件上传/下载等。对此,安天微嵌成立了分析小组,分析验证了SafeBreach公司在GitHub中公布的该漏洞的原理及POC,对该漏洞的影响范围进行了确认,并针对不同应用场景给出了相应的防护建议。
1.1 Windows IoT系统简介
Windows作为IoT市场中仅次于Linux系统的第二大系统,其Windows IoT Core是面向物联网领域的核心操作系统版本,覆盖了智能家居、智能医疗、智慧城市、智能物流等众多领域。Windows IoT分为IoT Core和IoT Enterprise版本,而Windows IoT Core又分为Stock Image和Custom Image两个版本。其中,Stock Image版本也被称为Test Image版本,其包含了用于开发及硬件兼容性测试用途的相关接口。
Windows IoT Core系统目前支持的硬件平台包括:高通DragonBoard 410c、树莓派2、树莓派3B、MinnowBoard Turbot、Aaeon Up Squared。
1、2 HLK框架及Sirep协议简介
HLK(Hardware Lab Kit)是一个用于测试硬件设备及对应驱动程序和Windows系统之间兼容性的测试框架。PC端软件HLK Studio[3]中包含了该测试框架的Server部分,测试设备中包含了该测试框架的Client部分。用户可在HLK Studio中选择测试用例并发送到待测试的设备中进行测试。在底层实现中,HLK Studio软件通过Sirep协议[4]与待测试设备进行交互。HLK Server与HLK Client的关系如图1-1所示:

图1-1 HLK Server与HLK Client的关系
实现Sirep协议的DLL文件位于Windows IoT Core系统的C:\..\testsirepsvc.dll位置,该DLL实现了包括HLK Studio和Windows IoT Core系统间的通信功能,及执行HLK Studio下发至Windows IoT Core的测试任务等功能。而Sirep协议本身实现了如下功能:
· 获取Windows IoT Core系统信息;· 执行Windows IoT Core系统命令;· 下载Windows IoT Core系统中的文件;· 上传文件到Windows IoT Core系统中;· 获取Windows IoT Core系统中的文件属性信息。
2、影响范围
根据公开资料及分析小组实际验证,该漏洞目前主要影响Windows IoT Core的Stock/Test Image[4]版本。若开发人员或厂商在最终发布的产品中使用了Stock/Test Image版本的系统,且该产品存在有线连接场景,则会受到此次披露的漏洞影响。构建Custom版本需要从CA(Certificate Authority)购买签名证书,并使用该证书对Custom版本的系统进行签名,因为时间仓促,分析小组暂未对Custom版本的Windows IoT系统进行验证。
3、漏洞分析
本次分析过程使用树莓派2B和Windows IoT Core(17763)版本作为验证环境。设备连接示意图如图3-1所示:

图3-1 设备连接示意图
首先,可使用Windows 10 IoT Core Dashboard[5]软件制作带有Windows IoT Core系统的TF卡,然后将TF卡插入到树莓派中,使用网线连接树莓派,通电后即可启动系统。系统启动后,Windows 10 IoT Core Dashboard软件可自动发现局域网范围内的Windows IoT 设备、执行启用远程PowerShell、向设备中部署应用软件等。但这些操作需要首先通过Windows IoT系统管理员账号和密码认证才能正常使用。
在实现Sirep协议时,testsirepsvc.dll的代码使用TCP Socket服务程序监听了29817、29819、29820端口,且在代码中并未对接收到的请求进行适当的权限检查,进而导致了在未经授权的情况下即可执行Sirep协议所实现的功能。
在testsirepsvc.dll中,实现对远程请求进行权限检查的函数名称为:· ControllerWSA::IsConnectionAllowed
在Windows IoT Core系统运行后,可通过U盘将该DLL文件拷贝到分析机中,使用IDA查看实现该函数的汇编代码,如图3-2、图3-3所示:

图3-2 ControllerWSA::IsConnectionAllowed函数代码片段1

图3-3 ControllerWSA::IsConnectionAllowed函数代码片段2
以上代码片段解释了testsirepsvc.dll如何对接收到的请求进行权限检查的逻辑,程序逻辑仅仅判断getsockname函数返回的SOCKADDR_IN数据结构是否为有线网卡的IP地址,也就是说testsirepsvc.dll认为所有来自有线网络的请求都是合法的请求,这个过程并不需要用户输入用户名和密码进行认证。
在testsirepsvc.dll中的服务程序接收到HLK Studio发送的命令数据后,会经过SirepPipeServiceRoutine函数进行分流,在该函数中通过命令类型字段将不同的命令分流到不同的函数中进行执行,不同的命令类型对应的执行函数名称分别为:
· SirepGetSystemInformationFromDevice;· SirepPutFileOnDevice;· SirepGetFileFromDevice;· SirepGetFileInformationFromDevice;· SirepLaunchWithOutput
实现该命令分流过程的SirepPipeServiceRoutine函数汇编代码如图3-4所示:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载