$30 off During Our Annual Pro Sale. View Details »

Kernel/VM #14 発表資料

orumin
July 21, 2018

Kernel/VM #14 発表資料

orumin

July 21, 2018
Tweet

More Decks by orumin

Other Decks in Technology

Transcript

  1. 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

    View Slide

  2. 7/21/2018 Programming on PS4
    file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 2/27 2

    View Slide

  3. 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

    View Slide

  4. 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

    View Slide

  5. 7/21/2018 Programming on PS4
    file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 5/27
    PS4
    でこんなことまで……
    PS4
    でこんなことまで……
    5

    View Slide

  6. 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

    View Slide

  7. 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

    View Slide

  8. 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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

  13. 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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. 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

    View Slide

  17. 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

    View Slide

  18. 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

    View Slide

  19. 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

    View Slide

  20. 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

    View Slide

  21. 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
    #include
    /* 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

    View Slide

  22. 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

    View Slide

  23. 7/21/2018 Programming on PS4
    file:///home/orumin/Nextcloud/slides/kernelvm/kernelvm-14/slides.html?print-pdf#/ 23/27
    homebrew
    homebrew
    23

    View Slide

  24. 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

    View Slide

  25. 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

    View Slide

  26. 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

    View Slide

  27. 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

    View Slide