Successfully reported this slideshow.
Your SlideShare is downloading. ×

comsys.pdf

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 49 Ad
Advertisement

More Related Content

Recently uploaded (20)

Advertisement

comsys.pdf

  1. 1. 異種OS機能連携による セキュアコンテナ実現の検討 2022/12/5 ComSys2022 鈴木進太郎 公立はこだて未来大学 中田裕貴 さくらインターネット 松原克弥 公立はこだて未来大学
  2. 2. コンテナを活用したクラウドサービス コンテナ型仮想化(コンテナ)はプロセスベースの仮想化技術である VMに比べ高速な起動や軽量な実行環境作成が特徴 Platform as a service (PaaS) - Heroku - Google App Engine Function as a service (FaaS) - AWS lambda - Google Cloud Function 2
  3. 3. コンテナ型仮想化におけるリソース隔離 - コンテナごとに独立したOS環境 - プロセスやネットワークをはじめとするOSリソースを分離 - コンテナごとに利用できるリソース制限 - CPU利用率やメモリなど コンテナ - ホスト間の共有部を減らすことで、 悪意のあるコンテナによるリソース専有や妨害行為を防いでいる 3
  4. 4. コンテナはOSカーネルを共有 - コンテナ自体やカーネルの脆弱性を利用した攻撃を防ぐ コンテナにサンドボックス(追加の隔離)を適用して コンテナ間の隔離を堅牢にする必要がある コンテナにおけるサンドボックスの重要性 4 サンドボックスの適用により コンテナへの攻撃を回避
  5. 5. サンドボックスを適用したコンテナの課題 オーバーヘッドの増加 [1] - 仮想マシン利用 (kata container) - システムコール検査 (gvisor) コンテナ特性である「軽量さ」が損なわれる 5 [1] Yuki Nakata, Katsuya Matsubara, Ryosuke Matsumoto Proc. of the 14th IEEE/ACM International Conference on Utility and Cloud Computing (UCC) (15) 1-10 2021年12月
  6. 6. 本研究の目的 コンテナの軽量さを最大限に維持しつつ、OSカーネル共有に起因する脆弱性を 回避できるセキュアコンテナの実現 ※セキュアコンテナ: サンドボックスを適用しコンテナ間の隔離を堅牢にしたコンテナ 6
  7. 7. 実現するセキュアコンテナ 定義1 Linuxコンテナが持つリソースの制限・隔離機能をもつ 独立したOS環境の提供 - CPUやメモリの利用制限 - ファイルやディレクトリのアクセス制限 - プロセス情報の隔離 - ユーザ情報の隔離 - ネットワークの隔離 7 クラウドサービスではコンテナ を独立した環境として提供
  8. 8. 実現するセキュアコンテナ 定義2 OSカーネルの脆弱性を利用した攻撃に対する回避手段をもつ 対象とする攻撃 - Linuxカーネルの実装に起因する脆弱性を利用した攻撃 - 権限昇格や不正メモリアクセスなどの攻撃 対象外の攻撃 - ハードウェア自体の脆弱性を利用した攻撃 8
  9. 9. 実現するセキュアコンテナ 定義3 サンドボックスを用いた追加の隔離機構をもつ - システムコールやライブラリ関数の目的外使用による攻撃を防止 - コンテナ内で実行するアプリケーションの脆弱性の影響範囲を最小化 サンドボックスの適用 - ファイルやソケットに対する最粒度なアクセス制御 - アプリケーションに必要のないファイルやソケットの操作を制限 - システムコールやライブラリ関数実行の検査 - アプリケーションに必要ない関数の利用を制限 9
  10. 10. 本研究の提案 異種OS上でLinuxコンテナを互換実行 - LinuxアプリケーションはLinuxカーネル上で動作する想定で作成される - Linuxコンテナ、LinuxアプリケーションをLinuxカーネル以外で実行 カーネルの脆弱性を利用した攻撃を回避 (定義2) セキュリティ機構を用いた軽量なサンドボックスの実現 サンドボックスを用いた追加の隔離 (定義3) 10
  11. 11. 異種OSの選定条件 1. Linuxアプリケーションが実行可能 - LinuxコンテナではLinuxアプリケーションが動作 - Linuxアプリケーションを互換実行する機能を持つ 2. Linuxと同等の隔離技術をもつ - LinuxコンテナはLinuxの機能に依存 - Linuxと同等のリソース制限・隔離機能(定義1)を持つ 3. コンテナに利用できるセキュリティ機能を持つ - サンドボックスの要件を満たすようなセキュリティ機構を持つ 11
  12. 12. アプローチ: 異種OSとしてFreeBSDを採用 1. FreeBSD LinuxulatorというLinuxバイナリ互換実行機能がある 2. FreeBSD jailというコンテナ型仮想化技術が利用できる 3. FreeBSD Capsicum/Casperというセキュリティ機構を持つ FreeBSD上でセキュアコンテナ実現可能性について検討 - PaaSやFaaSにおける利用を前提 12
  13. 13. FreeBSD アプリケーション (Linuxバイナリ) Linuxulator Linuxシステムコール インタフェース Linux Rootfs / proc usr … libc libXX libYY lib システムコール実 行 FreeBSD システムコール Linuxアプリケーション互換実行の実現(アプローチ1に関連) Linuxulator - FreeBSDで利用できる Linuxのエミュレータ - Linuxバイナリの ネイティブ実行が可能
  14. 14. FreeBSD アプリケーション (Linuxバイナリ) Linuxulator Linuxシステムコール インタフェース Linux Rootfs / proc usr … libc libXX libYY lib システムコール実 行 FreeBSD システムコール Linuxアプリケーション互換実行の実現(アプローチ1に関連) Linuxulator - FreeBSDで利用できる Linuxのエミュレータ - Linuxバイナリの ネイティブ実行が可能 ライブラリの参照はLinux Rootfs から行う
  15. 15. FreeBSD アプリケーション (Linuxバイナリ) Linuxulator Linuxシステムコール インタフェース Linux Rootfs / proc usr … libc libXX libYY lib システムコール実 行 FreeBSD システムコール Linuxアプリケーション互換実行の実現(アプローチ1に関連) Linuxulator - FreeBSDで利用できる Linuxのエミュレータ - Linuxバイナリの ネイティブ実行が可能 FreeBSDとLinuxの システムコール対応付け
  16. 16. FreeBSD アプリケーション (Linuxバイナリ) Linuxulator Linuxシステムコール インタフェース Linux Rootfs / proc usr … libc libXX libYY lib システムコール実 行 FreeBSD システムコール Linuxアプリケーション互換実行の実現(アプローチ1に関連) Linuxulator - FreeBSDで利用できる Linuxのエミュレータ - Linuxバイナリの ネイティブ実行が可能 Apache、MySQL、Redis などが動作[2] PaaS, FaaSで十分利用可能 アプリケーションからは Linux環境に見える [2] freebsd.org. [LinuxApps]. https://wiki.freebsd.org/LinuxApps, (アクセス: 2022-12-5)
  17. 17. FreeBSDにおける隔離環境の実現 (1/2) (アプローチ2に関連) リソース制限機能 - rctl、cpusetを用いてLinuxと同等の機能 リソース隔離機能 - FreeBSD jailを用いる (FreeBSDで利用できるコンテナ型仮想化技術 ) - プロセス - ユーザ Linuxとは仕様が異なるため、 これら差異の対策を検討 17 制限機能 Linux FreeBSD CPUの利用時間 cgroup cpu rctl cputime CPUのコア数制限 cgroup cpuset cpuset 利用できるメモリ制限 cgroup memory rctl memoryuse 隔離機能 Linux FreeBSD プロセス namespace △ jail ユーザ namespace 対応なし ディレクトリ chroot jail ネットワーク namespace/veth vnet Linux, FreeBSDにおけるリソース制限機能 Linux,FreeBSDにおけるリソース隔離機能
  18. 18. FreeBSDにおける隔離環境の実現 (2/2) (アプローチ2に関連) リソース隔離要件 プロセス隔離 コンテナごとにPIDなどの、プロセス情報が独立している必要がある LinuxやUnixではPID 1はinitプロセスである必要がある ユーザ隔離 コンテナ間で重複したユーザ名やUID/GIDを利用できる ユーザ隔離を行わない場合、 プロセス間通信やシグナルなどUIDをベースに処理を行う機能に影響が出る 18
  19. 19. FreeBSDにおけるプロセス隔離 実現検討 FreeBSDとLinux共に プロセス情報は分離 PIDの番号付けが異なる - jailではホストとjail間で連番 - Linuxではコンテナ内で1から始まる 19 FreeBSDにおける隔離環境の実現に関連 jail内でのpsコマンド実行 PaaS, FaaSにおけるほとんどのアプリケーションは特定のPIDに依存していない PaaSやFaaSで利用するにあたりこの差異は問題ないと考える Linuxコンテナでのpsコマンド実行
  20. 20. FreeBSDにおけるユーザ隔離 実現検討 20 FreeBSDにおける隔離環境の実現に関連 FreeBSDとLinuxでユーザ名は重複可能 UID/GIDの管理方法が異なる - jailではホスト, jail間で UID/GIDは共通 - Linuxではコンテナの中と外で 異なるUID/GIDを設定 UID/GIDが重複するとシグナルやプロセス間通信に影響がでる 各jailに対して割り当てるUID/GIDの範囲を重複しないように設定する必要がある PaaSやFaaSで利用するにあたりこの差異は対策可能と考える Linux: ユーザ隔離における UID/GID FreeBSD: ユーザ隔離における UID/GID
  21. 21. コンテナへのFreeBSDセキュリティ機構適用 実現検討 (アプローチ3に関連) Capsicum FreeBSDで利用できるcapabilityを用いたアクセス制御機構 アプリケーションが自発的に権限を制限し, 実行可能な範囲を制御する Capsicumで提供されるサンドボックスでは, 全プロセスで共有利用するリソース(グローバル空間)へのアクセスを制限 - ファイル - プロセスID - IPC など 21
  22. 22. FreeBSD Capsicumサンドボックス サンドボックスによる制約 - ファイルやソケットなどのopenが不可 - 一部システムコールの発行に制限 - さらに、利用できるシステムコールの制限をかけることができる - サンドボックスの隔離は子プロセスにも引き継がれる - Capsicumの適用はアプリケーションがコードで対応する必要がある Capsicumを利用して, Linuxコンテナに対してサンドボックスの適用を実現 22 例: pingにおけるソケットに対する操作の制 限 [3] 異種OSのセキュリティ機構適用の実現(課題3に関連) [3] RTEMS(2011) rtems-libbsd[ping.c] https://github.com/RTEMS/rtems-libbsd/blob/master/freebsd/sbin/ping/ping.c (アクセス: 2022-12-5)
  23. 23. FreeBSD Casperによる代理実行 Capsicumサンドボックスの制限では一部アプリケーションは動作が困難 一部グローバル空間へのアクセス検査と代理実行機能を提供 特徴 - casperを利用した代理アクセスは専用の関数を利用 - 引数に渡す値に制限をかけることができる Casperを利用したシステムコールやライブラリ関数の実行検査を実装 23 異種OSのセキュリティ機構適用の実現(課題3に関連) 例: pingにおけるcasper関数の利用 [3] [3] RTEMS(2011) rtems-libbsd[ping.c] https://github.com/RTEMS/rtems-libbsd/blob/master/freebsd/sbin/ping/ping.c (アクセス: 2022-12-5)
  24. 24. コンテナへCapsicum/Casper適用の課題 アプリケーションが自ら適用する設計 - 通常であればコードの改変を行う - サンドボックスの適用 - サンドボックスに入る前に必要なファイルを開いておく - casper関数の利用 - Linuxulatorを利用するため、FreeBSD上でLinuxバイナリの改変が困難 バイナリの改変をせず、Capsicum/Casperを透過的に適用する必要がある 24 異種OSのセキュリティ機構適用の実現(課題3に関連)
  25. 25. FreeBSD Capsicumの透過的な適用 コンテナランタイム プロセス作 成 Jail・rctl適用 コンテナプロセス Capsicumサンドボックス アプリケーション バイナリ・ファイル・ ディレクトリを開く Linux Rootfs / App bin lib サンドボックス化 usr システム コール実行 … workdir Linuxulator システムコール 変換 リンカ 事前に開いた リンカでリンク FDから バイナリ実行
  26. 26. FreeBSD Capsicumの透過的な適用 コンテナランタイム プロセス作 成 Jail・rctl適用 コンテナプロセス Capsicumサンドボックス アプリケーション バイナリ・ファイル・ ディレクトリを開く Linux Rootfs / App bin lib サンドボックス化 usr システム コール実行 … workdir リンカ 事前に開いた リンカでリンク FDから バイナリ実行 アプリケーションに必要バイナリ、ファイル、 ディレクトリなどを予め開いておく Linuxulator システムコール 変換
  27. 27. FreeBSD Capsicumの透過的な適用 コンテナランタイム プロセス作 成 Jail・rctl適用 コンテナプロセス Capsicumサンドボックス アプリケーション バイナリ・ファイル・ ディレクトリを開く Linux Rootfs / App bin lib サンドボックス化 usr システム コール実行 … workdir リンカ 事前に開いた リンカでリンク FDから バイナリ実行 アプリケーションに必要バイナリ、ファイル、 ディレクトリなどを予め開いておく Linuxulator システムコール 変換 libpreopen 予めファイルやディレクトリを開いておき、 open()呼び出し時はすでに開いてあるファイルをアプリケー ションに渡す アプリケーションから呼び出された open()は内部でopenat() に変換される
  28. 28. FreeBSD Capsicumの透過的な適用 コンテナランタイム プロセス作 成 Jail・rctl適用 コンテナプロセス Capsicumサンドボックス アプリケーション バイナリ・ファイル・ ディレクトリを開く Linux Rootfs / App bin lib サンドボックス化 usr システム コール実行 … workdir リンカ 事前に開いた リンカでリンク FDから バイナリ実行 サンドボックスが子プロセスに 引き継がれることを利用 親プロセスでサンドボックスに入っておき、 子プロセスでアプリケーションを起動 Linuxulator システムコール 変換
  29. 29. FreeBSD Capsicumの透過的な適用 コンテナランタイム プロセス作 成 Jail・rctl適用 コンテナプロセス Capsicumサンドボックス アプリケーション バイナリ・ファイル・ ディレクトリを開く Linux Rootfs / App bin lib サンドボックス化 usr システム コール実行 … workdir リンカ 事前に開いた リンカでリンク FDから バイナリ実行 サンドボックス内ではバイナリにアクセスができない (ファイルのオープンができないため) 予めバイナリを開いておき、FDからexecを行う Linuxulator システムコール 変換
  30. 30. FreeBSD Capsicumの透過的な適用 コンテナランタイム プロセス作 成 Jail・rctl適用 コンテナプロセス Capsicumサンドボックス アプリケーション バイナリ・ファイル・ ディレクトリを開く Linux Rootfs / App bin lib サンドボックス化 usr システム コール実行 … workdir リンカ 事前に開いた リンカでリンク FDから バイナリ実行 ライブラリも通常のアクセスができなくなる 予めリンカ自体もファイルとして開いておく Linuxulator システムコール 変換
  31. 31. FreeBSD Capsicumの透過的な適用 コンテナランタイム プロセス作 成 Jail・rctl適用 コンテナプロセス Capsicumサンドボックス アプリケーション バイナリ・ファイル・ ディレクトリを開く Linux Rootfs / App bin lib サンドボックス化 usr システム コール実行 … workdir Linuxulator システムコール 変換 リンカ 事前に開いた リンカでリンク FDから バイナリ実行
  32. 32. FreeBSD Capsicumの透過的な適用(ファイルアクセス) コンテナランタイム プロセス作 成 Jail・rctl適用 コンテナプロセス Capsicumサンドボックス バイナリ・ファイル・ ディレクトリを開く Linux Rootfs / App bin lib サンドボックス化 usr アプリケーション open(…) … workdir リンカ 事前に開いた リンカでリンク FDから バイナリ実行 libpreopenにより open()からopenat()に変換 open()はlibpreopenによりopenat()に変換され、 すでに開かれているファイルへのアクセスとなる Linuxulator システムコール 変換
  33. 33. コンテナランタイム 1コンテナ FreeBSD Capsicum +Casperの透過的適用による動的なリソースアクセス プロセス作 成 コンテナプロセス Capsicumサンドボックス Linux Rootfs / App bin lib usr アプリケーション アクセス … workdir リンカ 呼び出し 内容の検査 libcasper 関数呼び出しのフック・ casperへのリダイレクト Casperプロセス FreeBSD上の OSリソースへの アクセス OSリソース リンカの仕組みを使い、自作ライブラリを利用 グローバル空間のアクセスを含む関数を 内部でcasperライブラリを経由
  34. 34. コンテナランタイム 1コンテナ FreeBSD Capsicum +Casperの透過的適用による動的なリソースアクセス プロセス作 成 コンテナプロセス Capsicumサンドボックス Linux Rootfs / App bin lib usr アプリケーション アクセス … workdir リンカ 呼び出し 内容の検査 libcasper 関数呼び出しのフック・ Casperへのリダイレクト Casperプロセス FreeBSD上の OSリソースへの アクセス OSリソース Casperにより関数呼び出しの内容の検査 アクセスの代理実行を行う
  35. 35. 予備実験: Linuxulator利用によるカーネル脆弱性の回避 Linuxulatorを利用することで、Linuxカーネルの脆弱性を回避できるか調査 権限昇格が可能な脆弱性のうち、攻撃コードが公開されているもの対象 Linuxulatorで脆弱性を利用した攻撃を試す テスト環境 35 環境 OS環境 CPU メモリ ネイティブ FreeBSD 13.1 Intel i5-4278U 16GB
  36. 36. 予備実験: Linuxulator利用によるカーネル脆弱性の回避 ◯: 攻撃を防げた △: 実行またはコンパイルができない 36 CVEID Linuxulator 備考 CVE-2016-5195 ◯ Copy-on-Writeの脆弱性を利用した攻撃 CVE-2016-9793 ◯ sock_setsockopt()の脆弱性を利用した攻撃 CVE-2016-8655 △ CAP_NET_RAWを利用したuse-after-free攻撃 CVE-2017-6074 △ DCCPプロトコルを用いたuse-after-free攻撃 CVE-2017-1000112 △ UFO(UDP Fragmentation Offload)の脆弱性を利用した攻撃
  37. 37. CVEID Linuxulator 備考 CVE-2016-5195 ◯ Copy-on-Writeの脆弱性を利用した攻撃 CVE-2016-9793 ◯ sock_setsockopt()の脆弱性を利用した攻撃 CVE-2016-8655 △ CAP_NET_RAWを利用したuse-after-free攻撃 CVE-2017-6074 △ DCCPプロトコルを用いたuse-after-free攻撃 CVE-2017-1000112 △ UFO(UDP Fragmentation Offload)の脆弱性を利用した攻撃 予備実験: Linuxulator利用によるカーネル脆弱性の回避 ◯: 攻撃を防げた △: 実行またはコンパイルができない 37 Linuxulatorでは攻撃に2日かかっても成功せず
  38. 38. CVEID Linuxulator 備考 CVE-2016-5195 ◯ Copy-on-Writeの脆弱性を利用した攻撃 CVE-2016-9793 ◯ sock_setsockopt()の脆弱性を利用した攻撃 CVE-2016-8655 △ CAP_NET_RAWを利用したuse-after-free攻撃 CVE-2017-6074 △ DCCPプロトコルを用いたuse-after-free攻撃 CVE-2017-1000112 △ UFO(UDP Fragmentation Offload)の脆弱性を利用した攻撃 予備実験: Linuxulator利用によるカーネル脆弱性の回避 ◯: 攻撃を防げた △: 実行またはコンパイルができない 38 Linuxulatorではプログラムの実行はできるが、攻撃は失敗
  39. 39. CVEID Linuxulator 備考 CVE-2016-5195 ◯ Copy-on-Writeの脆弱性を利用した攻撃 CVE-2016-9793 ◯ sock_setsockopt()の脆弱性を利用した攻撃 CVE-2016-8655 △ CAP_NET_RAWを利用したuse-after-free攻撃 CVE-2017-6074 △ DCCPプロトコルを用いたuse-after-free攻撃 CVE-2017-1000112 △ UFO(UDP Fragmentation Offload)の脆弱性を利用した攻撃 予備実験: Linuxulator利用によるカーネル脆弱性の回避 ◯: 攻撃を防げた △: 実行またはコンパイルができない 39 Linuxulatorではライブラリが不足しており 攻撃コードのコンパイルが不可能
  40. 40. CVEID Linuxulator 備考 CVE-2016-5195 ◯ Copy-on-Writeの脆弱性を利用した攻撃 CVE-2016-9793 ◯ sock_setsockopt()の脆弱性を利用した攻撃 CVE-2016-8655 △ CAP_NET_RAWを利用したuse-after-free攻撃 CVE-2017-6074 △ DCCPプロトコルを用いたuse-after-free攻撃 CVE-2017-1000112 △ UFO(UDP Fragmentation Offload)の脆弱性を利用した攻撃 予備実験: Linuxulator利用によるカーネル脆弱性の回避 ◯: 攻撃を防げた △: 実行またはコンパイルができない 40 Linuxulatorではライブラリが不足しており 攻撃コードのコンパイルが不可能
  41. 41. CVEID Linuxulator 備考 CVE-2016-5195 ◯ Copy-on-Writeの脆弱性を利用した攻撃 CVE-2016-9793 ◯ sock_setsockopt()の脆弱性を利用した攻撃 CVE-2016-8655 △ CAP_NET_RAWを利用したuse-after-free攻撃 CVE-2017-6074 △ DCCPプロトコルを用いたuse-after-free攻撃 CVE-2017-1000112 △ UFO(UDP Fragmentation Offload)の脆弱性を利用した攻撃 予備実験: Linuxulator利用によるカーネル脆弱性の回避 ◯: 攻撃を防げた △: 実行またはコンパイルができない 41 Linuxulatorではライブラリが不足しており 攻撃コードのコンパイルが不可能
  42. 42. 予備実験: Linuxulator利用によるカーネル脆弱性の回避 42 Linuxulatorでは攻撃を回避することができた FreeBSDでのLinuxアプリケーション互換実行において、 脆弱性回避は十分可能である CVEID Linuxulator 備考 CVE-2016-5195 ◯ Copy-on-Writeの脆弱性を利用した攻撃 CVE-2016-9793 ◯ sock_setsockopt()の脆弱性を利用した攻撃 CVE-2016-8655 △ CAP_NET_RAWを利用したuse-after-free攻撃 CVE-2017-6074 △ DCCPプロトコルを用いたuse-after-free攻撃 CVE-2017-1000112 △ UFO(UDP Fragmentation Offload)の脆弱性を利用した攻撃
  43. 43. 予備実験: Linuxulatorのパフォーマンス測定 Linuxulatorを用いてアプリケーションを実行した際のオーバーヘッドを検証UnixBench を利用したシステムパフォーマンスの計測 計測条件 - 複数あるテスト項目のうち、システムコールに関連するものが対象 - 各テスト50回計測した平均を示す - 各テスト項目で1コアと4コア、両方の場合を計測 - LinuxとLinuxulator(FreeBSD)の環境を比較 43 OS環境 CPU メモリ Linuxulator (FreeBSD 13.1) Intel Core i5-4278U 16GB Linux 5.15.0 (Ubuntu 22.04)
  44. 44. UnixBenchを利用したパフォーマンステスト 44
  45. 45. UnixBenchを利用したパフォーマンステスト 45 コア数が変わっても 環境の優位差は変化しない
  46. 46. UnixBenchを利用したパフォーマンステスト 46 Linuxulatorが優位 Linuxが優位
  47. 47. UnixBenchを利用したパフォーマンステスト 47 Linuxulator利用におけるオーバーヘッドは許容できる
  48. 48. まとめ 48 課題: コンテナにおけるセキュリティと軽量さの両立 目的: コンテナの軽量さを最大限に維持しつつ、OSカーネル共有に起因する 脆弱性を回避できるセキュアコンテナの実現 提案: 1. 異種OS上でLinuxコンテナを互換実行 a. FreeBSD jailによるLinuxコンテナのリソース制限・隔離機構の実現 b. LinuxulatorによるLinuxアプリケーションの互換実行 2. 異種OS独自のセキュリティ機構の適用 a. FreeBSD Capsicum/CasperをLinuxコンテナへ透過的適用
  49. 49. 今後の課題 - 実装と評価 - ユーザ隔離におけるUID/GIDが重複しないような処理 - Linuxコンテナに対してCapsicum/Casperの透過的適用を行う コンテナランタイムの完成 - 実アプリケーションを対象とした性能評価 49

×