Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
コンテナセキュリティのためのLandlock入門
Search
Takaya Saeki
December 16, 2024
Technology
1.4k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コンテナセキュリティのためのLandlock入門
Container Runtime Meetup #6発表資料です。
Takaya Saeki
December 16, 2024
More Decks by Takaya Saeki
See All by Takaya Saeki
動的にallow/denyできる ファイルサンドボックスを作る
nullpo_head
3
1.2k
いかにして命令の入れ替わりについて心配するのをやめ、メモリモデルを愛するようになったか(改)
nullpo_head
7
3.5k
Binary Hacks Rebooted 私選ハック集
nullpo_head
1
1.2k
Unikernelと和解せよ
nullpo_head
0
840
デバッガと和解せよ
nullpo_head
8
4.6k
Talks on Little-Known Random Facts about WSL2
nullpo_head
0
120
SystemdのWSLディストロを作る
nullpo_head
0
290
WebAssemblyのWeb以外のことぜんぶ話す
nullpo_head
2
710
Noah A Robust and Flexible Operating System Compatibility Architecture
nullpo_head
0
260
Other Decks in Technology
See All in Technology
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
610
LLMに渡さなかった仕事
nanaism
0
14k
全社共通データ基盤をつくる。ソニーのDatabricks活用とデータガバナンス設計の裏側
sony
0
100
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
1
530
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
7
3.8k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
32
32k
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
460
猫でもわかるKiro Web
kentapapa
1
120
特殊変数大全
dak2
0
150
Hermes Agentで、AIが調べて記事を書くブログを作った話
blueb
0
110
Making AI Agents Safe and Fast- Jev, Obsidian, and the Meta-Harness
x5gtrn
PRO
0
150
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
550
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
270
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
540
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
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