联系方式

    深圳市英瑞尔芯科技有限公司

    电话:

    186 6591 0262

    E-mail:

    sally@szinter.com.cn

    地址:

    深圳市福田区振华路现代之窗A座7B

通过USB入侵微控制器固件

发布时间:2021/12/11 17:28:00

来源:http://www.szinter.com.cn/news735702.html

在文中中,我觉得演试怎样从运作在Cortex M0上的安全性USB设备中获取固件。谁侵入了短视频电子游戏机?在游戏机的全世界里,弥漫着各种各样假冒伪劣商品。说白了要求造就提供,不缺有许多投机商要想在这方面产业链使用价值数十亿美元的生日蛋糕上分一杯羹。而现如今,你总会寻找那麼几种设备,让几乎全部的游戏控制板,在对盗版游戏,仿冒的手机游戏手柄或零配件,乃至外挂软件上面缺失全部限定。从短视频电子游戏机问世起的二十年来,其游戏控制器全是由硬件配置生产商设置的专用系统软件。生产商在设计方案的环节中会包含各种各样保障措施,以保障这种控制板只运作签字过的编码,让客户只玩合理合法有营业执照的手机游戏,及其官方网认证的零配件。一些我国,尝试破译自身的短视频电子游戏机乃至是不法的。但此外,这类高端的保障措施也促使电子游戏机变成了一个有吸引的总体目标。对网络信息安全和反向工程有兴趣的发烧友而言,这一迷题会难,解起來就越有意思,尤其是假如你自小就爱网络游戏得话。DualShock 4维护计划方案关心我twitter帐户的阅读者很有可能了解,我一直以来一直专注于对游戏控制器以及相关产品做反向科学研究。在PlayStation 4(荣誉出品的一款电子游戏机)刚面世那时候,我便曾运用其FreeBSD核心(PlayStation 4根据FreeBSD核心)中的一个系统漏洞研究了该商品的內部构架和原理。我做了许多不一样的科学研究,在其中就包含,在PS4中USB验证是怎样作业的,及其它如何区分受权设备并阻拦没经认证的设备。这一主题风格很有意思,我以前在别的控制板上也做了相近的科学研究。PS4的验证计划方案比Xbox 360应用的要简洁得多,但实际效果并不低。

图1.PlayStation 4 USB零配件受权计划方案全过程如下所示:PS4向DualShock 4(一款手机游戏手柄)推送0x100个任意字节数,DualShock 4则建立一个RSASSA-PSS SHA-256签字做为回应,并将其推送回认证它所需的数据加密参量N和E(公匙)中间,这种参量针对全部靠谱生产制造的DualShock 4手机游戏手柄而言全是唯一的。DualShock 4还会继续推送一个认证N和E需要的签字,它应用同样的RSASSA-PSS SHA-256优化算法,此数据加密参量储存在核心中,对全部PS4电子游戏机全是同样的。这代表着,假如你要验证自个的USB设备,只是破译PS4的核心是远远不够的,你需要将公钥储存游戏中手柄中。殊不知即使有些人取得成功破译了手机游戏手柄并获取了公钥,sony依然可以根据固件升级将公钥加入黑名单里。假如游戏控制器在8分鐘后都还没接到身份认证回应,它便会终止与手机游戏手柄间的通讯,仅有将其从USB端口号拔出来并再度将其插进后它才可以工作中。这就是初期的仿冒手机游戏手柄的工作方案,它每8分鐘就仿真模拟一个USB端口号拔出/插进全过程。有关仿冒DualShock 4的谣传自DualShock 4面世至今,沒有任何迹象表明有些人取得成功攻克了该项体制。殊不知近期,我有一个朋友销售市场推新出现了一些假的DualShock 4,不管外型或是作用都和真品都一模一样。我的惊讶欲要我从我国的店铺里购买了一些。在我等候包囊抵达的時间里,我先搜集大量有关仿冒手机游戏手柄的信息内容。在多次搜索以后,我找到了一个名叫Gator Claw的手机游戏手柄。

图2.没经认证的Gator Claw手机游戏手柄但是Reddit上也是有评价说,它只有工作中八分钟,但是之后开发者根据固件升级取得成功的解决了这个问题,图中所显示的选择网页页面里包括了固件升级的连接和操作手册。

图3.Gator Claw固件升级指南内嵌式固件的基本剖析我做的第一件事是查询固件升级器可执行程序的資源一部分。

图4.在Gator Claw固件升级器的資源中寻找的固件常常为内嵌式设备撰写源代码的阅读者很有可能不可能对这类格式文件觉得生疏。这也是Intel HEX格式文件,通常用以程序编写微控制器,很多c语言编译器(比如GNU Compiler)以这类文件格式导出编译程序编码。除此之外,我们可以见到固件的开始沒有高熵,字节数编码序列非常容易鉴别,这代表着固件未通过数据加密或缩小。将该文件编解码并且以hex编辑软件载入(十六进制编辑软件能立即开启该文件格式)后,我立刻看到了它的编译程序构架——ARM Cortex-M。

图5.Gator Claw的固件(左)和ARM Cortex-M的矢量素材表(右)依据ARM Cortex-M的标准,前两字(黄框和白框标明一部分)是原始堆栈指针,以后的是出现异常空间向量表(绿框标明)。该表格中,前两字是校准空间向量,作为固件通道点,而别的出现异常程序处理的高详细地址则提醒了固件的基址。除固件外,固件升级程序流程的資源一部分还包括一个配置文件,里边有对不一样微控制器的叙述。 表明开发者最有可能应用的是来源于微控制器生产商的公布可以用源码,这就能解釋为何这一配置文件中含有源码。

图6.对不一样的微控制器叙述的配置文件在配置文件中检索微控制器标志符后,大家找到生产商的网站——Nuvoton。不用一切授权文件就可以下载技术资料和SDK的商品信息。

图7.Nuvoton微控制器生产商的网址如今大家拥有固件,知道它的系统架构和微控制器生产商,还知道基本上详细地址、原始堆栈指针和通道点。ARMCPU有二种不一样的指令系统:ARM(32位命令)和Thumb(应用Thumb-2 32位命令拓展的16位命令)。Cortex-M0仅适用Thumb命令,因而我们在IDA Pro中载入固件时将“Processor options – Edit ARM architecture options – Set ARM instructions”中的单选按钮转换为“NO”。以后,我们可以见到固件早已刷新到基址0,全自动剖析几乎可以鉴别每一个作用。如今的问题是怎样推动固件的反向工程。

图8.固件作用之一假如对固件作剖析,会见到全部它应用基址0x对运行内存实行存取数据,这也是内存映射到I/O(MMIO)存储器的基本上详细地址。这种MMIO存储器容许你浏览和操纵全部微控制器的外部部件,固件所做的一切都是根据浏览他们来完成的。

图9.外部控制板的内存映射根据检索详细地址0x的技术资料,大家发觉这一微控制器归属于M451大家族。即然已了解了微控制器大家族,就在线下载这一服务平台的SDK和编码实例。在SDK中,大家寻找一个库函数,它界定了全部MMIO详细地址、位字段名和构造。大家还能够用全部库编译程序编码实例,并将他们与IDB中的函数公式开展较为,或是在源码中搜索MMIO详细地址的名字,并将其与人们的反编译开展较为。这促使反向工程的全过程比较简单。那是由于我们知道微控制器的构架和实体模型,而且大家对全部MMIO存储器开展了界定。如果我们沒有这种信息内容,剖析便会繁杂得多。 可以说,这就是为何很多经销商只在签定了NDA以后才公布SDK。

图10.在固件中搜索函数库在猿巨人的影响下等待假手柄来临之际,我剖析了Gator Claw的固件,但对固件的內部并没过多深入分析的兴趣爱好——无外乎是身份验证数据信息被发送至另一个可以根据I2C浏览的微控制器,再将回应送到控制板。Gator Claw手柄的开发人员很有可能也了解这些人的固件会被反向破译,进而被同行业效仿生产制造出大量的纺织产品,那样也会对她们的业务流程产生消极的危害。为了避免这种现象的产生,她们应用了另一种微控制器来确保商业秘密,这一作法也是十分普遍的,由于网络黑客们在她们的设备上投放了许多活力,她们也不愿被别的黑客入侵。在这个固件中,真真正正造成我留意的是一些看起来沒有采用过的字符串数组,它很可能是USB设备描述符的一部分。这一字符串数组是故意留有的吗?是否会是某类签字?以上猜测是极有可能的,由于该字符串数组是一家硬件配置生产商的名字,该生产商以生产制造逻辑分析仪而出名,而且它还有一个专业手机游戏单位,正向着变成初始设备生产商(OEM)的总体目标拼搏。还有着很多游戏配件的生产制造专利权。此外,根据它的网址我认识到,在其牌子下有很多待销的游戏配件。在它售卖的商品中,有二十几款电源适配器能让手柄与不一样牌子的控制板相接。比如,可以把Xbox 360的手机游戏手柄联接到PS4,还可以把PS3的手机游戏手柄联接到Xbox one,这些。也有的电源适配器,可以将PC鼠标和键盘联接到PS4、Xbox One、任天堂游戏机、各种各样手柄和印刷线路板上。全部商品都保证了与Gator Claw相近的固件升级程序流程,但有一个明显的差别——全部固件全是通过数据加密的。

图11.在其中一个商品的手动式和数据加密固件实例Gator Claw手柄在印刷线路板的制定上很有可能便是仿照了该生产商。在下面的图中我们可以见到2个微控制器,在其中一个应该是Nuvoton M451,另一个则是附加用以确保商业秘密的微控制器。全部路线最后都聚集到了黑灰色的模件中(下面的图中黑色标出一部分),它应该是主微控制器,而含有四个淡黄色管脚的微控制器(下面的图中淡黄色标出一部分)应当具有了I2C工作中需要的作用。

图12.Gator Claw印刷线路板的设计方案启发这时我终于收到了李小姐的包囊,开启后我真是大吃一惊,假如我不说,估计你也会认为这就是正版的DualShock 4。这也是一款用制做优良的无线游戏手柄,含有工作中触摸板、音箱和耳机插孔。

图13.假DualShock 4手柄的外型手柄运行后进到DFU方式,在这里方式下将手机游戏手柄联接到PC后,它被鉴别为有着不一样标志符和特点的另一个设备。那麼下面的一件事就不言自明了……

图14.假DualShock 4手柄的印刷线路板我将两根输电线电焊焊接到看上去像JTAG点的地区,并将其接入到JTAG开发板。编程工具鉴别微控制器,但它设定了安全扣。

图15.编程工具鉴别微控制器,但它开启了安全扣根据USB进攻微控制器固件在前面这一段非常冗杂的详细介绍以后,如今现在是时候返回文中的主题风格。USB(通用性串行接口)是外部设备的国家标准。它的设计方案非常灵活,可以广泛运用。USB协义界定了2个实体线——一个服务器与别的联接的设备,联接设备分成网络交换机、工业触摸屏、复印机、三维成像、大容量存储器设备等类。

图16.USB设备的联接计划方案设备与服务器间的信息和操纵互换的操作过程是根据一组单边或双重管路的开展的。一个设备可以具备众多不一样的节点以互换不一样种类的数据信息。

图17.传输数据种类有四种不一样种类的传输数据:· 控制传输(用以配备设备)· 大批量传输数据(以相过大和突发性的总数转化成或应用)· 终断传输数据(用以立即但靠谱地传送数据)· 同歩传输数据(根据事先商谈的传送延迟时间占有事先商谈的USB网络带宽量)全部USB设备务必适用节点0处的独特特定管路,USB设备的操纵管路将连结到该管路。这种种类的传输数据是应用依据下列计划方案给予的分类来完成的。

图18.USB协义中采用的数据USB协义具体是一个状态机,在文中中大家不容易查验全部这种数据。下面的图中能够看见控制传输中采用的数据实例。

图19.控制传输大批量传送、终断传送和同歩传送这三种种类的传输数据是可选择的,他们的出现和应用是否将视总体目标而定,但控制传输则是全部USB设备都适用,且控制传输的文件格式很普遍,这促使控制传输变成了剖析系统漏洞时最经常运用的方式。下边的计划方案表明了用以实行控制传输的SETUP包的文件格式。

图20.SETUP包的文件格式SETUP包占有8个字节数,它可以依据要求的种类得到不一样种类的数据信息。有一些要求对全部设备全是通用性的(比如GET DESCRIPTOR),而其余的在于设备的类型和生产商批准。要推送或接受的信息长短是SETUP数据中给予的16位字。

图21.规范的和特殊类型的要求实例汇总:控制传输应用比较简单的协义,全部USB设备都适用。它可以有很多附加的要求,而我们可以控制参数的尺寸。全部这一切使控制传输变成模糊不清和影响的极致总体目标。漏洞检测为了更好地破译买了的假手柄,我无须模糊不清它,由于我还在查询Gator Claw编码时发觉了系统漏洞。

图22.HID类要求程序处理中的缺陷编码函数公式HID_ClassRequest()用以仿真模拟初始DualShock 4手柄的工作中,并完成与PS4一起工作中需要的至少要求。函数公式USBD_GetSetupPacket()用以获得SETUP包,依据汇报的种类,它要不应用USBD_PrepareCntrlIn()传送数据,要不使用u ** d_preparecntrout()读取数据。USBD_GetSetupPacket()不查验要求数据信息的长短,这应当能使我们载入固件內部的一部分闪存芯片,并载入和载入SRAM储存器的逐渐一部分。

图23.操纵传输期间缓冲区溢出DATA数据包的大小在USB设备描述符中定义(也通过控制传输接收),但容易被忽略的是这个大小定义的是单个数据包的长度,可能有很多数据包的长度取决于在SETUP包中所设置的。值得注意的是,Nuvoton网站上提供的代码示例也没有检查长度,可能导致的结果就是使用此代码作为参考的所有产品中都会留有类似的漏洞。

图24.利用SRAM存储器中的缓冲区溢出漏洞SRAM(静态随机存取存储器)是一种被堆栈占用的存储器。SRAM通常也是可执行存储器(可配置的),这通常是为了将经常调用的代码片段(例如,实时操作系统) ** 到SRAM来提高性能。虽然不能保证堆栈的顶部可以通过缓冲区溢出来访问,但这么做的可能性仍然很高。令人惊讶的是,利用USB固件的主要障碍竟然是操作系统。我在使用Windows时观察到以下内容,但我认为大部分内容也适用于没有特殊补丁的Linux。首先,操作系统不允许你在控制传输期间读取超过4kb;其次,根据我的经验,操作系统不允许在控制传输期间写入多个DATA数据包;第三,USB设备可能有隐藏的请求,所有使用它们的尝试都会 ** 作系统阻止。这很容易用包括手柄在内的人机界面设备(HID)来演示。HIDs附带了其他描述符(HID描述符、报告描述符、物理描述符),而报告描述符与其他描述符非常不同,它由描述所支持报告的不同项组成。如果报告描述符中缺少报告,那么操作系统将拒绝完成它,哪怕它是在设备中处理的。这基本上减少了USB设备固件漏洞的发现和利用情况,而这些细微差别很可能在过去阻止了漏洞的发现。为了解决这个问题而不必阅读和重新编译Linux内核的源代码,我只使用了我手边的低端仪器:Arduino Mega板和USB Host Shield(总计小于30美金)。

图25.连接方案在使用上述方案连接设备后,我使用Arduino板来执行控制传输,而不必受到操作系统的任何干扰。

图26.Arduino Mega + USB Host Shield我从深圳买的假游戏手柄与Gator Claw具有相同的漏洞,我做的第一件事就是转储部分固件。

图27.部分转储固件查找固件转储基址的最简单方法是查找包含指向已知数据的指针的结构。之后,我们可以计算地址的增量并将固件的部分转储加载到IDA Pro。

图28.指向已知数据的指针的结构固件转储允许我们找出printf()函数的地址,该函数输出工厂质量保证所需的UART信息。 更重要的是,我能够在转储中找到hexdump()函数,这意味着我甚至不需要编写shellcode。

图29.寻找有助于漏洞利用的函数在游戏手柄的印刷电路板上找到UART点,焊接导线并将它们连接到TTL2USB适配器后,我们可以在串行终端中看到输出。

图30.游戏手柄启动期间的标准UART输出Nuvoton微控制器的标准库附带一个非常方便的硬故障异常处理程序,它输出寄存器转储。这极大地促进了漏洞利用过程,并能对其进行调试。

图31.堆栈覆盖导致硬故障异常后的UART输出转储固件的最终漏洞可以在下面的屏幕截图中看到。

图32.利用和shellcode在UART上转储固件但是这种转储固件的方法并不完美,因为Nuvoton M451家族的微控制器可能有两种不同类型的固件—主固件(APROM)和用于设备固件更新的微型固件(LDROM)。

图33.不同模式下闪存和系统内存的存储器映射APROM和LDROM映射到相同的内存地址,因此只能转储其中一个。 要获得LDROM固件转储,我们需要禁用安全锁并使用编程工具读取闪存。

图34.Shellcode禁用安全锁加密失败对负责更新的固件(LDROM)的分析表明,它主要是来自Nuvoton的标准代码,但是添加了用于解密固件更新的代码。

图35.用于解密固件更新的加密算法方案用于解密固件更新的加密算法是自定义块密码。它是在密码块链接模式下执行的,但是块大小只有32位。该算法接受一个密钥,该密钥是产品的文本(ascii)标识符,以及定义应该在当前块上执行什么转换的指令数组。在遇到键和数组的末尾后,它们的当前位置被设置为初始位置。转换列表包括6个操作:异或、减法、减法(反向),以及相同的操作(但是交换了字节)。因为固件包含大量充满0的区域,所以很容易计算这个算法的秘密部分。

图36.固件更新加密密钥将从假手柄的固件中提取的算法对比到上述的制造商所生产的产品中,发现所有产品都在使用这种加密算法,利用该算法的漏洞,我们可以计算所有设备的加密密钥并解密固件更新。换句话说,在假冒产品中使用的算法导致该制造商开发的所有产品的安全性都受到威胁。结论这篇博文写得很长,但我真的很想让广大观众做好准备。我给出了一个关于嵌入式固件分析,找到漏洞,并利用它们获取固件转储和在USB设备上执行代码的操作指南。故障攻击的主题不包括在本文的范围内,但此类攻击对USB设备也非常有效。对于那些想要了解更多相关信息的人,我建议您观看此视频。对于那些想知道如何从DualShock 4获取算法和密钥以制作盗版产品的人,我建议阅读这篇文章。至于用于保障机密的微控制器,我发现并不是所有的设备都使用它,只是为了增加隐蔽性。但该微控制器不保守任何秘密,仅用于SHA1和SHA256。这项研究还帮助爱好者创建自己的开源项目,用于游戏控制器。对于购买假冒游戏手柄的用户来说,他们并不能因获得了利益而沾沾自喜,因为制造商会屏蔽非法使用的密钥,而用户最终也无法使用游戏手柄或获得固件更新的提示。

本文翻译自:https://securelist.com/hacking-microcontroller-firmware-through-a-u ** /89919/如若转载,请注明原文地址: https:// ** .4hou.com/technology/16958.html 更多内容请关注“嘶吼专业版”——Pro4hou

相关标签: