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
640
コンテナセキュリティのための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
2.9k
Binary Hacks Rebooted 私選ハック集
nullpo_head
1
800
Unikernelと和解せよ
nullpo_head
0
750
デバッガと和解せよ
nullpo_head
8
4.3k
Talks on Little-Known Random Facts about WSL2
nullpo_head
0
80
SystemdのWSLディストロを作る
nullpo_head
0
230
WebAssemblyのWeb以外のことぜんぶ話す
nullpo_head
1
550
Noah A Robust and Flexible Operating System Compatibility Architecture
nullpo_head
0
130
ARMの仮想化支援機構 arm入門勉強会
nullpo_head
1
300
Other Decks in Technology
See All in Technology
生成AI時代のデータ基盤
shibuiwilliam
6
3.8k
2025年にHCP Vaultを学び直して見えた景色 / Lessons and New Perspectives from Relearning HCP Vault in 2025
aeonpeople
0
210
DDD集約とサービスコンテキスト境界との関係性
pandayumi
2
270
オブザーバビリティが広げる AIOps の世界 / The World of AIOps Expanded by Observability
aoto
PRO
0
310
Bye-Bye Query Spaghetti: Write Queries You'll Actually Understand Using Pipelined SQL Syntax
tobiaslampertlotum
0
150
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
240
Kubernetes における cgroup driver のしくみ: runwasi の bugfix より
z63d
2
240
dbt開発 with Claude Codeのためのガードレール設計
10xinc
1
440
ガチな登山用デバイスからこんにちは
halka
1
220
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
510
AI エージェントとはそもそも何か? - 技術背景から Amazon Bedrock AgentCore での実装まで- / AI Agent Unicorn Day 2025
hariby
4
1.2k
Grafana Meetup Japan Vol. 6
kaedemalu
1
330
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
The Language of Interfaces
destraynor
161
25k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
KATA
mclloyd
32
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Visualization
eitanlees
148
16k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
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