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
2
290
コンテナセキュリティのためのLandlock入門
Container Runtime Meetup #6発表資料です。
Takaya Saeki
December 16, 2024
Tweet
Share
More Decks by Takaya Saeki
See All by Takaya Saeki
Binary Hacks Rebooted 私選ハック集
nullpo_head
1
460
Unikernelと和解せよ
nullpo_head
0
640
デバッガと和解せよ
nullpo_head
8
4.1k
Talks on Little-Known Random Facts about WSL2
nullpo_head
0
59
SystemdのWSLディストロを作る
nullpo_head
0
100
WebAssemblyのWeb以外のことぜんぶ話す
nullpo_head
1
370
Noah A Robust and Flexible Operating System Compatibility Architecture
nullpo_head
0
76
ARMの仮想化支援機構 arm入門勉強会
nullpo_head
1
180
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか -
nullpo_head
1
700
Other Decks in Technology
See All in Technology
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
180
Classmethod_regrowth_2024_tokyo_security_identity_governance_summary
hiashisan
0
970
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
160
Amazon VPC Lattice 最新アップデート紹介 - PrivateLink も似たようなアップデートあったけど違いとは
bigmuramura
0
160
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
2
870
ジャンプTOONにおける サイトマップの自動生成手法
assa1605
0
110
Connect × Server-Side Kotlinで実現する!スキーマ駆動開発と品質改善の実践
sansantech
PRO
1
210
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
220
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
120
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
130
GPTsで模擬問題生成して資格対策してみる
hsg_alf
2
120
2024年のModern Data Stackを振り返ろう~分野別の目玉アップデート情報まとめ~
sagara
0
620
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
RailsConf 2023
tenderlove
29
930
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
1
150
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Site-Speed That Sticks
csswizardry
1
180
Statistics for Hackers
jakevdp
796
220k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Embracing the Ebb and Flow
colly
84
4.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