TWI874191B - 一種嵌入式系統韌體中軟體組件識別的方法和系統 - Google Patents
一種嵌入式系統韌體中軟體組件識別的方法和系統 Download PDFInfo
- Publication number
- TWI874191B TWI874191B TW113114101A TW113114101A TWI874191B TW I874191 B TWI874191 B TW I874191B TW 113114101 A TW113114101 A TW 113114101A TW 113114101 A TW113114101 A TW 113114101A TW I874191 B TWI874191 B TW I874191B
- Authority
- TW
- Taiwan
- Prior art keywords
- file
- pointer
- information
- indicator
- function
- Prior art date
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本發明揭露一種嵌入式系統韌體中軟體組件識別的方法和系統。該方法包括:從一韌體檔案中提取指標檔案;對每個指標檔案中提取特徵,包括:一雜湊值、一語義資訊、一控制流程圖資訊、一函式層特徵資訊;將該些特徵資訊與一蒐集眾多已知指標檔案的資料庫比對,得出一指標檔案識別結果;基於各指標檔案識別結果所對應的軟體組件,得出該韌體檔案的軟體組件識別結果。
Description
本發明涉及軟體組件識別領域,尤其涉及一種嵌入式系統韌體中軟體組件識別的方法和系統。
由於眾多的軟體供應鏈攻擊造成嚴重安全問題,使得對軟體供應鏈安全性(supply chain security)的監管要求不斷提高,軟體物料清單(software bill of material)的提供已成為許多終端產品製造商對供應鏈廠商的強制性要求。透過軟體物料清單,列出該軟體產品中所包含各項內部開發及特別是來自第三方或開源軟體,詳列其名稱、版本、來源、相依性、甚至供應商等資訊,如此提高軟體供應鏈的透明度,幫助企業在軟體開發和供應過程中有更好的風險管理。因此軟體物料清單是否完整與正確便非常重要,而這就有賴於精確的軟體組件識別(software component identification)工具。
現行有許多技術,如透過套件管理器(package manager)、軟體組件識別工具、甚至軟體物料清單工具來幫助產出軟體物料清單。但現行技術多只適用於一般應用軟體上,對於嵌入式系統韌體中軟體組件的識別上,容易漏報與誤報。尤其對於嵌入式系統韌體中所含第三方或開源軟體常有許多並無使用套件管理器,也沒有其原始程式碼的情形下,讓現有技術對軟體組件識別的準確性更加有限。因此,需要一種能適用於嵌入式系統韌體中軟體組件識別的方法與系統。特別是在沒有其原始碼的情形下,基於嵌入式系統韌體檔案本身,即可產出精確的軟體物料清單。
有鑑於此,本發明提供一種適用於嵌入式系統韌體中軟體組件識別的方法與系統。特別是在沒有其原始碼的情形下,基於嵌入式系統韌體檔案本身,即可進行軟體組件識別。
本發明提供一種嵌入式系統韌體中軟體組件識別的方法,該方法包括:接收一韌體檔案;從該韌體檔案中提取指標檔案;從該指標檔案中提取特徵,其中該特徵包括:一雜湊值、一語義資訊、一控制流程圖資訊、一函式層特徵資訊;以及將該指標檔案的特徵與一資料庫比對,得出一指標檔案識別結果;根據該韌體檔案中各指標檔案的指標識別結果,得出該韌體檔案的軟體組件識別結果。
本發明提供一種嵌入式系統韌體中軟體組件識別的系統,該系統包括:一指標檔案提取模塊,用以接收一韌體檔案,從該韌體檔案提取一指標檔案;一特徵提取模塊,用以從該指標檔案提取該指標檔案的特徵資訊,其中該指標檔案的特徵資訊包括:一雜湊值、一語義資訊、一控制流程圖資訊、和一函式層特徵資訊;一資料庫,其中該資料庫之資料內容包含複數個已知指標檔案、各已知指標檔案之特徵資訊、和各已知指標檔案所隸屬的軟體組件;以及一指標檔案識別模塊,用以將該指標檔案的特徵資訊與該資料庫比對,以得出一指標檔案識別結果;一軟體組件識別模塊,用以根據該韌體檔案中各指標檔案的指標識別結果,得出該韌體檔案的軟體組件識別結果。
現在將參考附圖更全面地描述本發明的示例實施方式,示例實施方式能夠以多種形式實施,提供這些實施方式使得本發明將更加全面和完整,並將示例實施方式的構思全面地傳達給所屬技術領域中具有通常知識者。附圖中相同的附圖標記表示相同或類似的部分,因而將省略對它們的重複描述。
本發明提供一種適用於嵌入式系統韌體中軟體組件識別的方法與系統。特別是在沒有其原始碼的情形下,基於嵌入式系統韌體檔案本身,即可進行軟體組件識別。為方便解說,以Linux-based的嵌入式系統的韌體檔案做說明。
請參照圖1,其繪示根據一實施例對韌體檔案進行軟體組件識別的流程圖。該軟體組件識別方法包括以下步驟。
步驟S10:接收一韌體檔案,特別是之中包含許多第三方軟體組件的韌體檔案。例如,該韌體檔案可以是用於客製化Linux系統環境的韌體檔案,設計用以運行於嵌入式系統產品,如路由器(router)、交換器(switch)、無線存取點(wireless access point)、電動車充電站等。在這樣的場景下,該韌體檔案多會包含各種第三方軟體和函式庫、開源軟體(open source software)等,其檔案可在嵌入式 Linux 檔案系統中的特定資料夾底下,例如:/bin、/sbin、/lib、/usr/bin 等資料夾。在嵌入式系統中,韌體通常使用JFFS2、UBIFS、YAFFS或SquashFS等檔案系統來管理快閃記憶體裝置上的資料,並打包成韌體檔案格式,例如:.bin、.iso、.img、.zip等格式,以供嵌入式系統韌體更新之用。
步驟S20:從該韌體檔案中提取指標檔。透過使用韌體提取工具,例如binwalk,或解壓縮工具,例如zip,以提取該韌體檔案中各軟體組件,得出所含原檔案內容、檔案名稱和資料夾結構。一個軟體組件內包含有眾多檔案,根據一實施例,將其中的執行檔(executable file)、函式庫檔(library file)和設定檔(configuration file)視為指標檔案 (indicator file),軟體組件的識別將基於該些指標檔來達成。在步驟S20中,透過辨識檔案目錄名稱、附檔名等方式,對韌體檔案中所提取出來的各檔案作篩選,可得出一指標檔案清單。
步驟S30:從該韌體檔案中提取套件管理檔案,從套件管理檔案中得出軟體組件識別結果。一些Linux distribution作業系統會使用套件管理系統(package management system)供開發者安裝、移除、升級和管理軟體套件。例如,Linux distribution Red Hat使用的是RPM套件管理系統,Debian則使用的是dpkg套件管理系統,OpenWRT則使用的是opkg套件管理系統。在這種情況下,韌體檔案中可看到含有套件管理檔案(package manager file),以opkg套件管理系統為例,.control檔案和.list檔案即是套件管理器檔案,分別記錄該套件之基本資料、與該套件中的檔案清單,表1和表2分別為其內容示例。以表1的base-files.control檔案內容為例,從套件名稱、版本、依賴關係等資訊便足以識別出該軟體組件為「base-files」,此識別結果。因此,表2所示base-files.list中所載的檔案清單中的各個指標檔案,便可從步驟S20產出的指標檔案清單中排除。然而,若有需要的話,亦仍可保留在步驟S20產出的指標檔案清單內,藉由本發明之軟體組件識別機制,來驗證套件管理器檔案中資訊的正確性。
表 1 . base-files.control檔案內容示例
表 2 . base-files.list檔案內容示例
| base-files.control |
| Package: base-files Version: 194.3-r8077-7cbbab7246 Depends: libc, netifd, procd, jsonfilter, usign, openwrt-keyring, fstools, fwtool Source: package/base-files License: GPL-2.0 Section: base Architecture: arm_cortex-a15_neon-vfpv4 Installed-Size: 36533 Description: This package contains a base filesystem and system scripts for OpenWrt. |
| base-files.list |
| /etc/openwrt_version /etc/banner.failsafe /etc/resolv.conf /etc/mtab /etc/init.d/boot /lib/functions/preinit.sh |
步驟S40:從每個指標檔案中提取特徵(feature)。基於指標檔案的特徵,將用以搜尋一資料庫以得出多個候選指標檔案(candidate indicator file),並用以計算識別指標檔案的相似度分數。根據一實施例,指標檔案的特徵包括雜湊值(hash value)、語義資訊(semantic information)、控制流程圖資訊(control flow graph information)、函式層特徵資訊(function level feature information)四個資訊,細部步驟分別說明如後。
請參照圖2,其繪示根據一實施例的從指標檔案提取特徵的流程圖。步驟S41:計算雜湊值。將指標檔案的內容輸入到雜湊函式中運算以得出一雜湊值,以作為對應該指標檔案的數位指紋(digital signature)。雜湊函式可以是MD5、SHA1或其他,皆可適用於本發明。
步驟S42:對指標檔案進行反組譯,得到反組譯檔案。反組譯工具如IDA Pro、Ghidra等,皆可適用於本發明。
步驟S43:提取函式層特徵資訊與控制流程圖資訊。其細部步驟說明如後。請參考圖3,其繪示根據一實施例之提取函式層特徵資訊與控制流程圖資訊的流程圖,包括以下步驟。步驟S431:對反組譯檔案進行中介碼轉換(intermediate representation conversion),以將組合碼(assembly code)轉換為中介碼。步驟S432:從中介碼可以檢查出該指標檔案中是否仍保留函式名稱、函式庫名稱、變數名稱等符號資訊(symbolic information)。若是,則進行步驟S433,依據函式名稱得出各函式入口點(function entry point)。函式名稱即是一個標籤(label),其標籤位置即是該函式入口點。若否,則進行步驟S434,透過檢測函式序言(function prologue)找出函式入口點。通常,函式的開頭會有一段組合碼用於準備堆疊(stack)和暫存器(register)以供該函式內部使用,稱為函式序言。基於中介碼,可以檢測出對應是哪一種CPU架構。然後依據該CPU架構對應的函式序言中介碼,偵測出各個函式序言,從而找出函式入口點。無論是步驟S433或步驟S434,在辨識出各函式的函式入口點後,即可對各函式逐一做後續處理。
一個控制流程圖是由節點(node)與有向邊(directed edge)所組成,用以描述一個函式內部控制流(control flow)的情形,其中每個節點代表基本區塊(basic block)或語句(statement),有向邊代表節點間的控制流轉移。在步驟S435中,首先識別所有跳躍(jump)、分支(branch)或返回(return)相關的中介碼。以此為基礎,可推導出該函式的控制流程圖, 進而得出控制流程圖訊息,包括:節點、有向邊,以及各節點的呼叫者(caller)與被呼叫者(callee)資訊。
進一步地,於步驟S436提取函式層特徵資訊,包括:提取函式中各可讀字串(readable string),以及如果中介碼中有包含可用的符號資訊時,亦提取各個函式的名稱。表3為軟體組件libncursesw中的函式庫檔案libncursesw.so.5.9中所含函式名稱示例。除了各函式名稱外,該些可讀字串有的是該函式內的變數名稱、輸入/輸出參數型別等,這些關聯於該函式的資訊,便做為一個函式的特徵來做為辨識函式之用。需要注意的是,可讀字串的提取可能需要對記憶體位址和暫存器做標準化處理。
表 3 指標檔案內所含函式名稱示例
| 指標檔案: libncursesw.so.5.9 |
| “memcpy” “malloc” “atof” |
請參照回圖2。 執行步驟S44,提取語義資訊。軟體內部基本上都會包含一些字串,以及通常還需要導入一些外部函式庫。透過解析指標檔案內容,可提取出所有的可讀字串,連同步驟S43中得出的外部函式庫名稱一起作為指標檔案的語義資訊。表4為軟體組件libncursesw內函式庫檔案libncursesw.so.5.9中所含可讀字串示例。表5為指標檔案libncursesw.so.5.9中所含外部函式庫名稱示例。由於語義資訊類型都是字串,這使得相似度計算會更容易進行。該語義資訊將用來在資料庫中搜尋最近似的指標檔案,稍後會詳細說明。
表 4 指標檔案所含可讀字串示例
表 5 指標檔案所含外部函式庫名稱示例
| 指標檔案: libncursesw.so.5.9 |
| “_fini” “TABSIZE” “_nc_hash_map” |
| 指標檔案: libncursesw.so.5.9 |
| “__imp_strcpy” “__imp_ioctl” “__imp_memmove” |
請參照回圖1。步驟S50,將指標檔案的特徵與資料庫進行比較以得出指標檔案識別結果。此資料庫為一預先建立好的資料庫,其內容包括各已知軟體組件,以及各軟體組件中各指標檔案的各特徵資料,其中各指標檔案的特徵資料提取方式與步驟S40相同。步驟S50中,對各指標檔案作逐一處理,詳細說明如後。
請參照圖4,其繪示根據一實施例,將指標檔案的特徵與資料庫進行比較以得出指標檔案識別結果的流程圖。步驟S51:將指標檔案的雜湊值與資料庫進行比較。如果在資料庫中找到該雜湊值,則將資料庫中具有該雜湊值的該已知指標檔案做為指標檔案識別結果,對該指標檔案的識別已完成,接著可以處理下一個指標檔案。
步驟S52:將指標檔案的語義資訊與資料庫進行比較,得出資料庫中最相似的前N個已知指標檔案,其中N為整數。為了描述方便,以下說明取整數N為5。可以理解的是,N為其他整數亦適用於本發明。由於指標檔案的語義資訊型態是字串,相似度量測演算法如:Jaccard,可用於計算該指標檔案的語義資訊與資料庫中各已知指標檔案的語義資訊之間的相似度分數。基於相似度分數,得出資料庫中最相似的前5個已知指標檔案,作為候選指標檔案。
步驟S53:計算指標檔案與各候選指標檔案間的相似度和信心度分數。對於控制流程圖資訊和函式層特徵資訊,相似度量測工具可使用例如具有機器學習機制的圖匹配網路(graph matching network)和/或bindiff工具,對控制流程圖資訊的部分,計算得出指標檔案和各候選指標檔案之間的第一組相似度分數與信心度分數,和對函式層特徵資訊的部分,計算得出指標檔案和各候選指標檔案之間的第二組相似度分數與信心度分數。將第一組、第二組相似度分數做加權平均後,作為該指標檔案和各候選指標檔案之間的相似度分數。將第一組、第二組信心度分數做加權平均後,作為該指標檔案和各候選指標檔案之間的信心度分數。最後將相似度和信心度分數最高的候選指標檔案做為指標檔案識別結果。
以使用bindiff作為相似度量測工具為例,bindiff工具能計算出一個檔案內之函式與另一個檔案內之函式的相似度分數與信心度分數,進而得出該檔案與另一個檔案的相似度分數與信心度分數。bindiff工具內含多種的演算法,包括:function:hash matching、function:edges flowgraph MD index、function:call sequence matching(exact)、function: call sequence matching(topology)、function: call sequence matching(sequence)、basicBlock: edges prime product等。各演算法皆可計算出一個相似度值。基於經驗發現,各演算法的可靠度並不相同,因此該些相似度值會經過加權平均,以得出一相似度分數。其中,較可靠的演算法配置以較高的加權值,較不可靠的演算法配置以較低的加權值。Bindiff工具本身除了提供相似度分數外,亦產出信心度分數,用以反應該相似度分數對應的信心程度。
步驟S54:如果該指標檔案識別結果的相似度分數大於等於一第一臨界值(threshold),且信心度分數大於等於一第二臨界值時,則認定該指標檔案識別結果有效,進入步驟S55判斷是否仍有下一個指標檔案須處理,否則進入步驟S60。如果相似度分數小於該第一臨界值,或信心度分數小於該第二臨界值時,則認定該指標檔案識別結果失效,表示該指標檔案是新的、與資料庫中各已知指標檔案皆不同,將進入步驟S70中處理。
請參照回圖1。步驟S60:產出軟體組件識別結果。對於該韌體檔案中的每個指標檔案,經過步驟S40與步驟S50處理所識別出來的指標檔案,依據該資料庫,可知其隸屬的軟體組件。例如,指標檔案libncursesw.so.5.9隸屬於ncurses這個軟體組件。該些識別出來的指標檔案所對應軟體組件,連同步驟30中透過套件管理檔案所識別出的軟體組件,即是對應於該韌體檔案的軟體組件識別結果。最後基於所識別出來的各軟體組件,回查資料庫調出該些軟體組件的細部資料,如:名稱、版本、來源、相依性、供應商等等資訊,即可進一步產出符合SPDX或CycloneDX格式的軟體物料清單(未顯示於圖中)。
步驟S70:更新資料庫。由於該指標檔案與資料庫中各已知指標檔案皆不同,待查明該指標檔案隸屬哪個軟體組件後,包括名稱、名稱、版本、來源、相依性、甚至供應商等資訊,連同步驟S40對該指標檔案所提取的特徵,將該些資料新增至資料庫中,如此,資料庫便更加齊全,讓軟體組件識別越加精確。
請參照圖5,其繪示根據一實施例的韌體檔案中進行軟體組件識別的系統方塊圖。該軟體組件識別系統包含:一資料庫10、一指標檔案提取模塊20、一套件管理檔案提取模組30、一特徵提取模塊40、一指標檔案識別模塊50、一軟體組件識別模塊60、一資料庫更新模塊70。指標檔案提取模塊20用以接收一韌體檔案,從該韌體檔案提取一指標檔案,其運作方式同前述之步驟S20。套件管理檔案提取模組30用以從該韌體檔案提取套件管理檔案,從套件管理檔案中得出軟體組件識別結果,其運作方式同前述之步驟S30。特徵提取模塊40用以從該指標檔案提取該指標檔案的特徵資訊。資料庫10為一預先建立好的資料庫,其內容包括各已知軟體組件,以及各軟體組件中各指標檔案的各特徵資料,其中各指標檔案的特徵資料來自特徵提取模塊40。指標檔案識別模塊50用以將該指標檔案的特徵資訊與該資料庫比對,以得出一指標檔案識別結果,運作方式同前述之步驟S50。軟體組件識別模塊60,用以根據該韌體檔案中的每個指標檔案的指標識別結果,得出該韌體檔案的軟體組件識別結果,運作方式同前述之步驟S60。資料庫更新模塊70,用以當指標檔案識別模塊50中指標檔案識別結果的相似度分數小於一第一臨界值、或信心度分數小於一第二臨界值時,基於該指標檔案,對該資料庫新增一筆指標檔案資料,運作方式同前述之步驟S70。
請參照圖6,其繪示根據一實施例的特徵提取模塊方塊圖。特徵提取模塊40包含:一雜湊值計算模塊41,一反組譯模塊42,一函式層特徵資訊與控制流程圖資訊提取模塊43,與一語義資訊提取模塊44。雜湊值計算模塊41用以對該指標檔案做雜湊計算,得出該指標檔案的雜湊值。反組譯模塊42用以對該指標檔案進行反組譯,得出一反組譯檔案。函式層特徵資訊與控制流程圖資訊提取模塊43用以基於該反組譯檔案得出該指標檔案的函式層特徵資訊、該指標檔案的控制流程圖資訊、與該指標檔案的外部函式庫名稱資訊。語義資訊提取模塊44,用以解析指標檔案內容,以提取出之中所有的可讀字串,連同函式層特徵資訊與控制流程圖資訊提取模塊43所產出的外部函式庫名稱資訊,得出該指標檔案的語義資訊。
請參照圖7,其繪示根據一實施例的函式層特徵資訊與控制流程圖資訊提取模塊方塊圖。函式層特徵資訊與控制流程圖資訊提取模塊43包含:一中介碼轉換模塊431,一函式入口點提取模塊432,一符號資訊提取模塊433,一函式序言提取模塊434,一控制流程圖訊息提取模塊435,一函式層特徵資訊提取模塊436。中介碼轉換模塊431用以對反組譯檔案進行中介碼轉換,產出一中介碼檔案。符號資訊提取模塊433用以從中介碼檔案提取函式名稱、外部函式庫名稱、變數名稱等符號資訊,其中外部函式庫名稱會輸出給前述語義資訊提取模塊44。然,如果當初原始碼在編譯時選擇不保留符號資訊的話,中介碼檔案將無符號資訊可被提取,符號資訊提取模塊433便無可用的資訊輸出。函式序言提取模塊434,會先基於中介碼檢測出對應是哪一種CPU架構,然後依據該CPU架構對應的函式序言中介碼,偵測出各個函式序言。當該中介碼含有符號資訊時,函式入口點提取模塊432基於符號資訊提取模塊433之輸出以提取該中介碼中各函式入口點;否則,函式入口點提取模塊432會基於函式序言提取模塊434之輸出以產出該中介碼中各函式入口點。
控制流程圖訊息提取模塊435基於函式序言提取模塊434輸出之各函式入口點,對各函式逐一做處理。透過識別所有跳躍、分支或返回等相關的中介碼,以此為基礎,推導出該函式的控制流程圖,進而得出控制流程圖訊息,包括:基本區塊、節點、有向邊、呼叫者、被呼叫者的資訊。函式層特徵資訊提取模塊436用以提取函式中各可讀字串,並做必要之記憶體位址和暫存器標準化處理;以及如果中介碼中有含有可用的符號資訊時,亦提取各個函式的名稱。
以上說明本發明的實施形態,然而上述的實施形態僅表示本發明適用例的一部分,本發明的技術範圍並不限定於上述實施形態的具體結構。本發明所屬技術領域中具有通常知識者,在不脫離本發明之精神和範圍內,當可作各種之潤飾與更動,例如:達成相同或均等功能的方法步驟順序更動。因此,本發明之保護範圍當視後附之申請專利範圍所界定者為準。
S10~S70…步驟 S431~S436…步驟 10…資料庫 20…指標檔案提取模塊 40…特徵提取模塊 41…雜湊值計算模塊 42…反組譯模塊 43…函式層特徵資訊與控制流程圖資訊提取模塊 431…中介碼轉換模塊 432…函式入口點提取模塊 433…符號資訊提取模塊 434…函式序言提取模塊 435…控制流程圖訊息提取模塊 436…函式層特徵資訊提取模塊 44…語義資訊提取模塊 50…指標檔案識別模塊 60…軟體組件識別模塊 70…資料庫更新模塊
圖1繪示根據一實施例對韌體檔案進行軟體組件識別的流程圖; 圖2繪示根據一實施例的從指標檔案提取特徵的流程圖; 圖3其繪示根據一實施例,提取函式層特徵資訊與控制流程圖資訊的流程圖; 圖4其繪示根據一實施例,將指標檔案的特徵與資料庫進行比較以得出指標檔案識別結果的流程圖; 圖5其繪示根據一實施例的韌體檔案中進行軟體組件識別的系統方塊圖; 圖6其繪示根據一實施例的特徵提取模塊方塊圖;以及 圖7其繪示根據一實施例的函式層特徵資訊與控制流程圖資訊提取模塊方塊圖。
S10~S70:步驟
Claims (16)
- 一種嵌入式系統韌體中軟體組件識別的方法,該方法包括: (a) 接收一韌體檔案; (b) 從該韌體檔案中提取一指標檔案; (c) 從該指標檔案中提取一特徵,其中該特徵包括如下資訊: 一雜湊值; 一語義資訊; 一控制流程圖資訊; 一函式層特徵資訊; (d) 將該指標檔案的特徵與一資料庫比對,得出一指標檔案識別結果;以及 (e) 重複步驟(b)~(d),得出複數個指標檔案識別結果,根據該複數個指標檔案識別結果,得出該韌體檔案的軟體組件識別結果; 其中步驟(d)包括: (d1) 將該指標檔案的雜湊值與一資料庫進行比對,其中當有比對符合時,將該資料庫中找到具有相同雜湊值之一指標檔案,即為該指標檔案識別結果; (d2) 將該指標檔案的語義資訊與該資料庫進行比對,從資料庫取得複數個候選指標檔案; (d3) 透過比較該指標檔案和該複數個候選指標檔案的控制流程圖資訊和函式層特徵資訊,計算該指標檔案和該複數個候選指標檔案間的相似度分數和信心度分數;以及 (d4) 對相似度和信心度分數最高之候選指標檔案,判斷其相似度分數大於等於一第一臨界值且信心度分數大於等於一第二臨界值時,將該候選指標檔案作為該指標檔案識別結果。
- 如請求項1所述的方法,其中該指標檔案為一執行檔案、一函式庫檔案、或一設定檔案。
- 如請求項1所述的方法,其中在步驟(c)中以下列步驟提取該控制流圖資訊: (c1) 對該指標檔案進行反組譯,得出一反組譯檔案; (c2) 對該反組譯檔案進行中介碼轉換,得出一中介碼檔案; (c3) 基於該中介碼檔案,偵測各函式入口點;以及 (c4) 偵測中介碼檔案中的跳轉、分支或傳回的中介碼,並據此提取複數個節點、有向邊、呼叫者和被呼叫者資訊,產出該控制流程圖資訊。
- 如請求項1所述的方法,其中在步驟(c)中以下列步驟提取該函式層特徵資訊: (c5) 對該指標檔案進行反組譯,得出一反組譯檔案; (c6) 對該反組譯檔案進行中介碼轉換,得出一中介碼檔案; (c7) 從該中介碼檔案中提取複數個函式名稱;以及 (c8) 從該中介碼檔案提取複數個可讀字串; 其中依該複數個函式名稱、該複數個可讀字串,產出該函式層特徵資訊。
- 如請求項1所述的方法,在步驟(c)中以下列步驟提取該語義資訊: (c9) 從該指標檔案中提取複數個字串; (c10) 對該指標檔案進行反組譯,得出一反組譯檔案; (c11) 對該反組譯檔案進行中介碼轉換,得出一中介碼檔案;以及 (c12) 從該中介碼檔案提取複數個外部函式庫名稱; 其中依該複數個字串和複數個外部函式庫名稱,產出該語義資訊。
- 如請求項1所述的方法,該方法進一步包括: 對相似度和信心度分數最高之候選指標檔案,判斷其相似度分數小於該第一臨界值、或信心度分數小於該第二臨界值時,基於步驟(c)中提取該指標檔案的特徵,對該資料庫新增一筆指標檔案資料。
- 如請求項1所述的方法,其中該方法進一步包括: 從該韌體檔案中提取一套件管理檔案,從套件管理檔案中得出軟體組件識別結果。
- 如請求項1所述的方法,其中該韌體檔案為一Linux-based嵌入式系統韌體檔案。
- 一種嵌入式系統韌體中軟體組件識別的系統,該系統包括: 一指標檔案提取模塊,用以接收一韌體檔案,從該韌體檔案提取一指標檔案; 一特徵提取模塊,用以從該指標檔案提取該指標檔案的一特徵,其中該特徵包括如下資訊: 一雜湊值; 一語義資訊; 一控制流程圖資訊;及 一函式層特徵資訊; 一資料庫,其中該資料庫之資料內容包含複數個已知指標檔案、各已知指標檔案之特徵資訊、和各已知指標檔案所隸屬的軟體組件;以及 一指標檔案識別模塊,用以將該指標檔案的特徵與該資料庫比對,以得出一指標檔案識別結果; 其中該指標檔案識別模塊執行如下功能: 將該指標檔案的雜湊值與該資料庫進行比對,其中當有比對到時,將該資料庫中找到具有相同雜湊值之一指標檔案,即為該指標檔案識別結果; 將該指標檔案的語義資訊與該資料庫進行比對,從資料庫取得複數個候選指標檔案; 透過比較該指標檔案和該複數個候選指標檔案的控制流程圖資訊和函式層特徵資訊,計算該指標檔案和該複數個候選指標檔案間的相似度和信心度分數; 對相似度和信心度分數最高之候選指標檔案,判斷相似度分數大於等於一第一臨界值且信心度分數大於等於一第二臨界值時,將該候選指標檔案作為該指標檔案識別結果。
- 如請求項9所述的系統,其中該指標檔案為一執行檔案、一函式庫檔案、或一設定檔案。
- 如請求項9所述的系統,其中該指標檔案提取模塊進一步提取出複數個指標檔案,所述的系統進一步包括: 一軟體組件識別模塊,用以根據對應於該複數個指標檔案的指標識別結果,得出該韌體檔案的軟體組件識別結果。
- 如請求項9所述的系統,其中該特徵提取模塊進一步包含: 一雜湊值計算模塊,用以對該指標檔案做雜湊計算,得出一雜湊值; 一反組譯模塊,用以對該指標檔案進行反組譯,得出一反組譯檔案; 一函式層特徵資訊與控制流程圖資訊提取模塊,用以基於該反組譯檔案得出一函式層特徵資訊、一控制流程圖資訊、與一外部函式庫名稱資訊;以及 一語義資訊提取模塊,用以基於該指標檔案與該外部函式庫名稱資訊,得出一語義資訊。
- 如請求項12所述的系統,其中該函式層特徵資訊與控制流程圖資訊提取模塊進一步包含: 一中介碼轉換模塊,用以對該反組譯檔案進行中介碼轉換,產出一中介碼檔案; 一符號資訊提取模塊,用以從該中介碼檔案提取函式名稱、外部函式庫名稱、變數名稱等符號資訊; 一函式序言提取模塊,偵測函式序言; 一函式入口點提取模塊,基於該符號資訊提取模塊與該函式序言提取模塊之輸出,以提取該中介碼中各函式入口點; 一控制流程圖訊息提取模塊,用以基於各函式入口點,產出該指標檔案的控制流程圖訊息,包括:節點、有向邊、呼叫者、被呼叫者資訊; 一函式層特徵資訊提取模塊,用以提取函式中各可讀字串,連同符號資訊提取模塊輸出之函式名稱,產出該指標檔案的函式層特徵資訊。
- 如請求項9所述的系統,其中該系統進一步包含: 一資料庫更新模塊,用以當該相似度和信心度分數最高之候選指標檔案相似度分數小於該第一臨界值、或信心度分數小於該第二臨界值時,基於該指標檔案,對該資料庫新增一筆指標檔案資料。
- 如請求項9所述的系統,其中該系統進一步包含: 一套件管理檔案提取模組,用以從該韌體檔案中提取一套件管理檔案,從套件管理檔案中得出軟體組件識別結果。
- 如請求項9所述的系統,其中該韌體檔案為一Linux-based嵌入式系統韌體檔案。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| TW113114101A TWI874191B (zh) | 2024-04-16 | 2024-04-16 | 一種嵌入式系統韌體中軟體組件識別的方法和系統 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| TW113114101A TWI874191B (zh) | 2024-04-16 | 2024-04-16 | 一種嵌入式系統韌體中軟體組件識別的方法和系統 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TWI874191B true TWI874191B (zh) | 2025-02-21 |
| TW202542723A TW202542723A (zh) | 2025-11-01 |
Family
ID=95557582
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW113114101A TWI874191B (zh) | 2024-04-16 | 2024-04-16 | 一種嵌入式系統韌體中軟體組件識別的方法和系統 |
Country Status (1)
| Country | Link |
|---|---|
| TW (1) | TWI874191B (zh) |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TWI480799B (zh) * | 2012-07-05 | 2015-04-11 | Wistron Neweb Corp | 嵌入式系統之韌體更新方法及設備 |
| US20150363294A1 (en) * | 2014-06-13 | 2015-12-17 | The Charles Stark Draper Laboratory Inc. | Systems And Methods For Software Analysis |
| TWI588749B (zh) * | 2015-11-05 | 2017-06-21 | 廣達電腦股份有限公司 | 用於確保管理控制器韌體安全之方法及計算機裝置 |
| US20170372068A1 (en) * | 2015-02-26 | 2017-12-28 | Alpha Mice Ltd. | Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code |
-
2024
- 2024-04-16 TW TW113114101A patent/TWI874191B/zh active
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TWI480799B (zh) * | 2012-07-05 | 2015-04-11 | Wistron Neweb Corp | 嵌入式系統之韌體更新方法及設備 |
| US20150363294A1 (en) * | 2014-06-13 | 2015-12-17 | The Charles Stark Draper Laboratory Inc. | Systems And Methods For Software Analysis |
| US20170372068A1 (en) * | 2015-02-26 | 2017-12-28 | Alpha Mice Ltd. | Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code |
| TWI588749B (zh) * | 2015-11-05 | 2017-06-21 | 廣達電腦股份有限公司 | 用於確保管理控制器韌體安全之方法及計算機裝置 |
Also Published As
| Publication number | Publication date |
|---|---|
| TW202542723A (zh) | 2025-11-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Fazzini et al. | Automated API-usage update for Android apps | |
| CN111967017B (zh) | 生成依赖关系的方法、装置、终端设备及存储介质 | |
| JP2015026365A (ja) | ソースコードをポーティングする方法及び装置 | |
| JP2012525648A (ja) | バイナリソフトウェア分析 | |
| CN115185550A (zh) | 服务部署方法、装置、计算机设备及存储介质 | |
| CN113821213A (zh) | 基于人工智能的前端代码检测及修复方法、装置及设备 | |
| CN111679852A (zh) | 一种冲突依赖库的检测方法及装置 | |
| CN112099880B (zh) | 场景驱动的应用程序约减方法和系统 | |
| CN115408700B (zh) | 基于二进制程序模块化的开源组件检测方法 | |
| CN110244954B (zh) | 一种应用程序的编译方法及设备 | |
| CN114416057B (zh) | 项目代码打包方法、装置、终端设备及存储介质 | |
| CN115391785A (zh) | 一种软件漏洞的风险检测方法、装置以及设备 | |
| CN119759764A (zh) | 软件测试方法以及软件测试系统 | |
| CN117931675A (zh) | 开源许可证检测方法、电子设备、介质及计算机程序产品 | |
| US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
| CN111352631B (zh) | 一种接口兼容性检测方法及装置 | |
| CN117493169A (zh) | 一种Java依赖库版本间API行为不兼容性检测方法、装置、设备及介质 | |
| TWI874191B (zh) | 一種嵌入式系統韌體中軟體組件識別的方法和系統 | |
| CN120781346B (zh) | 开源软件成分安全分析方法、装置、设备及介质 | |
| US20250321732A1 (en) | Method and system of software component identification in embedded system firmware | |
| CN115543341B (zh) | 一种基于内联函数分析的内核函数动态定位方法 | |
| CN115658458B (zh) | 一种针对泛型编程的类型敏感指针分析方法及装置 | |
| CN113626108B (zh) | webpack的辅助配置方法、装置、设备和存储介质 | |
| CN114489787A (zh) | 软件成分分析方法、装置、电子设备及存储介质 | |
| CN109213748B (zh) | 一种数据库脚本文件的更新方法、服务器及介质 |