狗汪汪玩轉嵌入式 -- WINKHUB 邊通道攻擊 (NAND Glitch)

wyzsk發表於2020-08-19
作者: Kevin2600 · 2016/01/20 13:07

0x00 前言


隨著物聯網IOT的飛速發展,各類嵌入式裝置, 路由器安全研究也越來越火. 但因為跟以往純軟體安全研究的要求不同, 這類研究往往需要結合相應的硬體知識. 很多朋友困惑如何開始, 甚至卡在了該選何種工具上. 因此汪汪將會在系列文章中分享一些實戰案例和相應的工具使用. 希望能對嵌入式安全研究起到拋磚引玉作用.

在WINKHUB這個案例中我們將使用幾款簡單的入門工具如萬用表; UART 轉接頭和導線等. 同時將介紹一種透過晶片阻斷的方式, 獲取系統ROOT許可權的攻擊方法. 這種方法是俗稱邊通道攻擊中最容易上手的一種. 汪汪希望可以藉此小文讓大家體驗下, 並不是所有的邊通道攻擊都那麼的高不可攀.

0x01 必備神器UART轉接頭


正所謂工欲善其事必先利其器, 擁有得心應手的輔助工具, 對我們研究嵌入式裝置安全將起到事半功倍的作用. 而說起嵌入式裝置不管是開發除錯還是安全研究, 都會用到UART轉接頭 這個神器.

UART介面簡稱通用非同步收發傳輸器, 是一種通用序列資料匯流排.我們可以透過它來除錯目標裝置. UART 口在PCB上通常分為: Vcc; GND; TX; RX 這4口. 而UART轉接頭則在電腦USB 口之間取到轉接的作用.

UART轉接頭在配置上非常簡單. 只需在目標PCB板上找到正確的UART 埠, 並設定好如baud rate 這類引數便可以使用諸如Minicom這類程式跟目標進行通訊了. 凡是有配置過CISCO 路由器的朋友對此操作介面一定不會陌生.

但是通常PCB板上會將用於除錯的UART 埠隱藏 or 存在多個UART埠. 如何在目標PCB板上找到正確的UART 埠, 也是個可以探討的話題. 不過因為我們今天的目標WINKHUB已經明確的標識出UART埠位置, 所以暫且不表.

還有個值得注意的地方便是正確的baud rate 引數. 比如常見的9600 or 115200. 如果此引數設定不對, 我們便無法看到正確的除錯資訊. 這時我們可以使用專門用來確定未知序列行裝置波特率程式baudrate來發現正確的引數.而其工作原理是試圖把所有的baudrate都過一遍,直到螢幕上顯示清晰的除錯資訊.

0x02 WINKHUB 物聯閘道器


終於到今天的主角上場了, 本次的攻擊目標是這款名為WINKHUB 的物聯閘道器. 你是否好奇為何需要此類閘道器裝置呢? 玩過IOT裝置的朋友就會發現, 現有的IOT產品僅同時支援1到2種互聯方式. 比如Philips的HUE智慧燈系列採用Zigbee作為聯接技術. 而使用者若是想把HUE跟使用Bluetooth的智慧門鎖互聯,還需要在新增額外裝置. 這從使用者體驗的角度上來說是非常不方便的. 而WINKHUB閘道器的優勢就在於其同時支援WIFI; Bluetooth4.0; Zigbee; Z-Wave 和 RF 等主流的IOT 聯接方式. 換句話說使用者只需要買一個這樣的閘道器, 就不用擔心不同IOT產品間的相容問題.

然而成也蕭何,敗也蕭何. WINKHUB 在功能上的優勢, 也給攻擊者提供了更多的攻擊向量. 作為一款智慧閘道器以往家用路由器上常出現的安全隱患也依然存在. 譬如在早期的韌體版本中就存在Command execution 漏洞 (set_dev_value.php). 而在官方修復的新版本中又被發現了SQL Injection漏洞.

圖上為包含Command execution 漏洞的PHP 程式碼段. 透過此漏洞我們可以root 許可權執行任何系統命令. 比如讀取shadow 檔案.

<embed>

0x03 邊通道 (NAND Glitch)


NAND Flash 在嵌入式系統中通常用來儲存韌體, Bootloader, 核心以及root files. 是整個系統中最重要的. 同時也是攻擊者最想搞定的目標之一. NAND Flash 的容量大小, 介面數也跟晶片的不同而不同. 大家可以透過查datasheet 的方式來確認. 在前面提到程式碼漏洞爆出後. WINKHUB的廠商透過軟體升級的方式迅速將其修復. 但對廠商來說, 還有一種攻擊方式卻沒那麼容易修復. 這便是用NAND 晶片作為切入點, 透過邊通道攻擊來得到ROOT許可權. 而這也是當年成功拿下XBOX 遊戲機的方法之一.

(圖為XBOX 遊戲機NAND Flash)

有很多朋友一提到邊通道攻擊,就覺得是個特別高大上. 其實邊通道攻擊也分好幾種方式. 除了大家普遍瞭解的資訊洩露之外, 錯誤注入攻擊(Fault Glitch) 也是很常見的一種攻擊方式. 跟資訊洩露測量不同的是, 錯誤注入攻擊的目的往往在於改變程式的執行流程, 尤其是在安全認證機制上. 或者透過阻斷核心被正常讀取的方式, 強制系統進入U-boot shell模式.

錯誤注入攻擊通常使用鐳射; 熱能; 噪音等作為而錯誤注入的傳輸源. 不過也可簡單到透過一條資料線接GND的方式來完成攻擊. 但是必須注意的是錯誤注入(Fault Glitch) 具有結果難於預測特性. 尤其是在 timing 的掌控上. 汪汪在實際測試過程中因操作不當, 曾毀壞過2臺 WINKHUB.

0x04 NAND Glitch 實戰


本文中的錯誤注入攻擊便是透過阻斷核心被正常讀取的方式, 強制WINKHUB系統進入U-boot shell模式來得到root 許可權. 透過讀datasheet 我們可以發現 WINKHUB 的NAND Flash 的第29號PIN 為資料輸入輸出口.

我們首先透過萬用表查詢GND 口. 隨後使用普通的資料線在系統啟動, 並嘗試讀取NAND晶片中的核心等資訊的瞬間短接以達到資料阻斷(NAND Glitch) 的目的.

但大家在完成這看是簡單的過程中一定要小心仔細. 原因可以看圖中29號PIN的實際大小來感受下.

不過多加練習幾次後, 也就運用自如啦. 再系統進入U-boot Shell 後, 我們便可以透過修改核心引數得到ROOT Shell. 整個過程大家可以觀看以下影片.

<embed>

0X05 總結


透過這個案例, 相信大家在嵌入式攻擊方式上有了更多的瞭解. 有時候純軟體的步驟無法達到目的時, 可以考慮下硬體比如邊通道的方式. 同時汪汪覺的開發者們在設計一款嵌入式裝置的時候, 也可以多從攻擊者的角度考慮. “ Think like an attacker ” 絕不僅僅是說說而已. 劍走偏鋒, 逆其道行之. 攻擊者往往會從你想不到的地方作為攻擊點.

0x06 參考文獻


本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章