Slide 1

Slide 1 text

Linux コンテナ最近の新機能 総関西サイバーセキュリティ LT 大会(第 36 回) 加藤泰文 2022-12-14 1/14

Slide 2

Slide 2 text

総関西サイバーセキュリティLT大会、36 回の開催おつかれさまでした 2/14

Slide 3

Slide 3 text

総関西サイバーセキュリティLT大会、36 回の開催おつかれさまでした 復活を待ってます :-) 2/14

Slide 4

Slide 4 text

自己紹介   加藤泰文(かとうやすふみ) • Twitter: @ten_forward • LXC で学ぶコンテナ入門 -軽量仮想化環境を実現 する技術 (gihyo.jp, 2014 年〜) • 「Linux Container Book (1) Namespace / Network 編」執筆(同人本) • コンテナの勉強会を主宰しています • 趣味でコンテナやってます。コンテナの主にカーネ ル周辺の実装に興味があります • 仕事はセキュリティの部署にいます 3/14

Slide 5

Slide 5 text

本日の内容 今日は最近の Linux に実装されたコンテナで使う新機能を紹介します。 4/14

Slide 6

Slide 6 text

セキュリティイベントなのにコンテナ? • コンテナ=コンテナ内のプロセスから他のコンテナのプロセスが見えないようにする • 一部のコンテナがリソースを食いつくさないように制限をかける • カーネルはコンテナ間で共有なので悪いことができないように各種セキュリティ機能で 固めてる コンテナはセキュリティ機能で固められたプロセス 5/14

Slide 7

Slide 7 text

User Namespace

Slide 8

Slide 8 text

User Namespace • 新しい機能ではありません(3.8 〜/2013 年) • 一般ユーザー権限でコンテナが起動で きる • ホストの root ≠ コンテナの root 6/14

Slide 9

Slide 9 text

seccomp notify

Slide 10

Slide 10 text

seccomp システムコールに対してフィルタリ ングをかけられるセキュリティ機能 で、コンテナ内で危険な操作(システ ムコール呼び出し)が行えないよう にコンテナランタイムでは一般的に 使われている機能(現在の Seccomp Mode 2 は 3.5 カーネル/2012 年〜) 7/14

Slide 11

Slide 11 text

seccomp notify • User Namespace を使った一般ユーザー権限で起動するコンテナ内の root(ホスト上 では一般ユーザー)に許可される・許可されない処理はカーネル内で指定されている (初期の User Namespace 内で権限があるか確認) • 一般的に危険とされ、許可されない処理でも、コンテナランタイム、コンテナホスト管 理者は「このコンテナにはこの処理を許可しても大丈夫」とわかっている場合がある そこで   5.0 カーネル(2019 年)で seccomp notify 導入(〜5.5 にかけて機能が充実) 8/14

Slide 12

Slide 12 text

seccomp notify 1. seccomp がシステムコールの実 行を検知 2. 検知したことをユーザー空間のプ ログラム(コンテナランタイム) に通知 3. 通知を受けたプログラムがシステ ムコール実行の可否を判断し、 カーネルに結果を通知 4. seccomp がその結果に従って処 理を行う(システムコールを実行 or 拒否) 固定的なポリシーで許可・禁止を決めるのではなく、柔軟に実行の可否が設定できるように なった。 (例)ファイルシステムのマウント、デバイスファイルの作成 9/14

Slide 13

Slide 13 text

seccomp notify をもっと知るには • 第 14 回 コンテナ技術の情報交換会@オンライン(seccomp 回) • Introduction to Seccomp(@ mrtc0 さん) • seccomp notify による安全なコンテナ実行環境(@ten_forward) • LXC で学ぶコンテナ入門「第 47 回 非特権コンテナの可能性を広げる seccomp notify 機能」 (gihyo.jp) • Seccomp Notify(brauner’s blog) 10/14

Slide 14

Slide 14 text

ID mapped mount

Slide 15

Slide 15 text

非特権コンテナの場合のコンテナのルートファイルシステム • 非特権ユーザー(例、UID=100000)で コンテナを起動する場合、ホスト上にあ るコンテナ用のルートファイルシステム はそのユーザー(UID:100000)が操作で きる(所有している)必要がある • 普通は所有権 UID/GID:0/0 だったりしま すね 11/14

Slide 16

Slide 16 text

ID mapped mount • これまで • chown • 永久に所有権が変わる • chown 前にファイルの所有権を確認す る必要がある • コスト高 • ID mapped mount • 5.12 カーネル(2021 年) (ただしファイ ルシステム側のサポートが必要) • 所有権を変更せずに、User Namespace で使うマッピングに従って、コンテナの ファイルシステムのマウントを行う 12/14

Slide 17

Slide 17 text

まとめ コンテナはこのようないろいろな機能の組み合わせでできています。 いろいろ探ってみると楽しいですよ。 13/14

Slide 18

Slide 18 text

以上 ご清聴ありがとうございました 14/14