一段时间以来,分析和破坏外部加密的HDD一直是我的“爱好”。 我们与同事Joffrey Czarny和Julien Lenoir一起探讨了过去的几种模型: 在这里,我将详细介绍我如何享受与一位同事一起给我带来的乐趣:中国爱国者“爱国者” SK8671,它遵循外部加密HDD的经典设计:用于信息显示的LCD和用于输入PIN的键盘。 免责声明:这项研究是我个人的时间,与我的雇主无关。 有一个错误的PIN计数器(我认为)会在尝试15次后破坏数据。 当然,我们要做的第一件事就是拆除所有东西以识别各种组件。 卸下外壳实际上很无聊,有很多非常小的螺钉和塑料会断裂。 在这里,我们在背面可以看到带状连接器和赛普拉斯CY8C21434 PSoC1微控制器(我通常将其称为“ µC”或“ PSoC”):
CY8C21434使用的是M8C指令集,该指令集记录在《汇编语言用户指南》中。 产品页面指出,它支持CapSense,Cypress的电容式键盘技术,此处使用的技术。 了解什么与什么相关总是很有用的。 这里的PCB有很大的连接器,在连续性测试模式下使用万用表足以确定连接: 右边的下一个连接器是ISSP标头,值得庆幸的是,它与我们在网上可以找到的匹配 最右边的连接器是功能区的夹子,仍在键盘PCB上 黑色正方形包含来自主PCB的CN1连接器的图,电缆连接至LCD PCB。 P11,P13和P4通过LCD PCB链接到PSoCpin 11、13和4。 现在我们知道有什么不同的部分,基本步骤将与先前研究中分析的驱动器相同:
但是,实际上,我并不是真正专注于破坏安全性,而是乐在其中。因此,我改为执行以下步骤:
请注意,这在JMS539上非常有效,因为它在引导时从闪存加载了整个固件。
$ decode_spi.rb boot_spi1.csv dump0.039776:写禁用0.039777:JEDEC读取ID0.039784:ID 0x7f 0x9d 0x21 --------------------- 0.039788:读取@ 0x00x12,0x42,0x00,0xd3,0x22,0x00,[...] $ ls --size --block-size = 1 dump49152 dump $ sha1sum dump3d9db0dde7b4aadd2b7705a46b5d04e1a1f3b125 dump
因此,它可能仅包含JMicron控制器的固件,该固件嵌入了8051微控制器。
查找通信原因的芯片的一种方法是检查通信中是否有有趣的时间/内容。
众所周知,USB-SATA控制器通过CN1连接器和两个功能区连接到屏幕和CypressµC。因此,我们将探针连接到三个相关的引脚:
然后,我们启动Saleae逻辑分析仪,设置触发器并在键盘上输入“123456✓”。这给了我们以下观点:
放大第一个P4突发(上图中的蓝色矩形),我们得到:
您可以在此处看到P4几乎是纯常规信号的70ms,这可能是一个时钟。但是,在花了一些时间了解这一点之后,我意识到这实际上是每次触摸按键时都会发出“哔”声的信号……因此它本身并不是很有用,但是,它是一个很好的标记,可以知道何时PSoC已注册了按键。
但是,在第一张图片中我们有额外的“哔”声,这略有不同:声音为“错误的针脚”!
回到按键,在蜂鸣声结束时进行缩放(再次查看bluerectangle),我们得到:
我们有一个常规模式,在P11上有一个(可能的)时钟,在P13上有数据。请注意,蜂鸣结束后模式如何变化。看看这里发生了什么可能很有趣。
2线协议通常是SPI或I²C,赛普拉斯数据表中说,这些引脚对应于I²C,显然是这样的:
USB-SATA芯片组会不断轮询PSoC以读取密钥状态,默认情况下该状态为“ 0”。然后,当按下键“ 1”时,它将变为“ 1”。
如果输入了有效的PIN,则在按“✓”后的最终通信会有所不同。但是,到目前为止,我尚未检查实际的传输方式,似乎也没有传输加密密钥。