Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Kernel/VM #14 発表資料
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
orumin
July 21, 2018
Technology
650
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kernel/VM #14 発表資料
orumin
July 21, 2018
More Decks by orumin
See All by orumin
あのころの iPod を どうにか再生させたい
orumin
2
3k
ヴィンテージマシンと付き合う - kernel/vm online 5
orumin
0
1.3k
むかしの RISC、むかしの Unix
orumin
7
3.9k
Fundamental of architecture to implementing OS on AArch64
orumin
3
5.7k
Kernel/VM Kansai #9
orumin
0
1k
Unikernels report
orumin
2
550
第13回Kernel/VM勉強会発表資料
orumin
1
1.7k
第12回カーネル/VM探検隊
orumin
0
400
第11回 Kernel/VM探検隊 発表資料
orumin
1
610
Other Decks in Technology
See All in Technology
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
120
LLMに渡さなかった仕事
nanaism
0
1.3k
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
2
1k
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
160
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
430
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
cscengineer
PRO
0
160
Oracle Cloud Network Path Analyzerを試してみた/I Tried Out Oracle Cloud Network Path Analyzer
masakiokuda
1
110
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.9k
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
10
5k
AI時代、データエンジニアが一番おもろい
genshun9
0
680
データ_AIの事業の勝敗をわけるもの
nek0128
1
470
AI de Idea
kawaguti
PRO
2
130
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
New Earth Scene 8
popppiees
4
2.6k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
Optimising Largest Contentful Paint
csswizardry
37
4k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
BBQ
matthewcrist
89
10k
How to Talk to Developers About Accessibility
jct
2
550
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
550
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
400
Transcript
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 1/27 Programming on PS4 Programming
on PS4 orumin (@kotatsu_mi) 1
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 2/27 2
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 3/27 PS4 での任意コード実⾏ PS4 での任意コード実⾏
WebKit の脆弱性と BadIRET と呼ばれる脆弱性を突かれていた 前回の Kernel/VM での RKX1209 ⽒の発表 任意コードが実⾏されるように https://speakerdeck.com/rkx1209/hell-on-sony-snatch-the-kernel- privilage-from-browser 3
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 4/27 PS4 ハックの現状 PS4 ハックの現状
時代は進んだ FW 5.05 まで homebrew が使える exploit が公開 4.05 ,4.55 ,5.05 向けに kernel exploit が公表済み 4.55 も 5.05 も BPF の race condition を突くもの OpenOrbis team が Mira project 進⾏中(フレームワー ク) 4
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 5/27 PS4 でこんなことまで…… PS4 でこんなことまで……
5
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 6/27 今回のお題:PS4 でコードを動かそう 今回のお題:PS4 でコードを動かそう
脆弱性については が詳しい どうやって動かすかももちろん⾯⽩いですが 何かを動かすこと⾃体も⾯⽩いですよね 実際にコードを動かしてみよう https://github.com/Cryptogenic/Exploit-Writeups 6
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 7/27 PS4 でコードを動かすには PS4 でコードを動かすには
1. PS4 で exploit と payload を実⾏する WebKit 上で exploit を実⾏し外部から payload のバイナリを注⼊ (主に TCP/IP 経由) 画⾯描画は canvas を乗っ取って描画するなど制約あり 環境構築やコードの記述はラク 2. PS4 のアプリケーションとして実⾏する 上記制約がない やや準備がめんどい 7
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 8/27 PS4 “payload” SDK PS4
“payload” SDK 今回はこちらの使い⽅に触れません サークル「らぼちっく;げーと」にこっちを触ったときの話を寄 稿しました コミックマーケット C94 で頒布されると思います 8
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 9/27 psxdev PS4 SDK psxdev
PS4 SDK 今回はこちらについて Hitodama あるいは psxdev と名乗る⼈物が作 成 fMSX の移植版の作成実績アリ 最近 FW 5.05 にも対応 9
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 10/27 PS4 Hardware PS4 Hardware
PS4 Sony のゲームコンソール AMD の Jaguar ベースの APU を搭載 つまり x86_64 ですね メインメモリが GDDR5 な 8GB のメモリ CPU と GPU を接続する onion バスが拡張されているらし い 10
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 11/27 PS4 So ware PS4
So ware PS4 はコアをひとつ占有し動作する OS があ る 名は Orbis OS FreeBSD 9.0 の fork libc も system call も使える ツールチェーンには LLVM/Clang が採⽤ 11
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 12/27 Sony Executable Sony Executable
PS2 も PS3 も PSP も PS Vita も ELF を使っている ファームウェアでのライブラリとしては prx という形式にしたも のを使っていた PS3 や PS Vita では さすがに署名したり暗号化したりしている SELF … Signed Executable and Linkable Format SPRX … Signed PPU Relocatable Executable アプリのメタデータとして SFO という形式のバイナリ これらをアーカイブにした EBOOT.PBP (PSP のみ)や pkg 12
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 13/27 PS4 Executable PS4 Executable
やっぱり SELF やっぱり SFO やっぱり pkg 13
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 14/27 PS4 Homebrew PS4 Homebrew
OS が Unix 系なのもあって普通に GCC や Clang でイケる libc や Sony 独⾃の API は sprx をロードすれば叩ける sprx をロードしたり API のプロトタイプ宣⾔を⽤意したりする SDK …… もうあったー! 14
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 15/27 環境構築 環境構築 README どおりにやればおおむね⼤丈夫
ただし macOS 前提…… しかもやや⼿順が抜けていておかしい 次から環境構築⼿順の正確なものを記載します もしかしたら後で README に pull-req 出すかも https://github.com/psxdev/ps4sdk/tree/firmware505 15
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 16/27 環境構築 - LLVM のビルド
環境構築 - LLVM のビルド export PS4DEV=/usr/local/orbisdev mkdir -p $PS4DEV/git/crossllvm && cd $PS4DEV/git/crossllvm git clone https://llvm.org/git/llvm.git cd llvm/tools git clone https://llvm.org/git/clang.git git clone https://llvm.org/git/lld.git cd ../projects git clone https://llvm.org/git/compiler-rt.git cd ../.. mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/orbisdev/toolcha -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-scei-ps4 \ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \ -DCOMPILER_RT_BUILD_BUILTINS:BOOL=OFF -DCOMPILER_RT_BUILD_SANITIZERS:BOOL=OFF -DCOMPILER_RT_CAN_EXECUTE_TESTS:BOOL=OFF -DCOMPILER_RT_INCLUDE_TESTS:BOOL=OFF 16
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 17/27 環境構築 - binutils のビルド
環境構築 - binutils のビルド cd $PS4DEV/git git clone git://sourceware.org/git/binutils-gdb.git binutils cd binutils ./configure --prefix="$PS4DEV/host-osx" --target="x86_64-pc-freebsd9" \ --disable-nls \ --disable-dependency-tracking \ --disable-werror \ --enable-ld \ --enable-lto \ --enable-plugins \ --enable-poison-system-directories make -j4 make install 17
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 18/27 環境構築 - PS4SDK のビルドと設定
環境構築 - PS4SDK のビルドと設定 export PS4SDK=$PS4DEV/git/ps4sdk export PATH=$PS4DEV/host-osx/x86_64-pc-freebsd9/bin:$PS4DEV/toolchain/bin:$PATH cd $PS4DEV/host-osx/x86_64-pc-freebsd9/bin ln -s ld orbis-ld cd $PS4DEV/git git clone -b firmware505 https://github.com/psxdev/ps4sdk cd ps4sdk make -j4 ln -s $PS4SDK/include $PS4DEV ln -s $PS4SDK/lib $PS4DEV ln -s $PS4SDK/make $PS4DEV ln -s $PS4SDK/crt0.s $PS4DEV ln -s $PS4SDK/linker.x $PS4DEV 18
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 19/27 環境構築 - liborbis のビルドと設定
環境構築 - liborbis のビルドと設定 こちらの README の⼿順は正確なのでこの通りにするだ け liborbis は正確には絶対必要ではないのですがあると便利 2D ゲーム向けの関数群やゲームパッド⼊⼒の受付 libz や libpng の移植 とくに elf-loader や ps4link はあると便利 https://github.com/orbisdev/liborbis 19
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 20/27 GNM と GNMX GNM
と GNMX PS4 で導⼊されているグラフィックス API GNM が低レベル,GNMX が⾼レベルの API GNM の API の例 https://github.com/ps4dev/libSceGnmDriver/blob/master/include/gnm_d 20
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 21/27 GNM GNM #pragma once
#include <stdint.h> #include <inttypes.h> /* unreversed */ int64_t sceGnmAddEqEvent(); int64_t sceGnmAreSubmitsAllowed(); int64_t sceGnmDebugHardwareStatus(); int64_t sceGnmDeleteEqEvent(); int64_t sceGnmDingDong(); int64_t sceGnmDisableMipStatsReport(); int64_t sceGnmDispatchInitDefaultHardwareState(); int64_t sceGnmDrawInitDefaultHardwareState(); 21
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 22/27 orbis2d orbis2d PS4SDK といっしょにビルドした
liborbis に含まれるツー ル GNM の wrapper になっているっぽい updateController(); orbis2dStartDrawing(); orbis2dDrawRectColor(x,w,y,h,color); orbis2dClearBuffer(0); // flush and flip orbis2dFinishDrawing(flipArg); // swap buffers orbis2dSwapBuffers(); flipArg++; 22
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 23/27 homebrew homebrew 23
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 24/27 ハマりポイント ハマりポイント TCP/IP 経由で
elf を投げつけたら elf をロードする elf-loader が既に ある デバッグに便利 Firmware 5.05 の⼿元の環境では動かない…… ELF を pkg にして PS4 にインストールしよう! PS2 や PS4 のゲームバックアップのツール情報ばかり出てくる ⼀応不可能ではない(pkg 化された homebrew も存在する) 調べて pkg 作ろうとしましたがまだ出来てません…… 24
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 25/27 さらに・ハマりポイント さらに・ハマりポイント いっそあきらめて “payload”
SDK でデモをしようとした サンプルコードにある canvas を乗っ取って描画する⽅法 サンプルコードは Firmware 1.76 前提 ⼿元だと page fault でフレームバッファに値を書き込めな い…… 1px も書き込めませんでした 25
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 26/27 ダメ押し・ハマりポイント ダメ押し・ハマりポイント いろいろデバッグ情報とれないか試していた 試しに
IDU mode (PS Vita や PS4 に搭載される試遊台モード)にし てみた 元のユーザーが消されて User1 と User2 が作成される さよならセーブデータ\(^o^) / 26
7/21/2018 Programming on PS4 file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 27/27 まとめ まとめ PS4 の
homebrew はわりと作りやすい Unity で出⼒したやつも homebrew として起動できるという噂も みんなやってみよう でもやるなら FW 1.76 の古いマシンがいいと思うよ exploit を実⾏したらすぐに FTP かなんかでセーブデータやトロ フィーバックアップしようね 27