Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Game is Over. Nintendo switch has been tota...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ren Kimura
July 21, 2018
Programming
5.3k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Game is Over. Nintendo switch has been totally compromised
KernelVM #14
Ren Kimura
July 21, 2018
More Decks by Ren Kimura
See All by Ren Kimura
脅威解析概論
rkx1209
0
240
Ideas for defeating Anti-Deep-Fakes
rkx1209
0
120
セキュリティベンチャーのリスク管理
rkx1209
0
160
ファジング+トリアージ技術を用いた脆弱性解析自動化
rkx1209
0
140
Introduction to Fuzzing
rkx1209
6
4.4k
ARM TrustZone エクスプロイト入門
rkx1209
7
8.6k
インサイドNintendo Switch
rkx1209
18
13k
More efficient remote debugging with Thin Hypervisor
rkx1209
3
2.7k
Reverse Debugging with radare2
rkx1209
6
2k
Other Decks in Programming
See All in Programming
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
370
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
270
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
210
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
210
Contextとはなにか
chiroruxx
1
360
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
170
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.4k
1B+ /day規模のログを管理する技術
broadleaf
0
100
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
410
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.8k
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
130
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
120
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Between Models and Reality
mayunak
4
350
Designing Powerful Visuals for Engaging Learning
tmiket
1
420
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
210
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
630
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
340
KATA
mclloyd
PRO
35
15k
Visualization
eitanlees
152
17k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Transcript
The Game is Over Nintendo switch has been totally compromised
@RKX1209
Whoami Japanese student at Kobe University(M2) Research scholar @CyLab, CMU
(2018/10/1~) Twitter: @RKX1209 Splatoon2 player:)
Hardware Spec ODNX02-A2 (based on Tegra X1) ARM Cortex-A57 Maxwell
256 core GPU 4GB DRAM
System software Microkernel “Horizon” Functionalities provided by “Service”. File operations,
I/O processing, Graphics ….etc
Microkernel? Launch the game title from home menu... qlaunch appletAM
Apps Service proxy(sys) pm:shell ldr:pm fsp-ldr (1) Request proxy appletOE (2) Launch game title CreateProcess Mount code Game (3) Request proxy proxy(app) (3) App funcs (Recording movie… etc)
IPC mechanism Communication with “Services” Use shared buffer, TLS(Thread Local
Storage) Notify by svcSendSyncRequest. App Service Apps Service TLS (2) svcSendSyncRequest (1) Send Message (3) Recv Message
IPC mechanism All connections are managed by “session handler” Create
New Session: - svcConnectToNamedPort(name) - sm::GetService App1 Service session(1-sm) App2 Apps Service session(2-sm)
IPC session Almost all sessions are created by sm::GetService, except
connection with sm itself. App1 sm session(1-sm) Apps Service (1) svcConnectToNamedPort(“sm:”) fsp-ldr (2) sm::GetService(“fsp-ldr”) (3) session(1-fspldr) Got from sm::GetService
Service List acc Account services am Applet services audio Audio
services bsd BSD socket services nvdrv NVIDIA graphics driver pm Process manager services sm Service manager usb USB services wlan WLAN services
Case: Launch game title Launch the game title from home
menu... qlaunch appletAM Apps Service proxy(sys) pm:shell ldr:pm fsp-ldr (1) Request proxy appletOE (2) Launch game title CreateProcess Mount code Game (3) Request proxy proxy(app) (3) App funcs (Recording movie… etc)
Case: printf(“Hello World”) Execute simple homebrew app, printf(“Hello World”); with
libnx. Apps Hello App libnx newlib devoptab_list STDOUT STDERR nvdrv Service BufferQueue gfx buffer buffer buffer buffer_producer
Case: printf(“Hello World”) Execute simple homebrew app, printf(“Hello World”); with
libnx. Apps Hello App libnx newlib devoptab_list STDOUT STDERR nvdrv Service BufferQueue gfx buffer buffer buffer buffer_producer Binder(IPC) Parcel libnx implements android graphic system.
.text section File format (NSO) Nintendo switch static executable format.
Every sections are compressed by LZ4.
File format (NRO) Nintendo switch dynamic executable format. Verified at
load time using NRR file.
File format (MOD) Structures used for the runtime-linking of NSOs
and NROs. Header(NRO) .text .rodata .data Header(MOD) Module Objects... .dynamic unwind NRO Binary
Static/Dynamic analysis(DEMO) There are some tools that can parse these
formats. IDA/radare2 plugin Debugger nxdbg, r2-nxdbg(WIP) https://github.com/RKX1209/r2nxdbg
Emulator? yuzu-emu, Ryujinx, NSEMU ... appletAM Apps Service(emulated) pm:shell ldr:pm
fsp-ldr appletOE App ・・・・・・・・・ vCPU(ARMv8) Host Hardware(x64) Audio DSP(ARMv7) BCM4536 (WiFi) USB ・・・・・・・・・ Hardware
NSEMU(DEMO) - ARMv8 CPU emulator Regular ops, SIMD … etc
- Service emulator sm, bsd, fsp-srv, ldr, - Binary loader nso https://github.com/RKX1209/nsemu
Firmware programming Now you can replace firmware on switch console
using bootROM vulnerability.
Fusee Gelee(CVE-2018-6242) Tegra USB Recovery Mode (RCM) Recovery commands are
required. * .--. / / ` + | | ' \ \__, * + '--' * + /\ + .' '. * * /======\ + ;:. _ ; |:. (_) | |:. _ | + |:. (_) | * ;:. ; .' \:. / `. / .-'':._.'`-. \ |/ /||\ \| _..--"""````"""--.._ _.-'`` ``'-._ __ __ _ __ / _| /_/ | | /_/ | |_ _ _ ___ ___ ___ __ _ ___| ___ | _| | | / __|/ _ \/ _ \ / _` |/ _ \ |/ \ | | | |_| \__ \ __/ __/ | (_| | __/ | __/ Field Size Description direction 1b if '1', the device should respond with data type 2b specifies whether this request is of a standard type or not recipient 5b encodes the context in which this request should be considered; request 8b specifies the request number length 16b specifies the maximum amount of data to be transferred
Fusee Gelee(CVE-2018-6242) Tegra USB Recovery Mode (RCM) Recovery commands are
required. * .--. / / ` + | | ' \ \__, * + '--' * + /\ + .' '. * * /======\ + ;:. _ ; |:. (_) | |:. _ | + |:. (_) | * ;:. ; .' \:. / `. / .-'':._.'`-. \ |/ /||\ \| _..--"""````"""--.._ _.-'`` ``'-._ __ __ _ __ / _| /_/ | | /_/ | |_ _ _ ___ ___ ___ __ _ ___| ___ | _| | | / __|/ _ \/ _ \ / _` |/ _ \ |/ \ | | | |_| \__ \ __/ __/ | (_| | __/ | __/ Field Size Description direction 1b if '1', the device should respond with data type 2b specifies whether this request is of a standard type or not recipient 5b encodes the context in which this request should be considered; request 8b specifies the request number length 16b specifies the maximum amount of data to be transferred
Fusee Gelee(CVE-2018-6242) request = GET_STATUS Copy the status variable to
High DMA Buffer. Response size < length
Fusee Gelee(CVE-2018-6242) request = GET_STATUS && recipient=ENDPOINT Copy the “length
bytes buffer” to High DMA Buffer. Overwrite application stack. (No ASLR, stack cookie)
Boot sequence Nintendo switch boot sequence
Boot sequence Nintendo switch boot sequence pwned Arbitrary Code Execution
from BootROM
Atomosphere Open source custom firmware for Nintendo Switch “fusee-pri/sec” “exosphere”
“startosphere”
Fuzzing case(nx-fuzzer) system call fuzzer for nintendo switch. Detect crash
and reboot by using watchdog.
nx-watchdog(DEMO) /dev/watchdog implementation on switch. Firmware program based on hekate-ipl.
NVIDIA Tegra WDT (See manual and linux driver) https://github.com/RKX1209/nx-watchdog
Sammary Nintendo Switch internals. NSEMU - Nintendo switch emulator r2nxdbg/plugin
- Analysis tool, debugger nx-fuzzer - system call fuzzer nx-watchdog - /dev/watchdog on switch