原文鏈接:https://www.leavesongs.com/PENETRATION/talk-about-3ds-userland-flaw.html
作者:Phith0n

我與掌機結緣是從初中時代就開始了,但嚴格意義上來講,在我的少年時代,我是沒有擁有過掌機的。小時候家里沒有給我買過任何游戲機,但我曾擁有過一臺學習機——名人Windows CE。雖然被冠以“學習機”的名義,但實際上這是一臺搭載Windows CE系統的掌上電腦(PDA),在2008年那個智能手機還沒有出世的年代,我竟擁有了一臺跨時代的智能大屏設備。

當時我在CE上裝了很多原生的Windows游戲,也裝了不少模擬器,包括GBA、NES等等,這些游戲陪初中的我度過了許多個日夜。當然,這些就是另一個故事了,以后有機會再講。

就是因為這段經歷,所以我對掌機游戲其實一直有愛好,所以大概在2015年我買了自己人生第一臺掌機,就是新大三(New 3DSLL)。當時在電玩巴士淘寶店購買的,到手就是破解好的狀態。但當時的我對3DS破解這塊一竅不通,以至于一度不敢隨便升級它的系統,忍受老系統一堆堆的Bug,直到疫情期間我才摸索著研究了如何將它從A9LH升級到B9S破解,并升級了最新的系統。

今年(2023年)三月我去了趟東京,在中古店花了差不多國內一半的價錢拿下了一臺老小三(Old 3DS)和一臺新小三(New 3DS),至此我就擁有三臺不同型號的3DS了。

3b9f5bd30cb2cbe665cd72b0b567a85.jpg

差不多也就在這個月,任天堂正式關閉了3DS的eShop服務器,也就意味著3DS這款設備已經走向了生命周期的盡頭。那么如今,回看十多年來安全研究者和任天堂官方的博弈,其實還是蠻有趣的。

自從有了游戲機,“破解”就一定是一個無法跳過的話題,現如今3DS的破解已經比較成熟了,大部分情況下都可以“軟破解”——即在無需任何硬件輔助或修改的情況下完成破解。

這些軟破解主要使用到了兩層漏洞:

  • 用戶級(Userland)漏洞,攻擊者需要首先通過一些用戶級漏洞獲取系統權限,才能進一步利用內核漏洞
  • 內核級(Kernel)漏洞,利用內核漏洞即可加載自定義固件,最后再安裝破解游戲

Boot9Strap就是利用內核級漏洞,在系統啟動的Boot9階段加載自定義代碼,最后接管系統的控制權,進入用戶自定義固件完成破解。這里面涉及的漏洞是硬件原因導致的,所以任天堂官方無法通過升級系統版本的方式修復Boot9Strap。

那么對于官方來講,如果要與破解行為做對抗,則必須從用戶級漏洞入手,讓用戶無法獲得系統權限,也就無法安裝Boot9Strap了。

本篇文章就來簡單介紹一下,我們破解3DS的過程中都有使用到哪些用戶級漏洞,以及官方與安全研究者的對抗過程。

Soundhax

參考:

Soundhax漏洞是3DS中第一個免費、離線、穩定的漏洞與利用方法,利用涵蓋了11.3以前的所有版本。

Soundhax實際上是一個Sound應用的堆溢出漏洞,Sound是3DS中的播放器,在播放惡意的m4a文件的過程中存在堆溢出漏洞,利用該漏洞就可以方便地在應用層執行任意代碼。

我在日本買的Old 3DS就是通過這個方式破解,過程非常美妙。

該漏洞適配的3ds版本如下:

Version N3DS/N2DS O3DS/2DS
US 1.0-11.3 ? ?
JPN 1.0-11.3 ? ?
EUR 1.0-11.3 ? ?
KOR 4.0-11.3 ? ?
CHN 4.0-11.3 N/A ?
TWN 4.1-11.3 N/A ?

Browserhax+SSLoth

參考:

這是以下三個漏洞的集合:

  • old-browserhax
  • new-browserhax
  • ssloth

其中,old-browserhax和new-browserhax分別是Old 3DS和New 3DS使用的利用方式。雖然Old 3DS和New 3DS使用的瀏覽器存在區別(SPIDER和SKATER),但二者均基于老版本的Webkit,所以通過瀏覽器漏洞進行破解是常見操作。

old-browserhax對應的漏洞是mrnbayoh通過fuzz找到的UAF漏洞,new-browserhax對應的漏洞是CVE-2013-2857

由于使用了Webkit內核,3DS瀏覽器需要遵守LGPL開源協議將源碼開放下載,導致大量安全研究者可以直接通過代碼審計的方式尋找漏洞。

對于層出不窮的瀏覽器漏洞,任天堂官方在9.9.0系統中增加了瀏覽器版本檢查——3DS只有在升級了最新版系統后才能使用瀏覽器,這導致很多基于老版本瀏覽器漏洞的破解方式受到影響。

SSLoth漏洞就用來解決這個問題,它是存在于系統SSL模塊中的一個漏洞,允許攻擊者偽造證書,進而偽造任天堂官方服務器進行中間人攻擊,讓機器認為自己當前版本就是最新版,這樣就可以使用瀏覽器了。

互聯網上有一個使用了SSLoth搭建的公開代理服務器192.9.234.11:8080,只要將系統代理設置成這個服務器,即可完成版本欺騙攻擊。結合這兩個漏洞,打開瀏覽器即可觸發漏洞。

SSLoth漏洞影響版本:

Firmware Version N3DS/N2DS O3DS/2DS
SAFE_FIRM(3DS安全模式) <11.15 ? ?
NATIVE_FIRM 1.0-11.13 ? ?
NATIVE_FIRM > 11.13 ? ?

old-browserhax影響版本:

11.9.0-42 -> 11.13.0-45 for USA, EUROPE, JAPAN, KOREA, CHINA, TAIWAN (hbmenu and boot9strap)
11.10.0-43 -> 11.13.0-45 EUROPE (hbmenu and boot9strap)
11.4.0-37 -> 11.8.0-41 for USA, EUROPE, JAPAN (boot9strap only)

new-browserhax影響版本:

11.9.0-42 -> 11.13.0-45 for USA, JAPAN (hbmenu and boot9strap)
11.10.0-43 -> 11.13.0-45 for EUROPE (hbmenu and boot9strap)
11.9.0-36 -> 11.13.0-39 for KOREA (hbmenu and boot9strap)
11.4.0-37 -> 11.8.0-41 for USA, EUROPE, JAPAN (boot9strap only)

browserhax-XL+SSLoth

參考:

這個利用是old-browserhax和new-browserhax的繼任者,因為這兩個漏洞在11.14系統版本中被修復了,所以作者先嘗試繼續進行fuzz,并在SPIDER和SKATER中分別找到兩個新的UAF漏洞并編寫了利用。

當然,因為同樣是瀏覽器漏洞,所以需要配合SSLoth使用。

值得注意的一點是,在11.14版本中其實SSLoth漏洞已經被修復了,無法直接在正常系統模式下使用;但是3DS有個安全模式(SAFE_FIRM)仍然存在這個問題,我們重啟系統時按住L+R+Up+A即可進入安全模式并聯網更新。此時使用SSLoth漏洞劫持更新服務器,運行我們的利用即可。

這兩個新漏洞生命周期都很短,只影響11.14.0-46,很快被修復。

Seedminer+BannerBomb3

參考:

- https://github.com/zoogie/Bannerbomb3

-https://seedminer.hacks.guide/

BannerBomb3是利用主機DSiWare數據管理中的一個漏洞,我們構造惡意的DSiWare備份并讓主機加載,即可觸發漏洞。

但是構造惡意DSiWare備份需要計算(爆破)出主機的加密密鑰,需要一定的算力支持,可以在上面的網站中進行云爆破。

完整破解過程如下:

  1. 數據收集: 首先,需要收集一些關鍵信息,包括用戶的3DS友好碼(Friend Code)和設備的可移動(movable)種子(一個關鍵的加密數據文件)。
  2. 種子破解(Bruteforce): 這一步是Seedminer破解的核心。這里利用一個稱為“bruteforcemovable”的工具,通過嘗試大量的可能性來破解用戶可移動種子的LFCS(Local Friend Code Seed)。這個過程可能需要一些時間,因為需要在多個可能的種子中找到正確的一個。這是一個暴力破解(bruteforce)過程,通常需要借助GPU計算能力來加速。
  3. 安裝自制啟動器(boot9strap): 成功獲取可移動種子后,使用一個名為“Frogtool”的工具將種子注入到一個特定的DSiWare游戲中。在這個過程中,會將DSiWare游戲修改為一個能夠引導自制固件(如Luma3DS)的啟動器。用戶需要將這個修改過的游戲安裝到3DS設備上。
  4. 安裝自制固件(如Luma3DS): 通過修改的DSiWare游戲啟動后,用戶需要安裝一個自制固件,通常是Luma3DS。自制固件允許用戶運行未經任天堂官方認證的軟件和游戲,實現更多的自定義功能。

原本這個Seedminer的漏洞是所有3DS破解的終極解,任何系統不用考慮前面所有的利用方法,直接將系統升級到最新版即可使用該方式破解。

但是2023年5月23日,任地獄突然給走向生命終結的3DS更新了新版系統11.17.0,在US/EU/JP地區修復了BannerBomb3漏洞。所以該漏洞最終影響版本僅為:小于11.17.0-50 for US/EU/JP版本

super-skaterhax

前面的new-browserhax-XL被修復后,作者繼續努力,找到了新的漏洞。不過這次作者只研究了New 3DS的瀏覽器SKATER,所以super-skaterhax這個利用僅限于New 3DS中。

這雖然仍是一個瀏覽器的UAF漏洞,但因為這個漏洞截止到今天(2023年6月9日)為止的最新版本11.17.0都沒有修復,所以我們只需要把系統升級到最新版本即可,不再需要配合SSLoth漏洞使用。

漏洞影響版本:

11.15 - 11.17 on all 4 new3ds regions US,EU,JP,KR

這個漏洞就是目前為止New 3DS的終極解。

safecerthax

參考:

- https://github.com/MrNbaYoh/safecerthax
- https://safecerthax.rocks/

Old 3DS的安全模式(SAFE_FIRM)基于非常老的3.0系統版本,所以很多新版本已經修復的漏洞可以通過安全模式繼續利用。

safecerthax就是利用這個原理,在進入Old 3DS安全模式后,利用了5.0.0以前存在的一處漏洞(PXIAM:ImportCertificates 堆溢出),在ARM9 CPU上執行任意代碼(3DS有兩塊CPU,ARM9和ARM11)。

漏洞影響版本:

Model Firmware Version Vulnerable
O3DS/2DS SAFE_FIRM <11.15.0 ?
O3DS/2DS NATIVE_FIRM 1.0.0-4.4.0 ?
O3DS/2DS NATIVE_FIRM >=5.0.0 ?
N3DS/N2DS all all ?

但這個漏洞也不是Old 3DS的終極解決方案,在11.15.0后被修掉。(修掉的應該是SSLoth,這點我不太確定)

所以,截止到2023年6月9日,在BannerBomb3不能使用的最新版11.17.0中,Old 3DS是無法軟破解的。所以,如果你的機器是在這個版本以下,千萬不要升級最新版。

ntrboot+R4燒錄卡硬破

  • 參考:

https://3ds.hacks.guide/ntrboot

這個就是最后的辦法,如果上面的所有軟破解方法都不能使用,比如最新版本Old 3DS,那么就只能使用硬破解的方式。

如果之前買過R4燒錄卡,那么就不用在買額外的硬件設備,可以直接將ntrboot安裝進燒錄卡中。

然后通過磁鐵,讓3DS在啟動時引導加載帶ntrboot的固件,最后完成漏洞利用。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/3047/