機架式裝置漏洞挖掘

語言: CN / TW / HK

0x01 簡介

Iot裝置漏洞挖掘,其實核心就是拿到執行在硬體裝置內的“軟體”,然後就變成了常規的軟體漏洞挖掘。剩下的就是常規的漏洞挖掘步驟就跟軟體漏洞挖掘步驟一致,進行逆向和審計即可。本文主要介紹機架式、虛擬映象形式的防火牆堡壘機等安全裝置的漏洞挖掘步驟及思路。文後也將展示部分相關裝置的漏洞挖掘成果。

0x02 韌體儲存位置及提取方法

通常路由器或攝像頭等小型IOT裝置的韌體一般存放於各種小型flash晶片中,而機架式硬體型別防火牆、VPN類裝置區別於其他韌體存放的位置在於其多用SSD固態硬碟、SATA2介面的機械硬碟、CF卡、nandflash中,如下圖。

這種型別的韌體儲存方式,通常需要購買相應的讀取裝置來完成韌體提取,例如多功能讀卡器、硬碟底座以及iot小型裝置研究中常見flash的程式設計器等,如下圖。

無論是物理裝置或者一般虛擬機器映象型別裝置的韌體一般都存放於實體或者物理磁碟中。讀取的時候,可以直接使用linux系統直接將虛擬磁碟或者硬體磁碟掛載讀取,如下圖。

0x03 韌體加密情況

在將上一步獲取的虛擬或硬體磁碟、CF卡直接掛載到linux系統上的時,一般情況下都會直接彈出來磁碟相關檔案系統分割槽內容,如下圖,還有時候會遇到加密情況例如彈出需要輸入密碼才能查閱分割槽檔案系統的韌體。對於這種情況,可以使用網上給出的一種方法來進行解密。

這裡提到一篇安全客上的文章 ( https://www.anquanke.com/post/id/266078 ) 。此文章是雖然研究目標為Sonicwall虛擬映象裝置,但對於大多數此型別的磁碟加密的情況都是通用的,核心思路都在於使用QEMU去模擬執行,然後下斷點執行操作。

0x04 Shell 獲取

進行裝置分析之前,像通常的iot裝置漏洞挖掘一樣,獲取到shell將有助於裝置的分析,因為在很多情況下,一些重要檔案都是在裝置執行的時候才會被釋放到某個資料夾下。這些檔案通常對逆向分析有很大的幫助。而且也可以在可能發生溢位的位置進行除錯。

這裡就可以使用大多數iot裝置漏洞挖掘獲取shell的一般思路。

  1. 盲測找到命令注入漏洞獲取shell。
  2. 修改解包後的韌體然後重打包植入shell。
  3. 連線除錯介面獲取shell。
  4. 將裝置磁碟掛載到本地機器上修改韌體啟動指令碼獲取shell。
  5. 網上查詢已存在的公開的漏洞獲取shell。
  6. 其他一些 … 的方法。

0x05 韌體拖拽

在不對裝置磁碟進行操作的情況下,如果想從拿到的shell中獲取裝置韌體,思路想法和iot常規小型裝置挖掘常用到的韌體打包方式一樣。思路有以下幾種:

  1. 使用內建tar或者zip 等壓縮命令將想要拖拽的檔案打包到某個http資源目錄下,例如js、css等靜態檔案目錄下,然後使用裝置自帶的http介面獲取檔案。
  2. 如果內部有java、python 等命令 可以建立一個臨時http服務下載。
  3. 可使用內建telnet、nc 等命令將相關檔案直接傳輸到本地。

0x06 攻擊面分析:

對於這型別大型的安全類裝置的漏洞挖掘,最主要的研究方向還是在於未授權的可利用性的漏洞挖掘,有時候是直接在未授權介面就可以挖掘到漏洞達到RCE的效果,有時是需要結合一個繞過認證的漏洞加授權後RCE的漏洞來達到利用的效果。

總而言之,最重要的分析面其實還是未授權的埠,所以這裡將所有的未授權介面全部看作攻擊面。所以首先就需要去分析整個裝置預設狀態下所有的可進行未授權互動的所有邏輯,至於如何檢視裝置所有未授權埠及服務,基本思路和常規iot裝置沒什麼差別,例如利用netstat、nmap命令等等,此處不再贅述。

0x07 漏洞挖掘

對於進行漏洞挖掘,其實並沒有什麼統一的套路,就是常規的軟體漏洞挖掘流程。

對於web模組,絕大多數的大型裝置內嵌的都是PHP和JAVA寫的web服務,所以僅僅需要做相關程式碼的審計即可。少數情況會遇到純二進位制型別的web服務,逆向分析即可。

對於其他服務,大多數都是二進位制型別的程式在監聽,所以進行常動靜態規逆向即可。

0x08 漏洞展示

下面展示部分利用上述步驟挖掘到的國內外部分裝置的高危漏洞(已脫敏)。漏洞點不詳細標明,讀者可自行發現。

示例一(認證繞過):

示例二(堆疊溢位):

示例三(SQL執行):

示例四(堆疊溢位):