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 Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. FreeBSD
    アプリケーション

    (Linuxバイナリ)

    Linuxulator

    Linuxシステムコール

    インタフェース

    Linux Rootfs

    /

    proc

    usr
 …

    libc
 libXX
 libYY

    lib

    システムコール実
    行

    FreeBSD
    システムコール

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

    View Slide

  14. FreeBSD
    アプリケーション

    (Linuxバイナリ)

    Linuxulator

    Linuxシステムコール

    インタフェース

    Linux Rootfs

    /

    proc

    usr
 …

    libc
 libXX
 libYY

    lib

    システムコール実
    行

    FreeBSD
    システムコール

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

    View Slide

  15. FreeBSD
    アプリケーション

    (Linuxバイナリ)

    Linuxulator

    Linuxシステムコール

    インタフェース

    Linux Rootfs

    /

    proc

    usr
 …

    libc
 libXX
 libYY

    lib

    システムコール実
    行

    FreeBSD
    システムコール

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

    View 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 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 Slide

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

    View Slide

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

    View 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 Slide

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

    View 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 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 Slide

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

    View Slide

  25. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    Linuxulator

    システムコール

    変換

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行


    View Slide

  26. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

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

    システムコール

    変換


    View Slide

  27. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

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

    システムコール

    変換

    libpreopen

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

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

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


    View Slide

  28. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

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

    システムコール

    変換


    View Slide

  29. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

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

    システムコール

    変換


    View Slide

  30. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

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

    システムコール

    変換


    View Slide

  31. FreeBSD Capsicumの透過的な適用

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    アプリケーション

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    システム

    コール実行

    …

    workdir

    Linuxulator

    システムコール

    変換

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行


    View Slide

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

    コンテナランタイム

    プロセス作
    成
 Jail・rctl適用

    コンテナプロセス

    Capsicumサンドボックス

    バイナリ・ファイル・

    ディレクトリを開く

    Linux Rootfs

    /

    App
    bin

    lib

    サンドボックス化

    usr

    アプリケーション

    open(…)
    …

    workdir

    リンカ
    事前に開いた

    リンカでリンク

    FDから

    バイナリ実行

    libpreopenにより

    open()からopenat()に変換

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

    システムコール

    変換


    View Slide

  33. コンテナランタイム

    1コンテナ

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

    プロセス作
    成

    コンテナプロセス

    Capsicumサンドボックス

    Linux 

    Rootfs

    /

    App
    bin

    lib

    usr

    アプリケーション

    アクセス

    …

    workdir

    リンカ
    呼び出し

    内容の検査

    libcasper

    関数呼び出しのフック・ 

    casperへのリダイレクト

    Casperプロセス

    FreeBSD上の

    OSリソースへの

    アクセス

    OSリソース

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

    View Slide

  34. コンテナランタイム

    1コンテナ

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

    プロセス作
    成

    コンテナプロセス

    Capsicumサンドボックス

    Linux 

    Rootfs

    /

    App
    bin

    lib

    usr

    アプリケーション

    アクセス

    …

    workdir

    リンカ
    呼び出し

    内容の検査

    libcasper

    関数呼び出しのフック・ 

    Casperへのリダイレクト

    Casperプロセス

    FreeBSD上の

    OSリソースへの

    アクセス

    OSリソース

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

    View Slide

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

    View 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 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 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 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 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 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 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 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide