Azure Kubernetes Serviceにおけるランタイムセキュリティ

By 清水 孝郎 - FEBRUARY 10, 2021

SHARE:

本文の内容は、2021年2月10日にEric Carterが投稿したブログ(https://sysdig.com/blog/runtime-security-in-azure-kubernetes-service/)を元に日本語に翻訳・再構成した内容となっております。

Azure Kubernetes Service (AKS) 環境のランタイムセキュリティでは、アプリケーション、インフラストラクチャー、およびクラウド環境全体で予期せぬ悪意のある動作を検出するためのコントロールを行う必要があります。

ランタイムの脅威には、以下のようなものがあります:

  • パッチが適用されていない脆弱性や新しい脆弱性のエクスプロイト
  • 安全でない構成
  • リークされた、または弱い資格情報
  • 不正行為

コンテナイメージの脆弱性スキャン、KubernetesポッドセキュリティポリシーKubernetesネットワークポリシーなどのツールをAKSで活用していても、すべてのリスクに対応できるわけではありません。設置したセキュリティバリアが有効であることを確認する仕組みはやはり必要です。さらに、最終ラインの防御策を持つことで、ゼロデイの脆弱性や予期せぬ活動を特定するのに役立ちます。

なぜAKSでランタイムセキュリティなのか?

“コンテナセキュリティ “は、イメージスキャンや脆弱性管理と同義だと思われがちです。その考え方は、CI/CDパイプラインの早い段階で、脆弱性、設定ミス、コンプライアンス違反がないかイメージスキャンしておけば、コンテナやKubernetes環境での脅威をうまく防ぐことができるというものです。イメージスキャンは重要な第一歩ですが、追加のセキュリティ対策が必要です。ランタイムセキュリティ、ゼロトラストネットワーキング、監査、フォレンジック、インシデント対応も、Secure DevOps ワークフローの構成要素とする必要があります。

いくつかのセキュリティ脅威は、その性質上、ランタイム中にのみ顕在化します。これには以下のようなものがあります。

  • Zero-day 脆弱性 – ソフトウェア作成者がこれまで知らなかった問題
  • 特権のエスカレーションの試み
  • 不安定な動作やリソースリークの原因となるバグ

この記事では、Falco プロジェクトを用いてオープンソースベースのアプローチでランタイムセキュリティ検出を実装する方法を見ていきます。また、Sysdig Secure が Falco をベースに構築され、AKS 環境における大規模なランタイムの脅威を検出してアラートする方法についても説明します。

Falco:オープンソースのKubernetesランタイム検知

クラウドネイティブのランタイムセキュリティプロジェクトであるFalcoは、デファクトのKubernetes脅威検知エンジンです。CNCFにインキュベーションレベルのプロジェクトとして参画した最初のランタイムセキュリティプロジェクトです。Sysdigは2016年にFalcoを作成しました。これは、予期せぬアプリケーションの動作を検出し、ランタイムで脅威をアラートするように設計されていました。

Falcoはカーネルシステムコールを分析することで動作し、コンテナや環境のアクティビティに深い可視性を提供します。また、Kubernetes APIの監査イベントなどの他のデータソースも利用します。同様に重要なこととして、FalcoはKubernetesアプリケーションのコンテキストを追加して、DevOps、セキュリティ、クラウドチームが誰がどこで何をしたのかを正確に理解できるようにします。

なぜAzure Kubernetes ServiceのランタイムセキュリティにFalcoを使うのか?

一般的に使用されている脆弱性やマルウェア検出アプローチの弱点は、可能性のある脅威の事前知識に依存していることです。例えば、シグネチャーベースのアプローチでは、可能性のあるそれぞれのエクスプロイト、脆弱性、攻撃を何らかの方法でリストアップしなければなりません(マルウェアのシグネチャなど)。これは、検出ツールが新しい脅威の絶え間ない流れに追いつくための終わりのないゲームに従事していることを意味します。

対照的に、振る舞いベースのアプローチは、システム上で何が起こっているかに注目します。言い換えれば、ユーザや攻撃者がシステムにアクセスした後に行うことを検出します。

Falcoは、セキュリティルールを使って、予期せぬ、あるいは悪意のあるアプリケーションや環境の振る舞いを検出します。ルールはコミュニティから提供されており、Falcoの柔軟なルールエンジンを使って独自の検出ルールを書くこともできます。そして、ランタイム時の脅威を識別してアラートするために、セキュリティ検出と応答のワークフローにFalcoをプラグインすることができます。

Falcoのルールファイルは、3種類の要素を含むYAMLファイルです:

要素  説明
Rulesアラートを生成する条件。ルールには、アラートと一緒に送信される説明的な出力文字列が含まれています。
Macrosルールや他のマクロの中で再利用できるルール条件のスニペット。
Listsルールやマクロ、その他のリストに含めることができる項目のコレクション。ルールやマクロとは異なり、リストはフィルタリング式として解析できません。

 

AKSで脅威を検出するためのFalco

オープンソースのFalco上に構築されたランタイム脅威検出は、コンテナ環境における疑わしいアクティビティや異常を特定してブロックするのに役立ちます。ここでは、いくつかの例を紹介します。

コンテナ内のターミナルシェル

Falcoは、構成されたポリシーに違反して実行中のコンテナ内でコマンドラインインターフェイス(ターミナルシェル)の実行を検出します。これは、攻撃者がシステムを操作したり、マルウェアをダウンロードしたり、その他の悪意のある活動を開始しようとしていることを示す可能性があります。以下は、この脅威を検出するFalcoルールの例で、コンプライアンス、監査、および侵入検知の要件をよりよく満たすのに役立ちます。

- rule: Terminal shell in container
  desc: >
    A shell was used as the entrypoint/exec point into a container with an
    attached terminal.
  condition: >
    spawned_process and container
    and shell_procs and proc.tty != 0
    and container_entrypoint
  output: >
    A shell was spawned in a container with an attached terminal 
    (user=%user.name %container.info shell=%proc.name parent=%proc.pname
    cmdline=%proc.cmdline terminal=%proc.tty container_id=%container.id     
    image=%container.image.repository)
  priority: NOTICE
  tags: [container, shell, mitre_execution]

異常なアウトバウンドネットワーク接続の試み

ls や ps のような標準的なシステムバイナリが外部へのTCP 接続を行う場合、何かが間違っています。おそらく、ホストがルートキット化されていることが考えられます。理想的には、ルートキットのインストールが発生したときに検出したいと思うでしょう (おそらく上で説明したようなルールを使用することになるでしょう)。しかし、深く防御し、攻撃が実行された後に起こる可能性のある動作を検出することが重要であることに変わりはありません。

この場合における、AKS 環境で疑わしい接続を捕捉するのに役立つ Falco ルールを紹介します:

- rule: Unexpected outbound connection destination
  desc: >
    Detect any outbound connection to a destination outside of an allowed set
    of ips, networks, or domain names
  condition: >
    consider_all_outbound_conns and outbound and not
    ((fd.sip in (allowed_outbound_destination_ipaddrs)) or
     (fd.snet in (allowed_outbound_destination_networks)) or
     (fd.sip.name in (allowed_outbound_destination_domains)))
  output: >
    Disallowed outbound connection destination 
    (command=%proc.cmdline connection=%fd.name user=%user.name
    container_id=%container.id image=%container.image.repository)
  priority: NOTICE
  tags: [network]

MITRE ATT&CK フレームワークの検出

Falco は、MITRE ATT&CK フレームワークで定義されている敵の戦術や技術に基づいて、異常と思われるシステムイベントを検出します。この情報から、脅威や異常と判断された活動は、関係するポッドやコンテナを隔離することで改善することができます。以下の例は、AKS での特権昇格検知のためのものです。

- rule: Launch Privileged Container
  desc: >
    Detect the initial process started in a privileged container. Exceptions are
    made for known trusted images.
  condition: >
    container_started and container
    and container.privileged=true
    and not falco_privileged_containers
    and not user_privileged_containers
  output: >
    Privileged container started 
    (user=%user.name command=%proc.cmdline %container.info 
    image=%container.image.repository:%container.image.tag)
  priority: INFO
  tags: [container, cis, mitre_privilege_escalation, mitre_lateral_movement]

Sysdig SecureがAKSのランタイムセキュリティをどのように拡張するか

Sysdig Secureは、オープンソースのFalco検出エンジンをベースに構築されています。Falcoが提供するものを拡張し、コンテナとKubernetesのライフサイクル全体にわたって包括的なセキュリティを提供します。さらに、Sysdig Secureは、クラウドスケールでの運用を簡素化するために、簡単に操作できるユーザーインターフェースを特徴としています。

コンテナ、Kubernetes、クラウド環境用のランタイムセキュリティポリシーは、すぐに利用できます。これらのポリシーはFalcoルールに基づいて構築されており、Sysdig Secureユーザーインターフェイス内で簡単にオン/オフを切り替えることができます:
azure AKSのランタイムセキュリティポリシー
各ポリシーは、デプロイメントの特定の部分に適用したり、特定のアクションを実行したり、通知を送信する場所をカスタマイズしたりするために調整することができます。

インターフェースでは、ポリシーが構築されているFalcoルールの構成を理解するために、Falco構文を表示することができます。さらに、Sysdig Secureは、含まれているルールライブラリから選択することで、既存のポリシーに追加の検出を簡単に追加することができます。
Runtime security policy creation for Azure AKS

AKSのセキュリティイベントの監視と応答

Sysdig Secureを使用することで、DevOpsやセキュリティ運用チームは、環境全体のアクティビティに基づいてトリガーされたイベントのサマリーを表示することができます。(これらのイベントは、お気に入りの SIEM に転送することもできます)。ポリシー違反を掘り下げて詳細な状況を把握したり、詳細な記録にアクセスしてフォレンジックやインシデント対応を支援したりすることができます。

たとえば、機密ファイル(ユーザー、パスワード、または認証情報を含むファイルなど)を読もうとすると、イベントアラートが発生します。これにより、問題が発生している場所を特定し、何がアクセスされたかを確認し、影響を受けたコンテナやサービスを理解し、完全なコンテキストで問題をさらに調査することができます。
Monitoring runtime events for AKS in Sysdig

上記で紹介した内容に加えて、Sysdig Secureは、AKS環境のセキュリティをさらに管理・自動化するためのサポートを提供します。

  • コンテナをkill、stop、pauseするための自動応答アクションによる修復
  • 自動化されたイメージプロファイリング、柔軟なポリシーエディタ、集中管理
  • CI/CD パイプラインとレジストリーのためのイメージスキャンで、開発と本番の脆弱性を特定してブロックします。
  • フォレンジック、インシデント対応、監査をサポートする詳細なシステムコールキャプチャー
  • Kubernetesネットワークセキュリティポリシーでネットワークポリシーの作成を簡素化するツールと可視化
  • チェックとポリシーをコンプライアンス基準にマッピングして、コンプライアンスの検証を簡素化

このソリューションの詳細は、Sysdig Secureの製品ページで確認できます。

まとめ

コンテナ、Kubernetes、クラウドサービスのランタイムセキュリティは、Microsoft Azure上に構築されたモダンなアプリケーション環境に重要な保護を提供します。オープンソースのFalcoは、コミュニティがソースとするカスタムルールで悪意のあるアクティビティをフィルタリングして検出する機能をユーザーに提供します。Sysdig Secureは、この機能をさらに一歩進めて、Azure上でのランタイムセキュリティの検出と対応を大規模に簡素化します。

Azure上のコンテナのセキュリティについての詳細は、Azureセキュリティガイドをご覧ください。