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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
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
540
第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
カードゲーム作りが教えてくれた プロダクトオーナーシップ
moritamasami
0
110
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
1
640
GoでCコンパイラを作った話
repunit
0
120
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
300
Making sense of Google’s agentic dev tools
glaforge
1
280
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
410
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
220
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
220
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.9k
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.6k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Believing is Seeing
oripsolob
1
170
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.5k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
530
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Git: the NoSQL Database
bkeepers
PRO
432
67k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
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