コンテナの中は「無法地帯」?カーネルレベルの番人を配置してセキュリティを鉄壁にする話
こんにちは!クラウドの海を渡り歩くSREとして、日々Kubernetesのクラスタを眺めていると、「コンテナって本当に安全なの?」という素朴な、しかし非常に鋭い疑問にぶつかることがよくあります。
DockerやKubernetesで動くコンテナは、実は「完全に独立した世界」ではありません。ホストマシンのOS(Linuxカーネル)をみんなで仲良くシェアしている「同居人」のような存在です。もし、この同居人の一人が「俺の部屋(コンテナ)から外の金庫(ホストの重要な設定ファイル)をこっそり覗いてやろう」と悪巧みをしたらどうなるでしょうか?
今日は、そんなコンテナの暴走を未然に防ぐ、「システムコール監視」というセキュリティの要について、身近な例えを交えて紐解いていきましょう!
—
コンテナからの「お願い」を覗き見る:システムコールとは?
コンテナの中で動いているプログラムが、何か重要なことをしたいとき(例えば、「ファイルを開きたい」「ネットワーク通信を始めたい」)、彼らは直接ハードウェアを触ることができません。
代わりに、ホストOSの管理者である「カーネル」に対して、「すいません、これやっていいですか?」とお願いを出します。これが「システムコール」です。
- 郵便配達の例え:
- コンテナ内のアプリ = 部屋から出られない住人
- システムコール = 住人が外のポストに投函する「リクエストカード」
- カーネル = 郵便局員
もし悪意のある住人が「『/etc/shadow』(OSのパスワード情報)を読み出したい」というリクエストカードを出したら、郵便局員(カーネル)はそれを受け取ってしまいますよね。これを未然に防ぐのが、今回紹介するセキュリティの仕組みです。
—
守護神を配置する:AppArmor、SELinux、そしてFalco
この「郵便局員(カーネル)」が、不審な手紙を検閲してブロックする仕組みが、AppArmorやSELinuxといったカーネルモジュールです。
1. AppArmor / SELinux(門番):
あらかじめ「このコンテナは、このファイルしか触っちゃダメだよ」というリスト(プロファイル)を持っています。違反があれば、その場で門前払いします。
2. Falco(防犯カメラ):
こちらは「監視員」です。門前払いするだけでなく、「誰かが変なことをしようとしているぞ!」と即座にアラートを鳴らし、ログに記録します。
—
実践!Falcoで「怪しい動き」を検知してみよう
実際に、コンテナが予期せぬディレクトリにアクセスしようとしたときに警告を出す、Falcoの設定例を見てみましょう。
falco.yamlやルール定義ファイルに、以下のようなルールを追加します。
# 不審なファイルアクセスを検知するルール例
- rule: Detect sensitive file read
desc: コンテナから重要なファイルへのアクセスを検知します
condition: >
open_read and fd.name startswith "/etc/shadow"
output: >
警告!コンテナが機密ファイルにアクセスしようとしました
(user=%user.name command=%proc.cmdline file=%fd.name container_id=%container.id)
priority: WARNING
open_read: 「ファイルを開いて読み込む」というシステムコールを監視fd.name startswith "/etc/shadow": アクセス先が/etc/shadowだったらトリガー発動!
このように、システムコールの発行をリアルタイムで見張ることで、ハッカーがコンテナ内に侵入して「OSの心臓部」をいじろうとした瞬間を捉えることができるのです。
—
一歩ずつ進むためのアドバイス
「セキュリティ設定は難しそう…」と尻込みする必要はありません。まずは、以下のステップで進めてみてください。
1. まずはログを見る: AppArmorならdmesgコマンドで、システムが何を拒否したか確認する癖をつけましょう。
2. 最小権限の原則: コンテナを動かすときは、--privilegedフラグ(特権モード)を安易に使わないこと。これは「鍵のかかっていない部屋に住む」ようなものです。
3. Falcoを導入してみる: 最近のKubernetes環境なら、Helmで簡単にインストールできます。まずは「何もブロックせず、ログだけ出す」モードで、普段どんなシステムコールが走っているかを眺めるのが一番の勉強になります。
まとめ:安全なインフラは「疑うこと」から始まる
クラウドインフラの世界では、「コンテナは隔離されているから安全」という神話は捨てたほうが賢明です。今回紹介したシステムコール監視は、まさにその「疑うこと」を技術的に自動化したものです。
最初は難しく感じるかもしれませんが、OSの郵便局員(カーネル)がどのようなリクエストを受けているのかを意識するだけで、あなたのエンジニアとしての視座はグッと高まります。
ぜひ、今日からあなたのコンテナにも「防犯カメラ(Falco)」を設置して、安全な旅を続けてくださいね!また次の記事でお会いしましょう。
コメント