本期作者/0xc4se
背景
在前面的小節(jié)中,我們學習了許多IOT漏洞挖掘方面的知識。在漏洞挖掘過程中,想要對二進制程序改進分析,我們就需要獲取目標設備的文件系統(tǒng),這樣才能更好的逆向分析設備程序的運行邏輯,從而發(fā)現(xiàn)其中的漏洞點。然而并非所有設備固件中的文件系統(tǒng)都可以讓我們輕易獲取,對于已經(jīng)被加密的固件,我們在解密過程中也需要具備一些分析思路。很多大佬已經(jīng)寫過許多固件解密思路,這里我們站在巨人的肩膀上看世界,總結一下在解密固件的幾種常用的思路和方法。
加密固件識別
binwalk工具識別
使用binwalk查看一下固件的信息,如果是未加密的固件,通??梢話呙璩鰜硎褂昧撕畏N壓縮算法。第二種方式就是查看固件的熵值。熵值是用來衡量不確定性,熵值越大則說明固件越有可能被加密或者壓縮了。這個地方說的是被加密或者壓縮了,被壓縮的情況也是會讓熵值變高或者接近1的,下圖為使用"binwalk -E"命令查看一個加密固件。
固件解密
設備固件中的解密程序
解密固件的最簡單方法是在固件中查找解密程序。如DLink設備的DIR882系列固件,我們進入官網(wǎng)瀏覽固件信息。
下載1.30版本固件和1.0.1版本固件,使用"binwalk 固件名"命令分析兩個固件,發(fā)現(xiàn)新版本的固件被加密,而舊版本固件為未加密狀態(tài)。
在官網(wǎng)瀏覽其他版本時發(fā)現(xiàn),發(fā)現(xiàn)在1.10版本,官方提供了倆個固件,有一個版本固件名稱為中間版本(未加密)。所以猜測這里很有可能是設備固件在出廠發(fā)布時未加密,也不包含任何解密例程。這里較新版本(v1.10)的固件與含有解密程序的未加密固件一起提供,以供將來加密固件更新,后續(xù)固件版本是加密的。在這種情況下,我們可以從中間版本獲取解密程序,并使用它來解密其他加密版本。
下載DIR882A1_FW104B02_Middle_FW_Unencrypt.bin和DIR882A1_FW110B02.bin文件,使用"binwalk -Me 固件名"命令對未加密固件的文件系統(tǒng)進行提取。
在未加密固件的文件系統(tǒng)中,尋找可能的解密程序。使用grep搜索時,搜索字符串"decrypt"、"dec"、"extract"等,可以幫我們快速定位解密程序或腳本。
使用qemu-static對尋找的程序進行運行測試,這里發(fā)現(xiàn)imgdecrypt程序就是固件解密程序。使用imgdecrypt對v1.10版本和v1.30版本固件解密,發(fā)現(xiàn)程序都可以正常解密。
另一個zyxel設備固件解密實例中(https://www.iotsec-zone.com/article?id=237),binwalk雖然解不出固件的文件系統(tǒng),但是binwalk解出了一些文件,這些文件中就是對固件進行解密的程序。通過對程序進行逆向分析,使用相應參數(shù)進行運行即可解密出文件系統(tǒng)。
使用解密出的密碼對固件的文件系統(tǒng)進行提取。
明文攻擊
明文攻擊是一種密碼分析技術,其中攻擊者擁有一些已知的明文和對應的密文。這些已知的明文-密文對能夠幫助攻擊者破解加密算法或密鑰,一般在CTF競賽中經(jīng)常遇到。明文攻擊同樣可以用于固件解密,當設備廠商提供的固件壓縮包中具有說明文檔、配置文件,且需要提取加密壓縮固件中也同樣具有相同的文件時,就可以進行明文攻擊(壓縮算法需相同)。確定相同文件就是比對crc32的值,下面使用"crc32 ./*"命令查看每個文件的crc32值。
這里發(fā)現(xiàn)需要提取加密壓縮固件中也同樣具有相同的文件,并且查看這里的算法也是具備明文攻擊的條件。接下來,我們就可以使用工具對加密固件進行提取。
windows的明文攻擊破解工具可以用ARCHPR,linux下可以使用pkcrack。
解密后進行解壓縮就可以獲取設備固件的文件系統(tǒng)。
根據(jù)固件特征猜測加密
在defcon27議題中(https://media.defcon.org/DEF%20CON%2027/DEF%20CON%2027%20presentations/DEFCON-27-grichter-Reverse-Engineering-4G-Hotspots-For-Fun-Bugs-Net-Financial-Loss.pdf),g richter大佬分享了挖掘Nighthawk m1設備漏洞的一些方法,其中里面的固件解密思路也非常值得我們學習。由于作者這里沒有Nighthawk m1設備,所以完整流程并未復現(xiàn)成功。下面貼了幾種原作者的圖。解密大致思路為,發(fā)現(xiàn)固件被加密時,查看固件發(fā)現(xiàn),固件中存在大量重復的數(shù)據(jù)。如下圖中的"8040 4c21 ... 8f 6e",一般在一個文件中,大量的重復數(shù)據(jù)可能都是00或ff,如果這里是異或加密,那么對這些數(shù)據(jù)重新進行異或可能解密出固件。
使用下面的命令,對文件中重復出現(xiàn)相同數(shù)據(jù)的行進行次數(shù)統(tǒng)計并排序,排序后發(fā)現(xiàn),有64行數(shù)據(jù)重復出現(xiàn)了3800次左右,其他數(shù)據(jù)則是500次以下,64行的16字節(jié)數(shù)字恰好是1024字節(jié),也就是說密鑰長度為1024字節(jié)。
hexdump -v -C Mr1100.spk | cut -d" "-f3-20| sort| uniq -c| sort-nr | head -n 100
緊接著作者根據(jù)上面固件中出現(xiàn)重復塊的現(xiàn)象進行搜索后發(fā)現(xiàn),Nighthawk m1設備固件和Sierra Wireless路由器固件極其相似。對比后就可得知大致加密流程為:固件的前 0x100 個字節(jié)不完全為“空”(這里是間歇性的“空”/“非空”),而是一大塊“非空”數(shù)據(jù)從 0x100 開始,到 0x140 結束。然后有一個從0x170到0x190的非空段。然后另一個“非空”段從0x290開始,然后在0x2F0處開始一個空行,然后是來自0x300的更多非空數(shù)據(jù)。
得到大致加密思路后,通過利用該加密特點對Nighthawk m1設備的程序進行逆向分析,得到了解密部分的代碼如下。下圖中的AES_set_decrypt_key函數(shù)為加密標頭的解密函數(shù)。
程序在每個加密標頭上調用 AES_decrypt 函數(shù)。
由于這里沒有設備,無法根據(jù)上面逆向分析的代碼編寫解密腳本,效果如下。
不同鏡像的解密程序
不同鏡像的解密程序,這里的以fortigate為例,具體思路為fortigate的硬件設備固件都被加密,而fortigate提供多個鏡像版本(比如vmx和kvm版本的固件),這些固件我們可以無條件獲取,廠商在發(fā)布同一個系列固件中,很有可能使用同一份代碼。那么我們可以通過對fortigate不同鏡像版本的固件進行分析,就可以找到fortigate的通用解密代碼,然后編寫解密程序就可以獲得其他版本固件的文件系統(tǒng)。這里的測試版本為VMX-v7.2.4.F-build1396,設備固件為90E-v7.2.4.F-build1396。首先我們掛載fortigate的虛擬卷,將里面的rootfs.gz復制出來并解壓。
使用系統(tǒng)自帶的解包程序對壓縮文件進行解包處理。
通過搜索字符串尋找解密程序,猜測init程序中存在解密部分。
通過搜索固件升級,固件下載等字符串查找定位,固件升級時觸發(fā)的解密代碼,下圖中便是fortigate的固件解密代碼。
我們獲得了解密代碼后,需要查找解密的密鑰,通過對固件的加密模塊進行分析后發(fā)現(xiàn),我們可以對密鑰進行爆破。這里直接使用大佬已經(jīng)寫好的腳本(https://github.com/BishopFox/forticrack)進行測試,最終的解密效果如下圖。
尋找內核解密程序
尋找內核中的解密程序,我們從芯片中進行提取的固件后,可以從內核中獲取固件解密的程序。以某快設備為例,我們對其固件進行解密分析(https://www.iotsec-zone.com/article?id=218),下面官方提供的設備固件壓縮包中,文件系統(tǒng)rootfs被加密,而vmlinz沒有被加密,我們可以使用"extract-vmlinux.sh"腳本((無符號表))或者vmlinx-to-elf工具(有符號表)對內核鏡像中提取內核。
對照linux內核源碼,我們使用ida對內核文件進行逆向分析,因為文件系統(tǒng)被加密,所以我們直接查找和定位initramfs代碼部分(內核2.4版本前為initrd)。最后找到對文件系統(tǒng)的解密代碼,代碼如下。
通過提取核心解密代碼編寫解密腳本,我們就可以對文件系統(tǒng)進行解密。
同理,思路向后延伸,當內核也被加密時,我們可以對提取出來的uboot.bin部分進行分析后并發(fā)現(xiàn)具有可利用信息,例如前面小節(jié)中的某華設備。
總結
固件解密在安全評估、漏洞分析和逆向工程中起著重要作用,通過解密固件,可以更加輕松地查找和分析程序中的脆弱點和設計缺陷。在這一小節(jié)中,我們學習并總結了幾個固件解密的分析思路和方法,整體的大致思路為尋找設備系統(tǒng)運行所有環(huán)節(jié)中可能存在解密功能的部分。
審核編輯:湯梓紅
-
物聯(lián)網(wǎng)
+關注
關注
2911文章
44803瀏覽量
375032 -
固件
+關注
關注
10文章
559瀏覽量
23089 -
程序
+關注
關注
117文章
3793瀏覽量
81209 -
文件系統(tǒng)
+關注
關注
0文章
287瀏覽量
19930
原文標題:物聯(lián)網(wǎng)安全-加密固件分析
文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論