Amenazas en la cadena de suministro de software

Los vectores de ataque para las cadenas de suministro de software son las diversas formas en las que alguien puede comprometer tu software de forma intencional o accidental.

Los riesgos del software vulnerable incluyen la filtración de credenciales o datos confidenciales, la corrupción de los datos, la instalación de software malicioso y las interrupciones de la aplicación. Estos problemas generan la pérdida de tiempo, dinero y confianza del cliente.

Los puntos de entrada de las amenazas abarcan todo el ciclo de vida del software y pueden originarse dentro o fuera de tu organización.

Diagrama que muestra los puntos de entrada para los ataques a la cadena de suministro de software

En la leyenda del diagrama, se incluyen dos conjuntos de amenazas:

Software Delivery Shield, una solución de seguridad de la cadena de suministro de software completamente administrada en Google Cloud, incorpora prácticas recomendadas para ayudarte a mitigar ambos conjuntos de amenazas.

En las 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

Estas amenazas afectan la integridad de tu código fuente.

  • 1: Escribe código no seguro. La falta de prácticas de codificación seguras puede hacer que escribir código incluya vulnerabilidades de manera no intencional. Las estaciones de trabajo para desarrolladores no seguras también pueden introducir código malicioso o no seguro. Las mitigaciones incluyen lo siguiente:

    • Configura políticas para estaciones de trabajo para desarrolladores. Cloud Workstations proporciona estaciones de trabajo completamente administradas y preconfiguradas que puedes personalizar para alinearlas con tus requisitos.
    • Escaneo local del código Cloud Code source protect (versión preliminar privada) proporciona comentarios de seguridad en tiempo real, incluida la información de vulnerabilidad y licencia 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 SO y de paquetes de lenguajes.
    • Educación sobre las prácticas para hacer que el código sea más seguro
  • A: Enviar 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 manera no intencional a un ataque como la secuencia de comandos entre sitios. Las mitigaciones incluyen lo siguiente:

    • Requiere revisión manual de cambios en el código fuente.
    • Uso de herramientas de análisis con lint y análisis de código que se integran con IDE y sistemas de control de origen.
  • B: Comprometer el sistema de control del código fuente. Restringir el acceso al sistema de control de origen y a otros sistemas en la canalización de compilación y el uso de la autenticación de varios factores ayuda a mitigar este riesgo.

Cuando evalúes la integridad de la fuente, también examina las secuencias de comandos y la configuración compatibles que usas para compilar y, luego, implementar el software. Inclúyelos en el sistema de control del código fuente y en los procesos de revisión de código para correr el riesgo de vulnerabilidades en estos archivos.

Consulta Fuente de protección a fin de obtener más información para proteger tu fuente.

Crear amenazas

Estas amenazas comprometen el software cuando lo compilas o empaquetas, o engañan a los consumidores para que usen una versión no válida.

  • C: Compilar con una fuente que no sea del sistema de control de fuente confiable Las mitigaciones que ayudan a reducir este riesgo incluyen las siguientes:
    • Usar servicios de compilación, como Cloud Build, que generan información de origen para que puedas validar que tus compilaciones usen una fuente confiable
    • Ubicar la infraestructura de CI/CD en un perímetro de red para evitar el robo de datos de las compilaciones Para los servicios de Google Cloud, 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: Comprometer el sistema de compilación Las mitigaciones que ayudan a reducir este riesgo incluyen las siguientes:
    • Sigue el principio de privilegio mínimo, ya que restringe el acceso directo al sistema de compilación a las personas que lo necesiten. En Google Cloud, puedes otorgar funciones predefinidas adecuadas o crear funciones personalizadas.
    • Usar servicios de compilación administrados, como Cloud Build Cloud Build ejecuta compilaciones de compilaciones efímeras mediante la configuración de un entorno de VM para cada compilación y su destrucción después.
    • Coloca la infraestructura de CI/CD en un perímetro de red para evitar el robo de datos de tus compilaciones. Para los servicios de Google Cloud, usa los Controles del servicio de VPC.
  • F: Empaquetar y publicar 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ó mediante un sistema de compilación confiable.
  • G: Compromete el repositorio en el que almacenas el software para tus usuarios internos o externos. Las mitigaciones que ayudan a reducir este riesgo incluyen las siguientes:
    • 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
    • Validar la compilación y la procedencia de la fuente
    • Restringir los permisos de carga a cuentas dedicadas no humanas 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 entorno de ejecución

  • H: Resolver dependencias con la especificación de 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, como los siguientes:

    • Las compilaciones no son reproducibles porque las dependencias que una compilación usa la primera vez pueden ser diferentes de las dependencias que la compilación usa para ejecuciones futuras de la misma compilación.
    • Una dependencia puede resolverse en una versión comprometida o con una versión con cambios que dañan tu software. Las entidades que actúan de mala fe pueden aprovechar esta incertidumbre para hacer que tu compilación elija la versión de un paquete en lugar de la versión que pretendías usar. Una serie de prácticas recomendadas para las dependencias pueden ayudar a mitigar los riesgos de confusión en las dependencias.
  • 2: Comprometa el proceso de implementación. Si usas un proceso de implementación continua, comprometer ese proceso puede generar cambios no deseados en el software que entregas a tus usuarios. Puedes mitigar el riesgo si restringes el acceso a tu servicio de implementación y pruebas 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 cumpla con las políticas. La aplicación de 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 configuración incorrecta en el software en ejecución.

    • Se descubren nuevas vulnerabilidades regularmente, lo que significa que los resultados nuevos pueden cambiar el nivel de riesgo de seguridad de las aplicaciones en producción.
    • Algunas configuraciones aumentan el riesgo de acceso no autorizado, como ejecutarse como usuario raíz o permitir la elevación de privilegios en la ejecución de un contenedor.

    En el panel de postura de seguridad de GKE, se muestra información sobre las vulnerabilidades del SO y los problemas de configuración en las cargas de trabajo en ejecución.

    En Cloud Run, también puedes ver estadísticas de seguridad sobre las revisiones implementadas, incluidas las vulnerabilidades conocidas en las imágenes de contenedor que implementaste.

Consulta Compilaciones de protección a fin de obtener más información para proteger tu fuente y Implementaciones de protección para obtener más información sobre cómo proteger implementaciones.

Amenazas de dependencia

Incluye dependencias directas en tus compilaciones, así como todas las dependencias transitivas, el árbol recursivo de dependencias que se encuentran en sentido descendente desde tus dependencias directas.

En el diagrama, E indica el uso de una dependencia incorrecta en tu compilación. Una dependencia mala 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 código fuente y modifica la versión de una dependencia que tu proyecto usa.
    • Tu compilación incluye un componente desarrollado por otro equipo de tu organización. Publican la compilación y publican el componente directamente desde sus entornos de desarrollo locales e introducen, por accidente, una vulnerabilidad en una biblioteca que solo usan a nivel 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 hacer que las canalizaciones que consumen se rompan si recuperan la dependencia directamente del repositorio público.

Consulta las prácticas recomendadas para las dependencias a fin de obtener información sobre las formas de mitigar los riesgos.

Mitigación de amenazas

La integridad general de la cadena de suministro es solo tan sólida como su parte más vulnerable. Ignorar un vector de ataque aumenta el riesgo de un ataque en esa parte de tu cadena de suministro.

Al mismo tiempo, no necesitas cambiar todo de una sola vez. El efecto de acto acumulativo, más conocido como modelo de queso suizo, se aplica a la seguridad de la cadena de suministro de software. Cada mitigación que implementas reduce el riesgo y, cuando combinas las mitigaciones en toda la cadena de suministro, aumentas la protección contra diferentes tipos de ataques.

  • Evalúa tu postura de seguridad mediante frameworks y herramientas que te ayudan a evaluar la capacidad de tu organización para detectar amenazas, responder a ellas y solucionarlas.
  • Obtén información sobre las prácticas recomendadas a fin de proteger tu cadena de suministro de software y los productos de Google Cloud diseñados para admitir esas prácticas.
  • Usa Software Delivery Shield para proteger tu software en toda tu cadena de suministro de software en Google Cloud. Puedes implementar servicios de manera gradual, según tus prioridades y la infraestructura existente.

¿Qué sigue?