在混沌计算大会(30C3)上,Sean "xobs" Cross、Andrew "bunnie" Huang等知名黑客组成的团队展示了他们的最新成果:部分SD存储卡包含漏洞,可以在卡上执行任意代码。
坏消息是,这可以促成发起中间人攻击(MITM),使得SD卡看上去在做一件事,实际上却在干别的。
好消息是,硬件高手们能够以非常低成本的方式获取大量的微型控制器资源。
事情要从闪存存储的特性说起。闪存,和其它任何东西一样,不可能完美无瑕,缺陷是必然存在的,只不过配合大量的纠错、坏块管理技术才显得那么可靠,而随着闪存工艺的进步,闪存可靠性越来越差,工程师们就不得不开发更复杂的算法。
而这些算法是如此复杂,且严重依赖特定设备,是不可能运行在系统、程序级别的,不得不使用特定的微控制器执行。即便在小巧的SD卡里,也包含主控制器、至少一颗闪存这么两颗芯片。
现代常用的微控制器一般都是基于8051、ARM CPU的定制版,频率高的可以在100MHz左右,还有硬件加速功能,而成本只要0.15-0.30美元(人民币一两块钱),基本可以忽略不计,所以与其费尽力气测试闪存芯片,干嘛不用这么廉价的方案?事实上这就是为什么闪存设备可以比按容量计算纯闪存价格更低的关键原因。
问题在于,硬件抽象层(HAL)是很容易有Bug的,特别是每一种闪存都需要特定的算法,这就导致微型控制器需要面对的HAL非常非常多,想不出事儿那是不可能的。
最关键的是,固件的载入、更新机制几乎是强制性的,特别是对地方控制器来说。一般情况下,固件的操作都是工厂内完成的,但是从来不乏高手,比如那些烧固件来冒充大容量欺骗顾客的奸商——原作者这里特别提到了他在中国看到的这种现象,羞愧……
xobx、bunnie等人在报告中提出,他们在Appotech AX211、AX215微型控制器里发现了一个简单的、通过制造商保留指令发送的“敲门”序列,会让控制器进入固件载入模式,这时候存储卡就会毫无保留地接受此后的512个字节代码,然后执行。
由此,黑客们借助自己的开源硬件平台Novena和定制的适配卡,逆向工程了8051微控制器的绝大多数功能寄存器,结果无需厂商私有文档就为该控制器开发了新的应用。
再然后怎么利用,那就看你想干啥了,是好是坏全在人心。
Appotech只是个微不足道的微型控制器厂商,还有很多你不知道的名字比如Alcor Micro、Skymedi、Phison、SMI,以及很多如雷贯耳的大厂比如闪迪、三星。他们的产品各有各的技术、算法、固件,是否有漏洞待查,但是至少三星的一个eMMC方案使用了有Bug的ARM指令集。
从安全的角度讲,这意味着黑客只需要一张小小的SD卡,就可以随意嵌入代码、发动恶意攻击,或者获取机密资料,而目前是没有统一防范措施的。
不过从DIY、黑客精神方面看,微型控制器有了新玩法。Arduino 8-bit 16MHz微型控制器需要花大约20美元,而拥有更强控制器、大容量闪存的SD卡才几个钱?