動的にallow/denyできる ファイルサンドボックスを作る
by
Takaya Saeki
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
動的にallow/denyできる サンドボックスを作る kernel/VM 探検隊東京 No.19 @nullpo_head 1
Slide 2
Slide 2 text
怪談を話します、夏ですからね 2
Slide 3
Slide 3 text
ベッドの下の男 夜更けすぎ、友人がしつこく コンビニへ行こうと誘う。 あまりにしつこく誘うのでし ぶしぶ部屋を出る。 すると、友人は血相を変えて 「ベッドの下に包丁を握った 男がうずくまっている」と言 ったのだ。 3
Slide 4
Slide 4 text
4
Slide 5
Slide 5 text
サプライ チェーン に潜む男 だ! 5
Slide 6
Slide 6 text
サプライチェーンに潜む男 $ curl https://foo/install.sh | bash 気になるプロダクトをインス トールする 果たしてシステムに変な変更 をしていないだろう か・・・? や も・・・? $ npm install $ pip install 6
Slide 7
Slide 7 text
シリコン製の猿の手 はなんでもやってくれる 途中で "No space left on device" エラーがあったようだ ん、最新のコマンドは ... ? Agent $ rm -rf proj1 proj2 .. 7
Slide 8
Slide 8 text
シリコン製の 体 猿の手 週 先 た, はなんでもやってくれる 験し に 途中で 本 当 エラーがあったようだ た っ あ . ん、最新のコマンドは . . 話 い 怖 ? Agent "No space left on device" $ rm -rf proj1 proj2 .. ... 8
Slide 9
Slide 9 text
ファイルアクセスを監視できる サンドボックスがほしい! 9
Slide 10
Slide 10 text
NOTICE! Linux 今日はかなり面白い での新しい テクニックの話をします 10
Slide 11
Slide 11 text
「新しい技術」にいたるまでに 「聞いたことないが界隈では常識」 の話がたくさん必要 11
Slide 12
Slide 12 text
だからまずたくさんの 「聞いたことないが常識らしいこと」に この部屋で追いついてもらいます 12
Slide 13
Slide 13 text
「新しい技術」になったときに「これ だけは知らなかった!」とちゃんと驚 いてください! 13
Slide 14
Slide 14 text
常識的な主流のサンドボックス技術の問題点 14
Slide 15
Slide 15 text
常識的な 主流のサンドボックス技術三選 Per-process Sandbox によく使われる技術 Seccomp-BPF Namespace Landlock 触れないもの VM は根本的に原理が違うので今回は除外します 15
Slide 16
Slide 16 text
Seccomp-BPF プロセスにClassic BPFで書かれたルールを課す システムコール番号の許可リストor拒否リストを実装する root も user namespace もいらない 弱点 パスをもとにファイルのフィルタリングは不可能 動的に許可・拒否を決定することはできない 16
Slide 17
Slide 17 text
Namespace プロセスを隔離されたネームスペースで動かす マウントネームスペースでファイルシステムを分離 ネットワークも隔離可能 サンドボックス系の実装で主流 弱点 、もしくはuser namespaceが必要(ubuntuでは無効) 動的に許可・拒否を決定することはできない root 17
Slide 18
Slide 18 text
Landlock プロセスにLandLock APIで書かれたルールを課す パスベースでファイルの許可リストを指定できる ポートベースでネットワークの許可リストを指定できる root も user namespace もいらない 弱点 あとからルールを緩和することができない 動的に許可・拒否を決定することはできない 18
Slide 19
Slide 19 text
まとめ 動的に許可・拒否をする仕組みがない 19
Slide 20
Slide 20 text
常識 20
Slide 21
Slide 21 text
ここからが面白い新しい技術の話 21
Slide 22
Slide 22 text
Cage Box: a seccomp-brokered sandbox https://github.com/nullpo-head/cage-box つくりました。Brokered Sandbox 方式(勝手に名付けた) プロセスがファイルアクセスをするたびに許可/拒否できる ルールファイルにより、プロセスがアクセスするファイルをあらか じめ宣言することもできる その仕組みとは・・・? 22
Slide 23
Slide 23 text
Seccomp-notify 23
Slide 24
Slide 24 text
Seccomp-notify の許可/拒否をBPFではなくIPCで他のプロセスに委譲でき る ユーザースペースなのでパスも読める しかも、許可/拒否だけでなくFile Descriptorを結果として返すこと ができる Seccomp (ADD_FD) これはかなりアツい!!!! 24
Slide 25
Slide 25 text
25
Slide 26
Slide 26 text
Seccomp-notify 弱点:セキュリティサンドボックスに利用できない? がわざわざ「セキュリティ用途には使うな」と言っている. なぜ? 不可能ではないが、かなり丁寧に実装しないとバイパス手段が多い notify ではない新しい seccomp をインストールされる CONTINUE で許可を実装してしまうと TOCTOU 攻撃でスレッド からパスを変えられる システムコールベースなのでトラップ漏れや増減に弱い man 26
Slide 27
Slide 27 text
解決策: Landlockと組み合わせる ですべてを拒否する Landlock 外の broker が、代わりにファイルを開いて FD をターゲッ トプロセスにinjectすることになる Broker が明示的に開いたファイルしかアクセスされないことが保証 される これをSeccomp-Brokered Sandbox方式と勝手に呼んでいます Landlock 27
Slide 28
Slide 28 text
28
Slide 29
Slide 29 text
Seccomp-Brokered Sandbox (seccomp notify + landlock) 方式: もUser namespaceも必要ない 動的にファイルアクセスをパスベースで許可/拒否できる TCP のホストベースでのフィルタリングも可能( Cage Box は未実 装) Root すごい!! 29
Slide 30
Slide 30 text
デモ 30
Slide 31
Slide 31 text
デモ: ルールベース すでにアクセス範囲が決まっているものはLandlockでカバーできる この場合はopenのパフォーマンスオーバーヘッドもない allow rx /home/nullpo/.cargo allow rwx /home/nullpo/dev allow rx /etc allow rx %system_libs allow rx %system_bins 31
Slide 32
Slide 32 text
実装上のチャレンジ たくさんあるんですが10分なんではしょります 32
Slide 33
Slide 33 text
TOCTOU パスは検査時とopenしたときで常に変わる e.g. symbolic link の置き換え Open -> get the realpath of the fd -> 許可 / 拒否 -> その fd を返す の 順でやる 33
Slide 34
Slide 34 text
パスの意味 あるパスが指すファイルはプロセスによって異なる場合がある -> アクセスしたプロセスの への特殊なシンボリ ックリンク 実態のあるデバイスファイルであるにも関わらずなんと 誰が開いたかで結果が変わる 異なる mount namespaceにいるプロセスのパス (未実装) /proc/self /proc/< PID> /dev/tty 34
Slide 35
Slide 35 text
execve(path, ...) が代行できない ptrace を組み合わせて へと置き換える ( はFDを取る) それでも全拒否Landlockとexecveの組み合わせが悪い 紆余曲折ありFSのFDに対して できない memfd に execve 対象ファイルをコピーして注入して現在は実装 (proxy プロセスを起動する方式のほうがいいかもね ) Broker execveat execveat execveat 35
Slide 36
Slide 36 text
まとめ seccomp-brokered sandboxと seccomp notifyがアツい! 36
Slide 37
Slide 37 text
理想的なビジョン 配布されているすべてのソフトウェアがルールファイルを同梱して くれるといい ルールをチェックするだけで安全性が分かる ルールがないものは、interactive modeで実行して逐一安全性を確 認する それでできたルールを共有する場所があるといいね 37
Slide 38
Slide 38 text
まとめ2 Seccomp-Brokered Sandbox (seccomp notify + landlock) 方式: もUser namespaceも必要ない 動的にファイルアクセスをパスベースで許可/拒否できる TCP のホストベースでのフィルタリングも可能( Cage Box は未実 装) Root すごい!! 38