Skip to content

Seguridad de Cadena de Suministro

Desarrollo del tema

La cadena de suministro de software se refiere al proceso de desarrollo, distribución y mantenimiento del software. Es un ecosistema que abarca a todas las personas, elementos, bibliotecas, herramientas, procesos y sistemas involucrados en el ciclo de vida del software.

Los dos grupos principales de actores en estas cadenas son:

  • Productores: Diseñan y distribuyen el software. Esto incluye empresas de desarrollo de software, proyectos de código abierto y equipos gubernamentales o del sector público.

  • Consumidores: Utilizan el software. Pueden ser equipos de operaciones, empresas externas de desarrollo de software, entidades gubernamentales y otras organizaciones.

En el ecosistema actual, los productores también son consumidores, ya que utilizan herramientas o componentes de terceros para crear sus propios productos. Cada cadena de suministro de software es única, pero si hablamos de "Cloud Native" se sigue un modelo dividido en cuatro fases: desarrollo, compilación, implementación y ejecución.

K8S-SoftwareSupplyChainPhases

Los ataques a la cadena de suministro de software

La cadena de suministro de software es un proceso crítico en el desarrollo, distribución y mantenimiento del software. Sin embargo, también es un objetivo para ataques maliciosos que buscan comprometer la seguridad e integridad del software. Estos ataques pueden ocurrir en cualquier fase de la cadena de suministro, desde el desarrollo hasta la implementación y el tiempo de ejecución.

Aquí están los aspectos clave de los ataques a la cadena de suministro de software:

  • Acceso a sistemas: Los atacantes buscan acceder a sistemas utilizados en la cadena de suministro, como repositorios, plataformas de compilación, registros y canales de implementación. Utilizan métodos como la suplantación de identidad, explotación de vulnerabilidades en aplicaciones con acceso a Internet y uso malicioso de datos de acceso.

  • Modificación de artefactos: Una vez dentro, los atacantes modifican los artefactos de software para incluir comportamientos no autorizados. Luego, esperan a que los destinatarios implementen el software comprometido.

  • Impacto directo o parches maliciosos: Los artefactos comprometidos pueden poner en peligro el software directamente o mediante parches de actualización maliciosos. Además, al atacar a un proveedor de software, los atacantes pueden afectar a múltiples consumidores que utilizan esos artefactos.

  • Acceso permanente: Después de la implementación, los atacantes obtienen acceso permanente a los sistemas del destinatario. Esto les permite insertar otro malware y realizar actividades maliciosas, como robo de datos o desactivación de redes.

Protección de la cadena de suministro de software

La seguridad de la cadena de suministro de software es esencial para proteger todo lo relacionado con el código durante el ciclo de vida de desarrollo del software. Esto incluye desde el diseño de la aplicación hasta los canales de integración continua/entrega continua (CI/CD) y la implementación. La cadena abarca elementos como la infraestructura, el hardware, los sistemas operativos, los servicios en la nube, las personas involucradas y las fuentes de las que proviene el software, como repositorios y proyectos de código abierto.

Para protegerla, se debe considerar lo siguiente:

  • Listas de los elementos de software: Se trata de un inventario de fuentes y dependencias que están agrupadas dentro de un artefacto. Estas fuentes incluyen código fuente, bibliotecas, software open source, middleware y marcos de desarrollo. Existen estándares en el sector, como CycloneDX, Software Package Data Exchange (SPDX) y Software Identification (SWID), que describen la composición del software de manera uniforme y comprensible para otras herramientas.

  • Vulnerability Exploitability eXchange: Es un documento que publican los productores y pueden comprender las máquinas en el cual se informa a los consumidores si existen puntos vulnerables que afecten los artefactos en los elementos upstream y, de ser así, se les ofrecen recomendaciones sobre los pasos a seguir.

  • Certificación: Para realizar declaraciones sobre los artefactos que ofrecen, los productores utilizan las certificaciones de software, que son mecanismos para comprobar la confianza basados en metadatos autenticados y comprensibles para las máquinas. Pueden incluirse en una SBOM o distribuirse por separado, y permiten que los clientes validen la integridad de las afirmaciones de los productores por separado.

  • Marco de desarrollo de software seguro: El NIST publicó el marco de desarrollo de software seguro (SSDF), un conjunto de prácticas esenciales centradas en la seguridad que pueden aplicarse a los modelos del ciclo de vida de desarrollo del software. Está fundamentado en documentación, lineamientos y estándares establecidos e incluye prácticas que afectan a los artefactos de software de manera directa e indirecta, para ayudar a los productores a aumentar la seguridad de los procesos de desarrollo de software.

  • Niveles de la cadena de suministro para artefactos de software: Son directrices de seguridad consensuadas por el sector. Su objetivo es que los productores protejan sus cadenas de suministro de software y generen confianza en los consumidores. La procedencia es un elemento fundamental en estos lineamientos. Se trata de una certificación generada y firmada por las plataformas de compilación, que describe cómo se compilan los artefactos, incluyendo aspectos como la entidad responsable, el proceso y los elementos utilizados. Los productores pueden seguir los requisitos de compilación de los SLSA para fortalecer la seguridad de la cadena de suministro de software, mientras que los consumidores pueden evaluar la confianza de los artefactos siguiendo las recomendaciones de verificación. Los SLSA definen cuatro niveles de procesos de compilación que describen el grado de confianza e integridad de la procedencia de un artefacto.

Prácticas recomendadas para la seguridad de la cadena de suministro de software

La seguridad de la cadena de suministro de software es crucial para proteger el software de posibles vulnerabilidades a lo largo de su ciclo de vida.

No existe una forma de asegurar la cadena de suministro de software que sea mejor que otra, sino que hay varias prácticas recomendadas que pueden utilizarse para mejorar su seguridad, según el contenido previamente analizado.

A continuación se listan algunas prácticas recomendadas para asegurar la cadena de suministro de sorftware:

  • Para las fuentes:

    • Capacita a los desarrolladores sobre las prácticas recomendadas de codificación seguras y garantiza su cumplimiento.
    • Realiza pruebas, análisis y revisiones de código entre pares centradas en la seguridad.
    • Solicita análisis de código fuente con herramientas de SAST y de detección de errores en el código del software (linting) de manera permanente en todas las fases de la cadena, y automatiza el proceso.
    • Gestiona las dependencias en las fuentes.
    • Reutiliza las fuentes que ya posees y que se probaron en materia de seguridad siempre que sea posible.
    • Exige que los envíos de repositorios fuente cuenten con cambios de código verificados.
    • Analiza los repositorios fuente para asegurarte de que los secretos no se encuentren confirmados.
  • Para las dependencias de empresas open source:

    • Investigue y analice los artefactos open source minuciosamente antes de utilizarlos.
    • Descargue y use artefactos open source de fuentes confiables.
    • Compruebe la procedencia de todas las dependencias antes de la compilación.
    • Obtenga las SBOM de todos los artefactos open source y revíselas en detalle.
    • Analice automáticamente todas las dependencias open source con herramientas de SAST.
    • Utilice herramientas de SCA para identificar las dependencias transitivas en los artefactos open source.
    • Mantenga actualizados los artefactos open source con herramientas que supervisen automáticamente las dependencias de los repositorios fuente en las versiones nuevas.
  • Para las dependencias de productores de software externos:

    • Establezca requisitos y controles de seguridad para los productores al menos tan estrictos como los internos.
    • Trabaje con productores que sigan prácticas de DevSecOps en todo el ciclo de vida del desarrollo del software.
    • Exija las SBOM de cada versión a los productores y revíselas.
    • Verifique la procedencia de los artefactos de terceros antes de su integración o implementación.
    • Elija productores con programas de respuesta a vulnerabilidades que detecten, divulguen y solucionen problemas en sus fuentes y artefactos.
    • Certifique que los productos de los productores cumplan con estándares de seguridad del sector y sométalos a evaluaciones externas.
    • Exija a los productores verificar que todos los artefactos de terceros incorporados en su código cumplan con los controles de seguridad.
  • Para las imágenes de contenedores:

    • Utilice imágenes de contenedores de fuentes confiables, incluyendo imágenes base y principales.
    • Compruebe la procedencia de todas las imágenes de contenedores descargadas.
    • Evite usar imágenes desactualizadas, especialmente si no incluyen información relevante sobre vulnerabilidades.
    • Elija imágenes base minimalistas con solo los marcos y paquetes de sistema operativo necesarios.
    • Cree contenedores instalando bibliotecas y herramientas específicas en lugar de eliminar elementos de imágenes existentes.
    • Analice las imágenes en busca de vulnerabilidades en estaciones de trabajo de desarrolladores, plataformas de CI/CD, registros de imágenes y contenedores en ejecución.
    • Mantenga los contenedores actualizados aplicando los últimos parches de software.
    • Supervise los contenedores continuamente en busca de nuevas vulnerabilidades durante todo su ciclo de vida.
    • Elimine imágenes antiguas de los registros para evitar implementar contenedores con vulnerabilidades conocidas.
    • Gestione cuidadosamente los secretos y otorgue permisos estrictamente necesarios.
  • Para las plataformas y los procesos de compilación:

    • Siga los lineamientos de los SLSA para generar compilaciones replicables en plataformas gestionadas y aisladas.
    • Implemente plataformas de compilación mediante canales de CI/CD con seguridad automatizada y recursos de protección para los desarrolladores.
    • Utilice únicamente elementos centrados en la seguridad, como imágenes de contenedores y artefactos reforzados, y herramientas con suma de comprobación durante el proceso de compilación.
    • Asegúrese de que todos los pasos del proceso de compilación estén configurados correctamente y preste mucha atención a los cambios en las herramientas, los scripts y los archivos de configuración.
    • Analice las SBOM de las dependencias en busca de riesgos de seguridad y genere SBOM para los artefactos compilados recientemente como parte de los canales de CI/CD automatizados.
    • Automatice la comprobación de la procedencia de todas las dependencias y asegúrese de obtener la procedencia de los artefactos compilados nuevos, así como de certificarla.
    • Analice automáticamente las dependencias en busca de puntos vulnerables con herramientas de SAST.
  • Para la infraestructura usada en la cadena de suministro de software:

    • Establezca políticas sobre la descarga e instalación de software en las estaciones de trabajo de los desarrolladores.
    • Restrinja el acceso a repositorios, plataformas de compilación y servicios de implementación siguiendo los principios de privilegios mínimos. Utilice autenticación de varios factores y cuentas no humanas exclusivas cuando sea posible.
    • Utilice herramientas para cifrar, almacenar y gestionar secretos y datos de acceso, e implemente controles.
    • Automatice la implementación de infraestructura con técnicas de GitOps e IaC.
    • Supervise la infraestructura en busca de desajustes de configuración y aplique actualizaciones automáticamente según las definiciones más recientes de la IaC.
    • Utilice herramientas de seguridad exclusivas para analizar archivos de IaC e identificar puntos vulnerables y desajustes de configuración en todo el entorno de TI.
    • Aplique una infraestructura de canal de CI/CD en el perímetro de la red y preste atención a los cambios en la configuración del canal.
  • Para los procesos de implementación y ejecución en la cadena de suministro de software:

    • Analiza cómo los privilegios solicitados afectan la seguridad, habilita solo permisos y servicios esenciales, y define configuraciones en forma de código almacenado en repositorios.
    • Prueba aplicaciones e infraestructura en entornos de preproducción aislados antes de implementarlos en producción.
    • Automatiza el análisis de cargas de trabajo en busca de puntos vulnerables y errores de configuración, y clasifica los problemas para mitigar sus consecuencias.
    • Verifica actualizaciones de seguridad para imágenes de contenedores y aplicaciones implementadas.
    • Utiliza técnicas de inteligencia artificial/aprendizaje automático para implementar controles de datos y detectar actividades maliciosas.
    • Segmenta redes para limitar puntos vulnerables a secciones específicas del entorno de TI.