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 tema extenso, pero un buen lugar para empezar es "Descripción de Acciones de GitHub", así como "Elección de ejecutores hospedados en GitHub" y "Desencadenamiento de un flujo de trabajo".

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, vea "Secretos cifrados", "Acerca del fortalecimiento de la 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, vea "Fortalecimiento de la seguridad para Acciones de GitHub"; en concreto "Uso de acciones de terceros" y "Uso de CODEOWNERS para supervisar los cambios".

Pasos siguientes