Tema 18

18. Seguridad de la cadena de suministro: SCA, SBOM, SLSA, firmas y dependencias confiables

La cadena de suministro de software incluye código propio, dependencias, herramientas, pipelines, artefactos, imágenes y entornos de despliegue. Protegerla significa poder confiar en lo que se construye, se firma, se publica y se ejecuta.

Objetivo Reducir riesgo en dependencias y artefactos
Enfoque SCA, SBOM, SLSA, firmas, procedencia y repositorios
Resultado Construir software trazable y verificable

18.1 Introducción

El software moderno se construye con componentes propios y externos: librerías open source, paquetes del sistema, imágenes base, acciones de CI/CD, módulos de infraestructura, contenedores y servicios de terceros.

Esa cadena genera valor, pero también riesgo. Un paquete comprometido, un registry alterado, un pipeline manipulado o una imagen base vulnerable pueden introducir código malicioso en producción sin atacar directamente la aplicación final.

La seguridad de la cadena de suministro busca asegurar origen, integridad, procedencia, dependencias y artefactos durante todo el flujo de entrega.

18.2 Qué es la cadena de suministro de software

La cadena de suministro de software incluye todos los elementos que participan en la creación, construcción, publicación y ejecución de una aplicación.

  • Código fuente propio y contribuciones externas.
  • Dependencias directas y transitivas.
  • Gestores de paquetes y repositorios.
  • Herramientas de build, test y empaquetado.
  • Pipelines CI/CD y runners.
  • Imágenes base, registries y artefactos.
  • Firmas, SBOM, metadatos y evidencias.
  • Entornos de despliegue y runtime.
Un sistema es tan confiable como los componentes y procesos que lo construyen. La cadena de suministro convierte dependencias externas en riesgo interno.

18.3 Amenazas comunes

Amenaza Descripción Control
Dependency confusion Instalación de paquete público en lugar de interno Repositorios privados, scopes y configuración de package manager
Typosquatting Paquete con nombre parecido a uno legítimo Revisión de dependencias y allowlist
Maintainer compromise Cuenta de mantenedor comprometida publica versión maliciosa Pinning, revisión, firmas y monitoreo de cambios
Pipeline tampering Modificación del proceso de build Protección de workflows y runners aislados
Artifact substitution Reemplazo de binario o imagen por uno no autorizado Firmas, digest y verificación antes de desplegar

18.4 SCA

SCA, Software Composition Analysis, permite identificar dependencias, versiones, vulnerabilidades conocidas, licencias y componentes transitivos.

Debe responder:

  • ¿Qué componentes usamos?
  • ¿Qué versiones están instaladas?
  • ¿Qué vulnerabilidades conocidas tienen?
  • ¿Existe versión corregida?
  • ¿Qué licencias aplican?
  • ¿Qué proyectos y artefactos están afectados?

SCA es más efectivo cuando se integra en pull requests, pipelines y monitoreo continuo de nuevas vulnerabilidades.

18.5 SBOM

Un SBOM, Software Bill of Materials, es un inventario de componentes incluidos en un software o artefacto. Permite responder rápido cuando se publica una nueva vulnerabilidad o advisory.

Un SBOM puede incluir:

  • Nombre de componentes.
  • Versiones.
  • Proveedores o fuentes.
  • Hashes o identificadores.
  • Relación entre componentes directos y transitivos.
  • Licencias.
  • Artefacto o imagen donde aparecen.
Un SBOM no corrige vulnerabilidades. Acelera identificación de impacto y mejora trazabilidad para decidir qué corregir.

18.6 SLSA

SLSA, Supply-chain Levels for Software Artifacts, propone niveles de madurez para proteger el proceso de construcción y publicación de artefactos.

Sus ideas centrales son:

  • Construcciones automatizadas y controladas.
  • Procedencia generada por el sistema de build.
  • Protección contra manipulación del pipeline.
  • Reproducibilidad o trazabilidad suficiente.
  • Verificación de que el artefacto proviene del proceso esperado.

No todas las organizaciones necesitan el máximo nivel desde el inicio. Lo importante es mejorar progresivamente trazabilidad, integridad y controles de build.

18.7 Procedencia de build

La procedencia indica cómo se produjo un artefacto. Permite verificar que una imagen, binario o paquete proviene del repositorio, commit y pipeline esperados.

Dato de procedencia Para qué sirve Riesgo si falta
Commit Vincular artefacto con código fuente No saber qué código se ejecuta
Pipeline Validar proceso de build Artefactos construidos fuera de control
Builder Identificar entorno que generó el artefacto Manipulación por runners no confiables
Dependencias Conocer componentes usados Impacto lento ante vulnerabilidades
Firma Verificar integridad y origen Reemplazo silencioso de artefactos

18.8 Firmas de artefactos

Las firmas permiten verificar que un artefacto no fue modificado y que fue producido por una identidad confiable. Pueden aplicarse a imágenes, paquetes, binarios, SBOM y metadatos de procedencia.

Una estrategia de firma debe definir:

  • Qué artefactos se firman.
  • Quién o qué identidad puede firmar.
  • Cómo se protegen claves o identidades de firma.
  • Dónde se almacenan firmas y certificados.
  • Cómo se verifica la firma antes de desplegar o consumir.
  • Cómo se revoca confianza ante compromiso.

18.9 Dependencias confiables

No toda dependencia debe aceptarse automáticamente. Un proceso maduro evalúa origen, mantenimiento, popularidad, historial de seguridad, licencia y necesidad real.

Criterios de evaluación:

  • Repositorio activo y mantenido.
  • Historial razonable de releases.
  • Política de seguridad o canal de reporte.
  • Licencia compatible.
  • Necesidad funcional clara.
  • Ausencia de comportamientos sospechosos en instalación.
  • Dependencias transitivas aceptables.

18.10 Pinning y lockfiles

Fijar versiones reduce cambios inesperados. Los lockfiles registran versiones exactas de dependencias directas y transitivas.

Beneficios:

  • Builds más reproducibles.
  • Menos riesgo de incorporar versiones maliciosas automáticamente.
  • Mayor claridad en revisiones de cambios de dependencias.
  • Facilidad para auditar qué versión se usó.
  • Mejor capacidad de rollback.

El pinning no debe impedir actualizaciones. Debe combinarse con revisión y actualización regular.

18.11 Repositorios internos y proxies

Usar repositorios internos o proxies de paquetes permite controlar qué dependencias entran a la organización. También reduce dependencia directa de internet durante builds.

Control Beneficio Cuidado
Proxy de paquetes Centraliza descargas y caching No debe aceptar cualquier paquete sin política
Repositorio privado Protege paquetes internos Evitar dependency confusion por nombres solapados
Allowlist Permite solo fuentes aprobadas Necesita proceso para nuevas dependencias
Escaneo central Evalúa paquetes antes de consumo amplio Debe actualizar bases de vulnerabilidades

18.12 Actualización segura

Actualizar dependencias reduce exposición, pero también puede introducir cambios funcionales o incompatibilidades. La actualización segura combina automatización, pruebas y revisión.

Prácticas recomendadas:

  • Automatizar PRs de actualización.
  • Separar parches de seguridad críticos de upgrades mayores.
  • Ejecutar pruebas automatizadas y análisis de compatibilidad.
  • Revisar cambios de dependencias sensibles.
  • Monitorear comportamiento después del despliegue.
  • Mantener rollback viable.

18.13 Herramientas de terceros en CI/CD

Acciones, plugins, contenedores de build y herramientas externas también son parte de la cadena de suministro. Un plugin comprometido puede ejecutar código dentro del pipeline.

Controles:

  • Fijar acciones o plugins por versión o commit.
  • Usar proveedores confiables y revisados.
  • Evitar ejecutar scripts remotos sin verificación.
  • Limitar permisos del token disponible para cada acción.
  • Revisar cambios de versión de acciones críticas.
  • Preferir acciones internas para tareas sensibles.

18.14 Respuesta ante compromiso de dependencia

Cuando una dependencia se compromete, la organización debe identificar exposición rápido.

  1. Identificar paquetes, versiones y rangos afectados.
  2. Consultar SBOM, SCA e inventario de artefactos.
  3. Determinar qué servicios están en producción.
  4. Bloquear nuevas instalaciones de la versión afectada.
  5. Actualizar, reemplazar o retirar la dependencia.
  6. Reconstruir y redeplegar artefactos afectados.
  7. Revisar logs por indicadores de abuso.
  8. Documentar impacto y acciones correctivas.

18.15 Errores frecuentes

  • Confiar automáticamente en cualquier paquete popular.
  • No versionar lockfiles.
  • Consumir imágenes, acciones o scripts remotos sin fijar versión.
  • Generar SBOM pero no almacenarlo ni consultarlo.
  • Firmar artefactos sin verificar firmas antes del despliegue.
  • No separar paquetes internos de públicos.
  • Actualizar dependencias críticas sin pruebas.
  • No saber qué servicios usan una dependencia vulnerable.
La seguridad de supply chain se basa en trazabilidad y verificación. Si no puedes explicar de dónde viene un artefacto, no puedes confiar plenamente en él.

18.16 Lista de verificación

  • ¿Los proyectos usan SCA en pull requests y pipelines?
  • ¿Se generan SBOM para artefactos relevantes?
  • ¿Los artefactos críticos tienen procedencia y firma verificable?
  • ¿Las dependencias se fijan mediante versiones y lockfiles?
  • ¿Existen repositorios internos o proxies para controlar consumo?
  • ¿Las acciones y plugins de CI/CD están fijados y revisados?
  • ¿Hay proceso para aprobar nuevas dependencias de alto riesgo?
  • ¿Se puede responder rápido ante una dependencia comprometida?

18.17 Qué debes recordar de este tema

  • La cadena de suministro incluye dependencias, herramientas, pipelines, artefactos y entornos.
  • SCA detecta componentes y vulnerabilidades; SBOM mejora trazabilidad.
  • SLSA aporta un marco para madurar procedencia y protección del build.
  • Firmar artefactos solo sirve si luego se verifican.
  • Dependencias confiables requieren evaluación, pinning, actualización y respuesta.

18.18 Conclusión

La seguridad de la cadena de suministro permite confiar en el origen, construcción y distribución del software. Combina inventario, análisis de dependencias, procedencia, firmas, repositorios confiables y capacidad de respuesta ante compromisos.

En el próximo tema estudiaremos pruebas automatizadas de seguridad: SAST, DAST, IaC scanning, secret scanning y policy as code.