Windows 10 IoT Core远程命令执行漏洞验证及建议

时间 :  2019年03月27日  来源:  安天


PDF报告下载

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所示:

图3-4 SirepPipeServiceRoutine函数命令分流代码

4、 POC执行验证


        分析小组通过树莓派2B和Windows IoT Core(17763)(Stock/Test Image)搭建了验证环境,结合上述的分析过程对公开的POC[6]进行了验证。

        上传文件POC执行示例如图4-1、图4-2所示:

图4-1 上传文件POC执行示例

        如图4-1所示,该POC在C:\Windows\System32\目录下创建了一个名为uploaded.txt的文件,文件内容为“Hello Windows IoT!”。

图4-2 查看上传文件结果

        如图4-2所示,在执行图4-1所示的POC命令后,使用cat命令可查看C:\Windows\System32\目录下的文件名为uploaded.txt的文件内容。

        远程执行系统命令POC执行示例如图4-3所示:

图4-3 远程执行系统命令POC执行示例

        如图4-3所示,该POC实现了远程命令执行,在目标设备中执行了hostname命令,并返回了命令执行的结果,即“minwinpc”

        经过验证,SafeBreach公司安全研究人员公开的POC能够实现对Stock/Test Image版本的Windows IoT Core系统的上传文件和执行系统命令,Stock/Test Image版本的Windows IoT Core系统存在严重的安全隐患。

5、防护建议


        本次验证的漏洞能够不经授权就可以在受影响系统设备上执行上传文件和执行系统命令等高危动作,恶意软件通过本漏洞的利用很容易劫持设备成为僵尸网络的一员,成为黑客发起网络攻击的武器之一;设备也能够被黑客控制成为挖矿中的一部分;同时由于IoT设备应用于各行各业,一旦受到控制最直接的就是影响设备的正常运行,进而对生产生活造成影响;同时黑客也可以通过设备作为跳板进一步入侵IoT设备所在网络进行病毒传播、情报窃取和网络破坏等危险行为,对目标网络造成严重威胁。

        虽然本次验证的漏洞仅适用于Stock/Test Image版本的Windows IoT Core系统,但由于构建Custom版本需要从Certificate Authority (CA)购买签名证书,并使用该证书对Custom版本的系统进行签名,厂商可能出于成本或其它方面考虑直接使用Stock/Test Image版本的Windows IoT Core系统进行产品发布,也就是说以Stock/Test Image版本的Windows IoT Core系统IoT设备可能已经广泛进入供应链。并且IoT设备在现实应用场景中进行固件升级较为困难,容易被忽视。

        综合上述情况,为了有效降低漏洞所带来的威胁,在提高产品安全性的同时,有效提升产品所在网络的安全防护能力,保障客户价值,我们结合漏洞的分析和验证情况给出三点安全建议,具体如下:

        建议一: 产品实际的上线过程应该严格按照官方要求的研发、测试和发布流程规范操作,使用Custom Image而非Stock/Test Image版本的Windows IoT系统作为实际产品的发布系统,能够有效避免本次或其它未被发现的Stock/Test Image版本系统漏洞所产生的影响。

        建议二:本漏洞所涉及到的服务使用29817、29819、29820三个端口,且涉及到的服务仅用于研发阶段的兼容性测试,并不是实际产品所使用的功能。在暂时无法升级固件的情况下,并确保实际产品中没有依赖相应端口的功能,以防止在关闭相应端口后影响设备的正常使用,则可以临时在Windows IoT Core系统防火墙中将兼容性测试服务所使用的29817、29819、29820三个端口进行阻断,也可暂时避免本次披露漏洞所产生的影响。但仍需要尽快升级固件修补漏洞,才能有效避免本次或其它未被发现的Stock/Test Image版本系统漏洞所产生的影响。在Windows IoT Core系统临时阻断端口的命令如下:

netsh advfirewall firewall set rule name=all localport=29817 protocol=tcp new enable=no

netsh advfirewall firewall set rule name=all localport=29819 protocol=tcp new enable=no

netsh advfirewall firewall set rule name=all localport=29820 protocol=tcp new enable=no

        建议三: 根据IoT设备所实现功能的技术特征并结合实际运行环境,详细梳理可以访问设备的IP列表、端口列表、访问协议类型,以及设备可以向外主动连接的协议类型、IP列表和端口列表,结合梳理结果使用边界防火墙产品或设备专用防火墙产品配置相应的双向IP地址、端口和协议的白名单访问规则列表,可最大限度的保障IoT设备的访问安全。该方法虽然能够有效保障IoT设备的访问安全,降低漏洞被利用的可能,但并未根除漏洞风险,所以尽快升级固件修补漏洞,才能有效避免本次或其它未被发现的Stock/Test Image版本系统漏洞所产生的影响。

参考链接


        [1] SafeBreach
        https://safebreach.com/News-Post/SafeBreach-Labs-Discloses-New-Microsoft-Windows-IoT-Core-Weakness-and-Exploit
        [2] Windows IoT
        https://docs.microsoft.com/en-us/windows/iot-core/windows-iot-core
        [3] HLK Studio
        https://docs.microsoft.com/en-us/windows-hardware/test/hlk/user/hlk-studio
        [4] Sirep协议和Stock Image
        https://github.com/SafeBreach-Labs/SirepRAT/blob/master/docs/SirepRAT_RCE_as_SYSTEM_on_Windows_IoT_Core_White_Paper.pdf
        [5] Windows 10 IoT Core Dashboard
        https://docs.microsoft.com/en-us/windows/iot-core/connect-your-device/ iotdashboard
        [6]POC
        https://github.com/SafeBreach-Labs/SirepRAT