Skip to main content

Procedimientos recomendados para proteger el sistema de compilación

Instrucciones sobre cómo proteger el final de la cadena de suministro, es decir, los sistemas que se usan para compilar y distribuir artefactos.

Acerca de esta guía

En esta guía se describen los cambios de mayor impacto que puede realizar para mejorar la seguridad de los sistemas de compilación. Cada sección detalla un cambio que puedes hacer a tus procesos para mejorar la seguridad. Los cambios de mayor impacto se enumeran primero.

¿Cuál es el riesgo?

Algunos ataques en las cadenas de suministro de software se dirigen directamente al sistema de compilación. Si un atacante puede modificar el proceso de compilación, puede aprovechar el sistema sin el esfuerzo de poner en peligro las cuentas personales o el código. Es importante asegurarse de proteger el sistema de compilación, así como las cuentas personales y el código.

Protección del sistema de compilación

Hay varias funcionalidades de seguridad que debe tener un sistema de compilación:

  1. Los pasos de compilación deben ser claros y repetibles.

  2. Debe saber exactamente lo que se ejecuta durante el proceso de compilación.

  3. Cada compilación se debe iniciar en un entorno nuevo, de forma que una compilación en peligro no se conserve y afecte a futuras compilaciones.

GitHub Actions puede ayudarle a cumplir estas funcionalidades. Las instrucciones de compilación se almacenan en el repositorio, junto con el código. Puede elegir en qué entorno se ejecuta la compilación, incluidos Windows, Mac, Linux o ejecutores que hospede personalmente. Cada compilación comienza con una imagen de ejecutor nueva, lo que dificulta la persistencia de ataques en el entorno de compilación.

Además de las ventajas de seguridad, GitHub Actions permite desencadenar compilaciones manualmente, periódicamente o en eventos de Git en el repositorio para compilaciones frecuentes y rápidas.

GitHub Actions es un gran tema, pero un buen lugar para comenzar es Entender las GitHub Actions, así como Sintaxis del flujo de trabajo para Acciones de GitHub y Activar un flujo de trabajo.

Generación de atestaciones de artefactos para las compilaciones

Las atestaciones de artefactos permiten crear garantías de integridad y procedencia no verificables para el software que compile. A su vez, las personas que consumen el software pueden comprobar dónde y cómo se compiló el software.

Al generar atestaciones de artefactos con el software, se crean notificaciones firmadas criptográficamente que establecen la procedencia de la compilación e incluyen la siguiente información:

  • Vínculo al flujo de trabajo asociado al artefacto.
  • El repositorio, la organización, el entorno, la confirmación de SHA y el evento desencadenante para el artefacto.
  • Otra información del token de OIDC que se usa para establecer la procedencia. Para obtener más información, vea «Acerca del fortalecimiento de seguridad con OpenID Connect».

También puede generar atestaciones de artefactos que incluyan una lista de materiales de software asociada (SBOM). Asociar las compilaciones con una lista de las dependencias de código abierto usadas en ellas proporciona transparencia y permite a los consumidores cumplir con los estándares de protección de datos.

Las atestaciones de artefactos incluyen una firma sobre un artefacto compilado, junto con vínculos al código fuente y las instrucciones de compilación. Si firma la compilación con atestaciones de artefactos, no tiene que administrar su propio material de clave de firma. GitHub lo controla con la autoridad de firma que operamos.

Para más información, consulta Uso de atestaciones de artefactos para establecer la procedencia de las compilaciones.

Firma de las compilaciones

Después de proteger el proceso de compilación, querrá impedir que alguien manipule su resultado final. Una excelente manera de hacerlo consiste en firmar las compilaciones. Al distribuir software de forma pública, esto se suele hacer con un par de claves criptográficas públicas y privadas. Use la clave privada para firmar la compilación y publique la clave pública para que los usuarios del software puedan comprobar la firma en la compilación antes de usarla. Si se modifican los bytes de la compilación, la firma no se comprobará.

La forma exacta de firmar la compilación dependerá del tipo de código que escriba y de quiénes son los usuarios. A menudo es difícil saber cómo almacenar de forma segura la clave privada. Una opción básica consiste en usar secretos cifrados de GitHub Actions, aunque deberá tener cuidado de limitar quién tiene acceso a esos flujos de trabajo de GitHub Actions. si tu clave privada se almacena en otro sistema al cual se puede acceder a través de del internet público (como Microsoft Azure o HashiCorp Vault), una opción más avanzada es autenticarse con OpenID Connect, por lo que no tienes que compartir secretos entre sistemas. si solo se puede acceder a tu clave privada desde una red privada, otra opción es usar los corredores auto-hospedados para GitHub Actions.

Para más información, consulta Uso de secretos en Acciones de GitHub, Acerca del fortalecimiento de seguridad con OpenID Connect, y Acerca de los ejecutores autohospedados.

Fortalecimiento de la seguridad de GitHub Actions

Hay muchos pasos adicionales que puede seguir para reforzar la seguridad de GitHub Actions. En concreto, tenga cuidado al evaluar flujos de trabajo de terceros y considere la posibilidad de usar CODEOWNERS para limitar quién puede realizar cambios en los flujos de trabajo.

Para más información, consulta Fortalecimiento de seguridad para GitHub Actions y Uso de las características de seguridad de GitHub para proteger el uso de Acciones de GitHub.

Pasos siguientes