测试 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)中查看该发现结果。在以下位置查看发现结果: 只有在激活专业版或企业版后才能使用 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 中,而且容器是不可变的。

  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)中查看该发现结果。在以下位置查看发现结果: 只有在激活专业版或企业版后才能使用 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" -- 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 临时过滤器 执行:添加了恶意二进制文件执行的发现结果。要查看 all 执行:添加了容器处于运行状态时执行的恶意二进制文件 请为容器名称或 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"
    

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

对于降噪,当您首次创建容器时,Container Threat Detection 临时过滤器 执行:被修改的恶意二进制文件执行的发现结果。要查看 all 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 脚本源自 Honeypot。不过, 但该文件已被修改,因此不会执行恶意二进制文件, 因此运行脚本不会导致容器中出现恶意活动 所引用网址中的二进制文件可能已被移除并尝试 则会导致 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)中查看该发现结果。在 Cloud Logging 中查看发现结果 仅在您激活专业版或企业版后可用 Security Command Center 层级。

观察到恶意网址

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

以下示例将 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 中查看该发现结果。正在查看 您必须先启用 Cloud Logging 中的 组织级别的 Security Command Center 高级或企业层级。

反向 shell

如需触发“反向 Shell”发现结果,请启动二进制文件,并将 stdin 重定向到 TCP 连接的套接字。此示例以 /bin/echo 开头,并重定向到 Google 公共 DNS 8.8.8.8(在 DNS 端口上)。运行此示例时,不会打印任何内容。为防止通过中间人 (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)中查看该发现结果。在以下位置查看发现结果: Cloud Logging 仅在您激活 组织级别的 Security Command Center 高级或企业层级。

意外的 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 中找到它

后续步骤