/ ¿Qué es la seguridad de IaC?
¿Qué es la seguridad de IaC?
La seguridad de la infraestructura como código (IaC) es la incorporación de una cobertura de seguridad uniforme y escalable en la nube que ayuda a detectar configuraciones erróneas en el código en una fase temprana del ciclo de vida de desarrollo del software para evitar vulnerabilidades en tiempo de ejecución. Permite a las organizaciones aplicar medidas de seguridad en las plantillas de infraestructura como código (IaC) a lo largo de todo su ciclo de vida, ya sea en los repositorios de código, en las herramientas de integración y entrega continuas (CI/CD), o incluso desde el entorno de desarrollo del programador (IDE).
¿Por qué es importante la seguridad de la infraestructura como código?
Los requisitos empresariales y la adopción de DevOps están haciendo que las aplicaciones se suministren e implementen más rápido que nunca. Esta tendencia puede tener un efecto negativo tanto en el ámbito del cumplimiento como en el de la seguridad, donde las normativas y las ciberamenazas evolucionan constantemente.
Cuando los desarrolladores desconocen los requisitos de cumplimiento (o estos requisitos son inaccesibles), se pueden introducir vulnerabilidades en el entorno de producción. Las organizaciones deben combatir esta situación salvando las distancias entre los equipos de seguridad y DevOps, ya que la responsabilidad y la obligación de rendir cuentas en materia de seguridad se desplaza rápidamente hacia los ingenieros de DevOps.
El problema se deriva de la dependencia de procesos manuales y herramientas aisladas que no pueden seguir el ritmo de la velocidad de desarrollo y los ciclos de lanzamiento continuos. Tiene que ofrecer a sus desarrolladores una plataforma de colaboración sin fisuras que les permita identificar y solucionar rápidamente los problemas para que puedan aplicar políticas de seguridad y de cumplimiento uniformes, sin sacrificar la velocidad.
La seguridad de la IaC debe:
- Escanear el código en busca de errores de configuración, vulnerabilidades e implementaciones inseguras que violen los estándares de seguridad
- Comparar las comprobaciones de configuración con las mejores prácticas de seguridad y los controles de cumplimiento
- Alertar y guiar a los desarrolladores/ingenieros sobre la corrección y las implementaciones seguras
- Aplicar barreras de seguridad rechazando solicitudes de extracción y compilaciones de CI/CD que contengan vulnerabilidades críticas, directamente dentro de las herramientas que utilizan, y bloqueando posibles violaciones cuando sea pertinente.
Antes de profundizar en la importancia de la seguridad IaC, echemos un vistazo a qué es exactamente IaC y por qué es importante para las operaciones modernas.
¿Qué es la infraestructura como código?
La infraestructura como código (IaC) es un código descriptivo, comúnmente escrito en lenguajes de marcado (JSON, YAML, etc.) o propietarios (por ejemplo, Terraform HCL), utilizado para el aprovisionamiento y la gestión de las configuraciones de los recursos de la infraestructura en nube. La infraestructura como código proporciona una mayor productividad y agilidad, reduce los errores humanos, ofrece estandarización para la implementación y mantiene el control de versiones de la configuración de la infraestructura.
Las herramientas de IaC se presentan de muchas maneras: desde plataformas dedicadas a la gestión de infraestructuras hasta herramientas de gestión de la configuración o de código abierto, hay una gran variedad de opciones disponibles. Algunas de las opciones más populares son HashiCorp Terraform, AWS CloudFormation y Azure Resource Manager.
Beneficios de la IaC
La IaC presenta una serie de ventajas que se centran principalmente en la flexibilidad y la rapidez. Le permite:
- Aprovisionar y administrar recursos en la nube de manera rápida y sencilla
- Automatiza los procesos de implementación codificando la infraestructura de la nube
- Escalar la infraestructura en virtud de la nube
Estas ventajas eliminan la necesidad de realizar una configuración manual que requiere mucho tiempo y reducen el riesgo de error humano. Además, permiten que los ingenieros implementen el control de versiones, lo que permite a los equipos de DevOps (veamos esto con un poco más de detalle).
¿Por qué es importante la IaC para DevOps?
IaC permite a los equipos de TI administrar y aprovisionar centros de datos a través de archivos escritos. Esto no solo reduce el costo de crear y ejecutar aplicaciones, sino que también facilita el intercambio de datos entre equipos, así como la automatización de la escritura de scripts, aligerando así la carga de los equipos de DevOps cuando tienen la tarea de crear aplicaciones en la nube.
Además, la IaC permite a los equipos de DevOps aprovisionar y ejecutar una multitud de entornos de prueba, y permite a los desarrolladores ser más diversos en el uso del lenguaje si es necesario. Con esta flexibilidad adicional, estos equipos pueden concentrarse en crear, probar y ejecutar aplicaciones de alta calidad en menos tiempo y a un menor costo.
Sin embargo, por la misma razón, la IaC también puede hacer que la infraestructura sea más vulnerable.
¿Qué riesgos de seguridad están asociados con la IaC?
La IaC ofrece beneficios operativos, como el aprovisionamiento rápido de infraestructura de TI con un enfoque declarativo en lugar de un enfoque imperativo. Sin embargo, su impacto en la seguridad presenta un desafío importante debido a su potencial impacto sobre los recursos.
Si se configura erróneamente un único recurso de manera manual, el alcance del error se limita únicamente a ese recurso, pero cometer un error en un código que puede utilizarse para aprovisionar automáticamente 100 o más recursos supone un riesgo de seguridad mucho mayor.
Lograr una seguridad IaC integral es un desafío para las organizaciones. Puede traer muchos beneficios, pero también puede crear vulnerabilidades peligrosas.
Cinco riesgos de la IaC
La infraestructura como código puede dejar a su organización en riesgo de:
- Una amplia superficie de ataque: las configuraciones erróneas de IaC pueden ampliar la superficie de ataque (por ejemplo, configuraciones erróneas del grupo de seguridad que dejan activos expuestos inadvertidamente a Internet).
- Exposición de datos: las plantillas de IaC podrían contener vulnerabilidades y configuraciones predeterminadas inseguras que podrían provocar la exposición de datos (por ejemplo, secretos integrados en el código de Terraform que se verifica en el control de origen).
- Privilegios excesivos: los desarrolladores suelen usar cuentas privilegiadas para aprovisionar aplicaciones en la nube y los recursos de infraestructura subyacentes, lo que puede generar acceso no autorizado a datos confidenciales o una posible violación.
- Violaciones de cumplimiento: las organizaciones deben cumplir con una serie de estándares regulatorios, como GDPR, HIPAA, PCI DSS y SOC2. Si las políticas de protección basadas en estos estándares no se aplican en el proceso de IaC, pueden producirse fallas de cumplimiento.
- Fricción en equipos multifuncionales: los desarrolladores están acelerando la implementación para ofrecer productos de calidad con plazos ajustados. Por otro lado, sus contrapartes en materia de seguridad tienen poca visibilidad del código y poco control sobre los cambios realizados. Por ello, aplicar las directrices de seguridad, ya sean basadas en el cumplimiento de la normativa, en las mejores prácticas o en la política de la empresa, se convierte en un verdadero desafío si no se tiende un puente entre DevOps y SecOps.
¿Cómo funciona la seguridad IaC?
La seguridad de IaC aplica controles desde las primeras etapas del desarrollo. Es decir, los desarrolladores e ingenieros de DevOps reciben comentarios de seguridad sobre su código en una etapa anterior del proceso. La seguridad de IaC brinda a los desarrolladores dicha visibilidad mediante:
- Escaneo de plantillas IaC antes de enviarlas al control de código fuente
- Configuraciones de evaluación comparativa
- Identificación de configuraciones erróneas, vulnerabilidades y violaciones de políticas
Con estos procesos en marcha, los equipos de SecOps son notificados rápidamente de cualquier problema que deba solucionarse antes de que se implemente una aplicación.
Mejores prácticas para la seguridad de IaC
A continuación se presentan algunas de las mejores prácticas de seguridad para IaC que se pueden integrar fácilmente en el ciclo de vida del desarrollo:
Obtener visibilidad del inventario de activos
Durante las operaciones de IaC, debe identificar, etiquetar, supervisar y mantener un inventario de los activos implementados. Los recursos no etiquetados deben ser supervisados cuidadosamente, ya que son difíciles de rastrear y provocan desviaciones. Siempre que se retiren los recursos, deberá borrarse su configuración asociada y los datos deberán asegurarse o borrarse también.
Identificar y corregir la deriva ambiental
Lo ideal es que las configuraciones en todos los entornos de los desarrolladores sean uniformes. Pero a veces los propietarios de aplicaciones necesitan realizar modificaciones en sus aplicaciones y en la infraestructura subyacente. Sin una supervisión o herramientas adecuadas, la acumulación descontrolada de estos factores provoca una desviación de la configuración que puede dejar la infraestructura expuesta y crear brechas en la seguridad y el cumplimiento.
Asegurar los activos codificados
Los datos confidenciales como las claves secretas, las claves privadas, las claves SSH, las claves de acceso/secretas y las claves API codificadas en IaC pueden facilitar el acceso a los servicios u operaciones subyacentes y ayudar a los atacantes a moverse lateralmente. La propagación de credenciales expuestas a través del código IaC, que está comprometido en el control de código fuente (ej., GitHub), puede suponer un gran riesgo para las organizaciones.
Asegurar las cuentas de los desarrolladores
Las cuentas de los desarrolladores deben estar protegidas contra los atacantes. Es importante fortalecer y supervisar las cuentas de los desarrolladores, realizar un seguimiento de los cambios en las configuraciones de IaC y verificar que los cambios son sancionados e intencionados. Los cambios no autorizados pueden provocar una manipulación de la plantilla de IaC o de la configuración que puede dar lugar a una fuga de código.
Restringir el acceso a los entornos
Los equipos de seguridad necesitan disponer de un único punto de control que permita una gestión uniforme de las cuentas privilegiadas, las credenciales y los secretos en cada uno de los entornos de desarrollo y computación. Les permite gobernar el uso actual y futuro de credenciales privilegiadas, detectar problemas de configuración de acceso con el contexto necesario, dimensionar correctamente el acceso y los permisos de identidad y aplicar de manera uniforme la política de privilegios mínimos.
Aplique barreras de protección
Los equipos de seguridad deben implementar barreras de protección de políticas nativas de la nube que incorporen comprobaciones para proteger las infraestructuras de nubes múltiples de los desvíos de configuración y alertar de las violaciones, aplicar políticas de seguridad uniformes durante la construcción y el tiempo de ejecución, y ofrecer una orientación clara a los desarrolladores sobre cómo resolver las vulnerabilidades y los riesgos. Por ejemplo, se puede buscar que la construcción CI/CD falle, en caso de que no se haya alcanzado un determinado umbral de seguridad.
Algo hemos dejado claro: la IaC puede beneficiar enormemente a su organización, pero conlleva riesgos de seguridad que no puede ignorar. Para aprovechar al máximo la IaC, necesita un socio de ciberseguridad que haya creado una solución pensando en DevSecOps, que domine la protección de datos en la nube y, sobre todo, que le ayude a aprovechar al máximo su inversión en IaC. Ese socio es Zscaler.
¿Cómo puede ayudar el control de la postura?
Posture Control es una plataforma de protección de aplicaciones nativa de la nube (CNAPP) diseñada para ayudar a sus equipos de desarrollo y seguridad a trabajar juntos para construir un programa de seguridad de infraestructura como código (IaC) integral desde cero.
Capacidades clave
Visibilidad y control
- Identifique problemas y visualice las posturas de seguridad y cumplimiento de su repositorio de código.
- Investigue y solucione fácilmente las violaciones por categoría, gravedad de la política, controles de cumplimiento, etiquetas y estado.
- Obtenga visibilidad detallada sobre la violación de código, el repositorio, la solicitud de extracción, la compilación de CI/CD y otra información clave para rastrear el problema hasta su origen.
Evaluación continua
- Busca continuamente plantillas de IaC (ej., Terraform HCL, plantillas de AWS CloudFormation, archivos YAML de manifiesto de aplicaciones de Kubernetes y gráficos de Helm) a medida que se actualiza o se introduce el código en los repositorios de código y se activan las compilaciones en los sistemas CI/Cd.
- Analice el código en busca de violaciones de las políticas de seguridad lo antes posible (IDE para desarrolladores) para proporcionar al desarrollador información inmediata.
- Evalúe las plantillas IaC en busca de problemas de seguridad, incumplimientos y otras configuraciones erróneas o inseguras por defecto (ej., falta de cifrado, seguimiento de identidades y credenciales) para permisos excesivos, recursos expuestos públicamente como cargas de trabajo, buckets de almacenamiento, roles de grupos de seguridad débiles, etc.
- Compare continuamente la configuración observada con el estado deseado para informar, notificar y remediar la deriva inesperada de la configuración.
- Escanee el código comprometido en los repositorios de código y suspenda la compilación en los sistemas CI/CD cuando se identifiquen vulnerabilidades críticas
Productividad mejorada
- Mejore la experiencia de los desarrolladores mediante la identificación de problemas con el contexto adecuado, orientación de seguridad integrada y recomendaciones para resolver problemas/asuntos de manera nativa en sus herramientas de ecosistemas DevOps como IDE, repositorios de código y sistemas CI/CD.
- Automatice la seguridad de IaC e incorpórela a los procesos existentes para reducir la fricción entre los desarrolladores y los miembros de los equipos de seguridad, operaciones y cumplimiento (una práctica recomendada de DevSecOps).
Alerta de datos
- Integre con herramientas de emisión de tickets para generar alertas casi en tiempo real, lo que le permitirá notificar y alertar a los propietarios y equipos adecuados con el contexto necesario sobre los problemas, el impacto y las acciones necesarias para solucionar un problema.