了解韌體分析中的不安全功能呼叫資料

韌體分析可識別從韌體映像擷取的支援執行檔中可能不安全的函式呼叫。 這些結果能幫助你找出需要額外安全審查的實作模式,並根據潛在暴露來優先排序二進位檔。

本文說明了你在韌體分析結果中可能看到的不安全功能呼叫訊號。 它說明了支援的檔案、覆蓋範圍限制,以及如何在執行檔與裝置的情境下評估結果。

Note

存在不安全的函式呼叫,並不一定代表執行檔或裝置有漏洞。 實際風險取決於函式的使用方式、不受信任的輸入是否能到達,以及執行檔如何被揭露與保護。

韌體分析中的不安全功能呼叫訊號

不安全函式呼叫分析(Unsafe Function Calling)會對支援的可執行檔與可連結格式(ELF)執行檔進行靜態分析。 它會識別出在未進行適當輸入驗證、邊界檢查、緩衝區大小驗證或其他安全編碼控制的情況下,可能引發安全問題的函式參考。

某些記憶體處理函式在使用不當時可能導致緩衝區溢位或其他記憶體損毀狀況。 根據受影響的程式碼路徑及可用的緩解措施,攻擊者可能會利用這些條件干擾裝置或執行未經授權的程式碼。

每個結果都代表一個訊號,而非脆弱性判斷。 將這些訊號一起評估,並結合執行檔在韌體中的角色來評估。

不安全函式呼叫預覽結果的螢幕擷圖,包括不安全呼叫和網路呼叫總數,以及按可執行檔區分的各函式計數。

可能不安全的函數

有些函式庫函式可能有風險,因為它們本身不會檢查所處理資料的大小及其是否可信。 例如,像 strcpy 和 strcat 這類函式,如果程式將過大或不受信任的輸入複製到目的地緩衝區中,可能會導致緩衝區溢位情況。

一份報告的參考資料顯示韌體分析發現執行檔中有被追蹤的功能。 這並不證明該函數被錯誤使用。 此函式可搭配防護措施使用,例如檢查輸入長度、提供足夠目的空間,或限制輸入至受信任資料。

修改原始碼時,請使用字串處理函式,接受目標緩衝區大小,並在複製或串接資料前驗證輸入長度。 確保結果以空字元結尾,並處理截斷情況或錯誤。 有界函數如 strncpy 和 strncat 可比無界替代方案降低風險,但仍需配合正確的緩衝區大小計算。

追蹤功能組會隨著此功能演進而改變。 將函式名稱與計數解讀為程式碼審查的起點,而非所有記憶體安全或指令執行風險的完整清單。

網路通話資訊

韌體分析也指出在分析的執行檔中何時識別出與網路相關的函數呼叫。 利用此訊號協助優先處理執行檔以便進一步審查。 它無法判斷執行檔是否接受遠端連線、是否能與裝置外部通訊,或是否能在部署環境中存取。

在排序發現時,請先檢視包含不安全函式呼叫與網路相關呼叫的執行檔。 這些可執行檔可能會處理來自網路的資料,可能需要更早的調查。

可執行路徑與呼叫次數

結果會與從韌體映像中擷取的執行路徑相關聯。 函式呼叫計數顯示在該可執行檔中識別出的受追蹤函式參考數量。 數量越多,可能代表有更多地點需要審查,但這本身並不代表嚴重程度或可利用性更高。

同一個執行檔可以出現在多個擷取位置,且不同的執行檔可能包含對同一函式的引用。 使用擷取路徑與韌體版本來辨識正確的來源元件或供應商產物。

支援檔案與覆蓋範圍

不安全函式呼叫分析目前為預覽版,適用於從 Linux 韌體映像擷取的支援 ELF 使用者空間執行檔。

Linux 核心模組(.ko)檔案未包含,因為預覽版僅限於使用者空間的執行檔分析。

預覽版支援以下處理器架構:

  • AMD64 或 x86-64
  • ARM64 或 AArch64
  • ARM32

二元需求

執行檔必須保留資訊,以便韌體分析辨識其所使用的函式。 靜態連結或剝離二進位在沒有函式名稱或其他必要資訊時,可能無法產生結果。

韌體映像檔能成功完成其他分析活動,且不會產生不安全的函式呼叫結果。 每個韌體分析器都有其獨特的檔案、架構及元資料需求。

一併使用不安全的函式呼叫資料

每種訊號都提供了對潛在風險的不同觀點:

訊號 它幫助你理解什麼
可執行路徑 哪個擷取出的執行檔包含已識別的呼叫。
不安全函式呼叫數量 執行檔中識別出的不安全函式呼叫總數。
網路通話次數 是否可能因網路相關行為而有必要優先對該執行檔進行進一步審查。 這個數字無法證明遠端可聯絡性。
通話次數<function name> 在執行檔中偵測到多少個對該具名函式的參照。 利用函式特定的計數進一步檢視相關的安全控制措施,例如緩衝區大小、輸入驗證、格式字串處理、記憶體權限或指令輸入驗證。

以下功能提供了各功能專屬的計數:

  • strcpy
  • strcat
  • printf
  • fprintf
  • sprintf
  • system
  • mmap
  • popen

與其只依賴單一領域,不如一起評估這些訊號,了解哪些執行檔最需要立即審查。

重要考慮

解讀零與空結果

結果可能顯示執行檔為零計數,或完全省略執行檔。 計數為零表示執行檔已被分析,但未發現該欄位的追蹤呼叫。

如果結果中沒有執行檔,不要假設它沒有不安全的函式呼叫。 韌體分析可能無法分析,因為可執行檔使用不受支援的架構,或不包含識別函式參考所需的資訊。

結果清單為空,表示該韌體映像檔沒有可用的不安全函式呼叫結果。 這並不代表韌體沒有不安全的函式呼叫。

在以下情況下,不會顯示任何結果:

  • 未擷取任何 ELF 使用者空間執行檔。
  • 擷取的執行檔使用不支援的架構。
  • 靜態或剝離的二進位檔不包含足夠的識別資訊。
  • 解壓後的檔案是一個被排除的 Linux 核心模組。
  • 韌體映像是在「不安全函式呼叫」分析功能推出之前就已完成分析。
  • 提取或分析都沒成功完成。

Note

結果為空並不代表韌體沒有不安全的函式呼叫。 若要接收在 Unsafe Function Calls 預覽版推出前已處理的映像檔的當前分析,請再次上傳韌體映像檔。

欲了解如何上傳映像檔並查看結果,請參閱 「使用韌體分析服務分析韌體映像」。 要評估相關的編譯器與連結器保護,請參考同一執行檔的 二進位強化 標籤。