本文为我们发表的与便携式路由器安全性相关的第二篇评估文章。在本篇文章中,我们将使用工具和设备在我们的目标路由器上制作硬件,方便我们对路由器进行完整的评估。
有的时候,制造商可以从网络上进行对硬件的更新操作。由于这个过程只是软件上的一次更新,所以其可比较内容并不完整。我们希望能够对更新前与更新后的硬件情况进行比较以便我们能够了解到更新后的路由器的变化。
使用完整的硬件设备,我们可以浏览路由器的文件系统并研究与安全相关的开发任务。 包括它们是否有行政相关的后门?是否含有文档中所没有写到的功能等?
最终,我们希望通过研究能够更好地了解设备的工作原理,并获得完整的分析图片。
我在第一篇博客中所提及的产品解决方案中,我们发现它没有计算力足够强大的arm芯片,所以不容易进行安全性分析。所以在本文中,我们策划了更强大的解决方案。 我们可以使用这些硬件来组装我们实验所需要的路由器,指示灯,USB显微镜和其他设备。
这个装置虽然看起来像我的桌子上的太空章鱼,但是却更有用。
我们还需要一个SOIC 8 PIN的夹子。
我们使用它来连接eeprom
而无需拆焊实际芯片。 (拆焊往往会导致芯片无法再次工作,至少对我而言。)因为原版的SOIC夹较为好用并且我也在网络上在线阅读过有关“廉价”SOIC夹和更昂贵的相关区别,所以我买了一些昂贵的SOIC夹。那些便宜的会经常脱落。
我还买了一些跳线,用于将夹子管道连接到我的诊断设备上。
另外,我还购买了一个小型USB显微镜。 这个设备并没什么特别的:用于对目标放大200倍。 芯片上的印刷的字体非常小,我在努力阅读它。 SuperEyes宣称这个显微镜被用于牙科。 它也适用于读取各种芯片上的小标记。
有几种方法可以对硬件进行采集。 最常见的是来自Dangerous Prototypes
的Bus Pirate
方法。
经过一些研究后,我发现一下几种版本的Bus Pirate
可用。 在Dangerous Prototype
页面上看到这个评论后,我选择了第3版(准确地说是v3.6):如果用户想使设备更好使用并且没有那么多麻烦存在的话,Bus Pirate v3
是最好的选择。 虽然v4一直在不断改进,但是目前它的硬件边缘比较粗糙。
我一共购买了三款Bus Pirates
设备:两个v3.6版本和一个v4.0版本。 我计划是使用v3.6的存储空间,存储它所带来的加载器和硬件,并有一个备用的更新到社区加载器和社区固件。
4.0 Bus Pirate
可以进行远程攻击然而3.6或其他版本都不能成功运行。(Bus Pirate v4仍然通过我们的通信系统来进行工作。)
Bus Pirate拥有最多的博客文章和YouTube视频,这些文章向用户解释了它的用途,但在我的研究中,我发现了一些阻碍我研究的信息。
Bus Pirate
具有危险性的版本已经停止更新,在它的最新版本中,它已经拥有了所必须的功能。然而当我将Bus Pirate
与我在Linux开发机器上使用的软件flashrom
结合使用时,它显示的是我的v3.6型号附带的固件版本。
进一步的研究之后,我发现了Xipiter
厂商制造的Shikra
信息。 我购买了其中一个,打算用它来转储路由器硬件并将其与使用Bus Pirate获得的硬件进行比较。 使用多种方法来实现相同的结果永远不会失效。
我们依据快速而宽松的规则来查看路由器主板,中心的大芯片是处理器,侧面的小芯片是eeprom。 如果遇到什么问题,谷歌搜索芯片上的数字将有助于识别它们。 在某些情况下,板子上拥有三个芯片,而第三个便是RAM。 一些功能更全面的设备可能拥有更多芯片。
在我们的例子中,我们正在寻找eeprom
。 eeprom
用于存储相对少量的数据,但允许单个字节被擦除和重新编程。 硬件制造商可以通过擦除芯片标识符,将其覆盖在环氧树脂中,以便让我们难以读懂相关芯片信息。
我们的目标设备上的eeprom
是比较小的芯片,如图所示,其长度为8英尺。
一旦我们转储了固件,我们便可以比较制造商网站上提供的最新固件和我们提取的固件。 如果我们正在寻找漏洞,那么在我们的路由器上所安装的旧固件更容易为我们所用以进行实验。 它为我们提供了新版本中更改内容。包括补丁解决了什么问题。
我没有使用SuperEyes显微镜附带的中文应用程序,而是在Linux中安装了“Cheese”应用。 Cheese可以使用我们设备上的网络摄像头,因此我在首选项中选择了USB 2.0摄像头,并且能够在Ubuntu中使用它。
下面就是实验中难以攻克的地方。我们必须将引脚从eeprom映射到SOIC引脚
,然后从SOIC
引脚映射到BusPirate
或Shikra
接口。 我们可以通过芯片上的点识别引脚1,但我们需要上线并找到该芯片的数据表,以了解如何连接它。 我用Google搜索了几张数据表,但无法找到完全匹配的内容。
在这一点上,我们可以使用示波器,但这有点超出我们的预算,所以我们将猜测它并使用类似的eeprom芯片的引脚。
我查询的许多资料都表明这可能是Gigadevice
芯片。 虽然没有针对哪些引脚做什么的标准,但大多数数据表都有如下图:
我通过芯片连接SOIC芯片夹。 从上面看,它看起来像这样:
我用显微镜验证了针脚是否正确就位并与eeprom的“脚”接触,如下:
我们读取到eeprom
的协议是SPI
,Shikra
引脚文档中有一个SPI图表。 我们需要将引脚从eeprom映射到Shikra,以成功转储芯片的内容。 我查找了芯片的每个首字母缩略词,以及Shikra(用于SPI)的每个首字母缩略词,并制作了一个图表,以了解哪些引脚需要从一个引脚连接到另一个引脚。 eeprom位于图表的左侧,而Shikra在右边。
这里是我们完成的结果,从芯片到夹子,通过跳线到Shikra。
在我们的Linux
笔记本电脑上,我们可以发出命令“$ dmesg | grep tty“
来确认Shikra可以被正确检测到并位于ttyUSB0处。 这是我们应该看到的输出:
我们需要一个名为flashrom
的应用程序。 一个简单的命令“$ sudo apt-get install flashrom”
会帮助我们做到这一点。 要转储固件,我们向Shikra发出此命令“$ flashrom -p ft2232_spi:type = 232H -r spidump.bin”
命令。
Flashrom将芯片识别为GD21Q16(B),凭借这些内容,谷歌搜索出了确切的数据表。 就像以PDF格式获得正确的数据表一样,但我们的猜测得到了回报。 我们现在有一个eeprom的转储,我们可以继续我们的研究。 我重复了上述步骤,并将丢弃了硬件设备。 Bus Pirate确实需要更长时间才能转储固件。
当我使用Bus Pirate时,Flashrom在转储过程中出现了提示,但是它还是成功完成了。
所以我们现在拥有了路由器上的部分硬件。 在下面的文章中,我们将查看我们所提取的硬件,并对硬件相关的漏洞进行分析研究。我们还将查看从制造商网站下载的硬件新版本,并对两者进行比较。
本文为翻译稿件,原文为:https://blog.malwarebytes.com/101/how-tos/2018/12/assessing-the-security-of-a-portable-router-a-look-inside-its-hardware-part-deux/