Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
コンテナセキュリティのためのLandlock入門
Search
Takaya Saeki
December 16, 2024
Technology
4
760
コンテナセキュリティのためのLandlock入門
Container Runtime Meetup #6発表資料です。
Takaya Saeki
December 16, 2024
Tweet
Share
More Decks by Takaya Saeki
See All by Takaya Saeki
いかにして命令の入れ替わりについて心配するのをやめ、メモリモデルを愛するようになったか(改)
nullpo_head
7
3k
Binary Hacks Rebooted 私選ハック集
nullpo_head
1
860
Unikernelと和解せよ
nullpo_head
0
760
デバッガと和解せよ
nullpo_head
8
4.4k
Talks on Little-Known Random Facts about WSL2
nullpo_head
0
88
SystemdのWSLディストロを作る
nullpo_head
0
240
WebAssemblyのWeb以外のことぜんぶ話す
nullpo_head
2
600
Noah A Robust and Flexible Operating System Compatibility Architecture
nullpo_head
0
150
ARMの仮想化支援機構 arm入門勉強会
nullpo_head
1
350
Other Decks in Technology
See All in Technology
「データ無い! 腹立つ! 推論する!」から 「データ無い! 腹立つ! データを作る」へ チームでデータを作り、育てられるようにするまで / How can we create, use, and maintain data ourselves?
moznion
8
4.5k
旧から新へ: 大規模ウェブクローラの Perl から Go への移行 / YAPC::Fukuoka 2025
motemen
3
1.2k
AI駆動開発を実現するためのアーキテクチャと取り組み
baseballyama
2
1.3k
JavaScript パーサーに using 対応をする過程で与えたエコシステムへの影響
baseballyama
1
110
やり方は一つだけじゃない、正解だけを目指さず寄り道やその先まで自分流に楽しむ趣味プログラミングの探求 2025-11-15 YAPC::Fukuoka
sugyan
3
870
ECS組み込みのBlue/Greenデプロイを動かしてELB側の動きを観察してみる
yuki_ink
1
130
はじめての OSS コントリビューション 〜小さな PR が世界を変える〜
chiroito
4
340
未回答質問の回答一覧 / 開発をリードする品質保証 QAエンジニアと開発者の未来を考える-Findy Online Conference -
findy_eventslides
0
280
現地速報!Microsoft Ignite 2025 M365 Copilotアップデートレポート
kasada
1
1.4k
国産クラウドを支える設計とチームの変遷 “技術・組織・ミッション”
kazeburo
3
2.7k
プロダクト負債と歩む持続可能なサービスを育てるための挑戦
sansantech
PRO
1
330
JJUG CCC 2025 Fall バッチ性能!!劇的ビフォーアフター
hayashiyuu1
1
370
Featured
See All Featured
Become a Pro
speakerdeck
PRO
29
5.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
Statistics for Hackers
jakevdp
799
220k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Visualization
eitanlees
150
16k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Scaling GitHub
holman
463
140k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
The Language of Interfaces
destraynor
162
25k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Transcript
コンテナセキュリティのためのLandlock入門 Container Runtime Meetup #6 @nullpo_head 1
自己紹介 Takaya Saeki Twitter(現X) / mixi2 @nullpo_head GitHub: nullpo-head 普段
はOS周 りの開発 『Binary Hacks Rebooted』著者 のひとり コンテナ周 りおよびOS周 りの記事 を書 いていま す 2
宣伝: Binary Hacks Rebooted 好評発売中! ELF からrootless コンテナの仕組 み、浮動小 数点数
までは幅広 く、そして深 く取 り扱 っ ております 3
新 しいサンドボックス機構Landlock について話 します 三部構成 1. Landlock入門 - Landlock とはなにか
2. Landlock とコンテナ - Landlock によるコンテナセキュリティの強化 3. 詳解Landlock 4
Landlock とは Linux カーネル5.13以降 のサンドボックスシステムコール ファイルアクセス範囲 をパス毎 に簡単 に制御 TCP
アクセスも制御可能 UDP アクセスの制御 も開発中 5
Landlock とは Linux カーネル5.13以降 のサンドボックス化 システムコール ファイルアクセス範囲 をパス毎 に簡単 に制御
TCP アクセスも制御可能 UDP アクセスの制御 も開発中 6
Landlock とは Linux カーネル5.13以降 のサンドボックス化 けるシステムコール ファイルアクセス範囲 をパス毎 に簡単 に制御
TCP アクセスも制御可能 UDP アクセスの制御 も開発中 コンテナ脱出 の脆弱性 の緩和策 として期待 できる! 7
Landlock API のフロー 以下 の流 れでシステムコールを発行 する 1. landlock_create_ruleset() でルールセット作成
ファイルシステムまたはTCP を制限 することを宣言 許可 されていない操作 は全 て拒否 する 2. landlock_add_rule() でアクセス許可 ルール追加 個々 のファイルパスやTCP アドレスで許可 する操作 を指定 3. landlock_restrict_self() でプロセスに適用 適用後 は緩和不能 8
簡単 な使用例 int ruleset_fd = landlock_ruleset_create(...); struct landlock_path_beneath_attr path_beneath =
{0}; path_beneath.allowed_access = LANDLOCK_ACCESS_FS_READ_FILE | LANDLOCK_ACCESS_FS_READ_DIR | LANDLOCK_ACCESS_FS_EXECUTE; path_beneath.parent_fd = open("/home/nullpo/sandbox", O_PATH); landlock_add_rule(ruleset_fd, LANDLOCK_RULE_PATH_BENEATH, &path_beneath, 0); landlock_restrict_self(fd); // 以降 このプロセスは /home/nullpo/sandbox 以下 のみアクセス可能 // ( すでに開 いているファイルを除 いて) 9
なにが新 しいのか? 非特権 ユーザでパスベースのサンドボックスが実現可能 そしてStackable Linux Security Module (LSM) ベース
これはファイルアクセスを制限 できる他 の機構 にはあまりない特徴 10
関連技術比較 LSM - AppArmor / TOMOYO 特権 ユーザーのみが利用 できる (
ただしuser namespace内 のCAP_SYS_ADMIN でもいい) ファイルパスを指定 して許可/不許可 を設定 できる seccomp bpf 非特権 ユーザーでも利用 できる システムコールの種類 と引数毎 に許可/不許可 を設定 マウントネームスペースベース 特権 ユーザーのみが利用 できる ( ただしuser namespace内 のCAP_SYS_ADMIN でもいい) ファイルシステムをネームスペースで分離 して、外部 と隔離 11
比較 - AppArmor / TOMOYO 実装 Stackable ではないLSM によるMAC の実装
SELinux / AppArmor / TOMOYO はそれぞれ排他的 できること ファイルパスベースでアクセス制御 を行 える 困難性 特権 ユーザーのみが使用 できる システム全体 で有効 にするタイプの機構 であるため、単体 のアプリが自分 で使 お うとおもって使 えるものではない 12
比較 - Seccomp BPF 実装 単体 のシステムコール実装 できること 非特権 ユーザーでも使用
できる BPF でシステムコールのレジスタ上 の引数 を基 にフィルタリングができる 困難性 パスベースのフィルタリングを実装 するのはかなり複雑 13
比較 - マウントネームスペースによる分離 実装 マウントネームスペース内 でpivot_root を行 うことで、外部 のファイルシステムをネー ムスペース内
から削除 する できること マウントネームスペース内 に柔軟 にファイルやディレクトリをマウントできる 困難性 特権 ユーザーのみが使用 できる(user namespace内 のCAP_SYS_ADMIN を含 む) もともとサンドボックス用途 ではない。mitigation を実装 しないと、 マウントネームスペース外 にアクセスする手段 が豊富 にある 14
ルーキー: Landlock 実装 Stackable LSM できること ファイルアクセス範囲 をパス毎 に簡単 に制御
非特権 ユーザーも使用 できる 他 のLSM と共存 できる 困難性 API がかなり使 いにくい(後 で愚痴 をまとめます 15
なにが新 しいのか? 非特権 ユーザでパスベースのサンドボックスが実現可能 そしてStackable Linux Security Module (LSM) ベース
これはファイルアクセスを制限 できる他 の機構 にはあまりない特徴! 16
こぼれ話 eBPF との関係 もともとeBPF で非特権 ユーザーが自由 にサンドボックスを使 えるようにしようと いう思想 だった
eBPF を非特権 ユーザーに解放 するセキュリティ上 の懸念 から断念 この用途 はLSM BPF が実現 することに 17
コンテナセキュリティとLandlock 18
コンテナセキュリティへの応用 コンテナ外 への脱出 を強 く制限 できる 非特権 ユーザでもサンドボックス適用可能 podman に嬉
しい 19
過去 のDocker脆弱性防止例 過去 にはホストFS アクセス拡大 などの脆弱性 Landlock適用 で特定 ディレクトリ外 へのアクセスを遮断
カーネルレベルで強制的 にブロックし侵害防止 20
TODO: 実験 21
OCI runtime spec への導入 OCI runtime spec でLandlock サポートを標準化 する動
き まだ議論・検討段階 (2023年9月 あたりから停滞) https://opencontainers.org/posts/blog/2023-07-21-oci-runtime-spec-v1-1/ 22
提案 されているOCI runtime spec ほぼ生 のLandlock API へのラッ パーが今 は提案
されている https://github.com/opencontain ers/runtime-spec/pull/1111 23
詳解Landlock というかLandlock への愚痴 1. Landlock のおおきな限界 2. Landlock のつかいづらさ 24
Landlock の結構 でかい限界 対象 のパスに対 しても制限 がかからないシステムコールがある ――― そしてそれがなんか結構致命的 なやつ
chown , setxattr , ioctl , truncate , ... 25
Landlock がカバーしないシステムコールの例 11個 ほどあるそのようなシステムコールのうち、深刻 なものを紹介 chown ファイルの所有者 を変 えるシステムコール 例
えばrootful container がmount namespace からの脱出 に成功 した場合、landlock があっても重要 なファイルの所有者 を変更 することは防 げない truncate (kernel 6.2 からは制限可能) ファイルの長 さを切 り詰 めたり伸 ばしたりするシステムコール Landlock により書 き込 みを制限 されたファイルに対 してであっても、長 さを0 にす ることで実質削除 することができる ( そんなことある???) 26
Landlock がカバーしないシステムコールへの対策 Seccomp BPF を組 み合 わせてこれらのシステムコールを拒否 する必要 がある 27
Landlock のつかいづらさ Landlock API おさらい フロー: i. landlock_ruleset_create() でルールセット作成 ii.
landlock_add_rule() でアクセス許可 ルール追加 path_beneath.parent_fd = open("/home/nullpo/sandbox", O_PATH); landlock_add_rule(ruleset_fd, LANDLOCK_RULE_PATH_BENEATH, &path_beneath, 0); iii. landlock_restrict_self() でプロセスに適用 ... お気 づきでしょうか? 28
Landlock のつかいづらさ Landlock API おさらい フロー: i. landlock_ruleset_create() でルールセット作成 ii.
landlock_add_rule() でアクセス許可 ルール追加 path_beneath.parent_fd = open("/home/nullpo/sandbox", O_PATH); landlock_add_rule(ruleset_fd, LANDLOCK_RULE_PATH_BENEATH, &path_beneath, 0); iii. landlock_restrict_self() でプロセスに適用 ... お気 づきでしょうか? DENY ルールを定義 することができない 29
サブディレクトリ/ ファイルを拒否 できない 例 えば一旦 /home/nullpo にのみアクセスを許 して path_beneath.parent_fd =
open("/home/nullpo/", O_PATH); landlock_add_rule(ruleset_fd, LANDLOCK_RULE_PATH_BENEATH, &path_beneath, 0); /home/nullpo/.ssh のみアクセスを拒否 することができるか? => できない 30
サブディレクトリの拒否 のworkaround 拒否 したいファイル以外 をすべて許可 するのがworkaround path_beneath.parent_fd = open("/home/nullpo/download", O_PATH);
... path_beneath.parent_fd = open("/home/nullpo/.bashrc", O_PATH); ... path_beneath.parent_fd = open("/home/nullpo/.profile", O_PATH); ... 制限 が多 い /home/nullpo 自体 はread が許可 されていないので、 ls ができない 新規 ファイルに対応 できない => 一度設定 したルールは緩和 できないため 31
サブディレクトリ拒否 の制限 とコンテナ とはいえ、コンテナ用途 では、コンテナのFS外 へのアクセスを一律拒否 したいことが 多 いので、関係 ないか?
sysfs を露出 したうえでサブディレクトリだけ拒否 したいみたいな用途 に使 いだす と困 るかも 32
まとめ Landlock: ユーザ空間 で定義可能 なファイルパスベースMAC OCI spec組 み込 みで標準的 なコンテナサンドボックス化
が期待 現在 は検討・PoC段階 だが、将来 の標準化 でセキュリティ強化 へ 33
過去仕様(eBPF) との関係 当初 はeBPF ベースでポリシー定義 を検討 最終的 にシンプルなLandlock専用API へ落 とし込
み ユーザが扱 いやすくセキュリティポリシー設定 が簡便 に 34