测试 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" -- bash -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" -- bash -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" -- 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 配置了 Logging,则可以在 Security Command Center 和 Cloud Logging 中查看该发现结果。只有在激活 Security Command Center 高级层级后,才能在 Cloud Logging 中查看发现结果。

为了降低噪声,当您首次创建容器时,Container Threat Detection 会暂时过滤“Execution: 添加了恶意二进制执行发现结果”。如需查看“执行:添加了恶意二进制执行的发现”,在设置容器时查看所有“执行:添加了恶意二进制执行的发现结果”,请在容器名称或 Pod 名称前添加 ktd-test 作为前缀,如示例所示。

执行:执行被篡改的恶意二进制文件

如需触发“执行:被修改的恶意二进制文件执行”发现结果,请修改容器中的恶意二进制文件并执行该文件。此示例会部署最新的 Ubuntu 18.04 映像,将 /bin/ls 修改为模拟的恶意文件,然后执行该文件。二进制文件的执行不符合预期,因为 /bin/ls 在容器运行时被修改为模拟恶意二进制文件,并且二进制文件是一个 EICAR 测试文件,即被威胁情报归类为恶意文件的文件。

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" -- bash -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 会暂时过滤“Execution: 已修改的恶意二进制执行”发现结果。若要在设置容器时查看所有“执行:被修改的恶意二进制文件执行”发现结果,请在容器名称或 Pod 名称前添加 ktd-test 作为前缀,如示例所示。

已执行恶意脚本

要触发“恶意脚本执行”发现结果,您可以在容器中按以下过程执行脚本。

该过程会部署最新的 Ubuntu 18.04 映像,复制看似恶意的脚本,然后执行该脚本。若要触发检测,脚本必须包含恶意内容才能被检测器检测到。

  1. 设置环境变量

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

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. 在新容器中执行以下脚本。

    此内嵌 bash 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" \
      -- bash -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" -- bash -c "curl $url | cat"
    

此测试过程会触发“观察到恶意网址”发现结果,您可以在 Security Command Center 中查看该发现结果;如果您为 Container Threat Detection 配置了 Logging,则可以在 Cloud Logging 中查看该发现结果。仅当您在组织级层激活 Security Command Center 高级层级时,才能在 Cloud Logging 中查看发现结果。

反向 shell

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

  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 "/bin/echo >& /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 检测器检测的 httpd->dash 进程树。此测试安全,因为它仅使用内置二进制文件。此示例会执行以下操作:

  1. 创建 bash 进程的副本并将其命名为 httpd
  2. 复制 echo 进程并将其命名为 dash
  3. 在复制的 httpd 进程中调用复制的 dash 进程。

如需触发 Unexpected Child Shell 发现结果,请执行以下操作:

  1. 设置环境变量

  2. 使用 Cloud Shell 访问集群控制平面:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. 使模拟 httpd 进程调用模拟 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/bash /tmp/httpd; cp /bin/echo /tmp/bash; \
    /tmp/httpd -c "/tmp/bash child ran successfully & wait"'
    

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

注意:上述测试命令的 & wait 部分非常重要。意外子 Shell 检测器的公开预览版只能捕获 fork,然后 exec 新的 shell。如果省略命令的 & 等待部分,则检测器将无法捕获事件。

后续步骤