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