freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

我所了解的物联网设备渗透测试手段(硬件篇)
2019-02-12 10:00:31

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

0x01.前言

本科所学专业就是IoT,面试安全岗位时大部分面试官都会问我写IoT安全相关的东西,虽然最后拿到offer定的岗位都是侧重web的。前几天接到科恩的面试通知(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,武能示波器,软硬方面的技能兼备。

图片.png

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

0x03.工具篇

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

图片.png

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

图片.png

0x04.接口调试篇

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

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

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

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

图片.png

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

图片.png

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

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

图片.png

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

2.JTAG

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

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

图片.png

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

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

3.I2C

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

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

图片.png

4.SPI

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

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

图片.png

0x05.固件提取篇

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

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

图片.png

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

图片.png

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

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

图片.png

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

图片.png

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

图片.png

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

0x06.彩蛋

前几天面了科恩,确实一面问的都是非常底层、基础的东西,把我记得的给列出来吧:

1.TTL和RS232区别?

2.眼图中“眼睛”张的越小表明什么?

3.串口通信中起始位和停止位的意思

4.IDApython的一些用法

5.SSL握手过程及其中的一些细节

0x07.参考(包括图片来源)

https://os.mbed.com/users/4180_1/notebook/i2c-debug-for-realterm/

https://payatu.com/iot-security-part-2-101-iot-attack-surface/

https://www.avrfreaks.net/forum/debugging-spi

https://iot-security.wiki/

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

# 物联网
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录