物聯網IoT安全教程(四)-- 解密路由器固件

本次我們要研究的是路由器Dlink-882的固件,下載地址在ftp://ftp2.dlink.com/PRODUCTS/DIR-882/REVA/,其中的zip文件就是各版本的固件。
1

解壓出來的固件版本從舊到新依次爲:FW100B07 --> FW101B02 --> FW104B02 --> FW110B02 --> FW111B01 --> FW120B06 --> FW130B10,其中下圖標記的兩個固件是打包在同一個zip固件包中的,這裏大家應該可以察覺到,FW104B02 有點特別,而且通過名字我們也猜測到它是未加密的中間版本。
2

目前最新的版本是FW130B10,通過binwalk進行解析,會發現該固件被加密了,binwalk無法解析。
3

再來看下最早版本的固件FW100B07,使用binwalk解析是能直接提取的,沒有被加密過。
4

綜上,我們得知了,固件版本迭代的過程經歷了固件未加密到固件加密,說明中間肯定有個中間版本(類似下圖V 2.0),下圖是固件從未加密到加密的升級原理圖。
5

從binwalk解析結果來看,能確定FW100B07、FW101B02、FW104B02是未加密的,而FW104B02之後的版本,FW110B02、FW111B01、FW120B06、FW130B10均是加密的,那麼FW104B02就可以確定是中間版本了。
6

確定了FW104B02是中間版本後,我們大概率可以從FW104B02的固件系統中找到解密程序了,方法是在/bin和/usr/bin目錄下尋找decrypt字樣的程序,很幸運,我們在bin目錄下找到了imgdecrypt,這個程序猜測就是解密程序了。
7

對比下最早版本的FW100B07版本,/bin目錄下就沒有imgdecrypt程序。
8

接下來就可以分析下imgdecrypt的加密邏輯了,看下如何破解加密的固件,通過file命令,我們得知該程序是MIPS架構的可執行文件。
9

使用IDA分析,好吧,完全看不懂,放棄了。。這個是mips的彙編指令,跟x86彙編的語法不一樣,感興趣的同學可以學一下。
10

簡單地從導入表中看下函數,發現有RSA、AES,看來是較複雜的加密方式,不是簡單的異或運算,頭疼。
11

既然逆向不出加密算法,是不是就沒辦法解加密固件了呢?並不是,我們可以直接本地運行解密程序imgdecrypt,來解被加密的FW120806固件。由於該程序是mips架構的,還得藉助qemu-mipsel-static模擬器來運行。
12

使用qemu-mipsel-static之前要用chroot將當前固件系統路徑設置爲root路徑,不然會提示缺少一些系統庫(找不到庫路徑)。下圖,我們就模擬運行imgdecrypt成功了,程序用法很簡單,參數提供待解密的固件路徑就行了。加密成功後,用binwalk就能解析出固件的系統結構了,進而提取固件系統。
13

同樣的,最新的FW130B10版本也能通過該程序進行解密,按照這個邏輯,可能Dlink的其他系列路由器也能通過imgdecrypt解密,大家可以去試一下。
14

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章