Skip to main content

Práticas recomendadas para proteger seu sistema de compilação

Orientação sobre como proteger o final da sua cadeia de suprimentos — os sistemas que você usa para construir e distribuir artefatos.

Sobre este guia

Este guia descreve mudanças de maior impacto que você pode fazer para melhorar a segurança de seus sistemas de construção. Cada seção descreve uma alteração que você pode fazer em seus processos para melhorar a segurança. As mudanças de maior impacto estão listadas primeiro.

Qual o risco?

Alguns ataques a cadeias de suprimentos de software visam diretamente o sistema de construção. Se um invasor pode modificar o processo de construção, ele pode explorar seu sistema sem o esforço de comprometer contas pessoais ou código. É importante garantir que você não se esqueça de proteger o sistema de compilação, bem como contas pessoais e código.

Proteja seu sistema de compilação

Existem vários recursos de segurança que um sistema de construção deve ter:

  1. Os passos de compilação devem ser claros e repetitivos.

  2. Você deve saber exatamente o que foi executado durante o processo de compilação.

  3. Cada compilação deve começar em um ambiente fresco, então uma construção comprometida não persiste para afetar futuras compilações.

GitHub Actions pode ajudar você a atender a esses recursos. As instruções de compilação são armazenadas no seu repositório, junto com seu código. Você escolhe o ambiente em que sua compilação é executada, incluindo Windows, Mac, Linux ou executores que você mesmo hospeda. Cada build começa com uma nova imagem do executor, o que torna difícil para um ataque persistir no seu ambiente de build.

Além dos benefícios de segurança, GitHub Actions permite que você acione compilações manualmente, periodicamente ou em eventos do git no seu repositório para compilações frequentes e rápidas.

GitHub Actions é um tópico extenso, mas um bom lugar para começar é " Entendendo o GitHub Actions", bem como "Sintaxe de fluxo de trabalho para o GitHub Actions" e "Acionando um fluxo de trabalho".

Gerar atestados de artefatos para suas compilações

Note

Os atestados de artefato estão em versão beta pública e sujeitos a alterações.

Os atestados de artefatos permitem que você crie garantias de procedência e integridade infalsificáveis para o software que você cria. Por sua vez, as pessoas que consomem seu software podem verificar onde e como seu software foi criado.

Ao gerar atestados de artefato com seu software, você cria declarações assinadas criptograficamente que estabelecem a procedência do build e incluem as seguintes informações:

  • Um link para o fluxo de trabalho associado ao artefato.
  • O repositório, organização, ambiente, SHA de commit e evento de gatilho do artefato.
  • Outras informações do token OIDC usado para estabelecer a procedência. Para obter mais informações, confira "Sobre o enrijecimento de segurança com o OpenID Connect".

Você também pode gerar atestados de artefato que incluam uma SBOM (lista de materiais de software) associada. Associar suas compilações a uma lista de dependências de código aberto usadas nelas fornece transparência e permite que os consumidores cumpram os padrões de proteção de dados.

Os atestados de artefato incluem uma assinatura sobre um artefato criado, juntamente com links para o código-fonte e instruções de compilação. Se você assinar sua compilação com atestados de artefato, não será necessário gerenciar seu próprio material para chave de assinatura. O GitHub cuida disso para você com a autoridade de assinatura que operamos.

Para obter mais informações, confira "Usar atestados de artefatos para estabelecer a procedência de compilações".

Assine suas compilações

Depois que o processo de compilação estiver seguro, você deverá evitar que alguém altere o resultado final do processo de compilação. Uma ótima maneira de fazer isso é assinar suas compilações. Ao distribuir software publicamente, isso é frequentemente feito com um par de chaves de criptografia pública/privada. Você usa a chave privada para assinar a compilação e você publica sua chave pública para que os usuários do seu software possam verificar a assinatura na compilação antes de usá-lo. Se os bytes da compilação forem modificados, a assinatura não será verificada.

A forma como exatamente você assina a sua compilação dependerá do tipo de código que você está escrevendo e dos seus usuários. Muitas vezes, é difícil saber como armazenar com segurança a chave privada. Uma opção básica aqui é usar segredos criptografados de GitHub Actions, embora você precise ter cuidado para limitar quem tem acesso a esses fluxos de trabalho de GitHub Actions. Se sua chave privada estiver armazenada em outro sistema acessível pela internet pública (como o Microsoft Azure ou o Cofre do HashiCorp), uma opção mais avançada é a autenticação com o OpenID Connect, para que você não tenha que compartilhar segredos entre sistemas. Se a sua chave privada puder ser acessada apenas a partir de uma rede privada, outra opção é usar executores auto-hospedados para GitHub Actions.

Para obter mais informações, confira "Usar segredos em ações do GitHub", "Sobre o enrijecimento de segurança com o OpenID Connect", e "Sobre executores auto-hospedados".

Segurança reforçada para GitHub Actions

Há muitas outras etapas que você pode seguir para garantir adicionalmente a segurança GitHub Actions. Em particular, tenha cuidado ao avaliar fluxos de trabalho de terceiros, e considere usar CODEOWNERS para limitar quem pode fazer alterações nos seus fluxos de trabalho.

Para obter mais informações, confira "Fortalecimento de segurança para o GitHub Actions" e "Usar os recursos de segurança do GitHub para proteger seu uso do GitHub Actions."

Próximas etapas