【入門編】 コンテナランタイムの脆弱性(CVE-2019-5736等)とランタイム保護 – インフラ・ネットワーク & クラウドセキュリティ防御ガイド

コンテナの「脱獄」はなぜ起きる?泥棒の手口から学ぶランタイムセキュリティの基礎

こんにちは。普段は企業のセキュリティの最前線で、日々泥棒(攻撃者)の裏をかく仕事をしているエンジニアです。

今日は、クラウドネイティブな開発現場で避けては通れない「コンテナのセキュリティ」についてお話しします。「コンテナを使っていれば安全」と思っていませんか?実は、コンテナは「専用の箱」に見えて、中身はホストOSという巨大な家に間借りしている状態にすぎません。

今回は、コンテナの壁を突き破る「脱獄(エスケープ)」の仕組みと、それを防ぐための「見張り番」の考え方を、身近な例えを交えて紐解いていきましょう。

—

1. コンテナの「脱獄」ってどういうこと?

コンテナは、アプリケーションを動かすための「小部屋」です。ホストOSという大きなマンションの中に、他の住人から見えないように区切られた部屋を作っているイメージですね。

しかし、2019年に世間を騒がせた CVE-2019-5736 という脆弱性は、この「部屋の鍵」そのものに欠陥があるようなものでした。

鍵の穴から手を伸ばす「runc」の脆弱性

runc とは、コンテナを実際に動かすための「ドアマン」のようなプログラムです。この脆弱性は、悪意のある攻撃者がコンテナ内で runc を再実行させることで、本来なら開けられないはずの「ホストOSのドア」を内側から開けさせてしまうというものでした。

泥棒に例えると、「部屋のドアの鍵穴に針金を突っ込んで、廊下(ホストOS)の鍵を開けさせる」ような手口です。一度廊下に出てしまえば、そのマンション(ホスト)にある全ての部屋に侵入できてしまいますよね。これがコンテナ脱獄の恐ろしさです。

—

2. 「見張り番」を雇おう:Falcoによる検知

どんなに頑丈な鍵をかけても、プロの泥棒は隙を突いてきます。だからこそ、「侵入されたことに気づく」仕組みが不可欠です。そこで登場するのが、ランタイムセキュリティツールの Falco です。

Falco は、ホストOSで起きている「システムコール(OSへの命令)」を監視する、いわば「24時間体制の監視カメラ兼警備員」です。

異常な行動を見逃さない

例えば、コンテナの中から「ホストのパスワードファイルを読み取ろうとした」「勝手に新しいユーザーを作ろうとした」といった怪しい動きがあったら、即座にアラートを鳴らします。

Falcoのルール設定例

以下は、コンテナ内でシェルが起動したことを検知するためのシンプルな設定です。

- rule: コンテナ内でシェルが起動された
  desc: コンテナ内で予期せぬシェルが実行された場合に検知する
  condition: >
    spawned_process and container and
    proc.name in (sh, bash, zsh, dash)
  output: >
    【警告】コンテナ内での不審なシェル起動を検知!
    (ユーザー: %user.name, コンテナ: %container.name, コマンド: %proc.cmdline)
  priority: WARNING

このように、「普段なら絶対にやらない行動」を定義しておくだけで、万が一の侵入時にいち早く気づくことができます。

—

3. 今日からできる!インフラ要塞化のステップ

「難しそうだな……」と感じた方も大丈夫です。まずは、以下の3点を意識するだけで、セキュリティレベルはグッと上がります。

① 「不要な権限」を削ぎ落とす

コンテナに「何でもできる権限(root権限)」を与えていませんか? 泥棒が入ったとき、部屋が空っぽなら盗まれるものはありません。
Dockerfileで USER を指定し、必要最低限の権限で動かすのが鉄則です。

# ルートではなく一般ユーザーを作成して実行する
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

② OS(ホスト)を最新に保つ

runc のような脆弱性は、OSのアップデートで修正されます。放置されたままのホストは、鍵が壊れたままのマンションと同じです。定期的なパッケージ更新は、泥棒に対する最も基本的な「防犯対策」です。

③ システムコールを制限する(Seccomp)

「このコンテナはネットワーク通信しかしないから、ファイルの書き込み命令は受け付けない!」とOSに指示を出すことができます。これを Seccomp と呼びます。
ドアマンに対して「この住人には特定の通路を通らせるな」と指示するようなものです。

—

最後に:完璧なセキュリティなんてない

セキュリティの世界には「絶対」はありません。攻撃手法は日々進化し、新しい「鍵の壊し方」が発明されます。

しかし、「中に入られることを前提にして、異常な動きを即座に見つける」という考え方(ゼロトラストの精神)を持っていれば、被害を最小限に抑えられます。

まずは、今動いているコンテナがどんな命令(システムコール)を出しているのか、 Falco やログツールを使って眺めてみることから始めてみませんか?「いつもと違う」ことに気づく力こそが、最強のセキュリティ対策なのです。

一歩ずつ、一緒に守りを固めていきましょう!

コメント

タイトルとURLをコピーしました