Amenazas en la cadena de suministro de software

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.

Los riesgos del software vulnerable incluyen la filtración de credenciales o datos confidenciales, la corrupción de datos, la instalación de software malicioso y las interrupciones de las aplicaciones. Estos problemas provocan pérdidas de tiempo, dinero y confianza de los clientes.

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.

Puntos de entrada para ataques a la cadena de suministro de software

La leyenda del diagrama incluye dos conjuntos de amenazas:

Google Cloud proporciona un conjunto modular de capacidades y herramientas que incorporan prácticas recomendadas para 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 llevar a escribir código que incluya vulnerabilidades de forma involuntaria. Las estaciones de trabajo inseguras para desarrolladores también pueden introducir código malicioso o inseguro. Las mitigaciones incluyen lo siguiente:

    • Establecer políticas para las estaciones de trabajo de los desarrolladores Cloud Workstations proporciona estaciones de trabajo preconfiguradas y completamente administradas que puedes personalizar para que se alineen con tus requisitos.
    • Análisis local del código. Source protect de Cloud Code (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 contenedores en busca de vulnerabilidades del SO y paquetes de idiomas.
    • Educación sobre las prácticas para proteger más el código
  • R: 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 a un ataque, como secuencias de comandos entre sitios. Las mitigaciones incluyen lo siguiente:

    • Se requiere una revisión humana para los cambios en el código fuente.
    • Usar herramientas de análisis y revisión de código que se integran con IDE y sistemas de control de código fuente
  • B: Compromete el sistema de control de código fuente. Restringir el acceso al sistema de control de código fuente y a otros sistemas de tu canalización de compilación, y usar la autenticación multifactor 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 y, luego, implementar tu software. Inclúyelos en tu sistema de control de código fuente y en los procesos de revisión de código para que puedas reducir el riesgo de vulnerabilidades en estos archivos.

Consulta Protección de 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 usuarios de tu software para que usen una versión incorrecta.

  • C: Compila con una fuente que no proviene del sistema de control de fuentes de confianza. Las mitigaciones que ayudan a reducir este riesgo incluyen lo siguiente:
    • Usar servicios de compilación, como Cloud Build, que generan información de procedencia para que puedas validar que tus compilaciones usan fuentes confiables
    • Coloca tu infraestructura de CI/CD en un perímetro de red para evitar el robo de datos de tus compilaciones. Para los servicios, usa los Controles del servicio de VPC. Google Cloud
    • Almacenar y usar copias confiables 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. Las mitigaciones que ayudan a reducir este riesgo incluyen las siguientes:
    • Sigue el principio de privilegio mínimo y restringe el acceso directo al sistema de compilación a las personas que lo necesiten. En Google Cloud puedes otorgar los 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 el robo de datos de tus compilaciones. Para los servicios, usa los Controles del servicio de VPC. Google Cloud
  • 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. Las mitigaciones que ayudan a reducir este riesgo incluyen las siguientes:
    • Almacenar y usar copias confiables 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
    • Restringimos los permisos de carga a cuentas no humanas dedicadas y a 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é vinculada 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 una compilación usa por primera vez pueden ser diferentes de las que usa en ejecuciones futuras de la misma compilación.
    • Una dependencia podría resolverse en una versión vulnerada o en una versión con cambios que interrumpan tu software. Las personas o entidades que actúan de mala fe 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. Existen varias prácticas recomendadas para las dependencias que 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, poner en riesgo 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: Implementar software vulnerado 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 hallazgos nuevos 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 las vulnerabilidades y los problemas de configuración en tus 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 Protege las compilaciones para obtener más información sobre cómo proteger tu código fuente y Protege las implementaciones para obtener información sobre cómo proteger las implementaciones.

Amenazas de dependencia

Las dependencias incluyen las 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 que se usa una dependencia incorrecta en la compilación. Una dependencia incorrecta puede incluir lo siguiente:

  • Cualquier software del que dependa tu aplicación, incluidos los componentes que desarrolles internamente, 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 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, accidentalmente, introducen una vulnerabilidad en una biblioteca que solo usan de forma local para pruebas y depuración.
  • Se quitó intencionalmente 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 y obtén información sobre las formas de mitigar los riesgos.

Mitigación de amenazas

La integridad general de tu cadena de suministro es tan fuerte como su parte más vulnerable. Si se descuida un vector de ataque, aumenta el riesgo de que se produzca un ataque en esa parte de la cadena de suministro.

Al mismo tiempo, no es necesario que cambies todo de una sola vez. El efecto acumulativo de los actos, 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 el riesgo y, cuando combinas mitigaciones en toda la cadena de suministro, aumentas la protección contra diferentes tipos de ataques.

  • Evalúa tu posición de seguridad con frameworks y herramientas que te ayuden a evaluar la capacidad de tu organización para detectar, responder y corregir amenazas.
  • Obtén información sobre las prácticas recomendadas para proteger tu cadena de suministro de software y los Google Cloud productos diseñados para respaldar esas prácticas.
  • Incorpora Google Cloud funciones de seguridad en tus procesos de desarrollo, compilación y de implementación para mejorar la postura de seguridad de tu cadena de suministro de software. Puedes implementar servicios de forma gradual, según tus prioridades y la infraestructura existente.

¿Qué sigue?