Los 5 principales problemas de seguridad de la infraestructura como código
Raphael Mun
14 de julio de 2023
0 minutos de lecturaLa infraestructura como código (IaC) ha cambiado la forma en que implementamos y administramos nuestra infraestructura en la nube. En lugar de configurar manualmente servidores y redes con un gran equipo de operaciones, ahora podemos definir la arquitectura de nuestros servicios mediante código. La IaC nos permite automatizar la implementación de infraestructura, escalar toda nuestra flota de servidores, documentar el historial de cambios de nuestra arquitectura y probar cambios incrementales en la red. No es de extrañar que la IaC se haya convertido en la forma principal en que los equipos y las empresas configuran y administran sus servicios en la nube.
Sin embargo, aunque la IaC ofrece muchos beneficios, también conlleva problemas de seguridad. Veamos los 5 principales problemas de seguridad de la IaC y las prácticas recomendadas que podemos implementar para mitigarlos.
1. Errores de configuración en las plantillas de IaC
Uno de los principales problemas de seguridad de la IaC son los errores de configuración en las plantillas. El código y las dependencias de las plantillas de IaC pueden contener errores que podrían comprometer la infraestructura sin querer o brindarle a un atacante con conocimientos una forma de explotar el sistema.
Por ejemplo, supongamos que una plantilla de IaC incluye sin querer credenciales de nombre de usuario y contraseña codificadas directamente para una base de datos que contiene datos confidenciales de usuarios, como información financiera o información personal identificable (PII). Un atacante que obtenga acceso no autorizado a esta plantilla podría ver los datos y manipular la base de datos.
Del mismo modo, imagina una plantilla de IaC con una dirección IP codificada directamente para un servidor crítico. El servidor podría ser blanco de un ataque de denegación de servicio (DoS), y responder rápidamente y actualizar la infraestructura podría ser difícil. Es fundamental usar funciones de entrada parametrizadas o variables de entorno para separar las credenciales y la información confidencial del código de la plantilla.
Otro ejemplo es usar frameworks de IaC obsoletos o discontinuados y otras dependencias de terceros. Los atacantes pueden descubrir nuevas vulnerabilidades en versiones antiguas del código y aprovecharlas para explotar errores de configuración que de otro modo pasarían inadvertidos. El riesgo aumenta aún más cuando se comparten las mismas plantillas de IaC entre distintos entornos, ya que el impacto de un solo error de configuración puede ser mucho mayor. Es importante mantener y actualizar el código con regularidad y revisar cuidadosamente las dependencias de terceros para asegurarse de que estén actualizadas.
Para proteger aún más las plantillas de IaC, debemos implementar prácticas de programación segura. Esto incluye escribir código de IaC sólido, validar las entradas y los parámetros en las funciones, y usar frameworks de pruebas y control de versiones para validar y registrar los cambios en el código y resolver rápidamente los errores. También debemos verificar que la plantilla funcione correctamente durante la implementación y la eliminación para evitar costos inesperados por servicios que no se hayan eliminado correctamente.
2. Almacenamiento y transmisión inseguros de secretos
La administración de secretos es otro problema crítico de seguridad en la IaC. Las contraseñas y las claves de API suponen un riesgo si quedan expuestas. Los actores maliciosos también pueden usar otra información confidencial, como URL de webhook o direcciones IP, para enviar spam o denegar recursos y dejar fuera de servicio una red o un servicio.
Incluso el acceso de solo lectura a una plantilla de IaC puede brindarle a los atacantes información valiosa sobre la infraestructura y ayudarlos a identificar posibles errores de configuración. Esto facilita la planificación y ejecución de ataques dirigidos.
Por suerte, los frameworks de IaC y las plataformas en la nube nos permiten almacenar y usar estos secretos de forma segura. Por ejemplo, Terraform Cloud ofrece una función de administración de secretos para garantizar que estos valores confidenciales estén debidamente cifrados y almacenados. Además, los servicios en la nube suelen proporcionar secretos automáticamente —como claves de acceso y cadenas de conexión a bases de datos— en forma de variables de entorno, de modo que podemos reemplazarlos por nuestros propios valores al desarrollar de forma local.
3. Políticas de control de acceso mal configuradas y desviación de la configuración
El OWASP Top 10, un documento reconocido a nivel mundial sobre la seguridad de las aplicaciones web, considera que los controles de acceso insuficientes y los errores de configuración en la nube son problemas importantes.
Los hackers pueden aprovechar políticas de acceso demasiado permisivas para recursos como servidores y almacenamiento de datos en la nube, con el fin de ejecutar ataques u obtener información privada. Los buckets de AWS S3 mal configurados han provocado filtraciones de datos confidenciales, como credenciales, PII e información de tarjetas de crédito.
Los atacantes pueden aprovechar configuraciones como puertos de red abiertos, límites de velocidad sin restricciones o datos sin cifrar en tránsito o en reposo. Luego, pueden explotar estos errores de configuración para obtener acceso no autorizado, robar datos confidenciales o interrumpir servicios.
Los errores de configuración también pueden surgir de forma menos visible con el tiempo debido a la desviación de la configuración, que ocurre cuando los cambios en la infraestructura no se documentan ni se administran correctamente. Por ejemplo, puedes aplicar parches al sistema sin registrar los cambios, o los ingenieros pueden iniciar sesión para investigar problemas, hacer cambios manuales y olvidarse de revertirlos. Estas acciones pueden dificultar la identificación y la mitigación de posibles riesgos que no aparecen en la plantilla de IaC, lo que deja el sistema expuesto a amenazas.
Las plantillas de IaC ayudan a mitigar algunos de estos riesgos mediante la automatización y el control de versiones, pero no resuelven todos los problemas. Es frustrante esperar mucho tiempo a que se implemente una plantilla de IaC para descubrir que falló debido a un error de permisos, así que podría resultar tentador usar una política de acceso total para solucionarlo. Sin embargo, este atajo genera errores de configuración que se podrían evitar.
Para garantizar un control de acceso adecuado, sigue siempre el principio de privilegio mínimo (PoLP) y limita los permisos tanto como sea posible. Otorga acceso solo cuando sea necesario mediante políticas de control definidas de forma estricta, claves con rotación automática y roles de acceso temporal.
Las herramientas de auditoría de seguridad, como Snyk Infrastructure as Code y Snyk Container, también pueden ayudar a analizar y monitorear la infraestructura, automatizar el proceso y facilitar el mantenimiento de configuraciones y políticas de acceso seguras.
4. Archivos de estado inseguros
Como la mayoría de los frameworks de IaC generan archivos de estado para registrar el estado actual de la infraestructura implementada, es fundamental mantenerlos protegidos y sincronizados con el estado real de la nube. Los archivos de estado en texto sin formato pueden contener información detallada sobre la seguridad de los recursos en la nube, y la única forma de proteger esta información es cifrar el archivo de estado y proteger el acceso a él.
Si perdemos este archivo de estado, dejamos de tener un registro del estado de la infraestructura implementada mediante las plantillas o el código de IaC. Para recuperarnos de esa pérdida, tendríamos que importar manualmente los recursos existentes de la nube al archivo de estado persistente, a fin de que la administración futura de IaC no se vea afectada.
Si la IaC se administra mediante una canalización de CI/CD automatizada, perder el archivo de estado podría provocar la eliminación o creación de recursos y causar interrupciones del sistema o pérdida de datos. Del mismo modo, un archivo de estado dañado o desincronizado puede convertirse rápidamente en un problema al asignar recursos manualmente y reconstruir todo.
Podemos evitar esta situación con algunas precauciones sencillas:
Almacena el archivo de estado de forma remota en la nube para compartirlo y respaldarlo fácilmente.
Activa el control de versiones para recuperarlo si el archivo se daña.
Usa un mecanismo de bloqueo de archivos para que solo una persona pueda implementar y modificar el archivo de estado a la vez.
Cifra el archivo al almacenarlo para que un atacante no pueda descifrarlo aunque obtenga acceso.
Limita el acceso de los usuarios al archivo de estado para que solo el equipo pueda acceder a él. Aunque los secretos se almacenen de forma segura y se mantengan fuera de las plantillas de IaC, los archivos de estado pueden contenerlos en texto sin formato. Por eso, es fundamental cifrar estos archivos y limitar el acceso para evitar que se filtren secretos.
5. Falta de pruebas y validación
Las plantillas de IaC que no se prueban ni validan a fondo pueden dar lugar a implementaciones inseguras o errores de configuración, lo que permite que los atacantes comprometan la infraestructura.
Si incorporamos las pruebas y la validación como parte integral de nuestro flujo de trabajo de desarrollo de IaC, podremos identificar, mitigar y minimizar los riesgos desde las primeras etapas del proceso y proteger nuestra infraestructura de forma proactiva.
Al probar y validar la IaC, considera las siguientes preguntas:
¿Se implementó correctamente la plantilla de IaC?
¿Los controles de acceso y las configuraciones coinciden con el código?
¿Los recursos están correctamente asignados y referenciados?
¿Se monitorea y registra correctamente la actividad del servidor?
¿La infraestructura puede soportar el volumen de tráfico requerido?
Las prácticas recomendadas para probar y validar la IaC siguen los mismos principios generales que se aplican a todo el código. Implementa un proceso de revisión de código en el equipo. Prueba el código en un entorno de pruebas antes de implementarlo en producción. Usa herramientas de análisis estático para detectar errores de sintaxis y formato, y escribe pruebas unitarias; por ejemplo, para verificar los nombres o identificadores de los recursos. Analiza el código de IaC de alto nivel de herramientas como Pulumi con herramientas automatizadas de pruebas estáticas de seguridad de aplicaciones (SAST), como Snyk Code.
En definitiva, la mejor forma de desarrollar, probar y validar IaC de manera segura es integrar la seguridad en el proceso de desarrollo. Una forma de hacerlo es con Snyk Infrastructure as Code, una herramienta especializada para mejorar las pruebas y la validación de IaC. Se integra sin problemas con las herramientas y los flujos de trabajo de desarrollo, lo que permite desarrollar IaC de forma segura, continua y en tiempo real.
Snyk Infrastructure as Code analiza el código para detectar posibles errores de configuración o incumplimientos de políticas, y ofrece información útil y recomendaciones para resolver los problemas encontrados. Podemos aprovechar esta información para mejorar la postura de seguridad general de nuestra IaC y garantizar su cumplimiento.
Conclusión
En este artículo analizamos cinco problemas de seguridad que pueden surgir al usar IaC. También aprendimos a abordarlos, por ejemplo, siguiendo el principio de privilegio mínimo, aplicando prácticas de programación segura e integrando herramientas de seguridad en el proceso.
No se puede exagerar la importancia de implementar prácticas recomendadas para proteger la IaC, especialmente si tenemos en cuenta las posibles consecuencias de una IaC insegura. Si ignoramos problemas como las credenciales codificadas directamente, la administración inadecuada de secretos y la desviación de la configuración, corremos el riesgo de perder los beneficios de la IaC y exponernos a filtraciones de datos, accesos no autorizados e interrupciones de servicios críticos.
Al integrar de forma proactiva la seguridad en el proceso de desarrollo de IaC y aplicar las prácticas recomendadas, podemos mitigar los riesgos de manera eficaz, proteger nuestra infraestructura y resguardar nuestros negocios y clientes.
Protege la infraestructura desde el origen
Snyk automatiza la seguridad y el cumplimiento de IaC en los flujos de trabajo, y detecta recursos con desviaciones de configuración y recursos faltantes.
