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
Kernel/VM #14 発表資料
Search
orumin
July 21, 2018
Technology
640
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
2.9k
ヴィンテージマシンと付き合う - kernel/vm online 5
orumin
0
1.2k
むかしの RISC、むかしの Unix
orumin
7
3.8k
Fundamental of architecture to implementing OS on AArch64
orumin
3
5.5k
Kernel/VM Kansai #9
orumin
0
1k
Unikernels report
orumin
2
530
第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
コミットの「なぜ」を読む
ota1022
0
120
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
7
3.9k
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
2
410
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
130
AIチャットの改善から見えた、良いAI体験とは / What Constitutes a Good AI Experience: Insights from Improving AI Chat
kubode
0
120
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.8k
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
640
Agile and AI Redmine Japan 2026
hiranabe
4
480
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
310
フィジカル版Github Onshapeの紹介
shiba_8ro
0
320
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
310
元銀行員がAIだけでアプリを量産!「バイブコーディング実演セミナー 」
tatsuya1970
0
110
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
360
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
It's Worth the Effort
3n
188
29k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Balancing Empowerment & Direction
lara
6
1.2k
First, design no harm
axbom
PRO
2
1.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Skip the Path - Find Your Career Trail
mkilby
1
150
The Pragmatic Product Professional
lauravandoore
37
7.3k
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