智慧城市让生活更美好!

搞IoT安全得懂JTAG

  前言

  书接前文,上篇文章主要介绍JTAG的一些基础知识,本篇主要介绍JTAG安全方面内容。

  JTAG安全研究:完整工具包

  为了能够轻松访问集成电路进行测试,厂家开发了JTAG。但是,如果将最先进的锁放在门上并将钥匙放在门垫下面,那么获取“秘密”就像找到钥匙一样简单。JTAG为攻击者提供了一种简单的方法来查找密钥,让我们深入了解JTAG的世界,看看这个有用的开发人员工具如何用于安全研究目的。

  JTAG是一个简单的“哑巴”接口

  JTAG是一个接口,不知道芯片将如何响应命令字符串,从技术上讲,尝试单独使用JTAG来破解设备是可能的,但这将非常耗时,需要对芯片的所有内部工作和架构进行深入、全面的了解。要使JTAG成为一种有效的研究工具,我们需要能够在人类可读代码和进出JTAG TAP控制器的低级指令之间进行转换的东西。

  调试软件OpenOCD,解锁了JTAG的真正威力。OpenOCD是各种芯片和接口的唯一开源存储库(知识库)。OpenOCD可以(当与JTAG接口设备配对时)操纵目标设备上的JTAG TAP控制器向其发送位(通过上面的状态机),然后芯片将其解释为有效命令。

  基于硬件的软件调试

  OpenOCD允许我们暂停和逐步执行操作,检查内存,将字节直接写入内存,设置监视点和断点,甚至将代码注入进程或进程内存。我们称这种技术为“基于硬件的软件调试”。我们正在操纵硬件来执行传统的软件调试任务。事实上,OpenOCD甚至允许通过生成GDB服务器来使用熟悉的软件调试工具,允许您通过GDB,IDA Pro或任何能够充当GDB客户端的设备调试设备中的固件和软件。

  配置文件

  有了成千上万种不同的芯片架构,OpenOCD如何知道怎么与它们进行通信? 简单地说,OpenOCD使用特殊的配置文件来学习这些指令。配置文件负责告知OpenOCD操作特定芯片架构的TAP控制器的正确方法。我们必须拥有要与之通信的芯片的正确配置文件。OpenOCD包含许多最常见芯片类型的配置文件,大多数其他芯片可以在网站找到。

  附加硬件

  大多数电脑没有内置与JTAG通信的硬件,但我们可以在网上买到诸如Shikra或BusPirate等相关设备。专业设备可以提供更好的控制和吞吐量并且通常包括他们自己的调试软件,但是相应地增加了成本。如果我们使用的是OpenOCD,它还需要一个配置文件来教它如何与此设备通信。计算机和JTAG控制器之间的通信通常通过串行接口完成,所以在淘宝买下图设备就可以了。

  被低估的入口

  希望看到这里你已经开始意识到在设备上获得JTAG访问的安全风险。从某种意义上说,如果您在设备上拥有JTAG访问权限,那么您已经完全“拥有”它。我们可以随时查看数据、随意修改数据,并可以将板上的RAM和FLASH芯片的内容转储出来。尽管有这些优点,但JTAG经常被安全研究人员所忽视。

  例子:家庭路由器Root权限获取

  为了演示使用JTAG获取设备最高权限是多么容易,我们拿一个家用wifi路由器“开刀”;首先明确我们的目的:不择手段拿到设备shell。

  使用JTAG快速轻松地绕过登录鉴权获取root shell,从而完全破坏设备的内置安全性。

  1.Hooking所有

  我们将使用Shikra作为我们的JTAG控制器,使用OpenOCD作为我们的调试软件,在Linux虚拟机中运行。

  将USB线束连接到设备上的UART接口。我们就可以监视路由器正在执行的操作。

  给设备上电以达到绕过登录鉴权的目的。 我们可以通过UART接口访问常规用户功能。

  将Shikra连接到JTAG接口来破解设备。 Shikra上的引脚连接到器件上的相应引脚。如果不确定哪个引脚是数据输入,哪个引脚是数据输出,那最简单的就是尝试下,如果错了就将它们反转。您可以在上图中的Shikra部分看到JTAG引脚分布,并在此处找到有关如何连接Shikra的更多信息。

  将Shikra连接到电脑USB后将Shikra上的引脚物理连接到路由器上的JTAG接口。

  与设备建立UART连接后,当设备通电时,我们就可以以交互方式来查看设备的启动过程信息了。

  在设备完全启动后所有回显信息将会停止。

  我们需要一种绕过此登录屏幕的方法

  我们尝试利用JTAG接口来绕过登录,在设备上查找JTAG接口可能比较有挑战。JTAG很少暴露在设备外部,因此我们需要打开外壳。打开外壳后JTAG引脚就显而易见了。有些厂家会故意隐藏它们或者完全取下了销钉。如果JTAG引脚不是很明显,那么规格表和说明书是找寻它们的好路径。另外也可以使用电压表、逻辑分析仪和JTAGulator等工具来识别JTAG接口。如果厂家真的非常努力地禁用JTAG,那么访问JTAG接口可能就需要用到电烙铁了。

  JTAG接口

  MCU位于中心位置

  2.获取Root权限

  所有连线都正确连接后,我们的配置将如下所示:目标设备(在我们的示例中为路由器)通过JTAG接口(在我们的示例中为Shikra)连接到电脑以便与JTAG通信(在我们的例子中是OpenOCD和GDB)。

  将路由器与电脑连接

  通过UART连接,我们可以与设备进行交互,但是当我们开始打开终端启动OpenOCD时,我们也要关注UART设备回显,因为这将有助于我们查看设备是否抛出任何错误或重新启动。

  OpenOCD的三个会话屏幕

  我们可能尝试的第一件事是使用暂停命令来暂停路由器的正常运行,然而如果你正在观看UART回显你会看到大约一秒后路由器重新启动了。

  这是由于路由器操作系统有一个看门狗定时器,如果看门狗注意到路由器已停止工作一段时间(通常不到一秒),它会自动重新启动路由器。在看门狗定时器有机会加载之前,通过发出halt命令,等待重启,然后立即再次发出halt命令,可以轻松绕过此功能。

  由于我们要修改引导参数,因此我们希望在引导加载程序有机会实际启动操作系统之前发出第二个halt命令。

  暂停路由器后,我们可以设置断点,逐步执行操作,并检查/注入设备上的内存。

  要root路由器,我们将修改内存中的引导参数以将路由器引导到单用户模式。要做到这一点,我们所要做的就是在路由器的引导选项的末尾添加一个空格字符和数字1。

  要查看引导参数,我们需要用到从路由器中提取的固件。我们将使用“xxd”技巧将Vim变成“十六进制编辑器”:

  使用Vim作为“十六进制编辑器(hex editor)”

  使用Vim作为“十六进制编辑器”

  使用Vim作为“十六进制编辑器”

  加入引导参数!

  使用提取的设备固件映像,我们可以了解引导参数在实时内存中的位置。我们可以在内存中设置一个监视点,我们知道一旦内核在引导后不久就被解压缩到内存中,引导参数可能就会出现。这将允许我们观察设备不仅执行此解压缩,而且还在内核启动之前读取这些内核参数。我们在该内存地址和恢复操作上设置了一个观察点。

  设置一个观察点

  路由器将继续其启动过程,但一旦触及设置了watchpoint的内存地址,执行将再次暂停。当内核被解压缩到内存中时,一旦执行暂停监视点,我们就可以执行内存写操作,将“ 1”(以十六进制表示的short为0x2031)附加到引导参数的末尾,然后我们可以删除观察点,并允许路由器完成启动。

  使用“mdw”(内存转储字)命令转储内存和“mww”(内存写入字)值来执行

  如果我们观察设备继续启动过程的回显....我们会看到启动顺序与之前有点不同。

  拿到ROOT权限

  我们现在通过UART接口在路由器上有一个root shell,整个过程10分钟搞定。

  加固措施

  JTAG的存在是有原因的...它就在那里因为制造商需要它来验证电路板的正确组装以及在设备上加载固件......

  JTAG在设计、测试和生产阶段对芯片厂家非常有用。 因此,它几乎包含在市场上的每个嵌入式系统中。然而正如我们已经证明的那样,JTAG也代表着巨大的潜在安全风险。厂家意识到这种风险并且通常会采取措施来阻止访问JTAG接口。

  制造商可能会尝试在电路板上混淆JTAG走线,甚至完全去除它们, 作为制造过程的一部分,厂家可能故意在JTAG布线中熔断保险丝;这些方法有些非常有效,但是坚定的攻击者如果有一个电烙铁的话几乎总能修复这些厂家故意预埋的坑;虽然有机构组织已经提出了几种不同的JTAG安全标准用于为JTAG添加加密和加密认证,但它们尚未彻底编纂完毕且很少在实践中实施。

  结论

  IoT安全的一个不可改变的原则是,如果攻击者对你的设备具有不受限制的物理访问权限,那它就不再是你的设备。JTAG是使这一陈述成为现实的技术之一,希望本文能帮助你理解这一原则。

  通过JTAG接口,我们可以:

  对内存进行读取和写入

  暂停固件执行(设置断点和观察点)

  将指令或数据添加到内存中

  将指令直接注入目标芯片的管道(无需修改内存)

  提取固件(用于逆向工程/漏洞研究)

  绕过保护机制(加密检查,密码检查等)

  找到隐藏的JTAG功能,可能比我们想象的要多得多

  ......做我们想做的事

  JTAG是嵌入式设备极其强大的接口,编写部署在嵌入式系统上的代码开发人员通常不会意识到存在这种访问级别。我们已经知道这样的系统中固件开发人员似乎已经花费了数小时来加密和保护代码中的数据,却没有意识到它可以通过硬件级访问来轻易破坏。JTAG的知识远不止这两篇文章中所涵盖的内容,但希望两篇文章能让你对JTAG有更多的认知。

  一个搞IoT安全的微信号:MercuryLifeZone

上一篇:物联网的两大难题

下一篇:最后一页