総関西サイバーセキュリティLT大会(第36回)の LT 資料です。 参考となる情報にはPDF中からリンクをしていますが、資料中のリンクは Speaker Deck 上ではクリックできないので PDF をダウンロードしてご覧ください。
Linux コンテナ最近の新機能総関西サイバーセキュリティ LT 大会(第 36 回)加藤泰文2022-12-141/14
View Slide
総関西サイバーセキュリティLT大会、36 回の開催おつかれさまでした2/14
総関西サイバーセキュリティLT大会、36 回の開催おつかれさまでした復活を待ってます :-)2/14
自己紹介 加藤泰文(かとうやすふみ)• Twitter: @ten_forward• LXC で学ぶコンテナ入門 -軽量仮想化環境を実現する技術 (gihyo.jp, 2014 年〜)• 「Linux Container Book (1) Namespace /Network 編」執筆(同人本)• コンテナの勉強会を主宰しています• 趣味でコンテナやってます。コンテナの主にカーネル周辺の実装に興味があります• 仕事はセキュリティの部署にいます3/14
本日の内容今日は最近の Linux に実装されたコンテナで使う新機能を紹介します。4/14
セキュリティイベントなのにコンテナ?• コンテナ=コンテナ内のプロセスから他のコンテナのプロセスが見えないようにする• 一部のコンテナがリソースを食いつくさないように制限をかける• カーネルはコンテナ間で共有なので悪いことができないように各種セキュリティ機能で固めてるコンテナはセキュリティ機能で固められたプロセス5/14
User Namespace
User Namespace• 新しい機能ではありません(3.8〜/2013 年)• 一般ユーザー権限でコンテナが起動できる• ホストの root ≠ コンテナの root6/14
seccomp notify
seccompシステムコールに対してフィルタリングをかけられるセキュリティ機能で、コンテナ内で危険な操作(システムコール呼び出し)が行えないようにコンテナランタイムでは一般的に使われている機能(現在の SeccompMode 2 は 3.5 カーネル/2012 年〜)7/14
seccomp notify• User Namespace を使った一般ユーザー権限で起動するコンテナ内の root(ホスト上では一般ユーザー)に許可される・許可されない処理はカーネル内で指定されている(初期の User Namespace 内で権限があるか確認)• 一般的に危険とされ、許可されない処理でも、コンテナランタイム、コンテナホスト管理者は「このコンテナにはこの処理を許可しても大丈夫」とわかっている場合があるそこで 5.0 カーネル(2019 年)で seccomp notify 導入(〜5.5 にかけて機能が充実)8/14
seccomp notify1. seccomp がシステムコールの実行を検知2. 検知したことをユーザー空間のプログラム(コンテナランタイム)に通知3. 通知を受けたプログラムがシステムコール実行の可否を判断し、カーネルに結果を通知4. seccomp がその結果に従って処理を行う(システムコールを実行or 拒否)固定的なポリシーで許可・禁止を決めるのではなく、柔軟に実行の可否が設定できるようになった。(例)ファイルシステムのマウント、デバイスファイルの作成9/14
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
ID mapped mount
非特権コンテナの場合のコンテナのルートファイルシステム• 非特権ユーザー(例、UID=100000)でコンテナを起動する場合、ホスト上にあるコンテナ用のルートファイルシステムはそのユーザー(UID:100000)が操作できる(所有している)必要がある• 普通は所有権 UID/GID:0/0 だったりしますね11/14
ID mapped mount• これまで• chown• 永久に所有権が変わる• chown 前にファイルの所有権を確認する必要がある• コスト高• ID mapped mount• 5.12 カーネル(2021 年)(ただしファイルシステム側のサポートが必要)• 所有権を変更せずに、User Namespaceで使うマッピングに従って、コンテナのファイルシステムのマウントを行う12/14
まとめコンテナはこのようないろいろな機能の組み合わせでできています。いろいろ探ってみると楽しいですよ。13/14
以上ご清聴ありがとうございました14/14