如何在物聯(lián)網(wǎng)設(shè)備中尋找復(fù)雜的惡意軟件(下)
如何在物聯(lián)網(wǎng)設(shè)備中尋找復(fù)雜的惡意軟件(上)
物聯(lián)網(wǎng)固件分析
有各種各樣的開放源代碼和封閉源代碼工具可以幫助進(jìn)行固件分析,最好的方法是結(jié)合由經(jīng)驗(yàn)豐富的固件分析師建議的工具和技術(shù)。
讓我們從最全面的固件分析工具Binwalk開始,Binwalk掃描固件二進(jìn)制文件并查找已知的模式和簽名。
它為物聯(lián)網(wǎng)設(shè)備中使用的各種啟動(dòng)程序和文件系統(tǒng)收集了大量簽名,它還具有用于通用加密和壓縮算法的簽名,以及用于解壓縮和解碼的相應(yīng)例程。
Binwalk還能夠提取其在固件二進(jìn)制文件中找到的組件。
以下屏幕截圖顯示了對(duì)示例固件二進(jìn)制文件的Binwalk掃描的輸出:
Binwalk掃描輸出
在這個(gè)屏幕截圖中,Binwalk已經(jīng)找到并打印出了頭文件、引導(dǎo)加載程序和Linux內(nèi)核以及文件系統(tǒng)。還有從標(biāo)頭文件和組件本身提取的元數(shù)據(jù)細(xì)節(jié),比如每個(gè)組件的類型和大小、CRC校驗(yàn)和、重要地址、CPU架構(gòu)、圖像名稱等等?,F(xiàn)在,你可以繼續(xù)使用Binwalk本身來提取上述部件,或者根據(jù)Binwalk找到的開始偏移量手工計(jì)算大小并提取部件。
在解壓縮固件組件之后,你可以繼續(xù)對(duì)文件系統(tǒng)進(jìn)行解壓縮、解壓甚至掛載,并開始研究文件系統(tǒng)內(nèi)容。你還可以查看反匯編程序中的引導(dǎo)加載程序代碼,或者通過調(diào)試器對(duì)其進(jìn)行調(diào)試。
但是,進(jìn)行固件分析并不總是那么簡單。固件種類繁多,以至于了解其結(jié)構(gòu)和提取組件通常非常復(fù)雜。
讓我們仔細(xì)看看另一個(gè)示例固件,并嘗試了解其結(jié)構(gòu)。
1. Binwalk firmware.bin
Binwalk掃描未顯示任何結(jié)果,這意味著Binwalk找不到任何已知的簽名。
Binwalk掃描輸出
在本文的示例中,我們可以看到簡單的Binwalk掃描不是很有幫助。但是,請(qǐng)注意,還有其他工具和技術(shù)可以用來了解有關(guān)此固件結(jié)構(gòu)的更多信息。
2. 文件firmware.bin
接下來讓我們嘗試固件二進(jìn)制文件上的Linux文件實(shí)用程序。
文件實(shí)用程序輸出
文件實(shí)用程序?qū)⑽募愋惋@示為Targa圖像數(shù)據(jù),通過查看二進(jìn)制文件的開頭,并對(duì)Targa圖像數(shù)據(jù)簽名進(jìn)行Google搜索,得到的結(jié)果顯然是假的。
固件二進(jìn)制文件的第一個(gè)字節(jié)
這是因?yàn)楣碳募牡谝粋€(gè)字節(jié)0x01010000與Targa圖像數(shù)據(jù)簽名匹配,參見上面的截圖。
3. Binwalk:E firmware.bin
讓我們使用Binwalk的另一項(xiàng)功能,并檢查固件二進(jìn)制文件的熵。
使用“ -E”命令選項(xiàng)運(yùn)行Binwalk會(huì)給出固件文件的熵圖以及一些其他詳細(xì)信息,例如下降和上升熵的偏移量。
熵的詳細(xì)信息
熵圖
熵值接近1表示壓縮,較低的熵值表示未壓縮和未加密的區(qū)域。從上面的屏幕截圖可以看出,偏移量55296 (0xD800)是高熵部分的開始。
還有另一個(gè)工具可以幫助可視化二進(jìn)制文件,借助binvis.io,你可以在兩個(gè)并排的窗格中查看固件文件的內(nèi)容及其可視化,不同的部分根據(jù)它們的熵(binvis.io)用不同的顏色表示。
可視化binvis.io創(chuàng)建的固件
4. Binwalk:A firmware.bin
Binwalk還可以掃描二進(jìn)制文件以查找常見的可執(zhí)行操作碼簽名。
在文件中找到的第一個(gè)函數(shù)序言
在文件中找到的最后一個(gè)函數(shù)序言
正如我們從上面的截圖中看到的,操作碼簽名檢查的結(jié)果實(shí)際上非常有用!首先,我們可以看到固件屬于ARM設(shè)備。
其次,如果我們考慮第一個(gè)和最后一個(gè)函數(shù)序言簽名的偏移量,我們會(huì)得到一個(gè)指示,即這些是固件二進(jìn)制文件中包含代碼的部分。
從屏幕截圖中,我們還可以看到在函數(shù)0xD600處找到了最后一個(gè)函數(shù),該地址僅在熵上升部分之前的0x200字節(jié)處。由此,我們可以進(jìn)行有根據(jù)的猜測,即該偏移量很可能是啟動(dòng)加載程序代碼的結(jié)尾和壓縮內(nèi)核模塊的開頭。
5. Hexdump -C
- hexdump -C firmware.bin | grep -C 4 -e “^\*$”
既然我們知道了固件文件中某些組件的大致邊界,可以嘗試通過查看這些區(qū)域周圍固件文件的實(shí)際內(nèi)容來確認(rèn)這些邊界偏移量。
如果我們通過十六進(jìn)制轉(zhuǎn)儲(chǔ)運(yùn)行固件文件,并查找僅包含星號(hào)“*”的行,我們可以找到編譯器為每個(gè)固件組件添加的填充。
固件二進(jìn)制文件的內(nèi)容
固件二進(jìn)制文件其他部分的內(nèi)容
Hexdump實(shí)用程序的輸出以及之前的發(fā)現(xiàn),確認(rèn)了包含ARM代碼的固件二進(jìn)制文件中的這一部分,我們先前懷疑此代碼屬于啟動(dòng)加載程序。
6. 字符串:radix = x firmware.bin
接下來,讓我們從固件中提取ASCII字符串及其偏移量。
固件二進(jìn)制文件中找到的最后一個(gè)ASCII字符串
查看上面的屏幕截圖,有一些與模塊入口點(diǎn)相關(guān)的字符串,這些字符串可以很好地表明所涉及代碼的性質(zhì)。
在下面的屏幕截圖中,我們可以從固件二進(jìn)制文件的開頭看到一些其他有趣的字符串。例如,“MctlApplet.cpp”庫名稱可用于從同一開發(fā)人員中查找其他二進(jìn)制文件或程序包,擁有來自同一供應(yīng)商的其他固件映像有助于更好地了解二進(jìn)制結(jié)構(gòu)。
來自同一截屏的另一個(gè)有趣的字符串是“Not Booting from softloader”,它可以指示進(jìn)程狀態(tài)或者這個(gè)模塊的性質(zhì)。
包含“Assert()”的字符串可以建議有關(guān)代碼的不同信息,在固件開發(fā)中,使用Asserts是一種常見的做法,因?yàn)樗梢詭椭_發(fā)人員在開發(fā)和生產(chǎn)階段調(diào)試和故障調(diào)試代碼。
在固件二進(jìn)制文件中找到第一個(gè)ASCII字符串
7. IDA:parm firmware.bin
可以看到,我們已經(jīng)從此固件二進(jìn)制文件中收集了許多有價(jià)值的信息,這些信息在一開始看起來是相當(dāng)難以理解的。
現(xiàn)在讓我們使用IDA來檢查代碼,由于此二進(jìn)制文件不是帶有顯示ISA的標(biāo)準(zhǔn)標(biāo)頭的ELF文件,因此我們需要明確告知IDA使用ARM指令集來反匯編代碼。
IDA中部分函數(shù)的反匯編視圖
上面來自IDA的屏幕截圖顯示了如何使用前面分析步驟中找到的字符串來幫助查找對(duì)內(nèi)核模塊入口點(diǎn)的調(diào)用。
8. dd
現(xiàn)在,可以繼續(xù)提取固件二進(jìn)制文件的一部分,我們的分析發(fā)現(xiàn)它是引導(dǎo)加載器模塊。
9. Qemu
從固件二進(jìn)制文件中提取了所有模塊(文件系統(tǒng)內(nèi)容,內(nèi)核模塊和其他組件)之后,我們可以使用Qemu運(yùn)行二進(jìn)制文件,甚至模擬與本機(jī)不同的體系結(jié)構(gòu)的文件,并開始與他們互動(dòng)。
總結(jié)
物聯(lián)網(wǎng)設(shè)備的數(shù)量每天都在增加,從工業(yè)控制系統(tǒng)、智能城市、智能汽車到移動(dòng)電話、網(wǎng)絡(luò)設(shè)備、個(gè)人助理、智能手表和各種各樣的智能家電。
物聯(lián)網(wǎng)設(shè)備源自已經(jīng)存在多年的嵌入式系統(tǒng),由于嵌入式設(shè)備的軟件性質(zhì)不同,因此與通用計(jì)算機(jī)系統(tǒng)相比,嵌入式設(shè)備軟件的制造和開發(fā)始終具有不同的優(yōu)先級(jí)。這些優(yōu)先次序是由設(shè)備本身有限和具體的功能、基礎(chǔ)硬件有限的能力和能力以及開發(fā)的代碼無法用于后來的修改和修改而形成的。然而,物聯(lián)網(wǎng)設(shè)備與傳統(tǒng)嵌入式系統(tǒng)有顯著的區(qū)別?,F(xiàn)在大多數(shù)物聯(lián)網(wǎng)設(shè)備運(yùn)行在硬件上,這些硬件具有與通用計(jì)算機(jī)系統(tǒng)類似的能力。
隨著物聯(lián)網(wǎng)設(shè)備的日益普及,它們現(xiàn)在正在訪問和控制我們生活的許多方面以及日常交互。物聯(lián)網(wǎng)設(shè)備現(xiàn)在可以潛在地為惡意攻擊者提供前所未有的攻擊機(jī)會(huì)。這凸顯了物聯(lián)網(wǎng)設(shè)備中安全性的重要性,也顯示了圍繞該主題進(jìn)行研究的必要性。好消息是,目前已經(jīng)有許多工具和技術(shù)可用于協(xié)助該主題的研究。
本文翻譯自:
https://www.trendmicro.com/en_us/research/20/i/exploitable-flaws-found-in-facial-recognition-devices.html