Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20分でわかるgVisor入門

14,019 views

Published on

2018年5月28日開催 『Container SIG 2018 Summer』のスライド資料です。

Published in: Technology
  • Be the first to comment

20分でわかるgVisor入門

  1. 1. Container SIG 2018 Summer さくらインターネット株式会社 Shuji Yamada (山田 修司) @uzyexeMay 28, 2018 20分でわかる gVisor入門
  2. 2. Shuji Yamada • さくらインターネット所属 • コンテナホスティング「Arukas」担当 • 以前は「さくらのクラウド」運用担当 • 好きなクラスタ Mesos/Marathon (山田 修司) Trust me. I am Engineer _(┐¦_ ε:) 2
  3. 3. • アプリケーションをパッケージングして展開。 • コンテナはホストカーネルを共有。 • オーバーヘッドほぼ0。 3 Build Ship Run Docker コンテナのおさらい
  4. 4. コンテナは ホストカーネルを共有 4
  5. 5. 5 VM B VM CVM A Server Hardware Linux Kernel Hyper Visor Bins/Libs App Kernel Bins/Libs App Kernel Bins/Libs App Kernel
  6. 6. 6 Container B Container CContainer A Server Hardware Linux Kernel Docker Engine Bins/Libs App Bins/Libs App Bins/Libs App
  7. 7. 7 Container B Container CContainer A Server Hardware Linux Kernel Docker Engine Bins/Libs App Bins/Libs App Bins/Libs App
  8. 8. Docker Engine Linux Kernel 8 Container B Container CContainer A Server Hardware Bins/Libs App Bins/Libs App Bins/Libs App
  9. 9. • ゲストプロセスはホストカーネル上で実行。 • ゲストプロセスを十分には隔離していない。 • 単一の脆弱性で、ホストを破壊可能。 9 コンテナはサンドボックスではない Docker Engine Container B Container CContainer A Server Hardware Linux Kernel Bins/Libs App Bins/Libs App Bins/Libs App
  10. 10. “Containers do not contain”
 -Dan Walsh, 2014- 10
  11. 11. • VMによるコンテナ隔離 • オーバーヘッドが大きい。 • IaaS 上では、Nested Virtualization が必要条件。 • seccomp、SELinux、AppArmor • 事後防衛的(脆弱性を突かれたときだけ有効) 11 いくつかの防護策
  12. 12. 過去、コンテナにも影響した重大な脆弱性 • CVE-2016-5195 DirtyCow • コンテナから脱獄してホストのroot権限を奪取可能
 • CVE-2017-5753/5715/5754 Spectre/Meltdown • ホストのカーネルメモリ漏洩 12
  13. 13. ルールベース・アクセス制御の特徴 13 Application Host Kernel Limited system calls Hardware
  14. 14. ルールベース・アクセス制御の課題 14 • 完璧なポリシーの定義は現実的には困難。 • ポリシーを過剰に設定しやすい。 • 逆にポリシーが不足することもある。 • カーネルの脆弱性は防げない。 • 他の防護策と掛け合わせた運用が不可欠。 Application Host Kernel Limited system calls Hardware
  15. 15. VMの特徴 • VM = ハードウェア仮想化してゲストに提供 • VM内で動作するプロセスは完全に隔離。 • アプリケーション互換性も高い。 • 完全仮想化なら… • Meltdown/Spector にも有効。 15 Application Guest Kernel System calls VMM Virtual hardware System calls Host Kernel Hardware
  16. 16. VMの課題 • HyperVisor + VMM + Guest Kernel • オーバーヘッドが大きい。 • パフォーマンスが劣化。 • リソース配備の柔軟性が低下 • CPUやメモリリソースを固定的に確保。 • 他のコンテナとのリソース共有不可。 16 Application Guest Kernel System calls VMM Virtual hardware System calls Host Kernel Hardware
  17. 17. VMの課題 • 1VM:1Container 構成は煩雑 • エージェントの追加インストールが必要。 • 監視エージェント • サービスディスカバリ用エージェント • モノリシックなアプリ構成になりがち。 17 Application Guest Kernel System calls VMM Virtual hardware System calls Host Kernel Hardware
  18. 18. gVisor とは • ユーザー空間で実行可能なゲストカーネル。 • アプリケーションとホストカーネルを分離。 • およそ20万行のGo言語で実装。 • ptrace版、KVM版がある。 • Docker、Kubernetes に対応。
 (runsc というOCIランタイムで提供) 18 Application gVisor System calls Host Kernel Limited system calls Hardware
  19. 19. Docker Engine Containerd runcrunc runc
  20. 20. Docker Engine Containerd runscrunsc runsc
  21. 21. gVisor のパフォーマンス 21 150ms 15MB コンテナ起動にかかる時間 メモリのオーバーヘッド
  22. 22. User Kernel Host Kernel Application Gofer (File system proxy) Sentry (Guest Kernel) ptrace seccomp 9P runsc
  23. 23. • ゲストカーネルのシステムコールを奪取(ptrace) • 奪取したシステムコールをフィルタ(seccomp) • ゲストカーネルでシステムコールを命令置換(gvisor) • 無害なシステムコールが、ホストカーネルに転送。 gVisor の挙動 23 「Linuxの機能で、Linuxを実装している。」
  24. 24. Sentry プロセス • ゲストカーネル(互換カーネル) • 空のユーザー名前空間 (User Namespace) で実行。 • ゲストのシステムコールを待ち受ける。 • seccomp でホストに転送するシステムコールを制限。 • 安全なユーザコード実行とシステムコール処理を担当。 24
  25. 25. Gofer プロセス • ファイルシステムプロキシ • サンドボックスを経由するファイルシステム操作を担当。 • アプリの代わりにホストのファイルをオープン。 • オープンしたファイルを Sentry に転送。
 (Sentry はホストファイルに直接アクセスしない。) 25
  26. 26. netstack • gVisor 独自のネットワークスタック • ネットワーク通信は Sentry が担当。 • ホストのネットワークスタックからは完全に隔離。 • データリンク層のフレームは、Dockerが持つネットワー ク名前空間内にある仮想デバイスに直接書き込み。 • ネットワーク・パススルーもサポート。 26
  27. 27. gVisor の技術的トレードオフ 27 • コンテナのセキュリティは向上 • ホストカーネルを隠 。 • VM相当のプロセス隔離を実現。 • エミュレーションによるパフォーマンス劣化 • アプリケーション互換性が低下。 • 頻繁なシステムコールでは性能が劣化。 Application gVisor System calls Host Kernel Limited system calls Hardware
  28. 28. • ptrace のパフォーマンスがネック。 • 将来的には、ptrace 以外のものに置き換わるかも。 • (実験的に)KVM を使用するアプローチも選べる。 28 まだまだ課題はある・・・
  29. 29. • 約200のシステムコールをサポートしているが・・・ • 未実装のシステムコールも多い • System V 共有メモリ(PostgreSQLが動かない…) • SOCK_RAW(Pingが動かない…) • etc… • パフォーマンス確認に使いたいベンチマークも動かない… 29 まだまだ課題はある・・・
  30. 30. • GPUに非対応 • どのようなシステムコールが送信されるかが不明瞭。 • バイナリBLOBなドライバはVMでの隔離がおすすめ • ルールベースのポリシーでの保護が困難。 • 脆弱性を勝手に修正できない。 30 まだまだ課題はある・・・
  31. 31. 31 ま と め
  32. 32. • VM(ハードウェア仮想化) • リソースやプロセスを完全に隔離可能。 • コンテナ(ネームスペース分離) • 単一の脆弱性で収容ホスト内部を破壊される。 • gVisor(ゲストカーネル、互換カーネル) • ゲストカーネルの特権を奪取されても被害は最小限。 32 まとめ
  33. 33. Quick Start • Go to: https://github.com/google/gvisor • Build and Install gVisor 33 $ docker run --runtime=runsc hello-world $ docker run -d --runtime=runsc -p 80:80 nginx
  34. 34. THANK YOU!

×