VxWorks韌體分析方法總結

2022-08-15 01:18:09 字數 2463 閱讀 7091

最近研究基於vxworks系統的iot裝置的韌體分析方法,將學習心得記錄於此,以備將來的查詢需要。

vxworks是美國windriversystem公司(風河公司)推出的乙個rtos(實時作業系統),憑藉良好的持續發展能力、高效能的核心以及友好的使用者開發環境,在嵌入式實時作業系統領域佔據一席之地。自從2023年首次問世以來,vxworks系統版本經歷了5.x,6.x到如今的7版本。vxworks系統憑藉其優秀的實時性佔據著不小的市場份額,包括nasa的火星探測器、波音787客機、網路路由器等,市場範圍跨越各種安全領域。

按照所執行的作業系統區分,嵌入式iot裝置可以大致上分為基於linux和基於vxworks的兩類。vxworks支援幾乎所有現代市場上的嵌入式cpu架構,包括x86系列、mips、powerpc、freescale coldfire、intel i960、sparc、sh-4、arm、strongarm以及xscale cpu。

使用ida pro、ghidra等反彙編工具進行分析時,需要了解韌體的載入位址,否則無法正確的分析韌體。下圖所示為填寫韌體載入位址前後的函式識別情況的對比,可以看出確定了韌體載入位址之後函式的識別度更高。

通常韌體檔案會使用elf格式進行封裝,因此可以使用readelf等工具對頭部檔案進行分析,進而得到韌體的載入位址。ida pro已經整合了這個功能,可以直接分析出常見的韌體的載入位址。

如圖所示為vxworks韌體在mips架構中的記憶體分布圖,可知韌體載入位址與棧初始化位址相鄰,可以通過定位棧初始化位址確定韌體的載入位址。

那麼如何定位棧初始化位址呢?那就是尋找棧指標暫存器sp的位置。根據vxworks官網給出的initial stack的說明,可知initial stack是usrinit()函式的初始化棧。

又因為usrinit()是vxworks系統引導後的執行的第乙個函式,因此可以通過在ida中尋找sp暫存器首次出現的位置(此時的ida並沒有指定韌體載入位址),通過sp的值確定棧初始化的值,從而確定韌體的載入位址。

如果所示,sp暫存器中儲存0x80000ff0,因此韌體的載入位址應該是0x80001000。

這個方法在原理上同2.2的方法一樣,但是需要一定的計算。根據usrinit()的描述,第乙個跳轉的函式就是負責初始化bbs區的函式,因此可以尋找第乙個跳轉的指令的位置;還有另外乙個方法確定初始化bbs區的位置,由於在系統啟動過程中vxworks會使用bzero函式對bss區的資料進行清零,所以可以在韌體中用命令grep -r bzero查詢bzero字串出現的位置,此方法可以作為驗證。

通過焊接uart介面檢視系統引導過程的串列埠輸出;通過查閱開發者手冊等。

如果韌體本身已經編入了符號表,那麼可以使用binwalk確定符號表的位置。

vxworks系統的符號表按照每16個位元組一組,前四個位元組用0x00進行填充,第二個四位元組表示符號名字串在記憶體中的位置,第三個四位元組表示符號在記憶體中的位置,最後四個位元組代表符號的型別,如0x0500表示函式名。

但是如果分析韌體沒有得到符號表,可能存在兩種可能:一種是韌體本身就沒有編入符號表,這種情況使得函式分析變得比較困難;另一種是符號表被開發者隱藏了起來,防止韌體被順利逆向。

如何尋找隱藏了的符號表還在學習中,之後會另開一篇專門介紹。

在ida pro中,函式名的修復需要編寫指令碼,用符號表中的函式名替換當前無意義的函式名。在ghidra中,載入完韌體之後可以執行vxhunter指令碼,將函式名替換為符號表中的函式名。

ghidra修復完函式名之後的效果,可以很明顯的看出施耐德plc乙太網模組韌體noe77101.bin韌體中所存在的後門賬戶漏洞cve-2011-4859。

韌體提取方法總結與手動解壓

0x01簡述 ftp協議或者是http協議的get請求 不過一般情況下使用的是下面這種燒錄器 在這裡插入描述 補充小技巧 截圖來自 0x03韌體映像檔案解壓 檢視十六進製制檔案hexdump c bin hex.out n 設定要輸出的字串含有的最少的字元數 c 輸出規範的十六進製制和ascii碼 ...

Vxworks訊號量分析

vxworks訊號量分析 wind 核心中有二進位制訊號量 計數訊號量和互斥訊號量三種型別,為了使應用程式具有可移植性,還提供了 posix 可移植作業系統介面 訊號量。在 vxorks 作業系統中,訊號量是實現任務同步的主要手段,也是解決任務同步問題的最佳選擇。關於互斥的實現 使用二進位制訊號量可...

vxworks訊號量分析

vxworks的訊號量機制分析 vxworks訊號量是提供任務間通訊 同步和互斥的最優選擇,提供任務間最快速的通訊。也是提供任務間同步和互斥的主要手段。vxworks提供3種訊號量來解決不同的問題。二進位制訊號量 最快的最常用的訊號量,可用於同步或互斥。互斥訊號量 為了解決內在的互斥問題如優先順序繼...