Como a segurança da cadeia de suprimentos centrada no desenvolvedor ajuda a entregar software seguro com rapidez
14 de julho de 2022 // 10 min read
Descubra por que a segurança da cadeia de suprimentos de software é necessária e como a ferramenta de segurança da cadeia de suprimentos de software do GitHub pode ajudá-lo a entregar software seguro rapidamente.
Deseja proteger seu código, mas não quer que etapas extras de segurança o atrasem? Atualmente, os desenvolvedores muitas vezes enfrentam uma escolha difícil: entregar software seguro lentamente ou software inseguro rapidamente. Aqui na GitHub, nós acreditamos que você não deveria ter que escolher entre um ou outro. Leia para explorar por que a segurança da cadeia de suprimentos de software é necessária, como as dependências estão interligadas ao código e como a ferramenta de cadeia de suprimentos da GitHub, o Dependabot, pode ajudar.
Esta página abordará os seguintes tópicos: |
---|
Cadeia de suprimentos de software |
Vulnerabilidades do código aberto |
Segurança do código aberto |
Dependências de software |
Tipos de dependências |
Alterações de dependência |
Gestão de dependências |
Análise de composição de software (SCA) |
Benefícios da SCA |
O que é o Dependabot? |
Recursos do Dependabot |
Ativando o Dependabot |
Dependabot e outras ferramentas da GitHub |
O que é a cadeia de suprimentos de software?
Cadeia de suprimentos de software é um termo popular que se refere a como seu software é construído usando todas as dependências de código interno e de código aberto em sua base de código. Talvez você esteja criando uma aplicação em JavaScript que usa dependências do npm ou talvez esteja criando uma aplicação compilada escrita em C# que usa um mix de código interno e dependências do Nugget. O modelo de ameaça para cada uma dessas aplicações é diferente devido à cadeia de suprimentos de software da qual dependem. O GitHub está aqui para ajudar você a entender o software que usa e para mantê-lo mais seguro usando produtos inovadores, como o Dependabot.
O que são vulnerabilidades do código aberto?
Vulnerabilidades do código aberto são riscos de segurança que residem nos componentes do código aberto. A maioria das vulnerabilidades resulta de erros bem-intencionados que envolvem falta de recursos de segurança, código escrito de forma inadequada ou integração fraca dos componentes. Infelizmente, as vulnerabilidades podem ser exploradas com facilidade por um atacante. Agentes maliciosos podem usar as vulnerabilidades do código para danificar seus sistemas, roubar seus dados ou abusar de seus recursos. A exploração apenas de um ponto fraco pode ter repercussões profundas, permitindo que hackers saltem dali para outros serviços vulneráveis dentro do seu ambiente.
As vulnerabilidades podem causar grandes prejuízos quando você não está olhando e comprometer todo o seu projeto. Os tipos mais comuns de vulnerabilidades atuais incluem:
Injeção de SQL Este é um ataque de injeção de código que é acionado quando um agente mal-intencionado adiciona lógica prejudicial às suas instruções SQL por meio de entradas feitas pelo usuário. A vulnerabilidade decorre da falta de sanitização da entrada ou da forma incorreta como ela é feita. As implicações incluem acesso não autorizado aos dados, modificação e perda de dados. e alterações no conteúdo e no comportamento de uma aplicação.
Injeção de comando. Este é outro ataque de injeção de código que ocorre quando um agente malicioso insere um comando em uma aplicação que será então executada no sistema host usando os privilégios do sistema. Um ataque de injeção de comando pode comprometer a aplicação, seus dados, os servidores conectados e outras infraestruturas.
Cross-site scripting (XSS). Este é um ataque de injeção na Web em que scripts maliciosos são injetados em sites que, de outra forma, seriam benignos. Devido aos scripts JavaScript sendo executados no navegador da vítima, os ataques XSS podem roubar dados confidenciais, como cookies de autenticação. Isso é comum em sites públicos, onde os invasores podem atingir os visitantes do site, adicionando seus próprios anúncios e prompts de phishing.
Falsificação de solicitação entre sites (CSRF). Este ataque força o usuário final a executar ações indesejadas em uma aplicação da Web na qual está atualmente autenticado. Ações indesejadas podem incluir transferências de fundos ou alteração de informações pessoais. Basicamente, esses ataques aproveitam a confiança do site-alvo para solicitações iniciadas por usuários autenticados que, na realidade, são iniciadas em outro lugar.
Para saber mais sobre os tipos de vulnerabilidades mais frequentes, visite nossa postagem no blog sobre vulnerabilidades.
O que é segurança de código aberto?
A segurança de código aberto é uma metodologia que fornece melhor visibilidade do inventário de código aberto de suas aplicações. Com a segurança de código aberto, você pode identificar facilmente todas as dependências diretas, dependências indiretas e a enorme quantidade de informações de segurança relacionadas a cada uma delas. Rastrear isso manualmente consome muito tempo e geralmente é feito por meio de análise de composição de software (SCA), que exploraremos mais tarde.
O que são dependências de software?
Uma dependência de software é um pacote ou uma biblioteca de códigos que é reutilizada em um novo software. O uso de código aberto garante que você possa se concentrar nas partes diferenciadas do seu projeto e construir sobre as bases sólidas da comunidade mais ampla.
Atualmente, quase todos os projetos de software têm algum tipo de dependência. E a quantidade não é pequena; estima-se que de 60 e 90% das bases de códigos sejam compostas de componentes de código aberto. É claro que, se houver problemas de segurança em algum código, isso afetará o produto final, da mesma forma como acontece com os problemas de segurança em código proprietário.
Quais são os diferentes tipos de dependências?
Existem dois tipos de dependências de software: diretas e indiretas. Dependências diretas são bibliotecas ou pacotes que o código chama diretamente. Dependências indiretas são bibliotecas ou pacotes que as dependências chamam. Em outras palavras, são dependências de dependências.
Embora ambos os tipos de dependências exijam gerenciamento para controlar os riscos de segurança, as dependências indiretas exigem consideração adicional porque não são imediatamente óbvias quando ocorrem. As dependências indiretas ficam aninhadas dentro de outras dependências, formando uma árvore de dependências ocultas, mas complexas, que pode facilmente não ser percebida ignorada quando se tenta proteger a cadeia de suprimentos.
Em resumo: os dois tipos de dependências
- Dependências diretas são bibliotecas ou pacotes que o código chama diretamente
- Dependências indiretas são bibliotecas ou pacotes que as dependências chamam
A proteção dos dois tipos é crucial, mas é mais difícil detectar as dependências transitivas.
Como o cenário de dependência mudou ao longo do tempo?
Antes, baixar e instalar uma biblioteca era um trabalho moroso. Por isso, não era prático reutilizar pequenos pacotes. Mas nas últimas duas décadas, ferramentas como Maven e npm tornaram fácil consumir e usar pacotes pequenos. Desde então, o número de pacotes disponíveis para desenvolvedores explodiu. Os pacotes de software são agora uma parte significativa das aplicações modernas.
No entanto, o setor enfrenta agora uma infinidade de questões e problemas de segurança. Como mencionado, se houver um bug em uma dependência, isso pode afetar toda a aplicação. Além disso, as dependências podem ficar desatualizadas rapidamente, limitando a qualidade do software que as chama ou até mesmo causando falha de toda a aplicação.
Embora o uso de dependências possa ajudar você a criar software mais rapidamente, há vários problemas com as dependências que podem fugir do controle, incluindo:
- Vulnerabilidades de segurança que afetam todo o programa
- Código desatualizado que compromete a qualidade do software
O que acontece quando as organizações não gerenciam as dependências?
Pode haver muita frustração quando você instala pacotes de software que dependem de versões específicas de outros pacotes de software e a solução de uma dependência afeta a compatibilidade de outra. Como um jogo de wack-a-mole, isso o colocará você em uma confusão sem fim de problemas de dependência.
É por isso que é importante gerenciar eficazmente as dependências durante todo o ciclo de vida de desenvolvimento de software (SDLC).
O que é análise de composição de software (SCA)?
SCA é um processo automatizado que identifica os componentes de código aberto na base de código. Essas ferramentas inspecionam gerenciadores de pacotes, código-fonte, arquivos de manifesto, imagens de contêiner, arquivos binários e outros. Esses componentes são comparados com o GitHub Advisory Database, que inclui informações do National Vulnerability Database (NVD) e de outros bancos de dados.
O que são bancos de dados de vulnerabilidades?
Os bancos de dados de vulnerabilidades armazenam informações sobre vulnerabilidades conhecidas e comuns. O NVD é o repositório de vulnerabilidades do governo dos EUA e é amplamente usado pela comunidade de código aberto. O GitHub tem seu próprio GitHub Advisory Database, que inclui conselhos de todo o mundo de código aberto.
Quais são os componentes da cadeia de suprimentos que as ferramentas de SCA inspecionam?
- Gerenciadores de pacotes
- Arquivos de manifesto
- Arquivos binários
- Código-fonte
- Imagens de contêiner
- Componentes aprovados
- Downloads do desenvolvedor
- Reutilização de código
- Aplicações comerciais
- Bibliotecas de terceiros
- Desenvolvimentoterceirizado
Quais são os benefícios da SCA?
Quando se trata de proteger sua cadeia de fornecedores, as ferramentas de SCA oferecem segurança, velocidade e confiabilidade. O rastreamento manual de componentes de código aberto não funciona mais, devido à grande quantidade que é usada atualmente. Além disso, a crescente prevalência de aplicativos nativos da nuvem e tecnologias mais complexas tornam obrigatório o uso de ferramentas de SCA confiáveis.
Nunca force um humano a fazer o que um robô pode fazer. – Lema da equipe de segurança da GitHub
À medida que as equipes criam e entregam software com mais rapidez graças à adoção de metodologias de DevOps, você precisa de uma solução de segurança que possa manter sua velocidade de desenvolvimento, assim como uma ferramenta de SCA.
Porém, nem todas as ferramentas SCA são iguais. É melhor selecionar uma ferramenta de SCA que verifique os componentes de código aberto em ambientes conteinerizados, identifique quaisquer vulnerabilidades e aplique as políticas automaticamente. Boas ferramentas de SCA também têm suporte nativo para o registro de contêiner específico que sua TI está usando.
Quando se trata de organizações, a ferramenta de SCA também deve informar se seu código se comunica com a biblioteca afetada e sugerir correções quando possível. A ferramenta também deve identificar as bibliotecas de código aberto na base de código que precisam ser corrigidas ou atualizadas.
O que é Dependabot e como o Dependabot pode manter a segurança da minha cadeia de suprimentos de software?
Dependabot é a ferramenta de SCA da GitHub. O Dependabot facilita a proteção de sua cadeia de suprimentos, ajudando a identificar as dependências, as vulnerabilidades nessas dependências e sugerindo maneiras de corrigi-las ou atualizá-las. A ferramenta se adapta de forma nativa ao fluxo de trabalho do desenvolvedor para que você possa proteger sua cadeia de suprimentos de software em minutos.
O Dependabot detecta vulnerabilidades de suas dependências em tempo real, permitindo que você entenda:
- Os dados de vulnerabilidade para cada dependência, conforme publicado pelo Banco de Dados Consultivo - GitHub Advisory Database
- O impacto da vulnerabilidade no seu projeto, por exemplo, se o seu código está fazendo uma chamada vulnerável
- Como agir e corrigir a vulnerabilidade com um pull request do Dependabot ou com outra solução de contorno
O Dependabot também ajuda você a manter suas dependências atualizadas com as atualizações de versão do Dependabot, o que pode ajudar a evitar muitas vulnerabilidades potenciais em seu projeto, em primeiro lugar!
O Dependabot nos ajuda a escrever código mais seguro. – Max Williams, engenheiro de sistemas principal, Delivery Hero
Quais são os diferentes recursos do Dependabot?
O Dependabot inclui um conjunto dos melhores recursos da categoria, incluindo:
Grafo de dependêcia. Este grafo identifica todas as dependências upstream e os dependentes públicos downstream de um repositório ou pacote. Você pode visualizar dependências e as vulnerabilidades detectadas em seu grafo de dependências.
Alertas do Dependabot. Esses alertas informam sobre repositórios afetados por vulnerabilidades recém-descobertas com base no grafo de dependência do GitHub e no Banco de Dados Consultivo - GitHub Advisory Database.
Atualizações de segurança do Dependabot. Essas atualizações são pull requests automatizadas enviadas a você pelo Dependabot para atualizar uma dependência para a versão mínima que resolve uma vulnerabilidade conhecida.
Atualizações de versão do Dependabot. Essas atualizações verificam novas versões de suas dependências e sugerem atualizações, tudo isso nas configurações que você definiu.
Como ativo o Dependabot?
É fácil ativasro Dependabot. Basta seguir estas cinco etapas:
- Vá para o GitHub.com.
- Navegue até a página principal do repositório.
- Abaixo do nome do repositório, clique em Settings.
- Na barra lateral esquerda, clique em Code secuity analysis.
- Por fim, clique no botão Enable para Dependency graph and Dependabot alerts.. Se desejar que o Dependabot ajude você a atualizar suas dependências, clique também em Enable para Dependabot security updates..
- Descubra mais sobre como proteger sua cadeia de suprimentos de software no GitHub*
Criado especialmente para você, o Dependabot é:
Feito para você. Você pode escolher com que frequência receberá notificações e que tipo de notificações receberá. Os alertas do Dependabot são classificados por um cálculo de "mais importante", que leva em consideração o impacto, a relevância e a capacidade de ação de uma vulnerabilidade para ajudar você a priorizar os alertas. Por exemplo, quando vulnerabilidades chamam funções vulneráveis conhecidas, isso é levado em consideração em nosso cálculo (e informações sobre chamadas de funções vulneráveis também estão disponíveis com seu alerta do Dependabot).
Feito para a comunidade. O GitHub Advisory Database, que alimenta os alertas do Dependabot, é o maior banco de dados de vulnerabilidades em dependências de software do mundo. É mantido por uma equipe dedicada de curadores em tempo integral e alimentado por contribuições de toda a comunidade GitHub.
Gratuíto para sempre. O GitHub acredita que dados e soluções de segurança gratuitos e abertos são essenciais para capacitar a indústria e proteger melhor nossas cadeias de suprimentos de software.
Como os produtos Dependabot funcionam em conjunto com outras ferramentas de segurança da GitHub?
Na GitHub, fornecemos um conjunto de ferramentas de segurança voltadas para o desenvolvedor para ajudar você a encontrar e corrigir vulnerabilidades. Embora o Dependabot ajude você a proteger sua cadeia de suprimentos, nossos outros produtos de segurança funcionam em sinergia com o Dependabot para manter seu código seguro de quase todos os ângulos.
- A Varredura de código, desenvolvida pelo CodeQL, é um produto de teste estático de segurança de aplicativos (SAST) que detecta padrões comuns em seu código. Ele também pode ser executado em pull requests, detectando vulnerabilidades antes que elas cheguem ao main branch. Além de proteger o código, o CodeQL ensina o que você deve observar no futuro, pois cada consulta contém informações sobre o padrão de vulnerabilidade detectado, incluindo exemplos de código vulnerável, formas seguras de implementar o mesmo código e referências externas.
- Para saber mais sobre como começar com a varredura de código e o CodeQL, visite nossa página sobre varredura de código do GitHub Docs.
- A verificação de segredo evita acesso não autorizado e violações. Faz isso pesquisando proativamente em seus repositórios segredos vazados que possam ter sido acidentalmente inseridos no código. Isso envolve varrer o código em busca de padrões de parceiros, incluindo AWS, Slack, Google Cloud e Azure. Como as varreduras levam menos de um segundo, podemos detectar rapidamente os vazamentos à medida que eles ocorrem.
- Para saber mais sobre como começar com a verificação de segredo e o CodeQL, visite nossa página sobre verificação de segredo do GitHub Docs.
- A visão geral da segurança fornece uma visão única e centralizada dos riscos de segurança em toda a sua organização. Isto é especialmente poderoso se você for responsável por centenas ou milhares de repositórios. A ferramenta mostra os riscos de segurança conhecidos, bem como os riscos desconhecidos, onde recursos de segurança ainda não foram configurados.
- Para saber mais sobre a visão geral da segurança, visite nossa página do Docs sobre visão geral da segurança.
Todas essas ferramentas fazem parte do GiHub Advanced Security (GHAS) para empresas. O GHAS incorpora segurança nativamente ao fluxo de trabalho do desenvolvedor, permitindo que você proteja sua cadeia de suprimentos de software e código proprietário durante todo o ciclo de vida do software. Com o GHAS, verificações de segurança automatizadas são executadas a cada pull request. Os problemas de segurança identificados são então compartilhados imediatamente no fluxo de trabalho já conhecido do GitHub. Isso permite que você corrija vulnerabilidades em minutos, não no tempo padrão do setor, que é de meses.
- Para saber mais sobre o GHAS, visite nossa página do Docs sobre o GHAS.
A segurança é essencial, mas a confiabilidade também é importante. Confiamos no GitHub para implantar nossos produtos com rapidez e segurança. –Lee Cookson, diretor de Engenharia, Dow Jones
Para falar com um representante sobre como o GitHub pode ajudar sua organização a proteger seu código, inscreva-se para assistir a uma demonstração gratuita.
Código seguro sem prejudicar a inovação | Escalação do GitHub Advanced Security |
---|---|
GitHub Advanced Security ajuda você a encontrar e corrigir problemas de segurança em seu código mais cedo para escalar e automatizar a segurança da aplicação. Saiba mais |
Vamos falar sobre como você pode dimensionar e adotar o GitHub Advanced Security de forma automatizada e estruturada. Saiba mais |
Tags