IoT漏洞分析最重要的一个环节是在固件中获得固件和文件系统。固件获取的方法也各式各样,硬核有直接将flash拆分到编程器读取,通过硬件调试程序UART/SPI、JTAG/SWD获取到控制台访问;网络派有中间人攻击来进行OTA升级,从制造商的网页进行下载;社工派有UART/SPI、JTAG/SWD获得访问;社工派有一名鱼儿进行PY。有时获得固件千辛万苦,心花怒放地使用binwalk-Me一把梭哈,最后发现,固件已经加密了,惊不惊喜,刺不刺激。
对于如何解密加密固件,有以下几种方法:追溯旧的未加密固件,在此找到负责解密固件的程序,然后解密最新的加密固件。这里操作使用的设备是前几天被爆料出现漏洞的路由器D-LinkDIR3040US,固件使用最新加密版本1.13B03,旧固件使用的是已解密固件版本1.13B02。
确定固件是否已加密。一般而言从官方网站下载到固件时,都是先用zip格式进行一次压缩,一般而言可以先正常解压一波。
用binwalk来查询固件的信息,如果是未加密的固件,一般而言可以扫描它所使用的压缩算法LZMA,LZO,LAMA2对于常用的嵌入式文件系统squash-fs是常见的。下面是使用binwalk分别查询未加密固件(netgear)和加密固件(DIR3040)的信息。
另一个方法是查询固件的熵值。熵是用来度量不确定性的,熵值越大则表示固件加密或压缩的可能性越大。这就是加密或者压缩,在压缩的情况下,熵也会变得更高或更接近1,以下是使用binwalk-E查询未加密的固件(RAX200)和加密固件(DIR3040)。RAX200与DIR3040对比起来,与后者相比,它的所有直接性能都接近1。