GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>电脑问题 > 狗汪汪玩转嵌入式——I2C 协议分析

狗汪汪玩转嵌入式——I2C 协议分析

来源:Ghost系统之家浏览:时间:2022-08-31 10:15:04

按:嵌入式产品Hacking一直都是备受关注的议题,而越来越多的攻击者也瞄上了物联网嵌入式设备。跟以往纯软件安全研究不同的是,这类研究往往需要结合相应的硬件知识和设备。如何能快速入门嵌入式系统?邀请了狗汪汪,分享针对I2C协议的实战案例和相应的工具使用。希望可以一起来Hackingall the Things。

本文由阿里云先知社区小冰推荐。

狗汪汪玩转嵌入式——I2C协议分析

0x01 I2C协议基础

凡是接触过嵌入式系统的朋友,对I2C协议一定不会陌生。其与UART,SPI和JTAG等并列为最常见调试协议。I2C 全称为Inter-IntegratedCircuit,是由飞利浦公司设计的一种多主从架构的串口通讯协议。

狗汪汪玩转嵌入式——I2C协议分析

I2C协议非常简单,仅有Clock 和 Data 两条数据总线,外加 Ground.通常是1个主设备和多个从设备的架构。在通讯速度上分别为100khz,400khz,1Mhz,3.2Mhz。在运用方面对速度没有高要求的,都可以使用I2C进行通讯。比如PC风扇的温度和电池的电压数据采集等,每个I2C设备都各有一个读和写地址,只有知道了这个读写地址才能跟其通讯。

狗汪汪玩转嵌入式——I2C协议分析

除此之外许多用来存储系统配置和参数的EEPROM芯片自身也支持I2C协议,比如IBM Thinkpad 系列用来存储BIOS密码的EEPROM,就是通过I2C协议在MCU与EEPROM 之间进行交互。

狗汪汪玩转嵌入式——I2C协议分析

狗汪汪玩转嵌入式——I2C协议分析

0x02 神器BusPirate

工欲善其事必先利其器,拥有一款神器对嵌入式设备Hacking将起到事半功倍的作用。BusPirate 是由Dangerous prototypes设计出品的一款硬件hacking 瑞士军刀,支持多项常见协议并可跨平台Windows/Linux/MAC,并拥有丰富的帮助文档。

BusPirate可以Sniffing 和读写 I2C等协议,同时还可对AVR 等芯片进行编程操作,在操作上也是非常简单,只需用minicom以115200 波特率跟BusPirate连接便可。

狗汪汪玩转嵌入式——I2C协议分析

BusPirate支持协议如下:

狗汪汪玩转嵌入式——I2C协议分析

BusPirate 接口连接示意图:

狗汪汪玩转嵌入式——I2C协议分析

BusPirate 命令列表:

狗汪汪玩转嵌入式——I2C协议分析

0x03 攻击案例 -- 数字密码锁

接下来我们来看一个通过分析I2C 协议,从而破解门锁密码的实战案例,我们的目标是这款 型号为YL99的数字密码锁。这款密码锁完全依赖于用户设置的数字密码,也许对某些人来说不需要带一堆钥匙的确方便了很多。

因为YL99 是完全电子化的的门锁,所以提供了普通机械锁没有的功能。比如YL99 拥有多 个功能不同的账户,Master账户:可用于设置管理用户密码(默认0123#)。普通账户:用于存储普通用户密码。YL99 同时还提供了贴心的防密码泄漏功能,操作方法:键入起始码(0) +跟随用于掩盖的任意几位数字+ 跟随正确密码 + # (确认结束). 通过这样的方式就算边上有人,也不怕被看到正确密码了。

狗汪汪玩转嵌入式——I2C协议分析

但是千里之堤,溃于蚁穴。YL99 的设计缺陷,竟能让人从外部将锁的键盘部分分离,从而访问到内部PCB 主板。而玩过硬件Hacking的朋友都知道,被人轻易访问到内部PCB 主板部分是大忌。

狗汪汪玩转嵌入式——I2C协议分析

在YL99被打开后主板结构便展现眼前。除了YL99 使用的元器件外,我们还可以清晰看到主板上还标有一个Reset复位触点。那么这个时候我们便可以通过短接复位触点和Ground 的方式将密码恢复到出厂设置,从而得到bypass的目的。但这方法的短处也非常明显,在bypass 的时候每次都需要卸螺丝,而且如果恢复到出厂值,很容易就被人发现了。

狗汪汪玩转嵌入式——I2C协议分析演示视频如下:https://www.youtube.com/watch?v=4sqDXkUQbqM

不过好戏才刚开始。我们在主板上还发现了YL99使用的MCU em78p156e 和用来存储密码信息的EEPROM 24C02。通过阅读24C02的datasheet 我们得知其使用I2C 协议和MCU 通讯,同时datasheet 也清晰的标出了芯片管脚的用途,比如I2C 使用的SCL(时钟频率)和SDA(数据总线)。

狗汪汪玩转嵌入式——I2C协议分析

狗汪汪玩转嵌入式——I2C协议分析

终于我们的神器BusPirate要派上用场了。我们首先用数据线将24C02的I2C 管脚和BusPirate的对应接口连接起来。

狗汪汪玩转嵌入式——I2C协议分析

狗汪汪玩转嵌入式——I2C协议分析

随后通过minicom 或其他serial tools 进入Buspirate的I2C调试模式。

狗汪汪玩转嵌入式——I2C协议分析

在I2C 的调试模式中,有个非常有用的功能I2C sniffer。通过它我们可以监控I2C 的数据,用过WIRESHARK 的朋友一定不会陌生。

狗汪汪玩转嵌入式——I2C协议分析

开启了I2C Sniffer 模式后,我们便可开始观察MCU 和 EEPROM之间的密码交互。比如YL99 的密码输入过程为起始码(0) + 正确密码 +结束确认(#)。

通过观察发现在按下结束确认(#) 后,MCU 便向24C02 发送密码验证请求。但随后致命的设计错误出现,EPPROM 24C02将正确的密码以明文的方式发回给MCU 以求完成密码验证过程,而这过程我们通过BusPirate 的I2C sniffer一览无遗。

狗汪汪玩转嵌入式——I2C协议分析

▲如图:因为使用的little endian 所以密码 123 和456 会反着显示

0X04 总结

通过本文的介绍和实践案例,相信大家对I2C协议和利用方式有了一定的了解。剑走偏锋,反其道行之。攻击者往往将系统的短板作为攻击点,倘若某款嵌入式系统的设计者仅仅考虑到软件层面的安全,而攻击者又能得到物理访问的话,那些防御方式便形同虚设。同时嵌入式产品往往面临上市后便难以升级的困难,一旦攻击方式曝光由此给产品带来的损失是巨大的,因此安全产品在设计之初即应将安全考虑进去。

0x05 参考文献

https://learn.sparkfun.com/tutorials/i2c

http://dangerousprototypes.com/docs/Bus_Pirate

https://code.google.com/archive/p/the-bus-pirate/

http://dangerousprototypes.com/blog/bus-pirate-manual/i2c-guide/

http://arduino.ada-language.com/recovering-ibm-thinkpad-t42-bios-password-with-avr-ada-and-arduino.html