Los vectores de ataque para las cadenas de suministro de software son las diversas formas en que alguien puede comprometer tu software de forma intencional o accidental.
Entre los riesgos del software vulnerable, se incluyen la filtración de credenciales o datos confidenciales, el daño de datos, la instalación de software malicioso y las interrupciones de la aplicación. Estos problemas generan pérdidas de tiempo, dinero y confianza del cliente.
Los puntos de entrada para las amenazas abarcan todo el ciclo de vida del software y pueden originarse dentro o fuera de tu organización.
La leyenda del diagrama incluye dos conjuntos de amenazas:
- Las letras A a H indican vectores de ataque en la cadena de suministro de software que se describen como amenazas en el framework de Niveles de cadena de suministro para artefactos de software (SLSA).
- Los números 1 a 4 indican vectores de ataque adicionales que el framework de SLSA no describe directamente.
Google Cloud proporciona un conjunto modular de capacidades y herramientas que incorporan prácticas recomendadas para mitigar ambos conjuntos de amenazas.
En las siguientes subsecciones de este documento, se describen las amenazas en el contexto de la fuente, las compilaciones, la implementación y las dependencias.
- Amenazas de origen
- Amenazas de compilación
- Amenazas de implementación y tiempo de ejecución
- Amenazas de dependencias
Amenazas de origen
Estas amenazas afectan la integridad de tu código fuente.
1: Escribe código inseguro. La falta de prácticas de codificación segura puede llevar a escribir código que incluya vulnerabilidades de forma involuntaria. Las estaciones de trabajo de desarrolladores inseguras también pueden introducir código malicioso o inseguro. Entre las mitigaciones, se incluyen las siguientes:
- Establecer políticas para las estaciones de trabajo de desarrolladores Cloud Workstations proporciona estaciones de trabajo preconfiguradas y completamente administradas que puedes personalizar para que se adapten a tus requisitos.
- Análisis local del código Cloud Code source protect (vista previa privada) proporciona comentarios de seguridad en tiempo real, incluida información sobre vulnerabilidades y licencias para las dependencias. Los desarrolladores también pueden usar la API de On-Demand Scanning para analizar imágenes de contenedor en busca de vulnerabilidades de paquetes de SO y de idiomas.
- Educación sobre prácticas para que el código sea más seguro.
A: Envía un código incorrecto al repositorio de código fuente. Esto no solo incluye código malicioso, sino también código que introduce vulnerabilidades de forma involuntaria en un ataque, como secuencias de comandos entre sitios. Entre las mitigaciones, se incluyen las siguientes:
- Requerir una revisión humana para los cambios en el código fuente
- Usar herramientas de análisis de código y linting que se integren con IDE y sistemas de control de origen
B: Compromete el sistema de control de origen. Restringir el acceso al sistema de control de origen y a otros sistemas en tu canalización de compilación, y usar la autenticación de múltiples factores ayuda a mitigar este riesgo.
Cuando evalúes la integridad de la fuente, también examina las secuencias de comandos y las configuraciones de asistencia que usas para compilar e implementar tu software. Inclúyelos en tu sistema de control de origen y en los procesos de revisión de código para que puedas reducir el riesgo de vulnerabilidades en estos archivos.
Consulta Protege la fuente para obtener más información sobre cómo proteger tu fuente.
Amenazas de compilación
Estas amenazas comprometen tu software cuando lo compilas o empaquetas, o engañan a los consumidores de tu software para que usen una versión incorrecta.
- C: Compila con una fuente que no proviene del sistema de control de origen de confianza.
Entre las mitigaciones que ayudan a reducir este riesgo, se incluyen las siguientes:
- Usar servicios de compilación, como Cloud Build, que generan información de procedencia para que puedas validar que tus compilaciones usen una fuente de confianza.
- Colocar tu infraestructura de CI/CD en un perímetro de red para evitar la filtración de datos de tus compilaciones Para los Google Cloud servicios, usa los Controles del servicio de VPC.
- Almacenar y usar copias de confianza de las dependencias de código abierto que necesitas en un almacén de artefactos privado, como Artifact Registry.
- D: Compromete el sistema de compilación. Entre las mitigaciones que ayudan a reducir este riesgo, se incluyen las siguientes:
- Sigue el principio de privilegio mínimo restringiendo el acceso directo al sistema de compilación a las personas que lo requieran. En Google Cloud puedes otorgar roles predefinidos adecuados o crear roles personalizados.
- Usa servicios de compilación administrados, como Cloud Build. Cloud Build ejecuta compilaciones efímeras configurando un entorno de VM para cada compilación y destruyéndolo después de la compilación.
- Coloca tu infraestructura de CI/CD en un perímetro de red para evitar la filtración de datos de tus compilaciones. Para los Google Cloud servicios, usa los Controles del servicio de VPC.
- F: Empaqueta y publica software que se compiló fuera del proceso oficial. Los sistemas de compilación que generan y firman la procedencia de la compilación te permiten validar que tu software se compiló con un sistema de compilación de confianza.
- G: Compromete el repositorio en el que almacenas tu software para tus usuarios
internos o externos. Entre las mitigaciones que ayudan a reducir este riesgo, se incluyen las siguientes:
- Almacenar y usar copias de confianza de las dependencias de código abierto que necesitas en almacenes de artefactos privados, como Artifact Registry.
- Validar la procedencia de la compilación y la fuente
- Restringir los permisos de carga a cuentas no humanas dedicadas y administradores de repositorios En Google Cloud, las cuentas de servicio actúan en nombre de los servicios y las aplicaciones.
Amenazas de Deployment y tiempo de ejecución
H: Resolver dependencias especificando un rango de versiones o una etiqueta que no esté conectada de forma permanente a una versión de compilación específica puede generar varios problemas:
- Las compilaciones no son reproducibles porque las dependencias que usa una compilación la primera vez pueden ser diferentes de las dependencias que usa la compilación para ejecuciones futuras de la misma compilación.
- Una dependencia puede resolverse en una versión comprometida o en una versión con cambios que interrumpan tu software. Los agentes maliciosos pueden aprovechar esta incertidumbre para hacer que tu compilación elija su versión de un paquete en lugar de la versión que querías usar. Varias prácticas recomendadas para las dependencias pueden ayudar a mitigar los riesgos de confusión de dependencias.
2: Compromete el proceso de implementación. Si usas un proceso de implementación continua, comprometer ese proceso puede introducir cambios no deseados en el software que entregas a tus usuarios. Puedes mitigar el riesgo restringiendo el acceso a tu servicio de implementación y probando los cambios en entornos de preproducción. Cloud Deploy puede ayudarte a administrar el proceso de entrega continua y la promoción entre entornos.
3: Implementa software comprometido o que no cumple con los requisitos. Aplicar políticas de implementación puede ayudar a mitigar este riesgo. Puedes usar la Autorización binaria para validar que las imágenes de contenedor cumplan con los criterios de la política y bloquear la implementación de imágenes de contenedor de fuentes no confiables.
4: Vulnerabilidades y errores de configuración en el software en ejecución.
- Se descubren vulnerabilidades nuevas con regularidad, lo que significa que los nuevos hallazgos pueden cambiar el nivel de riesgo de seguridad de tus aplicaciones en producción.
- Algunas configuraciones aumentan el riesgo de acceso no autorizado, como ejecutar como usuario raíz o permitir la elevación de privilegios en la ejecución de un contenedor.
El panel de postura de seguridad de GKE muestra información sobre vulnerabilidades y problemas de configuración en tus cargas de trabajo en ejecución.
En Cloud Run, también puedes ver estadísticas de seguridad sobre tus revisiones implementadas, incluidas las vulnerabilidades conocidas en las imágenes de contenedor que implementaste.
Consulta Protege las compilaciones para obtener más información sobre cómo proteger tu fuente y Protege las implementaciones para obtener información sobre proteger las implementaciones.
Amenazas de dependencias
Las dependencias incluyen dependencias directas en tus compilaciones, así como todas las dependencias transitivas, el árbol recursivo de dependencias que se encuentran en sentido descendente de tus dependencias directas.
En el diagrama, E indica el uso de una dependencia incorrecta en tu compilación. Una dependencia incorrecta puede incluir lo siguiente:
- Cualquier software del que dependa tu aplicación, incluidos los componentes que desarrollas de forma interna, el software comercial de terceros y el software de código abierto
- Vulnerabilidades que se originan en cualquiera de los otros vectores de ataque Por ejemplo:
- Un atacante obtiene acceso a tu sistema de control de origen y modifica la versión de una dependencia que usa tu proyecto.
- Tu compilación incluye un componente desarrollado por otro equipo de tu organización. Compilan y publican el componente directamente desde sus entornos de desarrollo locales y, por accidente, introducen una vulnerabilidad en una biblioteca que solo usan de forma local para pruebas y depuración.
- Eliminación intencional de una dependencia de código abierto de un repositorio público La eliminación puede provocar que se interrumpan las canalizaciones de consumo si recuperan la dependencia directamente del repositorio público.
Consulta las prácticas recomendadas para las dependencias para obtener información sobre las formas de mitigar los riesgos.
Cómo mitigar las amenazas
La integridad general de tu cadena de suministro es tan fuerte como su parte más vulnerable. Si no tienes en cuenta un vector de ataque, aumenta el riesgo de ataque en esa parte de tu cadena de suministro.
Al mismo tiempo, no es necesario que cambies todo a la vez. El efecto acumulativo, más conocido como el modelo de queso suizo, se aplica a la seguridad de la cadena de suministro de software. Cada mitigación que implementas reduce tu riesgo y, cuando combinas mitigaciones en toda la cadena de suministro, aumentas la protección contra diferentes tipos de ataques.
- Evalúa tu postura de seguridad con frameworks y herramientas que te ayuden a evaluar la capacidad de tu organización para detectar, responder y solucionar amenazas.
- Obtén información sobre las prácticas recomendadas para proteger tu cadena de suministro de software, y Google Cloud los productos diseñados para admitir esas prácticas.
- Incorpora Google Cloud funciones de seguridad a tus procesos de desarrollo, compilación, e implementación para mejorar la postura de seguridad de tu software cadena de suministro de software. Puedes implementar servicios de forma gradual, según tus prioridades y la infraestructura existente.
¿Qué sigue?
- Evalúa tu postura de seguridad.
- Obtén información sobre las prácticas recomendadas para proteger tu cadena de suministro de software.