こんにちは。現場の最前線で泥臭くインシデントと戦い続けている、セキュリティエンジニアです。
今日は「コンテナ」という、今の開発現場では欠かせない魔法の箱についてお話しします。コンテナって便利ですよね。でも、実はその「身軽さ」が、悪い人たちにとっては格好の侵入口になることも多いんです。
今回は、難しい言葉をなるべく使わずに、「家の防犯」に例えながら、コンテナを守るための「二重の盾」について解説していきます。
—
1. コンテナのセキュリティを「家」で例えると?
皆さんの家を想像してみてください。
コンテナ環境におけるセキュリティ対策は、大きく分けて二つの防犯対策に分かれます。
1. CI/CDパイプラインでの脆弱性スキャン:
家を建てる前に、設計図や建材に「欠陥」や「隠し扉」がないか、念入りにチェックする作業です。
2. Falco等によるランタイム監視:
家が建った後、住人になりすまして泥棒が侵入していないか、部屋の中の「怪しい動き」を監視する警備員です。
どちらか一方だけでは不十分です。どんなに頑丈な家(脆弱性なし)でも、プロの泥棒が窓を割って入る(ランタイム攻撃)可能性はゼロではないからです。
—
2. 【第一の盾】CI/CDでの脆弱性スキャン:泥棒を家に招き入れない
開発者が書いたコードをコンテナイメージにする際、そこに「世界中のハッカーが知っている既知の弱点(脆弱性)」が含まれていないかチェックします。
例えば、Trivyというツールを使えば、コマンド一つで「この家の鍵、壊れやすいですよ」と教えてくれます。
実践:GitHub Actionsでの自動スキャン例
以下は、CI/CDパイプラインの中に「チェックポイント」を設ける設定例です。
# .github/workflows/security.yml
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: コンテナイメージの脆弱性をスキャン
uses: aquasecurity/trivy-action@master
with:
image-ref: 'my-app:latest' # チェックしたいイメージを指定
format: 'table'
exit-code: '1' # 重大な脆弱性が見つかったらビルドをストップ!
ignore-unfixed: true # まだ修正パッチが出ていないものは一旦無視
severity: 'CRITICAL,HIGH' # 深刻なものだけを厳しくチェック
この設定のポイントは exit-code: '1' です。これが「防犯チェックで不合格なら、家(コンテナ)の建設を中止する」という重要な歯止めになります。
—
3. 【第二の盾】Falcoによるランタイム監視:家の中の怪しい動きを検知する
たとえ完璧な家を建てても、何らかの理由で泥棒が入り込むかもしれません。そんな時、Falcoは「家の中で、住人(コンテナ)が普段しないはずの行動」を検知して警報を鳴らします。
例えば、「Webサーバーとして動いているはずのコンテナの中で、急にシェル(shやbash)が起動された!」なんていうのは、まさに泥棒が侵入した合図です。
実践:Falcoのルール設定
Falcoは、システムコールという「OSへの命令」を監視しています。
# falco_rules.local.yaml
# コンテナ内でシェルが実行されたら警告するルール
- rule: Unexpected Shell in Container
desc: コンテナ内でshellが実行されました
condition: >
container.id != host and
proc.name in (sh, bash, zsh, ksh) and
proc.cmdline != "sh" # 本来必要なコマンド以外を検知
output:
警告: 誰かがコンテナ内でシェルを起動しました!
(user=%user.name command=%proc.cmdline container_id=%container.id)
priority: WARNING
このように、「普段は絶対に起こらないこと」を定義しておくことで、攻撃者が侵入した瞬間に管理者のメールやSlackに通知を飛ばすことができるんです。
—
4. なぜ「監視」まで必要なのか?
新人の皆さんは、「スキャンさえしておけば大丈夫では?」と思うかもしれません。しかし、現実のサイバー攻撃は、スキャンでは見つけられない「未知の攻撃(ゼロデイ攻撃)」や、「設定ミスを悪用した攻撃」であふれています。
「スキャン(予防)」は泥棒を追い出すための入り口対策、「監視(検知)」は泥棒が入ってきた時にすぐ気づくための最後の砦です。
一歩ずつ対策を学んでいきましょう!
最初から完璧を目指す必要はありません。まずは:
1. 脆弱性スキャンをパイプラインに組み込む(まずは警告を出すことから始めよう!)
2. Falcoのデフォルトルールを眺めてみる(どんな攻撃が怖いのか知るだけでも大きな一歩です!)
セキュリティは「完成させるもの」ではなく、「変化に応じて育てていくもの」です。今日から少しずつ、皆さんのコンテナという「家」の防犯性能を高めていきましょう。
何か分からないことがあれば、いつでも質問してくださいね。応援しています!
コメント