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

異種OS機能連携による セキュアコンテナ実現の検討/comsys2022

await
December 05, 2022

異種OS機能連携による セキュアコンテナ実現の検討/comsys2022

comsys2022で発表したスライド

await

December 05, 2022
Tweet

Other Decks in Technology

Transcript

  1. 異種OS機能連携による
    セキュアコンテナ実現の検討
    2022/12/5 ComSys2022
    鈴木進太郎 公立はこだて未来大学
    中田裕貴 さくらインターネット
    松原克弥 公立はこだて未来大学

    View full-size slide

  2. コンテナを活用したクラウドサービス
    コンテナ型仮想化(コンテナ)はプロセスベースの仮想化技術である
    VMに比べ高速な起動や軽量な実行環境作成が特徴
    Platform as a service (PaaS)
    - Heroku
    - Google App Engine
    Function as a service (FaaS)
    - AWS lambda
    - Google Cloud Function
    2

    View full-size slide

  3. コンテナ型仮想化におけるリソース隔離
    - コンテナごとに独立したOS環境
    - プロセスやネットワークをはじめとするOSリソースを分離
    - コンテナごとに利用できるリソース制限
    - CPU利用率やメモリなど
    コンテナ - ホスト間の共有部を減らすことで、
    悪意のあるコンテナによるリソース専有や妨害行為を防いでいる
    3

    View full-size slide

  4. コンテナはOSカーネルを共有
    - コンテナ自体やカーネルの脆弱性を利用した攻撃を防ぐ
    コンテナにサンドボックス(追加の隔離)を適用して
    コンテナ間の隔離を堅牢にする必要がある
    コンテナにおけるサンドボックスの重要性
    4
    サンドボックスの適用により
    コンテナへの攻撃を回避

    View full-size slide

  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月

    View full-size slide

  6. 本研究の目的
    コンテナの軽量さを最大限に維持しつつ、OSカーネル共有に起因する脆弱性を
    回避できるセキュアコンテナの実現
    ※セキュアコンテナ:
    サンドボックスを適用しコンテナ間の隔離を堅牢にしたコンテナ
    6

    View full-size slide

  7. 実現するセキュアコンテナ 定義1
    Linuxコンテナが持つリソースの制限・隔離機能をもつ
    独立したOS環境の提供
    - CPUやメモリの利用制限
    - ファイルやディレクトリのアクセス制限
    - プロセス情報の隔離
    - ユーザ情報の隔離
    - ネットワークの隔離
    7
    クラウドサービスではコンテナ
    を独立した環境として提供

    View full-size slide

  8. 実現するセキュアコンテナ 定義2
    OSカーネルの脆弱性を利用した攻撃に対する回避手段をもつ
    対象とする攻撃
    - Linuxカーネルの実装に起因する脆弱性を利用した攻撃
    - 権限昇格や不正メモリアクセスなどの攻撃
    対象外の攻撃
    - ハードウェア自体の脆弱性を利用した攻撃
    8

    View full-size slide

  9. 実現するセキュアコンテナ 定義3
    サンドボックスを用いた追加の隔離機構をもつ
    - システムコールやライブラリ関数の目的外使用による攻撃を防止
    - コンテナ内で実行するアプリケーションの脆弱性の影響範囲を最小化
    サンドボックスの適用
    - ファイルやソケットに対する最粒度なアクセス制御
    - アプリケーションに必要のないファイルやソケットの操作を制限
    - システムコールやライブラリ関数実行の検査
    - アプリケーションに必要ない関数の利用を制限
    9

    View full-size slide

  10. 本研究の提案
    異種OS上でLinuxコンテナを互換実行
    - LinuxアプリケーションはLinuxカーネル上で動作する想定で作成される
    - Linuxコンテナ、LinuxアプリケーションをLinuxカーネル以外で実行
    カーネルの脆弱性を利用した攻撃を回避 (定義2)
    セキュリティ機構を用いた軽量なサンドボックスの実現
    サンドボックスを用いた追加の隔離 (定義3)
    10

    View full-size slide

  11. 異種OSの選定条件
    1. Linuxアプリケーションが実行可能
    - LinuxコンテナではLinuxアプリケーションが動作
    - Linuxアプリケーションを互換実行する機能を持つ
    2. Linuxと同等の隔離技術をもつ
    - LinuxコンテナはLinuxの機能に依存
    - Linuxと同等のリソース制限・隔離機能(定義1)を持つ
    3. コンテナに利用できるセキュリティ機能を持つ
    - サンドボックスの要件を満たすようなセキュリティ機構を持つ
    11

    View full-size slide

  12. アプローチ: 異種OSとしてFreeBSDを採用
    1. FreeBSD LinuxulatorというLinuxバイナリ互換実行機能がある
    2. FreeBSD jailというコンテナ型仮想化技術が利用できる
    3. FreeBSD Capsicum/Casperというセキュリティ機構を持つ
    FreeBSD上でセキュアコンテナ実現可能性について検討
    - PaaSやFaaSにおける利用を前提
    12

    View full-size slide

  13. FreeBSD
    アプリケーション

    (Linuxバイナリ)

    Linuxulator

    Linuxシステムコール

    インタフェース

    Linux Rootfs

    /

    proc

    usr
 …

    libc
 libXX
 libYY

    lib

    システムコール実
    行

    FreeBSD
    システムコール

    Linuxアプリケーション互換実行の実現(アプローチ1に関連)
    Linuxulator
    - FreeBSDで利用できる
    Linuxのエミュレータ
    - Linuxバイナリの
    ネイティブ実行が可能

    View full-size slide

  14. FreeBSD
    アプリケーション

    (Linuxバイナリ)

    Linuxulator

    Linuxシステムコール

    インタフェース

    Linux Rootfs

    /

    proc

    usr
 …

    libc
 libXX
 libYY

    lib

    システムコール実
    行

    FreeBSD
    システムコール

    Linuxアプリケーション互換実行の実現(アプローチ1に関連)
    Linuxulator
    - FreeBSDで利用できる
    Linuxのエミュレータ
    - Linuxバイナリの
    ネイティブ実行が可能
    ライブラリの参照はLinux Rootfs
    から行う

    View full-size slide

  15. FreeBSD
    アプリケーション

    (Linuxバイナリ)

    Linuxulator

    Linuxシステムコール

    インタフェース

    Linux Rootfs

    /

    proc

    usr
 …

    libc
 libXX
 libYY

    lib

    システムコール実
    行

    FreeBSD
    システムコール

    Linuxアプリケーション互換実行の実現(アプローチ1に関連)
    Linuxulator
    - FreeBSDで利用できる
    Linuxのエミュレータ
    - Linuxバイナリの
    ネイティブ実行が可能
    FreeBSDとLinuxの
    システムコール対応付け

    View full-size slide

  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)

    View full-size slide

  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におけるリソース隔離機能

    View full-size slide

  18. FreeBSDにおける隔離環境の実現 (2/2) (アプローチ2に関連)
    リソース隔離要件
    プロセス隔離
    コンテナごとにPIDなどの、プロセス情報が独立している必要がある
    LinuxやUnixではPID 1はinitプロセスである必要がある
    ユーザ隔離
    コンテナ間で重複したユーザ名やUID/GIDを利用できる
    ユーザ隔離を行わない場合、
    プロセス間通信やシグナルなどUIDをベースに処理を行う機能に影響が出る
    18

    View full-size slide

  19. FreeBSDにおけるプロセス隔離 実現検討
    FreeBSDとLinux共に
    プロセス情報は分離
    PIDの番号付けが異なる
    - jailではホストとjail間で連番
    - Linuxではコンテナ内で1から始まる
    19
    FreeBSDにおける隔離環境の実現に関連
    jail内でのpsコマンド実行
    PaaS, FaaSにおけるほとんどのアプリケーションは特定のPIDに依存していない
    PaaSやFaaSで利用するにあたりこの差異は問題ないと考える
    Linuxコンテナでのpsコマンド実行

    View full-size slide

  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

    View full-size slide

  21. コンテナへのFreeBSDセキュリティ機構適用 実現検討
    (アプローチ3に関連)
    Capsicum
    FreeBSDで利用できるcapabilityを用いたアクセス制御機構
    アプリケーションが自発的に権限を制限し, 実行可能な範囲を制御する
    Capsicumで提供されるサンドボックスでは,
    全プロセスで共有利用するリソース(グローバル空間)へのアクセスを制限
    - ファイル
    - プロセスID
    - IPC など
    21

    View full-size slide

  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)

    View full-size slide

  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)

    View full-size slide

  24. コンテナへCapsicum/Casper適用の課題
    アプリケーションが自ら適用する設計
    - 通常であればコードの改変を行う
    - サンドボックスの適用
    - サンドボックスに入る前に必要なファイルを開いておく
    - casper関数の利用
    - Linuxulatorを利用するため、FreeBSD上でLinuxバイナリの改変が困難
    バイナリの改変をせず、Capsicum/Casperを透過的に適用する必要がある
    24
    異種OSのセキュリティ機構適用の実現 (課題3に関連)

    View full-size slide

  25. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    Linuxulator

    システムコール

    変換

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行


    View full-size slide

  26. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

    アプリケーションに必要バイナリ、ファイル、
    ディレクトリなどを予め開いておく
    Linuxulator

    システムコール

    変換


    View full-size slide

  27. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

    アプリケーションに必要バイナリ、ファイル、
    ディレクトリなどを予め開いておく
    Linuxulator

    システムコール

    変換

    libpreopen

    予めファイルやディレクトリを開いておき、 

    open()呼び出し時はすでに開いてあるファイルをアプリケー
    ションに渡す

    アプリケーションから呼び出された open()は内部でopenat()
    に変換される


    View full-size slide

  28. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

    サンドボックスが子プロセスに
    引き継がれることを利用
    親プロセスでサンドボックスに入っておき、
    子プロセスでアプリケーションを起動
    Linuxulator

    システムコール

    変換


    View full-size slide

  29. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

    サンドボックス内ではバイナリにアクセスができない
    (ファイルのオープンができないため)
    予めバイナリを開いておき、FDからexecを行う
    Linuxulator

    システムコール

    変換


    View full-size slide

  30. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

    ライブラリも通常のアクセスができなくなる
    予めリンカ自体もファイルとして開いておく
    Linuxulator

    システムコール

    変換


    View full-size slide

  31. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    Linuxulator

    システムコール

    変換

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行


    View full-size slide

  32. FreeBSD Capsicumの透過的な適用(ファイルアクセス) 

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    アプリケーション

    open(…)
    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

    libpreopenにより

    open()からopenat()に変換

    open()はlibpreopenによりopenat()に変換され、
    すでに開かれているファイルへのアクセスとなる
    Linuxulator

    システムコール

    変換


    View full-size slide

  33. コンテナランタイム

    1コンテナ

    FreeBSD Capsicum +Casperの透過的適用による動的なリソースアクセス 

    プロセス作
    成

    コンテナプロセス

    Capsicumサンドボックス

    Linux 

    Rootfs

    /

    App
    bin

    lib

    usr

    アプリケーション

    アクセス

    …

    workdir

    リンカ
    呼び出し

    内容の検査

    libcasper

    関数呼び出しのフック・ 

    casperへのリダイレクト

    Casperプロセス

    FreeBSD上の

    OSリソースへの

    アクセス

    OSリソース

    リンカの仕組みを使い、自作ライブラリを利用
    グローバル空間のアクセスを含む関数を
    内部でcasperライブラリを経由

    View full-size slide

  34. コンテナランタイム

    1コンテナ

    FreeBSD Capsicum +Casperの透過的適用による動的なリソースアクセス 

    プロセス作
    成

    コンテナプロセス

    Capsicumサンドボックス

    Linux 

    Rootfs

    /

    App
    bin

    lib

    usr

    アプリケーション

    アクセス

    …

    workdir

    リンカ
    呼び出し

    内容の検査

    libcasper

    関数呼び出しのフック・ 

    Casperへのリダイレクト

    Casperプロセス

    FreeBSD上の

    OSリソースへの

    アクセス

    OSリソース

    Casperにより関数呼び出しの内容の検査
    アクセスの代理実行を行う

    View full-size slide

  35. 予備実験: Linuxulator利用によるカーネル脆弱性の回避
    Linuxulatorを利用することで、Linuxカーネルの脆弱性を回避できるか調査
    権限昇格が可能な脆弱性のうち、攻撃コードが公開されているもの対象
    Linuxulatorで脆弱性を利用した攻撃を試す
    テスト環境
    35
    環境 OS環境 CPU メモリ
    ネイティブ FreeBSD 13.1 Intel i5-4278U 16GB

    View full-size slide

  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)の脆弱性を利用した攻撃

    View full-size slide

  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日かかっても成功せず

    View full-size slide

  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ではプログラムの実行はできるが、攻撃は失敗

    View full-size slide

  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ではライブラリが不足しており
    攻撃コードのコンパイルが不可能

    View full-size slide

  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ではライブラリが不足しており
    攻撃コードのコンパイルが不可能

    View full-size slide

  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ではライブラリが不足しており
    攻撃コードのコンパイルが不可能

    View full-size slide

  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)の脆弱性を利用した攻撃

    View full-size slide

  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)

    View full-size slide

  44. UnixBenchを利用したパフォーマンステスト
    44

    View full-size slide

  45. UnixBenchを利用したパフォーマンステスト
    45
    コア数が変わっても
    環境の優位差は変化しない

    View full-size slide

  46. UnixBenchを利用したパフォーマンステスト
    46
    Linuxulatorが優位
    Linuxが優位

    View full-size slide

  47. UnixBenchを利用したパフォーマンステスト
    47
    Linuxulator利用におけるオーバーヘッドは許容できる

    View full-size slide

  48. まとめ
    48
    課題: コンテナにおけるセキュリティと軽量さの両立
    目的: コンテナの軽量さを最大限に維持しつつ、OSカーネル共有に起因する
    脆弱性を回避できるセキュアコンテナの実現
    提案:
    1. 異種OS上でLinuxコンテナを互換実行
    a. FreeBSD jailによるLinuxコンテナのリソース制限・隔離機構の実現
    b. LinuxulatorによるLinuxアプリケーションの互換実行
    2. 異種OS独自のセキュリティ機構の適用
    a. FreeBSD Capsicum/CasperをLinuxコンテナへ透過的適用

    View full-size slide

  49. 今後の課題
    - 実装と評価
    - ユーザ隔離におけるUID/GIDが重複しないような処理
    - Linuxコンテナに対してCapsicum/Casperの透過的適用を行う
    コンテナランタイムの完成
    - 実アプリケーションを対象とした性能評価
    49

    View full-size slide