Secuencia de comandos maliciosa ejecutada

En este documento, se describe un tipo de hallazgo de amenazas de Security Command Center. Los detectores de amenazas generan hallazgos cuando identifican una posible amenaza en tus recursos alojados en la nube. Para obtener una lista completa de los hallazgos de amenazas disponibles, consulta el Índice de hallazgos de amenazas.

Descripción general

Un modelo de aprendizaje automático identificó código Bash que se ejecutó de forma maliciosa. Los atacantes pueden usar Bash para transferir herramientas y ejecutar comandos sin objetos binarios. Asegurarte de que tus contenedores sean inmutables es una práctica recomendada importante. El uso de secuencias de comandos para transferir herramientas puede imitar la técnica de transferencia de herramientas de entrada del atacante y generar detecciones no deseadas.

Container Threat Detection es la fuente de este hallazgo.

Cómo se debe responder

Para responder a este hallazgo, sigue los pasos que se indican a continuación:

Paso 1: Revisa los detalles del hallazgo

  1. Abre un hallazgo de Malicious Script Executed como se indica en Revisa los hallazgos. En la pestaña Resumen, se abrirá el panel de detalles del hallazgo.

  2. En la pestaña Resumen, revisa la información de las secciones que se indican a continuación:

    • Qué se detectó, en especial, los campos siguientes:
      • Objeto binario del programa: Son los datos del intérprete que invocó la secuencia de comandos.
      • Secuencia de comandos: Es la ruta de acceso absoluta al nombre de la secuencia de comandos ubicada en el disco. Este atributo solo aparece para indicar las secuencias de comandos escritas en el disco, no la ejecución literal de secuencias de comandos, por ejemplo, bash -c.
      • Argumentos: Son los argumentos que se proporcionan cuando se invoca la secuencia de comandos.
    • Recurso afectado, en especial, los campos que se indican a continuación:
      • Nombre completo del recurso: Es el nombre completo del recurso del clúster, incluido el número de proyecto, la ubicación y el nombre del clúster.
    • Vínculos relacionados, en especial, los campos siguientes:
      • Indicador de VirusTotal: Es el vínculo a la página de análisis de VirusTotal.
  3. En la vista de detalles del hallazgo, haz clic en la pestaña JSON.

  4. En el archivo JSON, observa los campos que se indican a continuación.

    • finding:
      • processes:
      • script:
        • contents: Es el contenido de la secuencia de comandos ejecutada, que podría truncarse por motivos de rendimiento. Esto puede facilitar la investigación.
        • sha256: Es el hash SHA-256 de script.contents.
    • resource:
      • project_display_name: Es el nombre del proyecto que contiene el recurso.
    • sourceProperties:
      • Pod_Namespace: Es el nombre del espacio de nombres de Kubernetes del Pod.
      • Pod_Name: Es el nombre del Pod de GKE.
      • Container_Name: Es el nombre del contenedor afectado.
      • Container_Image_Uri: Es el nombre de la imagen de contenedor que se ejecuta.
      • VM_Instance_Name: Es el nombre del nodo de GKE en el que se ejecutó el Pod.
  5. Identifica otros hallazgos de este contenedor que se produjeron en un momento similar. Por ejemplo, si la secuencia de comandos descarta un objeto binario, busca hallazgos relacionados con este.

Paso 2: Revisa el clúster y el nodo

  1. En la consola de Google Cloud , accede a la página Clústeres de Kubernetes.

    Acceder a Clústeres de Kubernetes

  2. En la barra de herramientas de la consola de Google Cloud , elige el proyecto que aparece en resource.project_display_name, si es necesario.

  3. Elige el clúster que aparece en la fila Nombre completo del recurso en la pestaña Resumen de los detalles del hallazgo. Toma nota de los metadatos sobre el clúster y su propietario.

  4. Haz clic en la pestaña Nodos. Elige el nodo que aparece en VM_Instance_Name.

  5. Haz clic en la pestaña Detalles y toma nota de la anotación container.googleapis.com/instance_id.

Paso 3: Revisa el Pod

  1. En la consola de Google Cloud , accede a la página Cargas de trabajo de Kubernetes.

    Acceder a Cargas de trabajo de Kubernetes

  2. En la barra de herramientas de la consola de Google Cloud , elige el proyecto que aparece en resource.project_display_name, si es necesario.

  3. Filtra el clúster que aparece en resource.name y el espacio de nombres del Pod que está en Pod_Namespace, si es necesario.

  4. Elige el Pod que aparece en Pod_Name. Toma nota de los metadatos del Pod y su propietario.

Paso 4: Revisa los registros

  1. En la consola de Google Cloud , accede al Explorador de registros.

    Acceder al Explorador de registros

  2. En la barra de herramientas de la consola de Google Cloud , elige el proyecto que aparece en resource.project_display_name, si es necesario.

  3. Establece la opción Selecciona un intervalo de tiempo en función del período de interés.

  4. En la página que se carga, haz lo que se indica a continuación:

    1. Busca los registros del Pod por Pod_Name con el filtro siguiente:
      • resource.type="k8s_container"
      • resource.labels.project_id="resource.project_display_name"
      • resource.labels.location="location"
      • resource.labels.cluster_name="cluster_name"
      • resource.labels.namespace_name="Pod_Namespace"
      • resource.labels.pod_name="Pod_Name"
    2. Busca los registros de auditoría del clúster con el filtro siguiente:
      • logName="projects/resource.project_display_name/logs/cloudaudit.googleapis.com%2Factivity"
      • resource.type="k8s_cluster"
      • resource.labels.project_id="resource.project_display_name"
      • resource.labels.location="location"
      • resource.labels.cluster_name="cluster_name"
      • Pod_Name
    3. Busca los registros de la consola de los nodos de GKE con el filtro siguiente:
      • resource.type="gce_instance"
      • resource.labels.instance_id="instance_id"

Paso 5: Investiga el contenedor en ejecución

Si el contenedor aún está en ejecución, se puede investigar directamente su entorno.

  1. En la consola de Google Cloud , accede a la página Clústeres de Kubernetes.

    Acceder a Clústeres de Kubernetes

  2. Haz clic en el nombre del clúster que se muestra en resource.labels.cluster_name.

  3. En la página Clústeres, haz clic en Conectar y, luego, en Ejecutar en Cloud Shell.

    De este modo, Cloud Shell se inicia y agrega comandos para el clúster en la terminal.

  4. Presiona Intro y, si aparece el diálogo Autorizar Cloud Shell, haz clic en Autorizar.

  5. Conéctate al entorno del contenedor ejecutando el comando siguiente:

      kubectl exec --namespace=Pod_Namespace -ti Pod_Name -c Container_Name -- /bin/sh
    

    Este comando requiere que el contenedor tenga un shell instalado en /bin/sh.

Paso 6: Investiga los métodos de ataque y respuesta

  1. Revisa las entradas del framework MITRE ATT&CK sobre este tipo de hallazgo: Intérprete de comandos y secuencias de comandos, transferencia de herramientas de entrada.
  2. Para comprobar el valor de hash SHA-256 del objeto binario marcado como malicioso en VirusTotal, haz clic en el vínculo del indicador de VirusTotal. VirusTotal es un servicio propiedad de Alphabet que proporciona contexto sobre archivos, URL, dominios y direcciones IP potencialmente maliciosos.
  3. Para elaborar un plan de respuesta, combina los resultados de la revisión con la investigación de MITRE y el análisis de VirusTotal.

Paso 7: Implementa la respuesta

El siguiente plan de respuesta podría ser adecuado para este hallazgo, pero también podría afectar las operaciones. Evalúa con cuidado la información que recopilas durante la investigación para determinar la mejor manera de resolver los hallazgos.

  • Si la secuencia de comandos realizaba cambios previstos en el contenedor, vuelve a crear la imagen del contenedor de modo que no se necesiten cambios. De esta manera, el contenedor puede ser inmutable.
  • De lo contrario, comunícate con el propietario del proyecto en el que se encuentra el contenedor vulnerado.
  • Detén o borra el contenedor vulnerado y reemplázalo por un contenedor nuevo.

¿Qué sigue?