Ameaças à cadeia de abastecimento de software

Os vetores de ataque para cadeias de fornecimento de software são as várias formas através das quais alguém pode comprometer intencional ou acidentalmente o seu software.

Os riscos do software vulnerável incluem a divulgação de credenciais ou dados confidenciais, a corrupção de dados, a instalação de software malicioso e as falhas de aplicações. Estes problemas resultam em perda de tempo, dinheiro e confiança dos clientes.

Os pontos de entrada de ameaças abrangem todo o ciclo de vida do software e podem ter origem dentro ou fora da sua organização.

Pontos de entrada para ataques à cadeia de abastecimento de software

A legenda do diagrama inclui dois conjuntos de ameaças:

Google Cloud oferece um conjunto modular de capacidades e ferramentas que incorporam práticas recomendadas para mitigar ambos os conjuntos de ameaças.

As subsecções neste documento descrevem as ameaças no contexto da origem, das compilações, da implementação e das dependências.

Ameaças de origem

Estas ameaças afetam a integridade do seu código fonte.

  • 1: escrever código não seguro. A falta de práticas de programação seguras pode levar à escrita de código que inclui, involuntariamente, vulnerabilidades. As estações de trabalho de programadores inseguras também podem introduzir código malicioso ou inseguro. As mitigações incluem:

    • Definir políticas para estações de trabalho de programadores. As estações de trabalho na nuvem oferecem estações de trabalho pré-configuradas e totalmente geridas que pode personalizar para se alinharem com os seus requisitos.
    • Leitura local do código. A proteção de origem do Cloud Code (pré-visualização privada) fornece feedback de segurança em tempo real, incluindo informações de vulnerabilidade e licença para dependências. Os programadores também podem usar a API On-Demand Scanning para verificar vulnerabilidades de pacotes de idiomas e do SO em imagens de contentores.
    • Educação sobre práticas para tornar o código mais seguro.
  • A: Enviar código incorreto para o repositório de origem. Isto não inclui apenas código malicioso, mas também código que introduz involuntariamente vulnerabilidades a um ataque, como scripting entre sites. As mitigações incluem:

    • Exigir revisão humana para alterações ao código-fonte.
    • Usando ferramentas de análise de código e de linting que se integram com IDEs e sistemas de controlo de fontes.
  • B: Comprometer o sistema de controlo de origem. Restringir o acesso ao sistema de controlo de origem e a outros sistemas no seu pipeline de compilação, bem como usar a autenticação multifator, ajuda a mitigar este risco.

Ao avaliar a integridade da origem, examine também os scripts e as configurações de apoio técnico que usa para criar e implementar o seu software. Inclua-os no seu sistema de controlo de origem e processos de revisão de código para poder reduzir o risco de vulnerabilidades nestes ficheiros.

Consulte o artigo Salvaguardar a origem para saber mais sobre como proteger a sua origem.

Crie ameaças

Estas ameaças comprometem o seu software quando o cria ou embala, ou enganam os consumidores do seu software para que usem uma versão má.

  • C: Criar com uma origem que não seja do sistema de controlo de origens fidedigno. As mitigações que ajudam a reduzir este risco incluem:
    • Usar serviços de compilação, como o Cloud Build, que geram informações de proveniência para que possa validar se as suas compilações usam uma origem fidedigna.
    • Colocar a sua infraestrutura de CI/CD num perímetro de rede para evitar a exfiltração de dados das suas compilações. Para Google Cloud serviços, use os VPC Service Controls.
    • Armazenar e usar cópias fidedignas das dependências de código aberto de que precisa numa loja de artefactos privada, como o Artifact Registry.
  • D: Comprometer o sistema de compilação. As mitigações que ajudam a reduzir este risco incluem:
    • Siga o princípio do menor privilégio restringindo o acesso direto ao sistema de compilação a indivíduos que o exijam. No Google Cloud Google Cloud, pode conceder funções predefinidas adequadas ou criar funções personalizadas.
    • Use serviços de compilação geridos, como o Cloud Build. O Cloud Build executa compilações efémeras configurando um ambiente de VM para cada compilação e destruindo-o após a compilação.
    • Coloque a sua infraestrutura de CI/CD num perímetro de rede para evitar a exfiltração de dados das suas compilações. Para Google Cloud serviços, use os VPC Service Controls.
  • F: Empacotar e publicar software criado fora do processo oficial. Os sistemas de compilação que geram e assinam a proveniência da compilação permitem-lhe validar se o seu software foi compilado por um sistema de compilação fidedigno.
  • G: Comprometer o repositório onde armazena o seu software para os seus utilizadores internos ou externos. As mitigações que ajudam a reduzir este risco incluem:
    • Armazenar e usar cópias fidedignas das dependências de código aberto de que precisa em repositórios de artefactos privados, como o Artifact Registry.
    • Validar a proveniência da compilação e da origem.
    • Restringir as autorizações de carregamento a contas não humanas dedicadas e administradores do repositório. No Google Cloud, as contas de serviço atuam em nome de serviços e aplicações.

Ameaças de implementação e tempo de execução

  • H: A resolução de dependências através da especificação de um intervalo de versões ou uma etiqueta que não esteja permanentemente associada a uma versão de compilação específica pode originar vários problemas:

    • As compilações não são reproduzíveis porque as dependências que uma compilação usa pela primeira vez podem ser diferentes das dependências que a compilação usa para execuções futuras da mesma compilação.
    • Uma dependência pode ser resolvida para uma versão comprometida ou uma versão com alterações que danificam o seu software. Os autores de ameaças podem tirar partido desta incerteza para fazer com que a sua compilação escolha a versão de um pacote que eles querem, em vez da versão que pretendia usar. Existem várias práticas recomendadas para dependências que podem ajudar a mitigar os riscos de confusão de dependências.
  • 2: comprometem o processo de implementação. Se usar um processo de implementação contínua, a violação desse processo pode introduzir alterações indesejadas no software que disponibiliza aos seus utilizadores. Pode mitigar o risco restringindo o acesso ao seu serviço de implementação e testando as alterações em ambientes de pré-produção. O Cloud Deploy pode ajudar a gerir o processo de entrega contínua e a promoção entre ambientes.

  • 3: implementar software comprometido ou não conforme. A aplicação de políticas de implementação pode ajudar a mitigar este risco. Pode usar a autorização binária para validar se as imagens de contentores estão em conformidade com os critérios das políticas e bloquear a implementação de imagens de contentores de origens não fidedignas.

  • 4: vulnerabilidades e configuração incorreta no software em execução.

    • São descobertas regularmente novas vulnerabilidades, o que significa que as novas conclusões podem alterar o nível de risco de segurança das suas aplicações em produção.
    • Algumas configurações aumentam o risco de acesso não autorizado, como a execução como utilizador root ou a permissão de escalamento de privilégios na execução de um contentor.

    O painel de controlo da postura de segurança do GKE mostra informações sobre vulnerabilidades e problemas de configuração nas suas cargas de trabalho em execução.

    No Cloud Run, também pode ver estatísticas de segurança sobre as revisões implementadas, incluindo vulnerabilidades conhecidas em imagens de contentores que implementou.

Consulte o artigo Salvaguardar compilações para saber mais sobre a proteção da sua fonte e o artigo Salvaguardar implementações para saber mais sobre a proteção de implementações.

Ameaças de dependências

As dependências incluem dependências diretas nas suas compilações, bem como todas as dependências transitivas, a árvore recursiva de dependências que estão a jusante das suas dependências diretas.

No diagrama, E indica a utilização de uma dependência incorreta na sua compilação. Uma má dependência pode incluir:

  • Qualquer software do qual a sua aplicação dependa, incluindo componentes que desenvolve internamente, software comercial de terceiros e software de código aberto.
  • Vulnerabilidades originadas de qualquer um dos outros vetores de ataque. Por exemplo:
    • Um atacante obtém acesso ao seu sistema de controlo de origem e modifica a versão de uma dependência que o seu projeto usa.
    • A sua compilação inclui um componente desenvolvido por outra equipa na sua organização. Criarem e publicarem o componente diretamente a partir dos respetivos ambientes de desenvolvimento locais e introduzirem acidentalmente uma vulnerabilidade numa biblioteca que só usam localmente para testes e depuração.
  • Remoção intencional de uma dependência de código aberto de um repositório público. A remoção pode fazer com que os pipelines de consumo falhem se obtiverem a dependência diretamente do repositório público.

Consulte as práticas recomendadas para dependências para saber como mitigar riscos.

Mitigar ameaças

A integridade geral da sua cadeia de fornecimento é tão forte quanto a sua parte mais vulnerável. Negligenciar um vetor de ataque aumenta o risco de ataque nessa parte da sua cadeia de abastecimento.

Ao mesmo tempo, não tem de mudar tudo de uma vez. O efeito cumulativo, mais conhecido como o modelo de queijo suíço, aplica-se à segurança da cadeia de fornecimento de software. Cada mitigação que implementar reduz o seu risco e, quando combina mitigação em toda a cadeia de fornecimento, aumenta a proteção contra diferentes tipos de ataques.

  • Avalie a sua postura de segurança através de frameworks e ferramentas que ajudam a avaliar a capacidade da sua organização de detetar, responder e corrigir ameaças.
  • Saiba mais acerca das práticas recomendadas para proteger a sua cadeia de abastecimento de software e os Google Cloud produtos concebidos para suportar essas práticas.
  • Incorpore Google Cloud funcionalidades de segurança nos seus processos de desenvolvimento, compilação e implementação para melhorar a postura de segurança da sua cadeia de abastecimento de software. Pode implementar serviços gradualmente, com base nas suas prioridades e infraestrutura existente.

O que se segue?