機架式設備漏洞挖掘

語言: CN / TW / HK

0x01 簡介

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

0x02 固件存儲位置及提取方法

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

這種類型的固件存儲方式,通常需要購買相應的讀取設備來完成固件提取,例如多功能讀卡器、硬盤底座以及iot小型設備研究中常見flash的編程器等,如下圖。

無論是物理設備或者一般虛擬機鏡像類型設備的固件一般都存放於實體或者物理磁盤中。讀取的時候,可以直接使用linux系統直接將虛擬磁盤或者硬件磁盤掛載讀取,如下圖。

0x03 固件加密情況

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

這裏提到一篇安全客上的文章 ( http://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執行):

示例四(堆棧溢出):