成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過USB入侵微控制器固件

商務辦公
在本文中,我想演示如何從運行在Cortex M0上的安全USB設備中提取固件。

 在本文中,我想演示如何從運行在Cortex M0上的安全USB設備中提取固件。

誰入侵了視頻游戲機?

在電子游戲機的世界里,充斥著各種假冒偽劣產品。所謂需求創造供給,不乏有不少投機者想要在這塊產業價值數十億美元的蛋糕上分一杯羹。而現今,你總能找到那么幾款設備,讓幾乎所有的游戲控制器,在對盜版游戲,假冒的游戲手柄或配件,甚至外掛上都喪失所有限制。

從視頻游戲機誕生起的二十年來,其游戲控制器都是由硬件制造商設定的專有系統。制造商在設計的過程中會涵蓋各種保護措施,以確保這些控制器只運行簽名過的代碼,讓用戶只玩合法有執照的游戲,以及官方授權的配件。某些國家,試圖破解自己的視頻游戲機甚至是非法的。

但與此同時,這種高規格的保護措施也使得游戲機成為了一個有吸引力的目標。對信息安全和逆向工程感興趣的愛好者來說,這個謎題越難,解起來就越有趣,尤其是如果你從小就喜歡電子游戲的話。

DualShock 4保護方案

關注我twitter賬戶的讀者可能知道,我長期以來一直致力于對游戲控制器及其相關產品做逆向研究。在PlayStation 4(索尼公司出品的一款游戲機)剛問世那會兒,我就曾利用其FreeBSD內核(PlayStation 4基于FreeBSD內核)中的一個漏洞探究了該產品的內部架構和工作原理。我做了很多不同的研究,其中就包括,在PS4中USB認證是如何工作的,以及它如何區分授權設備并阻止未經授權的設備。這個主題很有趣,我之前在其他控制器上也做過類似的研究。PS4的認證方案比Xbox 360使用的要簡單得多,但效果并不差。

圖1.PlayStation 4 USB配件授權方案

過程如下:PS4向DualShock 4(一款游戲手柄)發送0x100個隨機字節,DualShock 4則創建一個RSASSA-PSS SHA-256簽名作為響應,并將其發送回驗證它所需的加密常數N和E(公鑰)之間,這些常數對于所有正規制造的DualShock 4游戲手柄來說都是唯一的。DualShock 4還會發送一個驗證N和E所需的簽名,它使用相同的RSASSA-PSS SHA-256算法,此加密常數存儲在內核中,對所有PS4游戲機都是相同的。

這意味著,如果你想認證自己的USB設備,僅僅破解PS4的內核是不夠的,你需要將私鑰存儲在游戲手柄中。然而即使有人成功破解了游戲手柄并獲得了私鑰,索尼仍然可以通過固件更新將私鑰列入黑名單里。如果游戲控制器在8分鐘后還沒有收到身份驗證響應,它就會停止與游戲手柄間的通信,只有將其從USB端口拔出并再次將其插入后它才能工作。這就是早期的假冒游戲手柄的工作機制,它每8分鐘就模擬一個USB端口拔掉/插入過程。

關于假冒DualShock 4的謠言

自DualShock 4問世以來,沒有任何跡象表明有人成功攻破了此項機制。然而最近,我聽說市場上新冒出了一些假的DualShock 4,無論外觀還是功能都與正品都一模一樣。我的好奇欲讓我從中國的商店里訂購了一些。

在我等待包裹到達的時間里,我決定收集更多關于假冒游戲手柄的信息。在多次搜索之后,我找到了一個名為Gator Claw的游戲手柄。

圖2.未經授權的Gator Claw游戲手柄

不過Reddit上也有評論說,它只能工作八分鐘,不過后來開發人員通過固件更新成功的解決了這個問題,上圖所示的購買頁面里包含了固件更新的鏈接和使用手冊。

圖3.Gator Claw固件更新手冊

嵌入式固件的基礎分析

我做的第一件事是查看固件更新器可執行文件的資源部分。

圖4.在Gator Claw固件更新器的資源中找到的固件

經常為嵌入式設備編寫代碼的讀者可能不會對這種文件格式感到陌生。這是Intel HEX文件格式,通常用于編程微控制器,許多編譯器(例如GNU Compiler)以這種格式輸出編譯代碼。此外,我們可以看到固件的開頭沒有高熵,字節序列很容易識別,這意味著固件未經過加密或壓縮。將該文件解碼并以hex編輯器加載(十六進制編輯器能直接打開該格式文件)后,我立馬看到了它的編譯架構——ARM Cortex-M。

圖5.Gator Claw的固件(左)和ARM Cortex-M的矢量表(右)

根據ARM Cortex-M的規范,前兩個字(黃框和紅框標出部分)是初始堆棧指針,之后的是異常向量表(綠框標出)。該表中,前兩個字是復位向量,用作固件入口點,而其他異常處理程序的高地址則提示了固件的基址。

除固件外,固件更新程序的資源部分還包含一個配置文件,里面有對不同微控制器的描述。 說明開發人員最有可能使用的是來自微控制器制造商的公開可用源代碼,這就能解釋為什么這個配置文件中帶有源代碼。

圖6.對不同的微控制器描述的配置文件

在配置文件中搜索微控制器標識符后,我們找到了制造商的站點——Nuvoton。不需要任何許可協議就可以下載技術文檔和SDK的產品信息。

圖7.Nuvoton微控制器制造商的網站

現在我們有了固件,知道了它的體系結構和微控制器制造商,還知道了基本地址、初始堆棧指針和入口點。

ARM處理器有兩種不同的指令集:ARM(32位指令)和Thumb(使用Thumb-2 32位指令擴展的16位指令)。Cortex-M0僅支持Thumb指令,因此我們在IDA Pro中加載固件時將“Processor options – Edit ARM architecture options – Set ARM instructions”中的單選按鈕切換為“NO”。

之后,我們可以看到固件已經加載到基址0,自動分析幾乎可以識別每個功能。現在的問題是如何推進固件的逆向工程。

圖8.固件功能之一

如果對固件作分析,會看到整個它使用基址0x40000000對內存執行讀寫操作,這是內存映射到輸入輸出(MMIO)寄存器的基本地址。這些MMIO寄存器允許你訪問和控制所有微控制器的外圍組件,固件所做的一切都是通過訪問它們來實現的。

圖9.外圍控制器的內存映射

通過搜索地址0x40000000的技術文檔,我們發現這個微控制器屬于M451家族。既然已經了解了微控制器家族,就下載這個平臺的SDK和代碼示例。在SDK中,我們找到一個頭文件,它定義了所有MMIO地址、位字段和結構。我們還可以用所有庫編譯代碼示例,并將它們與IDB中的函數進行比較,或者在源代碼中查找MMIO地址的名稱,并將其與我們的反匯編進行比較。這使得逆向工程的過程非常簡單。那是因為我們知道微控制器的架構和模型,并且我們對所有MMIO寄存器進行了定義。如果我們沒有這些信息,分析就會復雜得多。 可以說,這就是為什么許多供應商只在簽署了NDA之后才發布SDK。

圖10.在固件中查找庫函數

在巨人的陰影下

在等待假手柄到來之際,我分析了Gator Claw的固件,但對固件的內部并沒有太多深挖的興趣——無外乎是身份認證數據被發送到另一個可以通過I2C訪問的微控制器,再將響應送回控制器。Gator Claw手柄的開發者可能也知道他們的固件會被逆向破解,繼而被同行模仿生產出更多的紡織品,這樣也會對他們的業務造成負面的影響。為了防止這種情況的發生,他們使用了另一種微控制器來保障機密,這個做法也是十分常見的,因為黑客們在他們的產品上投入了很多精力,他們也不想被其他黑客攻擊。

在這個固件中,真正引起我注意的是一些看似沒有使用過的字符串,它很可能是USB設備描述符的一部分。這個字符串是故意留下的嗎?會不會是某種簽名?上述猜想是很有可能的,因為該字符串是一家硬件制造商的名稱,該廠商以制造邏輯分析儀而聞名,并且它還有一個專門游戲部門,正朝著成為原始設備制造商(OEM)的目標奮進。該公司還擁有許多游戲配件的生產專利。除此之外,通過它的網站我了解到,在其品牌下有大量待銷的游戲配件。

在它出售的產品中,有二十幾款適配器能讓手柄與不同品牌的控制器相連。例如,可以把Xbox 360的游戲手柄連接到PS4,也可以把PS3的游戲手柄連接到Xbox one,等等。還有的適配器,可以將PC鼠標和鍵盤連接到PS4、Xbox One、任天堂游戲機、各種手柄和印刷電路板上。所有產品都提供了與Gator Claw類似的固件更新程序,但有一個顯著的區別——所有固件都是經過加密的。

圖11.其中一個產品的手動和加密固件示例

Gator Claw手柄在印刷電路板的設計上可能就是模仿了該廠商。在下圖中我們可以看到兩個微控制器,其中一個應該是Nuvoton M451,另一個則是額外用于保障機密的微控制器。所有線路最終都匯聚到了黑色的模件中(下圖中紅色圈出部分),它應該是主微控制器,而帶有四個黃色引腳的微控制器(下圖中黃色圈出部分)應該具備了I2C工作所需的功能。

圖12.Gator Claw印刷電路板的設計

啟示

這時我終于收到了來自深圳的包裹,打開后我簡直大吃一驚,如果我不說,我想你也會以為這就是原版的DualShock 4。這是一款用制作精良的無線游戲手柄,帶有工作觸控板、揚聲器和耳機接口。

[[260932]]

圖13.假DualShock 4手柄的外觀

手柄啟動后進入DFU模式,在此模式下將游戲手柄連接到PC后,它被識別為具有不同標識符和特征的另一個設備。那么接下來的事情就昭然若揭了……

圖14.假DualShock 4手柄的印刷電路板

我將幾根導線焊接到看起來像JTAG點的地方,并將其連接到JTAG編程器。編程工具識別微控制器,但它設置了安全鎖。

圖15.編程工具識別微控制器,但它啟用了安全鎖

通過USB攻擊微控制器固件

在前面這段相當冗長的介紹之后,現在是時候回到本文的主題。USB(通用串行總線)是外圍設備的行業標準。它的設計非常靈活,可以廣泛應用。USB協議定義了兩個實體——一個主機與其他連接的設備,連接設備分為集線器、人機界面、打印機、成像、大容量存儲設備等類。

圖16.USB設備的連接方案

設備與主機之間的數據和控制交換的過程是通過一組單向或雙向管道的進行的。一個設備可以具有許多不同的端點以交換不同類型的數據。

圖17.數據傳輸類型

有四種不同類型的數據傳輸:

  • 控制傳輸(用于配置設備)
  • 批量數據傳輸(以相對較大和突發的數量生成或使用)
  • 中斷數據傳輸(用于及時但可靠地傳輸數據)
  • 同步數據傳輸(通過預先協商的傳輸延遲占用預先協商的USB帶寬量)

所有USB設備必須支持端點0處的特殊指定管道,USB設備的控制管道將連接到該管道。

這些類型的數據傳輸是使用根據以下方案提供的分組來實現的。

圖18.USB協議中使用的數據包

USB協議實際是一個狀態機,在本文中我們不會檢查所有這些數據包。下圖中可以看到控制傳輸中使用的數據包示例。

圖19.控制傳輸

批量傳輸、中斷傳輸和同步傳輸這三種類型的數據傳輸是可選的,它們的存在和使用與否將視目標而定,但控制傳輸則是所有USB設備都支持,且控制傳輸的格式很常見,這使得控制傳輸成為了分析漏洞時最常利用的方法。

下面的方案顯示了用于執行控制傳輸的SETUP包的格式。

圖20.SETUP包的格式

SETUP包占用8個字節,它可以根據請求的類型獲得不同類型的數據。有些請求對所有設備都是通用的(例如GET DESCRIPTOR),而其他的取決于設備的類別和制造商許可。要發送或接收的數據長度是SETUP數據包中提供的16位字。

圖21.標準的和特定類別的請求示例

總結:控制傳輸使用非常簡單的協議,所有USB設備都支持。它可以有很多額外的請求,而我們可以控制數據的大小。所有這一切使控制傳輸成為模糊和干擾的完美目標。

漏洞利用

為了破解我買的假手柄,我不必模糊它,因為我在查看Gator Claw代碼時發現了漏洞。

圖22.HID類請求處理程序中的漏洞代碼

函數HID_ClassRequest()用于模擬原始DualShock 4手柄的工作,并實現與PS4一起工作所需的最少請求。函數USBD_GetSetupPacket()用于獲取SETUP包,根據報告的類型,它要么使用USBD_PrepareCntrlIn()發送數據,要么使用usbd_preparecntrout()接收數據。USBD_GetSetupPacket()不檢查請求數據的長度,這應該能讓我們讀取固件內部的部分閃存,并讀取和寫入SRAM存儲器的開始部分。

圖23.控制傳輸期間緩沖區溢出

DATA數據包的大小在USB設備描述符中定義(也通過控制傳輸接收),但容易被忽略的是這個大小定義的是單個數據包的長度,可能有很多數據包的長度取決于在SETUP包中所設置的。

值得注意的是,Nuvoton網站上提供的代碼示例也沒有檢查長度,可能導致的結果就是使用此代碼作為參考的所有產品中都會留有類似的漏洞。

圖24.利用SRAM存儲器中的緩沖區溢出漏洞

SRAM(靜態隨機存取存儲器)是一種被堆棧占用的存儲器。SRAM通常也是可執行存儲器(可配置的),這通常是為了將經常調用的代碼片段(例如,實時操作系統)復制到SRAM來提高性能。雖然不能保證堆棧的頂部可以通過緩沖區溢出來訪問,但這么做的可能性仍然很高。

令人驚訝的是,利用USB固件的主要障礙竟然是操作系統。我在使用Windows時觀察到以下內容,但我認為大部分內容也適用于沒有特殊補丁的Linux。

首先,操作系統不允許你在控制傳輸期間讀取超過4kb;其次,根據我的經驗,操作系統不允許在控制傳輸期間寫入多個DATA數據包;第三,USB設備可能有隱藏的請求,所有使用它們的嘗試都會被操作系統阻止。

這很容易用包括手柄在內的人機界面設備(HID)來演示。HIDs附帶了其他描述符(HID描述符、報告描述符、物理描述符),而報告描述符與其他描述符非常不同,它由描述所支持報告的不同項組成。如果報告描述符中缺少報告,那么操作系統將拒絕完成它,哪怕它是在設備中處理的。這基本上減少了USB設備固件漏洞的發現和利用情況,而這些細微差別很可能在過去阻止了漏洞的發現。

為了解決這個問題而不必閱讀和重新編譯Linux內核的源代碼,我只使用了我手邊的低端儀器:Arduino Mega板和USB Host Shield(總計小于30美金)。

圖25.連接方案

在使用上述方案連接設備后,我使用Arduino板來執行控制傳輸,而不必受到操作系統的任何干擾。

圖26.Arduino Mega + USB Host Shield

我從深圳買的假游戲手柄與Gator Claw具有相同的漏洞,我做的第一件事就是轉儲部分固件。

圖27.部分轉儲固件

查找固件轉儲基址的最簡單方法是查找包含指向已知數據的指針的結構。之后,我們可以計算地址的增量并將固件的部分轉儲加載到IDA Pro。

圖28.指向已知數據的指針的結構

固件轉儲允許我們找出printf()函數的地址,該函數輸出工廠質量保證所需的UART信息。 更重要的是,我能夠在轉儲中找到hexdump()函數,這意味著我甚至不需要編寫shellcode。

圖29.尋找有助于漏洞利用的函數

在游戲手柄的印刷電路板上找到UART點,焊接導線并將它們連接到TTL2USB適配器后,我們可以在串行終端中看到輸出。

圖30.游戲手柄啟動期間的標準UART輸出

Nuvoton微控制器的標準庫附帶一個非常方便的硬故障異常處理程序,它輸出寄存器轉儲。這極大地促進了漏洞利用過程,并能對其進行調試。

圖31.堆棧覆蓋導致硬故障異常后的UART輸出

轉儲固件的最終漏洞可以在下面的屏幕截圖中看到。

圖32.利用和shellcode在UART上轉儲固件

但是這種轉儲固件的方法并不完美,因為Nuvoton M451家族的微控制器可能有兩種不同類型的固件—主固件(APROM)和用于設備固件更新的微型固件(LDROM)。

圖33.不同模式下閃存和系統內存的存儲器映射

APROM和LDROM映射到相同的內存地址,因此只能轉儲其中一個。 要獲得LDROM固件轉儲,我們需要禁用安全鎖并使用編程工具讀取閃存。

圖34.Shellcode禁用安全鎖

加密失敗

對負責更新的固件(LDROM)的分析表明,它主要是來自Nuvoton的標準代碼,但是添加了用于解密固件更新的代碼。

圖35.用于解密固件更新的加密算法方案

用于解密固件更新的加密算法是自定義塊密碼。它是在密碼塊鏈接模式下執行的,但是塊大小只有32位。該算法接受一個密鑰,該密鑰是產品的文本(ascii)標識符,以及定義應該在當前塊上執行什么轉換的指令數組。在遇到鍵和數組的末尾后,它們的當前位置被設置為初始位置。轉換列表包括6個操作:異或、減法、減法(反向),以及相同的操作(但是交換了字節)。因為固件包含大量充滿0的區域,所以很容易計算這個算法的秘密部分。

圖36.固件更新加密密鑰

將從假手柄的固件中提取的算法對比到上述的制造商所生產的產品中,發現所有產品都在使用這種加密算法,利用該算法的漏洞,我們可以計算所有設備的加密密鑰并解密固件更新。換句話說,在假冒產品中使用的算法導致該制造商開發的所有產品的安全性都受到威脅。

結論

這篇博文寫得很長,但我真的很想讓廣大觀眾做好準備。我給出了一個關于嵌入式固件分析,找到漏洞,并利用它們獲取固件轉儲和在USB設備上執行代碼的操作指南。

故障攻擊的主題不包括在本文的范圍內,但此類攻擊對USB設備也非常有效。對于那些想要了解更多相關信息的人,我建議您觀看此視頻。對于那些想知道如何從DualShock 4獲取算法和密鑰以制作盜版產品的人,我建議閱讀這篇文章。

至于用于保障機密的微控制器,我發現并不是所有的設備都使用它,只是為了增加隱蔽性。但該微控制器不保守任何秘密,僅用于SHA1和SHA256。這項研究還幫助愛好者創建自己的開源項目,用于游戲控制器。

對于購買假冒游戲手柄的用戶來說,他們并不能因獲得了利益而沾沾自喜,因為制造商會屏蔽非法使用的密鑰,而用戶最終也無法使用游戲手柄或獲得固件更新的提示。

責任編輯:武曉燕 來源: 嘶吼
相關推薦

2021-09-16 09:11:31

物聯網微控制器IOT

2022-03-10 15:54:45

嵌入式開發多核微控制器技術

2020-09-24 10:20:16

物聯網

2022-10-19 10:26:46

2015-09-16 11:13:16

WLAN無線控制器Tolly 測試華為

2011-07-12 17:10:05

域控制器組策略

2011-07-14 10:28:54

額外域控制器

2016-09-23 16:20:47

2025-05-14 02:15:00

Go固件微控制器

2015-08-07 15:28:46

選取城市控制器源碼

2023-08-13 18:31:45

SDN控制器

2011-07-12 09:29:10

主域控制器備份域控制器

2015-02-02 09:37:42

SDN控制器

2024-09-27 16:28:07

2017-11-23 11:28:07

德州儀器MCUTI

2011-04-18 09:45:02

USB嵌入式Linux

2009-01-12 11:16:58

控制器控制器行為行為結果

2013-12-19 09:32:01

SDN南向網絡控制

2012-05-21 12:26:40

2015-07-20 11:34:06

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www日本高清视频 | 亚洲精品视频导航 | 大象一区| 午夜大片 | 精品国产乱码久久久久久a丨 | 成人中文字幕在线观看 | 在线观看视频一区 | 国产欧美精品一区二区三区 | 国产精品日产欧美久久久久 | 亚洲精品成人av | 黄色大片在线免费观看 | 国产高清一区二区 | 日韩精品一区二区三区中文字幕 | 亚洲欧美另类在线 | 久久一区二区av | 亚洲精品白浆高清久久久久久 | 女同久久另类99精品国产 | 国产高清一区二区三区 | 国产高清免费 | 狠狠操天天操 | 美女天堂在线 | 久久精品国产精品青草 | 精品欧美乱码久久久久久1区2区 | 成人福利视频网站 | 久久国产精彩视频 | 激情欧美日韩一区二区 | 在线播放中文字幕 | 成人精品久久 | 午夜视频一区二区三区 | 日韩2020狼一二三 | 中文字幕乱码视频32 | 亚洲在线一区二区 | 久久亚洲一区二区三区四区 | 欧美精品日韩精品国产精品 | 男人视频网站 | 亚洲精品免费视频 | 欧美日韩久| 国产精品18hdxxxⅹ在线 | 亚洲免费人成在线视频观看 | 色婷婷精品久久二区二区蜜臂av | 亚洲一卡二卡 |