Controles de seguridad y análisis forense para apps de GKE

Last reviewed 2019-08-22 UTC

En este artículo, se detalla la instrumentación y las herramientas que se usan en el análisis forense de las apps implementadas en Google Kubernetes Engine (GKE).

La creación y el mantenimiento de un entorno seguro para el código, las apps y la infraestructura es una prioridad alta para cualquier organización. Si se produce un incidente de seguridad, es fundamental saber cómo investigarlo y responder ante él.

Google Cloud simplifica la protección de las apps de GKE, ya que proporciona funciones de seguridad avanzadas para proteger el clúster y el entorno de Google Cloud. Los registros de auditoría de Cloud proporcionan registros detallados que puedes usar en análisis forenses. En conjunto, las funciones y los registros de seguridad avanzados proporcionan una plataforma sólida que ayuda a proteger las apps de GKE de tu organización.

El objetivo de este artículo es ayudarte a proteger tu infraestructura de Google Cloud y el código basado en contenedores en GKE, y a prepararte para un incidente de seguridad.

Proteger tu entorno y prepararte para el análisis forense con Google Cloud requiere varios pasos fundamentales:

  • Proteger tu entorno de Google Cloud. Configura Google Cloud y, luego, implementa las cargas de trabajo mediante los controles y la configuración de seguridad adecuados.
  • Preparar un plan de respuesta ante incidentes. Planifica cómo responder ante un incidente de seguridad.
  • Recopilar todos los registros y fuentes de datos relevantes. Recopila los registros y los datos adecuados sobre el entorno de Google Cloud con anticipación y aprende cómo acceder a ellos.
  • Usar la detección de eventos automática. Configura el análisis proactivo para alertarte sobre posibles eventos de seguridad, opciones de configuración incorrectas y vulnerabilidades.
  • Usar herramientas de análisis para el análisis forense. Usa las herramientas de análisis para descubrir y documentar un incidente de seguridad.

Protege tu entorno de Google Cloud

Google Cloud proporciona una variedad de opciones de configuración y herramientas que puedes usar para proteger tu organización y tus proyectos de Google Cloud.

Modelo de responsabilidad compartida

La seguridad en la nube es una responsabilidad compartida entre el proveedor de servicios en la nube y el cliente. Google Cloud proporciona la encriptación en reposo de forma predeterminada y proporciona capacidades que puedes usar para proteger tus cargas de trabajo, como los controles de acceso de IAM y Cloud Audit Logging, a fin de proteger la infraestructura subyacente. Para GKE, Google Cloud ayuda a proteger el plano de control y los clientes son responsables de proteger las cargas de trabajo. Si deseas obtener un análisis más detallado del modelo de seguridad compartido, consulta la entrada de blog Explora la seguridad de los contenedores: el modelo de responsabilidad compartida en GKE.

Seguridad de GKE

Kubernetes y GKE proporcionan varios mecanismos para ayudar a proteger un clúster y sus cargas de trabajo. Si creas un entorno con acceso de mínimo privilegio y controles de seguridad adecuados, se reduce la superficie de ataque. En varias guías se proporciona información detallada sobre cómo proteger un clúster y sus cargas de trabajo:

Prepara un plan de respuesta ante incidentes

Una respuesta eficaz ante incidentes es fundamental a fin de administrar y recuperarse de incidentes, así como para evitar incidentes futuros. Si deseas obtener ideas sobre cómo crear o mejorar el plan de respuesta ante incidentes, consulta el plan de respuesta ante incidentes de Google Cloud.

Las siguientes fases proporcionan una vista de alto nivel del proceso:

  1. Identificación. La identificación temprana y exacta de incidentes es clave para lograr una administración de incidentes sólida y efectiva. El enfoque de esta fase está en la supervisión de los eventos de seguridad para detectar y denunciar los posibles incidentes de datos.
  2. Coordinación. Cuando se informa un incidente, el experto en respuestas de guardia revisa y evalúa la naturaleza del informe del incidente a fin de determinar si representa un posible incidente de datos y comienza el proceso de respuesta.
  3. Solución. En esta etapa, el enfoque está en investigar la causa raíz, limitar el impacto del incidente, resolver cualquier riesgo de seguridad inmediato, implementar las correcciones necesarias como parte de la solución y recuperar los sistemas, datos y servicios afectados.
  4. Mejora continua. Con cada incidente nuevo, obtienes estadísticas nuevas que pueden ayudarte a mejorar las herramientas, el entrenamiento y los procesos.

Sigue el plan y aprende cuándo llamar a los expertos

Antes de iniciar cualquier código en un clúster de producción, es fundamental comprender el modelo de seguridad de tu app y la infraestructura (incluido Google Cloud), y crear un plan de respuesta ante incidentes. En el plan, asegúrate de incluir una ruta de derivación que describa qué equipos deben participar en cada fase de la respuesta.

Por ejemplo, una respuesta ante un incidente podría comenzar con el equipo de operaciones que envía un posible incidente que, luego, se clasifica como un incidente de seguridad. El incidente se asigna a los miembros del equipo de seguridad correspondiente. El plan de respuesta ante incidentes define cuándo llamar a profesionales de seguridad externos y cómo involucrarlos. El desarrollo de un proceso como este es fundamental para preparar una respuesta ante incidentes eficaz.

Recopila todos los registros y fuentes de datos relevantes

Después de implementar los mecanismos de protección de seguridad necesarios para el entorno de Kubernetes y redactar un plan de respuesta ante incidentes, debes asegurarte de poder acceder a toda la información necesaria para el análisis forense. Debes comenzar por recopilar los registros en cuanto implementes una app o configures un proyecto de Google Cloud. Capturar los registros ayuda a garantizar que estén disponibles si los necesitas para el análisis. En general, algunas fuentes de datos son exclusivas de los entornos de Google Cloud; otras son comunes de los contenedores. Es fundamental conservar ambas fuentes y ponerlas a disposición para el análisis.

Los registros proporcionan un conjunto de datos enriquecido que permiten identificar eventos de seguridad específicos. Cada una de las siguientes fuentes del archivo de registro podría proporcionar detalles que se pueden usar en el análisis.

Registros de auditoría de Cloud

Los servicios de Google Cloud escriben registros de auditoría llamados registros de auditoría de Cloud. Estos registros te ayudan a responder las preguntas “¿Quién hizo qué, dónde y cuándo?”. Existen tres tipos de registros de auditoría para cada proyecto, carpeta y organización: actividad del administrador, acceso a los datos y eventos del sistema. Estos registros, en conjunto, te ayudan a comprender qué llamadas administrativas a la API se realizaron, a qué datos se accedió y qué eventos del sistema se produjeron. Esta información es fundamental para cualquier análisis. Para obtener una lista de los servicios de Google Cloud que proporcionan registros de auditoría, consulta Servicios de Google con registros de auditoría.

Los registros de auditoría de Cloud para GKE también exponen registros de auditoría de Kubernetes, que proporcionan un registro cronológico de las llamadas realizadas al servidor de la API de Kubernetes. Estos registros también se recopilan en los registros de auditoría de Cloud.

Registros de apps

Cloud Logging recopila tus registros de errores y de salida estándar del contenedor. Puedes agregar otros registros mediante el enfoque de sidecar. Para los clústeres con Istio y Cloud Logging habilitados, el adaptador stackdriver de Istio recopila y, luego, informa sobre los registros específicos de Istio a fin de enviarlos a Cloud Logging.

Registros de infraestructura

Los registros de infraestructura ofrecen estadísticas sobre las actividades y los eventos a nivel del SO, del clúster y de las redes.

Registros de auditoría de GKE

GKE envía dos tipos de registros de auditoría: los registros de auditoría de GKE y los registros de auditoría de Kubernetes. Kubernetes escribe registros de auditoría en los registros de auditoría de Cloud de las llamadas realizadas al servidor de la API de Kubernetes. Las entradas de registro de auditoría de Kubernetes son útiles a fin de investigar solicitudes sospechosas a la API, recopilar estadísticas y crear alertas de supervisión para llamadas no deseadas a la API. Además, GKE escribe sus propios registros de auditoría que identifican lo que ocurre en un clúster de GKE.

Registros de auditoría de Cloud de Compute Engine para nodos de GKE

GKE se ejecuta sobre los nodos de Compute Engine, que generan sus propios registros de auditoría. Además, puedes configurar auditd para capturar los registros del sistema Linux. auditd proporciona información valiosa, como mensajes de error, intentos de acceso y ejecuciones de objetos binarios para los nodos del clúster. Los registros de auditoría de Compute Engine y los registros de auditoría de auditd proporcionan estadísticas sobre las actividades que ocurren a nivel de la infraestructura del clúster subyacente.

Registros de contenedores

Para los registros del contenedor y del sistema, GKE implementa un agente de registros por nodo que lee los registros del contenedor, agrega metadatos útiles y, luego, almacena los registros. El agente de registros busca registros de contenedores en las siguientes fuentes:

  • Registros de salida y de error estándar de procesos en contenedores
  • Registros de entorno de ejecución de contenedores y kubelet
  • Registros para los componentes del sistema, como las secuencias de comandos de inicio de VM

Para los eventos, GKE usa una implementación en el espacio de nombres kube-system que recopila eventos de forma automática y los envía a Cloud Logging. Los registros se recopilan para los clústeres, los nodos, los Pods y los contenedores.

Istio en Google Kubernetes Engine

Para los clústeres con Istio, el adaptador stackdriver de Istio se instala durante la creación del clúster; este envía datos de métricas, registros y seguimiento de la malla a Google Cloud's operations suite.

Auditd para Container-Optimized OS en GKE

Para los sistemas Linux, el daemon auditd proporciona acceso a comandos a nivel del sistema del SO y puede proporcionar estadísticas valiosas sobre los eventos dentro de los contenedores. En GKE, puedes recopilar registros de auditd y enviarlos a Cloud Logging.

Registros de flujo de VPC

Los registros de flujo de VPC registran una muestra de flujos de red enviados y recibidos por instancias de VM. Esta información es útil para analizar la comunicación de red. Los registros de flujo de VPC incluyen todo el tráfico de Pod a Pod a través de la función Visibilidad dentro de los nodos en un clúster de Kubernetes.

Otros servicios de Google Cloud

Los servicios de Google Cloud generan registros de auditoría de Cloud; además, algunos servicios (como Cloud Load Balancing) generan registros adicionales. Después de habilitar un servicio, Cloud Logging comienza a generar registros. Para los registros de auditoría de Cloud, solo los registros de actividad del administrador están habilitados de forma predeterminada. Puedes habilitar los registros de auditoría para los otros servicios cuando esos servicios estén habilitados.

Instantáneas

Las instantáneas pueden ser útiles para analizar el contenido del almacenamiento en un punto determinado. Puedes tomar instantáneas del almacenamiento adjunto a un nodo del clúster de Google Kubernetes Engine y programarlas a intervalos regulares. Debido a que las instantáneas operan a nivel del nodo del clúster y los nodos del clúster pueden cambiar con el tiempo, debes automatizar la toma de instantáneas cada vez que se crea un nodo con almacenamiento nuevo. Tener una instantánea actualizada del almacenamiento del nodo ayuda a garantizar que tengas datos de almacenamiento disponibles para el análisis.

Usa la detección automática de eventos

La automatización, junto con las alertas, es clave para supervisar cualquier entorno a gran escala. Puedes usar las herramientas de Google Cloud y Kubernetes para identificar posibles amenazas y opciones de configuración incorrectas.

Security Command Center

Security Command Center es una plataforma de seguridad y riesgo para Google Cloud. Security Command Center puede facilitar la tarea de prevenir y detectar amenazas, además de responder a estas, mediante la recopilación de datos, la identificación de amenazas y la recomendación de acciones. Muchas herramientas de análisis de seguridad disponibles en Google Cloud brindan resultados a Security Command Center, lo que hace que esta plataforma sea útil para la detección automática. Security Command Center es una herramienta importante para tus equipos SecOps o DevSecOps.

Event Threat Detection

Event Threat Detection está diseñada para detectar de forma automática las amenazas más graves que enfrentan las organizaciones y publicar resultados en Security Command Center. Entre los ejemplos de amenazas, se incluyen la adición de cuentas de servicio y usuarios potencialmente maliciosos, las instancias de Compute Engine vulneradas y el tráfico de red malicioso. Event Threat Detection cuenta con la tecnología de inteligencia de amenazas de código abierto y de software propietario de Google, y funciona mediante la detección de amenazas en los registros disponibles en Cloud Logging.

Estadísticas del estado de la seguridad

Las estadísticas del estado de la seguridad son un servicio de Google Cloud que busca vulnerabilidades comunes y opciones de configuración incorrectas de forma automática en las ofertas de Google Cloud. Las estadísticas del estado de la seguridad pueden detectar vulnerabilidades relacionadas con los contenedores. Las vulnerabilidades incluyen la inhabilitación del registro o la supervisión, además de la habilitación del panel de la IU web en la administración de Kubernetes. Los resultados se escriben en Security Command Center.

Seguridad de Foresti

Forseti es un proyecto de código abierto que puede crear un inventario de los recursos de Google Cloud, analizar el entorno y establecer políticas para aplicar. Forseti está integrado y puede informar los hallazgos a Security Command Center. Puedes usar Forseti para verificar los valores de configuración arbitrarios en tus clústeres de GKE a fin de asegurarte de que sean coherentes con tus especificaciones. Si usas Anthos, puedes usar Anthos Config Management para definir opciones de configuración comunes, aplicarlas y supervisar el desvío de la configuración.

kube-hunter

kube-hunter analiza las debilidades de seguridad en los clústeres de Kubernetes mediante el análisis remoto, interno y de red. kube-hunter se puede usar en modo interactivo o como prueba de penetración remota automática para un clúster.

Usa herramientas de análisis para el análisis forense de contenedores

Muchas herramientas del ecosistema de Google Cloud y Kubernetes son útiles para el análisis forense. En esta sección, se incluyen tres herramientas de referencia.

Análisis de registros de Google Cloud mediante BigQuery

Los registros de auditoría de Cloud se pueden exportar a Cloud Storage, Pub/Sub o BigQuery para analizarlos en detalle. Por ejemplo, es posible que desees consultar todos los cambios de las reglas de firewall en tus proyectos de Google Cloud durante un período determinado. Para ello, puedes exportar los registros de auditoría de Cloud a BigQuery. Luego, con BigQuery, puedes construir una consulta de SQL para mostrar esa información.

Docker-explorer

Docker-explorer es un proyecto para ayudar a un analista forense a explorar sistemas de archivos de Docker sin conexión. Este enfoque puede ser útil cuando un contenedor de Docker está comprometido.

Kubectl Sysdig Capture + Sysdig Inspect

Kubectl Sysdig Capture es un complemento de código abierto de kubectl que activa una captura de la actividad del sistema en un Pod. Sysdig hace que la información del Pod esté disponible para Sysdig Inspect, una herramienta de código abierto que se usa a fin de realizar investigaciones de seguridad y solucionar problemas de contenedores. Sysdig Inspect organiza de manera visual la actividad detallada del sistema, de la red y de la app de un sistema Linux, y correlaciona las actividades dentro de un Pod.

¿Qué sigue?