我所了解的物联网设备测试方法(硬件篇)

2019 年 2 月 12 日 FreeBuf

0x01.前言

本科所学专业就是IoT,面试安全岗位时大部分面试官都会问我写IoT安全相关的东西,花了半天的时间整理了下本科期间做过的有关IoT安全的技术、demo等。

0x02.废话连篇

先说下我个人对IoT的看法,物联网关键的在于“网”这个字,万物互联,靠的就是“网”,至于这个“网”,实现的方式多种多样,这也是前些年的物联网的“碎片化“问题的一部分原因,协议、标准不同,很难有一套成熟的框架或者说是体系可以用于标准、安全地给开发者使用,开发出来的东西漏洞百出,甚至同样的一种功能实现,不同厂商的产品漏洞的危害点却在不同的层面,比如说同样是智能锁的远程开关功能,可以怎么做?

典型的应该是有两种思路,和近场还是远场有关系,近场的解决方案应该是直接蓝牙控制或者厂商私有的协议,针对这种方案可以抓包重放等,就我接触到的产品而言,重放攻击针对大部分都是有效的;远场的解决方案都离不开”云“,可能是app端与云端验证,然后云端下发指令,这种上云的操作,攻击可以从app端做,也可以从web端入手。App端可能需要hook不同的方法了解如何与IoT设备进行交互,也需要关注交换格式的方法,比如JSON、XML等,有些app会固化编码自己的密钥,攻击者以此伪造消息传送给云端来伪造开关的指令,云端基本上和传统的web安全攻击思路都是相同的,OWASPtop10的那些漏洞,在IoT的云端甚至更加广泛,平行越权、RCE、未授权访问等都是非常常见的。

像智能锁这一类的由传统产品改造后的IoT设备是目前应用最典型的,应该说也是存在漏洞最多的层面。为什么?还是以智能锁为例,本来锁具面临的攻击只是物理攻击而已(拿一些工具撬开),现在它成IoT了,增加了其他功能,比如说用app控制了,攻击者可以从app端下手,控制了app就控制了智能锁,再进一步,上云了,攻击面就更大了,web的攻击技术也可以用来控制锁具了。功能越多,漏洞的攻击面越多。就像安全从业者很喜欢引用的木桶理论一样,木桶能盛多少水,取决于最短的一块木板。

IoT安全从业者,必然要求是文能IDA,武能示波器,软硬方面的技能兼备。

废话说完了,接下来进入正题。

0x03.工具篇

推荐用树莓派吧。很多demo都是在树莓派上开发的,然后在后期出于成本等方面的考虑,联系专业的厂商进行硬件的定制,剪切了不必要的硬件。此外,树莓派自身就是ARM架构,与许多IoT设备相似,当然,还有相当一部分是MIPS、PowerPC等,这些架构的话,树莓派带起来可能会有困难,在计算机上装个QEMU或者FAT基本够用了。树莓派另一方面在于原生的raspbian,有许多的开源工具可以使用,比如OpenOCD、SPIFlash等等。

此外,还需要一些硬件工具,比如SDR、万用表、烙铁、热风枪、烧录座等等,土豪可以再买个示波器、电子显微镜;一些使用的命令行级别的工具,如file、hexdump、strings、dd、lzma、7z等。

0x04.接口调试篇

主要碰到的接口有UART、JTAG、I2C、SPI等,这儿详细讲讲UART的,因为我用到的最多,其次就是JTAG,相对来说,I2C、SPI比较少。

1.UART(通用异步接收器发送器)

是一种硬件组件,允许两个硬件外围设备之间的异步串行通信。它们可以位于同一块电路板上(例如微控制器与电机或LED屏幕通信),也可以位于两个不同的设备之间(例如设备微控制器与PC通信)。它可以允许通过串行读取/写入设备。

在许多物联网设备中,板上的UART端口保持打开状态,任何人都可以通过串口连接和访问以获得shell,日志输出等。设备通常会有一组引脚,连接到微控制器UART RX和TX引脚,用于发送和接收串行数据。

在板子上找到相应的引脚后,连接计算机前,还需要usb转ttl:

用于转换电气标准,即高低电平的转换。

连接好后打开xshell或者secureCRT,设置端口和波特率,就可以拿到shell了。

当然大部分情况下没这么简单,可能只是进了busybox,还需要进一步地搜集、解密root的密码等操作,这里不再展开。

2.JTAG

JTAG属于微控制器调试接口。微控制器具有在运行期间使用指定引脚进行调试的规定,这些引脚连接到电路板上的引脚。这些引脚(端口)由开发人员和设计人员用于调试,读/写固件和微控制器内部存储器,生产后控制/测试微控制器引脚。这使得调试端口成为最关键的攻击面之一,因为它为攻击者提供了强大的功能和访问权限。除了JTAG之外,还包括cJTAG、SWD。

JTAG的接口在PCB上基本如下图:

JTAG协议定义了可用于测试和调试微控制器的标准接口和命令。 JTAG定义了四个引脚接口(以及一个额外的可选引脚TRST)

开发者可以使用这些引脚与微控制器上实现的TAP(测试访问端口)进行通信。从安全角度来看,识别JTAG端口并与其连接允许攻击者提取固件,对逻辑进行逆向工程,并在设备上种植恶意固件。通过JTAG提取固件的技术在固件提取篇有具体例子。

3.I2C

内部集成电路是一种短距离通信协议,用于同一板上芯片之间的通信。

I2C的一个用例是EEPROM芯片,它连接到微控制器I2C引脚,通常存储数据或代码。 典型的攻击包括篡改数据,提取敏感信息,破坏数据等。我们分析EEPROM芯片上的静态数据,并通过嗅探I2C通信来执行运行时分析,可以了解安全隐患。

4.SPI

串行外设接口也是一种短距离通信协议,用于同一板上芯片之间的通信。与I2C相比,具有更高的吞吐量。

它用于与各种外围设备通信。 闪存和EEPROM芯片也使用SPI。 测试和分析的方法与I2C类似。

0x05.固件提取篇

常用的提取固件的方法有这么几种。

最简单的方法就是去官网下载,或者找技术售后索要,如果有的话网上一般都是可以找到的。

第二简单的简单的方法就是在OTA升级时进行抓包,抓取并分析通信的流量,得出升级固件的具体流程,如果可以从通信过程中直接获取升级固件的目的地址,直接去下载就可以,或者可以模拟固件升级的过程,然后获取固件。一般来讲,ftp、http等方式进行固件升级的产品比较容易使用此种攻击手段。

除去以上两种,接下来的方法是硬件安全研究人员常做的。

从编程器读取。分别连接芯片引脚和编程器,直接读取即可;有时候可能需要把芯片拆焊下来,通过烧录座编程器读取。

利用调试接口导出。通过UART串口,读取uboot启动信息,串口输出中可以发现具体型号,然后使用编程器读取并保存,就获取到固件了。

一些情况下,也会通过JTAG/SWD接口进行读取。将提取出的芯片固件在烧录座上,将仿真器与烧录座的JTAG接口连接,插入计算机,打开配套的客户端进行读取。

获取到固件后,之后的技术涉及偏向于软件层面,这儿不再展开。

*本文原创作者:Yale1024,本文属于FreeBuf原创奖励计划,未经许可禁止转载


登录查看更多
12

相关内容

物联网,英文名为Internet of Things,可以简单地理解为物物相连的互联网。物联网主要通过各种设备(比如RFID,传感器,二维码等)的接口将现实世界的物体连接到互联网上,或者使它们互相连接,以实现信息的传递和处理。互联网在现实的物理世界之外新建了一个虚拟世界,物联网将会把两个世界融为一体。
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
专知会员服务
80+阅读 · 2020年6月20日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
【白皮书】“物联网+区块链”应用与发展白皮书-2019
专知会员服务
93+阅读 · 2019年11月13日
新书《面向机器学习和数据分析的特征工程》,419页pdf
专知会员服务
142+阅读 · 2019年10月10日
【数字孪生】数字孪生技术从概念到应用
产业智能官
90+阅读 · 2020年2月16日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
硬件加速神经网络综述
计算机研究与发展
25+阅读 · 2019年2月1日
【机器学习】如何通过机器学习预测维护设备?
产业智能官
16+阅读 · 2018年7月9日
深度学习 | 免费使用Google Colab的GPU云计算平台
沈浩老师
12+阅读 · 2018年2月4日
免费云真机测试 | 让您的应用完美适配 Android Oreo
引力空间站
3+阅读 · 2018年2月2日
边缘计算:万物互联时代新型计算模型
计算机研究与发展
14+阅读 · 2017年5月19日
Arxiv
110+阅读 · 2020年2月5日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
12+阅读 · 2018年9月5日
Arxiv
151+阅读 · 2017年8月1日
VIP会员
相关VIP内容
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
专知会员服务
80+阅读 · 2020年6月20日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
【白皮书】“物联网+区块链”应用与发展白皮书-2019
专知会员服务
93+阅读 · 2019年11月13日
新书《面向机器学习和数据分析的特征工程》,419页pdf
专知会员服务
142+阅读 · 2019年10月10日
相关资讯
【数字孪生】数字孪生技术从概念到应用
产业智能官
90+阅读 · 2020年2月16日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
硬件加速神经网络综述
计算机研究与发展
25+阅读 · 2019年2月1日
【机器学习】如何通过机器学习预测维护设备?
产业智能官
16+阅读 · 2018年7月9日
深度学习 | 免费使用Google Colab的GPU云计算平台
沈浩老师
12+阅读 · 2018年2月4日
免费云真机测试 | 让您的应用完美适配 Android Oreo
引力空间站
3+阅读 · 2018年2月2日
边缘计算:万物互联时代新型计算模型
计算机研究与发展
14+阅读 · 2017年5月19日
Top
微信扫码咨询专知VIP会员