こんにちは!日々、インフラやアプリケーションの守りを固めている開発者やインフラ担当者の皆さん、お疲れ様です。
最近のシステム開発では、DockerやKubernetesといった「コンテナ技術」を使うのがすっかり当たり前になりましたよね。アプリをサクッと動かせて本当に便利なんですが、いざ「セキュリティをどうするか?」と考えると、従来の仮想マシンや物理サーバーとは勝手が違って頭を悩ませてしまうことも多いのではないでしょうか。
「コンテナの中って、ぶっちゃけどこまで見渡せばいいの?」
「Kubernetesのセキュリティ対策って、何から手をつければいいの?」
そんな疑問を持っているあなたへ向けて、今回はKubernetesの心臓部である「APIサーバーの監査ログ」を使った、現場で役立つリアルな監視・検知の手法を分かりやすく紐解いていきたいと思います。
難しい専門用語が出てきても置いてけぼりにしませんので、一歩ずつリラックスして学んでいきましょう!
—
家の防犯に例えるKubernetesの仕組み
セキュリティの話をするとき、私たちはよく「リアルな世界のおうちの防犯」に例えて考えます。Kubernetes(よく k8s と略されますね)の世界も、実はこれと全く同じなんです。
- Kubernetesクラスター = あなたが住んでいる「大きなお屋敷」
- Pod(コンテナが動く場所) = お屋敷の中にある「個別の部屋」
- APIサーバー = お屋敷の「正面玄関のコンシェルジュ(受付)」
お屋敷の中に入るには、誰であっても必ず正面玄関のコンシェルジュ(APIサーバー)を通らなければなりません。「Aさんが客間に入りたいと言っています」「Bさんが地下の金庫室の鍵を開けようとしています」といった具合に、お屋敷の中でのすべての動きや命令は、このコンシェルジュが一度すべて受け付けてさばいています。
そして、今回主役として取り上げる「監査ログ(Audit Log)」とは、まさにこの「コンシェルジュが毎日24時間休まず書き留めている、来客ノートと行動記録の台帳」なのです。
「誰が、いつ、どこから来て、何を持ち込み、どの部屋を開けようとしたのか」のすべてがこの台帳に記録されます。もし泥棒が窓を破って侵入しようとしたり、不審者が合鍵を使って金庫を開けようとしたりしたら、この台帳を見れば一発で足取りが分かりますよね。
コンテナ環境のセキュリティで一番怖いのは、目に見えないところでこっそり悪さをされることです。だからこそ、この「コンシェルジュの台帳(監査ログ)」をしっかり覗き見できるようにしておくことが、不正を暴くための強力な第一歩になるのです。
—
攻撃者が狙う「3つの危険な手口」
では、実際のサイバー攻撃者はKubernetesというお屋敷の中で、何をしようと企んでいるのでしょうか? 私たちが現場のインシデント調査でよく目にする、代表的な3つの悪だくみを見ていきましょう。
1. 勝手に自分たちの部屋(Pod)を増やす
攻撃者は、何らかの脆弱性を突いてお屋敷の合鍵(認証情報)を手に入れると、まずこっそりと「自分たち専用の隠し部屋」を作ろうとします。勝手に新しいPodをデプロイし、そこで仮想通貨を勝手にマイニングしたり(クリプトジャッキング)、次の攻撃のための踏み台にしたりするのです。
2. 「特権コンテナ」という名の裏口を開ける
通常のコンテナは、お屋敷の中で少し行動が制限されたゲストのようなものです。しかし、攻撃者はより強力な権限を持つ「特権コンテナ(Privileged Container)」を作りたがります。
これが実行されると、コンテナの壁をやすやすと突き破って、下にあるホストOS(お屋敷の土台そのもの)の奥深くまで自由に出入りできるようになってしまいます。これは例えるなら、「家政婦さんに渡したはずの合鍵で、家の構造体のマスターキーまで作られてしまった状態」です。非常に危険です。
3. シークレット(金庫の中身)を盗み出す
Kubernetesには、データベースのパスワードやAPIの秘密鍵といった機密情報を安全に保管する「Secret(シークレット)」という機能があります。お屋敷で言うところの「ダイヤル式の金庫」ですね。攻撃者は、この金庫の場所を突き止め、中身をごっそり盗み出そうとAPIにこっそりアクセスを試みます。
—
監査ログを有効にして「怪しい動き」をキャッチする
こうした攻撃の芽をいかに早く摘み取るか。そのためには、まずKubernetesのAPIサーバーに「しっかり台帳をつけてね」とお願い(設定)しておく必要があります。
1. 監査ポリシー(Audit Policy)の設定
APIサーバーのすべてを記録しようとすると、ログの量が膨大になりすぎてディスクがパンクしてしまいます。そのため、「こういう危なっかしい動きがあったら、特に重点的に台帳にメモしてね」というルール(監査ポリシー)を決めます。
以下は、実務でもよく使われる監査ポリシーの設定ファイルのサンプルです。日本語のコメントを参考に見てみてください。
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
# 機密情報であるSecretへのアクセスは、詳細に記録(RequestResponseレベル)する
- level: RequestResponse
resources:
- group: ""
resources: ["secrets"]
# Podの作成や変更などの重要な操作も、誰がやったか分かるようにしっかり記録する
- level: Metadata
resources:
- group: ""
resources: ["pods"]
# その他、頻繁に発生する細かい健康状態のチェックなどは、ログが埋もれないよう記録を軽めにする
- level: None
resources:
- group: ""
resources: ["services", "endpoints"]
この設定をAPIサーバーに渡すことで、「おっ、今Secretの中身が覗かれたな」「新しいPodが作られたな」という重要なイベントが漏れなくログとして出力されるようになります。
—
現場で役立つ!不正検知のためのログ分析クエリ
さて、ログがしっかり出力されるようになったら、次はその中から「怪しい兆候」を見つけ出す番です。現場のSOCアナリストやセキュリティエンジニアは、ログ蓄積基盤(ElasticsearchやCloudWatch Logs、Lokiなど)を使って、次のような観点でログをスキャンします。
今回は、ログ分析でよく使われるLogQL(Grafana Lokiなどで使われるクエリ言語)を例に、具体的な検知の目を光らせてみましょう。
検知パターンA:特権コンテナの作成を見逃さない!
攻撃者が「特権コンテナ(ホストの権限を奪える危険なコンテナ)」を作ろうとした瞬間をキャッチするクエリです。
# APIサーバーの監査ログから、ポッドが作成(create)されるリクエストを絞り込む
{job="kubernetes-audit"} |= "create" |= "pods"
# かつ、設定の中に「privileged: true(特権モードを有効にする)」という危険なキーワードが含まれているかチェック
| json
| requestObject_spec_containers_securityContext_privileged == "true"
もしこのクエリにヒットするログが見つかったら、それはもう「お屋敷の中で泥棒が合口を使おうとしています!」という緊急アラートを鳴らすべき瞬間です。即座にそのPodを隔離し、調査を始める必要があります。
検知パターンB:シークレットへの不正なアクセスをあぶり出す
深夜や普段稼働していない時間帯に、誰かが重要なシークレット情報を読み取ろう(get や list)としていないかを監視します。
# Secretリソースに対する読み取りリクエストを抽出
{job="kubernetes-audit"} |= "secrets"
| json
| verb=~"get|list"
# 普段アクセスしない不審なサービスアカウントやユーザーからのアクセスではないかフィルタリング
開発環境やステージング環境であればまだしも、本番環境のシークレットが意図しないタイミングで外部のIPや見慣れないアカウントから参照されていないか、定期的にこのログをチェックする習慣をつけましょう。
—
本日から一歩ずつ進められる対策
コンテナ環境のセキュリティと聞くと、なんだか壁が高く感じられて「ウチにはまだ早いかも…」と及び腰になってしまうかもしれません。でも、安心してください。セキュリティは一朝一夕で完璧な要塞を作るものではなく、少しずつ鍵を増やしていく積み重ねです。
今日からあなたのチームでも、ぜひ次のステップを試してみてください。
1. まずは現在のログ出力状況を確認してみる
いま動いているKubernetesクラスターで、APIサーバーの監査ログがちゃんとファイルや外部の監視ツールに出力されているか、インフラ担当メンバーに聞いてみましょう。
2. 監査ポリシーを見直す
すべてのログを垂れ流すのではなく、今回紹介したように secrets や pods といった重要リソースの動きに絞ったポリシーを適用してみます。
3. 簡単なアラート通知を作ってみる
「特権コンテナの作成」など、絶対に起きてほしくない危険な操作のログを検知したら、SlackやTeamsなどのチャットツールに通知が飛ぶような小さな仕組みを組んでみましょう。これだけでも、セキュリティレベルは劇的に跳ね上がります。
一歩ずつ、確実に。コンテナという便利で強力な相棒を安全に乗りこなせるよう、一緒にスキルアップしていきましょう!
コメント