注1:本文為湖南底網(wǎng)安全信息技術(shù)有限公司安全團隊原創(chuàng)文章,轉(zhuǎn)發(fā)請注明出處
注2:該文已同步在今日頭條"湖南底網(wǎng)安全"主頁發(fā)布(原"電子技術(shù)論"主頁),鏈接如下:https://www.toutiao.com/article/6789945669256741387/?log_from=a59c9ca98c949_1675651265539
前言
固件分析,一種深入硬件底層(芯片級)的技術(shù)破解方法,經(jīng)常被用于系統(tǒng)攻防對抗、硬件破解、逆向分析等實際工作中,相對其它技術(shù)破解攻擊方法,科學(xué)有效的固件分析因其扒開了破解攻擊對象的“外衣”,直接深入“骨髓”對其邏輯代碼、數(shù)據(jù)存儲、數(shù)據(jù)類別、數(shù)據(jù)屬性等全方面分析,可找出其它攻擊方法無法找出的嚴重漏洞,可對破解攻擊對象形成“致命級殺傷力”。
固件分析,由“固件”和“分析”2個詞組成,看似簡單的4個字,要想有效充分發(fā)揮出其“殺傷力”,其背后人員需要龐大的技術(shù)體系支撐,這些技術(shù)體系并非孤立自成一體,而是環(huán)環(huán)相扣、相輔相成;每項技術(shù)體系、每個技術(shù)點都力求達到熟練甚至精通的標準。除此之外,還需要有超強的心理素質(zhì),在未知二進制“數(shù)據(jù)海洋”里“黑盒”探索,需要耐心、細心、信心,同時還要面對固件分析里的高失敗率,因為很多時候即便你能獲取到固件,由于固件本身的防護(如加殼、私有指令集、差分固件包)或固件分析實力不夠等因素仍然無法找出有效漏洞,你可能會不知所措、迷茫無助甚至焦慮不安,你得到的僅僅是固件文件、一堆冰冷的二進制數(shù)據(jù)而已,除此之外毫無其他用處,這時還得及時調(diào)整心態(tài)和思路繼續(xù)“戰(zhàn)斗”,以上內(nèi)容通俗的講就是對固件分析技術(shù)人員要求很廣的技術(shù)面、很深的技術(shù)點、很強的心里素質(zhì)。
固件分析技術(shù)淺談
上面已提到過,固件分析由“固件”+“分析”兩部分組成,不了解固件,何談分析?“固件分析”--固件之所以在前面想必原因也在此??紤]到篇幅原因,這里對固件只做概要說明,不深究。
什么是固件?
什么是固件(firmware)?怎么理解固件?不同的人有不同的回答,但每種回答都會反映出回答者理解固件分析的思維層次。
固件是什么?固件是軟件的一種,也是一種程序。
固件是什么?固件(Firmware)就是寫入EPROM(可擦寫可編程只讀存儲器)或EEPROM(電可擦可編程只讀存儲器)中的程序(百度百科)。
固件是什么?固件是指設(shè)備內(nèi)部保存的設(shè)備“驅(qū)動程序”,通過固件,操作系統(tǒng)才能按照標準的設(shè)備驅(qū)動實現(xiàn)特定機器的運行動作,比如光驅(qū)、刻錄機等都有內(nèi)部固件(百度百科)。
以上回答都沒錯,我個人的回答是:固件是存儲在可由CPU直接或間接讀取指令/數(shù)據(jù)并可運行的FLASH/ROM芯片里的二進制數(shù)據(jù)集合,這些指令/數(shù)據(jù)集合是根據(jù)CPU內(nèi)核架構(gòu)及型號,將高級編程語言(如C、C++等)由對應(yīng)的編譯器、鏈接器、裝載器生成并通過對應(yīng)的燒寫器將指令/數(shù)據(jù)集合燒寫到對應(yīng)設(shè)備里的存儲芯片中。固件之所以和軟件程序區(qū)分開來,是為了強調(diào)固件側(cè)重于智能設(shè)備、嵌入式設(shè)備、工控設(shè)備里運行的程序,而非PC電腦、服務(wù)器、手機內(nèi)部的程序(只是側(cè)重并非絕對,很多場合手機里的程序也被稱為固件)。
固件的位置是存儲在設(shè)備的FLASH/ROM芯片里,但展現(xiàn)在固件分析人員面前是提取出來后以文件的形式呈現(xiàn)。固件文件的格式并非固定不變,因廠家、設(shè)備不同而不同,目前常見的固件文件格式有:hex、bin、elf、axf、txt、ulmage等,對于固件分析人員,熟悉這些固件文件的內(nèi)部編碼規(guī)則、數(shù)據(jù)塊定義等細節(jié)尤為重要,否則拿到固件你也不認識它,更無從分析它。
固件的由來--編譯、鏈接、裝載
對于固件,不僅知其然,知其所以然也很重要,雖說不同的固件,格式、編碼不同,但其由來大體相同,都是由高級編程語言經(jīng)編譯、鏈接、裝載生成而成,編譯、鏈接、裝載這3步6個字至關(guān)重要,是有效提升固件分析成功率的重點、難點,對固件文件的形成機制、固件文件內(nèi)部函數(shù)構(gòu)造、內(nèi)部指令/RAM/數(shù)據(jù)分配機制、固件啟動運行機制等核心概念的深入理解非常有益。然而也只有深入理解了這些固件相關(guān)知識,才能充分發(fā)揮固件分析的破解攻擊價值。
固件運行機制
熟悉了什么是固件、固件的由來之后,在此,需要熟悉固件的運行機制。不同種類的設(shè)備,其內(nèi)部固件運行的細節(jié)都不一樣,但其運行機制大體類似,一般比較常見的運行機制是:上電boot->uboot->cos->applet,針對不帶操作系統(tǒng)的運行機制一般是:上電-> boot-> applet或上電-> applet。這里僅作簡要說明,實際固件分析過程中,最好是對每一步里每個函數(shù)、每行代碼的功能都做到了如指掌,這樣才能充分發(fā)揮固件分析的破解攻擊價值。
固件分析其它必要技術(shù)
固件分析,離不開電路/器件分析,因此需要具備必要的數(shù)電、模電知識;典型固件分析里,牽涉到固件提取、IO控制查詢、數(shù)字接口驅(qū)動、中斷喚醒、工作模式切換、外圍器件的驅(qū)動等方面,這些都離不開電路/器件分析。
固件分析,需要熟悉常用數(shù)據(jù)通信規(guī)約/協(xié)議簇(如TCP/IP協(xié)議簇、CAN總線),在你分析有關(guān)數(shù)據(jù)通信功能部分的固件時,熟練掌握各類常用數(shù)據(jù)通信協(xié)議和底層對應(yīng)接口,會讓你在固件分析時如虎添翼,得心應(yīng)手。
固件分析,需要熟悉主流CPU/MCU處理器內(nèi)部體系架構(gòu)、內(nèi)部各硬件模塊工作原理(DMA、虛擬內(nèi)存管理、中斷處理、工作模式管理、外圍模塊等)、內(nèi)部存儲及運行機制等,還有熟悉/能看懂并理解主流CPU/MCU匯編語言(寄存器級別操作)也很重要,在分析固件時,對每個函數(shù)的初始化、數(shù)據(jù)處理、代碼跳轉(zhuǎn)、函數(shù)執(zhí)行等方面會讓你臨危不亂、思路清晰。
固件分析,熟悉相關(guān)加解密算法及安全通信、認證機制架構(gòu)/原理,會讓你少走很多彎路,知道如何權(quán)衡利弊得失,避開暗坑,提升固件分析效率。
固件分析,學(xué)會使用對自己有用的相關(guān)工具(包括但不限于:IDAPro、binwalk等)會讓你事半功倍,這些工具會快速提升你的工作效率,讓你進入狀態(tài),花更多的時間精力在固件分析上,而不是在固件分析的準備路上。
固件分析,熟悉主流嵌入式操作系統(tǒng)工作原理及內(nèi)核工作原理(如linux、android等)也至關(guān)重要,然而這個也是最難的,因為要深入了解操作系統(tǒng)內(nèi)核的具體工作流程、任務(wù)調(diào)度機制、數(shù)據(jù)存儲分配細節(jié)、權(quán)限管理、進程隔離保護/運行機制等非常難,非一朝一夕能學(xué)成,需要時間、需要毅力、更需要智商,但是一旦掌握了這些知識,在分析類似的固件時,則很容易找出漏洞,而且是高危漏洞。當然一旦達到此級別,個人認為已是大牛級別、黑客級別了。
編后語
隨著信息安全的普及,固件分析不僅受到黑客愛好者們的青睞,廠家設(shè)計者也越來也重視固件的防護,這無疑會加大固件分析的難度和降低固件分析的成功率,也正是因為這矛與盾的競爭關(guān)系,促使著網(wǎng)絡(luò)技術(shù)的不斷進步,就看隨的步伐塊,步伐慢的人注定會有被攻擊破解的風險。
-
Android
+關(guān)注
關(guān)注
12文章
3936瀏覽量
127413 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209524 -
硬件
+關(guān)注
關(guān)注
11文章
3328瀏覽量
66224 -
固件
+關(guān)注
關(guān)注
10文章
556瀏覽量
23027 -
硬件安全
+關(guān)注
關(guān)注
0文章
13瀏覽量
2462
發(fā)布評論請先 登錄
相關(guān)推薦
評論