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
630
コンテナセキュリティのための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.7k
Binary Hacks Rebooted 私選ハック集
nullpo_head
1
770
Unikernelと和解せよ
nullpo_head
0
740
デバッガと和解せよ
nullpo_head
8
4.3k
Talks on Little-Known Random Facts about WSL2
nullpo_head
0
76
SystemdのWSLディストロを作る
nullpo_head
0
180
WebAssemblyのWeb以外のことぜんぶ話す
nullpo_head
1
540
Noah A Robust and Flexible Operating System Compatibility Architecture
nullpo_head
0
130
ARMの仮想化支援機構 arm入門勉強会
nullpo_head
1
290
Other Decks in Technology
See All in Technology
AIのグローバルトレンド 2025 / ai global trend 2025
kyonmm
PRO
1
160
結局QUICで通信は速くなるの?
kota_yata
8
7.4k
AI時代の大規模データ活用とセキュリティ戦略
ken5scal
0
160
React Server ComponentsでAPI不要の開発体験
polidog
PRO
0
330
o11yツールを乗り換えた話
tak0x00
2
1.6k
✨敗北解法コレクション✨〜Expertだった頃に足りなかった知識と技術〜
nanachi
1
760
ロールが細分化された組織でSREと協働するインフラエンジニアは何をするか? / SRE Lounge #18
kossykinto
0
230
データモデリング通り #2オンライン勉強会 ~方法論の話をしよう~
datayokocho
0
180
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
160
Amazon Inspector コードセキュリティで手軽に実現するシフトレフト
maimyyym
0
130
Amazon GuardDuty での脅威検出:脅威検出の実例から学ぶ
kintotechdev
0
120
[kickflow]20250319_少人数チームでのAutify活用
otouhujej
0
130
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
49
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Side Projects
sachag
455
43k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
For a Future-Friendly Web
brad_frost
179
9.9k
Become a Pro
speakerdeck
PRO
29
5.5k
How GitHub (no longer) Works
holman
314
140k
Visualization
eitanlees
146
16k
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