Upgrade to Pro — share decks privately, control downloads, hide ads and more …

カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか -

カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか -

2019/7/20 カーネル/VM探検隊15回の @nullpo_head (https://twitter.com/nullpo_head) の発表資料です。

高レベル言語ランタイム、型付きアセンブリ、Software Fault Isolationなどの手法を紹介しつつ、任意のプログラムを安全にカーネル空間で動かそうという野望に答えるクールな挑戦達を紹介します。

Takaya Saeki

July 20, 2019
Tweet

More Decks by Takaya Saeki

Other Decks in Technology

Transcript

  1. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 17
  2. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation👈 • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 18
  3. 22

  4. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 24
  5. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux👈 • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 25
  6. Kernel Mode Linux Toshiyuki Maezawa et al. – The University

    of Tokyo Maeda Toshiyuki. Kernel mode linux: Toward an operating system protected by a type theory. In Advances in Computing Science – ASIAN 2003. Programming Languages and Distributed Computation Programming Languages and Distributed Computation. Springer Berlin Heidelberg, 2003. 26
  7. Overview – Kernel Mode Linux By 前田 俊行先生 (当時 東大旧米澤研)

    • 型検査をパスしたプログラムがisolation を満たす安全性があることを証明できる 「型付きアセンブリ(TAL)」を利用 • カーネルがTALをロード時に型検査、コ ンパイルしてカーネル空間で動かす 27
  8. 達成すべきIsolation – Kernel Mode Linux • 特権命令の排除 • TALからその手のInstructionを排除する •

    メモリ空間の分離 • 型がついたTALは不正なメモリR/W/Eを行わ ないことが保証できる 28
  9. システム 1. コンパイラ Popcorn • Cライク(実際はMLライク)な型安全な言語 • 型付けされたTALx86を吐く 2. TALx86アセンブラ

    • アセンブル 3. 型検査器 • 型検査を行い安全性を検証 4. カーネル空間でプロセスを起動 29
  10. Kernel Mode Linux • CooL • 静的型付きアセンブリの利用 • 実際のアセンブリのサブセット •

    惜しい点 • 現状TALx86へコンパイルする言語が 結局のところそもそも型安全言語 • C, C++… 31
  11. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 32
  12. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 33
  13. Singularity, Verve Microsoft Research Galen C. Hunt and James R.

    Larus. Singularity: rethinking the software stack. SIGOPS Operating Systems Review, 41(2):37–49, 2007. Jean Yang and Chris Hawblitzel. Safe to the last instruction: automated verification of a type-safe operating system. In Proc. PLDI, 2010. 34
  14. Singularity Overview By MSR • MSの色々野心的な研究用OS • Software Isolated Process

    + Microkernel • ほぼすべての実装がC#製でType safe • Type safeなMSILアセンブリを実行する 35
  15. Singularity, Verve • CooL • KMLの特徴に加え、OS自身もMemory Safe • Software Isolated

    Process + Microkernel • C++のようなunsafeな言語も使用 • 惜しい点 • やっぱりTALx86へコンパイルする言語が そもそも型安全である必要がある 38
  16. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 39
  17. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 40
  18. 達成すべきIsolation - SFI • 特権命令 • Binary Translation中にディスアセンブルして 発見する •

    メモリ空間の分離 • Binary Translationによって、すべてのメモリ RW命令、すべてのJump系命令をチェック機 構つきの安全なものに書き換える 43
  19. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 48
  20. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 49
  21. NaCl Overview • だいたいNaCl用ツールチェイン, NaClバイ ナリチェッカー, ランタイムからなる • ただのx86 /

    ARM ELFではなく、いくつかの Constraintを導入してSFIを強制する • Binary Translationの代わりに実行時にバイナリが Constraintを満たしているかチェックする • ざっくり、Constraintが満たされているなら、 SFIのランタイムチェックの手法が埋め込まれて いることを保証できる 52
  22. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 56
  23. Cool Isolation Techniques Overview 1. 高レベル言語ランタイムによるisolation • Java, Ruby, …

    2. 型の力によるisolation • Kernel Mode Linux • Singularity, Verve 3. SFIによるisolation • SFIとは • NaCl • Nebulet / Wasmer 57
  24. 再び: NaCl • CooL • 安全ではない言語C, C++にも対応 • 形式がネイティブバイナリである •

    %e*xをうまく使ってオーバーヘッドを削減 • 惜しい点 • ディスコンになった 59 Asm.js / WASM のせい
  25. Nebulet • (Going to be) A microkernel that implements a

    WebAssembly "usermode" that runs in Ring 0. • Rust製 • SIP + Microkernel + Rust • ロマンがやばい • アツさに比べて割と無名 62
  26. Nebuet / Wasmer Kernel-wasm • CooL! • 安全ではない言語C, C++にも対応 •

    今はやりのWASM • これからの最適化が期待 63