Como a GitHub protege o software de código aberto
23 de fevereiro de 2021 // 12 min read
A GitHub trabalha muito para proteger o software de código aberto que você usa. Nós fornecemos às empresas as práticas recomendadas para aprender e aproveitar seus fluxos de trabalho. Faça o download deste artigo técnico em PDF para saber mais.
Papel da GitHub na proteção de software de código aberto
O software de código aberto está em toda parte, potencializando as linguagens, estruturas, e aplicativos que sua equipe usa todos os dias. Um estudo conduzido pelo Synopsys Center for Open Source Research and Innovation descobriu que o software corporativo é agora composto por mais de 90% de código-fonte aberto, e as empresas estão percebendo isso. O estudo State of Enterprise Open Source (Estado do código aberto corporativo) da Red Hat confirmou que “95% dos entrevistados afirmam que o código aberto é estrategicamente importante” para as organizações. A disponibilização ampla do código mudou a forma como o software é construído, com mais reutilização de código e dependências complexas, mas não sem introduzir preocupações de segurança e conformidade. Projetos de código aberto, como todos os softwares, podem ter vulnerabilidades. Podem até ser alvo de agentes maliciosos que tentam usar código-fonte aberto para introduzir vulnerabilidades downstream, atacando a cadeia de suprimentos de software. Essas ameaças expõem a sua organização a riscos adicionais.
Na GitHub, vemos a segurança como um problema que precisamos resolver como uma comunidade: um problema que afeta todos os softwares, independentemente da quantidade de código proprietário que eles contenham. Da mesma forma, uma comunidade de código aberto segura e saudável não é boa apenas para o software de código aberto. Ela também beneficia milhões de empresas que dependem dele. É por isso que criamos ferramentas e processos que permitem que organizações e mantenedores de código aberto codifiquem com segurança durante todo o ciclo de vida de desenvolvimento de software. Deslocar a segurança para a esquerda permite que organizações e projetos evitem erros e falhas antes que ocorra um incidente de segurança.
A GitHub trabalha duro para proteger nossa comunidade e o software de código aberto que você usa, desenvolve e com o qual contribui. Por meio de recursos, serviços e iniciativas de segurança, fornecemos aos milhões de projetos de código aberto na GitHub, e às empresas que dependem deles, práticas recomendadas para aprender e aproveitar seus fluxos de trabalho.
Tornando o código aberto mais seguro
GitHub Advisory Database, alertas de dependências vulneráveis e Dependabot
Um dos principais elementos para identificar problemas de segurança é trabalhar com um rico banco de dados de vulnerabilidades. As ferramentas de detecção de vulnerabilidades de dependências do GitHub usam uma combinação de dados diretamente dos GitHub Security Advisories e do Banco de Dados Nacional de Vulnerabilidade dos EUA (NVD) para criar uma imagem completa das vulnerabilidades em código aberto. Este conjunto de dados combinado reside no GitHub Advisory Database e alimenta alertas do Dependabot e atualizações de segurança. O Advisory Database também está sob uma licença do Creative Commons Attribution 4.0, o que significa que está disponível gratuitamente para qualquer pessoa usar, desde que atribua a GitHub como fonte dos dados.
Para gerar correções automatizadas, começamos com os alertas de CVE, que descrevem versões vulneráveis e corrigidas, e depois identificamos repositórios suscetíveis usando suas respectivas definições de gerenciamento de dependência de linguagem. Isso nos permite analisar o manifesto de um repositório e alertar seus administradores sobre dependências vulneráveis e, especificamente, sobre as versões que eles precisam atualizar para corrigir esses problemas. Desde o lançamento dos alertas de segurança em 2017, enviamos alertas sobre mais de 89 milhões de vulnerabilidades encontradas em repositórios de código aberto.
Embora capacidades similares estejam disponíveis em ferramentas de terceiros, nossa pesquisa mostra que muitos repositórios de código aberto não tiram total proveito delas. Receber notificações sobre vulnerabilidades por meio de alertas é apenas parte da solução do problema. Nossos dados mostram também que desses 89 milhões de alertas de vulnerabilidade, surpreendentes 70% permaneceram sem correção um mês após a notificação. Embora eles agora estejam cientes da existência de uma vulnerabilidade, muitos desenvolvedores e administradores não têm certeza de como resolvê-la, deixando suas aplicações abertas a problemas de segurança e a ataques. Para ajudar, a GitHub sugere correções automáticas. Assim que uma vulnerabilidade é encontrada, usamos o Dependabot para criar automaticamente uma pull request para vulnerabilidades conhecidas que permite mesclar e implantar rapidamente alterações de correção em sua base de código. Isso significa que cada alerta de segurança agora inclui um nível de gravidade, um link para o arquivo afetado em seu projeto e um link para um pull request com a correção de segurança automatizada.
A GitHub também torna mais fácil para os mantenedores de projetos de código aberto abordar e compartilhar vulnerabilidades de segurança recém-descobertas. Em vez de depender de listas de e-mail, grupos de código aberto, notas de lançamento ou changelogs para se comunicar com seus usuários, os projetos agora podem se comunicar diretamente no GitHub. A GitHub é uma Autoridade de Numeração CVE (CNA) e está autorizada a atribuir números de identificação CVE. Graças a esse recurso, os mantenedores podem solicitar um número CVE para um problema com o qual estão lidando e publicar informações diretamente no GitHub para que os desenvolvedores da comunidade GitHub vejam o comunicado primeiro. Isso nos permite gerar alertas de segurança para vulnerabilidades para toda a comunidade e compartilhá-los primeiro no GitHub.
Mas os mantenedores nem sempre marcam as correções de segurança que encontram – portanto, encontrar esses commits entre o grande número de processos do GitHub todos os dias requer ajuda extra. Nosso modelo de aprendizado de máquina analisa todos os commits em arquivos de dependência e extrai aqueles que podem estar relacionados a uma versão de segurança. O modelo usa diferenças e mensagens de commit para saber como o intervalo de versões necessário mudou e entender a intenção da mudança. Em seguida, ele agrega ao longo do tempo para determinar se uma dependência lançou uma nova versão com uma correção de segurança que deve acionar um alerta.
O que vem depois?
Atualmente, a GitHub oferece suporte a alertas de segurança e atualizações de segurança automatizadas para os ecossistemas NuGet, Python, Ruby, npm, Yarn, Composer e Maven, mas qualquer mantenedor de código aberto pode publicar um comunicado no GitHub conforme ele se aplica ao seu projeto. Nós continuaremos adicionando atualizações de origem interna e externa aos nossos dados de vulnerabilidade, ajudando os projetos a compreender melhor seus riscos. E planeamos continuar a adicionar apoio a mais ecossistemas.
Divulgação e acesso responsável
Apesar da verificação de código e da proteção contra agentes maliciosos, serão inevitavelmente encontradas vulnerabilidades. E quando isso acontece, o GitHub simplifica ao máximo a divulgação e o gerenciamento da vulnerabilidade.
Para começar, lançamos nossa API Security Advisory para fornecer avisos de segurança como um serviço público. Um elemento básico para uma poderosa plataforma de segurança, ela fornece uma maneira de acessar os feeds de segurança que agregamos e validamos, além das atualizações de dependência que monitoramos em milhões de projetos. Agora os dados de vulnerabilidade estão facilmente disponíveis e prontos para serem integrados às ferramentas e fluxos de trabalho que você já usa.
A API Security Advisory também fornece recursos adicionais e complementa os feeds de NVD com preocupações como malware e outras vulnerabilidades que o GitHub Security Lab encontrou e compartilhou. Como um serviço público, a API fornece uma base para a GitHub, pesquisadores e integradores criarem coletivamente software mais seguro para todos nós.
Para melhorar a segurança da cadeia de suprimentos de software de código aberto, os mantenedores podem corrigir e divulgar a existência de vulnerabilidades publicando avisos em seus repositórios no GitHub. Os avisos criados por meio desse recurso são então selecionados por meio de nosso serviço interno de advisory database e transmitidos por meio de alertas de dependência, nosso banco de dados externo e a API. Os usuários também podem solicitar e receber identificadores CVE.
Em última análise, nosso objetivo é entender melhor como as vulnerabilidades de segurança começam e usar essas informações para melhorar as ferramentas de vulnerabilidade de código e identificar problemas mais cedo.
O que vem depois?
Nós planejamos expandir nossos recursos de rastreabilidade, incluindo detalhes do histórico do Git sobre quando a vulnerabilidade foi introduzida, quais revisões foram associadas a ela e muito mais.
Pacotes
Quando você trabalha em um projeto que depende de pacotes, é importante confiar neles, entender seu código e conectar-se com a comunidade que os criou. Dentro das organizações, você precisa encontrar rapidamente quais pacotes foram aprovados para uso. O GitHub Packages facilita o uso da mesma interface familiar do GitHub para encontrar pacotes públicos em qualquer lugar no GitHub, bem como pacotes privados dentro de sua organização ou repositórios, com segurança. Você pode descobrir, usar e publicar pacotes públicos e privados com segurança em um só lugar. Os pacotes hospedados no GitHub também incluem todas as informações que você precisa: conteúdo do pacote, estatísticas de download, histórico de versões e muito mais.
O que vem depois?
O GitHub Packages oferece suporte a ferramentas familiares de gerenciamento de pacotes: JavaScript (npm), Java (Maven), Ruby (RubyGems), .NET (NuGet) e imagens Docker atualmente, com muito mais por vir.
Insights sobre dependências
A segurança não se limita apenas a repositórios individuais. Compreender a segurança de toda a sua organização depende de muito mais, como entender de quais linguagens você depende, para que sua equipe tenha a equipe certa para oferecer suporte a aplicações essenciais aos negócios. Acima de tudo, a segurança depende da compreensão da integridade do seu software em tempo real.
O GitHub dá às organizações acesso a insights sobre dependências, permitindo que as equipes naveguem por todas as dependências de software em uso de uma só vez, em um só lugar. Os insights sobre dependências também facilitam a filtragem e visualização rápida de dependências com avisos de segurança ou aquelas que usam uma licença específica, algo especialmente crítico para organizações com políticas rígidas de segurança e conformidade. Finalmente, tornamos possível listar todos os repositórios e manifestos de dependência que incluem uma dependência específica, para que você possa atualizar ou remover dependências que não atendam aos seus requisitos.
O que vem depois?
Continuaremos a expandir nosso painel de insights sobre dependências para incluir integrações e relatórios junto com outras ferramentas de segurança.
Verificação de segredo
Garantir que os projetos de código aberto não dependam de bibliotecas vulneráveis é uma forma de causar um impacto imediato. Outra é ajudar os projetos a construir e aplicar práticas seguras de criação de código e evitar as vulnerabilidades de segurança antes que elas sejam expostas. As credenciais de acesso ao repositório são essenciais para manter o a segurança do código, e geralmente são gerenciadas pelas equipes.
Ainda assim, mesmo as organizações mais seguras eventualmente cometem um erro e, quando vazados, os tokens de acesso tornam-se alvos fáceis para os invasores. Assim como trouxemos informações de segurança de vulnerabilidades e dependências nativamente para nossa plataforma, também queremos ajudar a proteger os desenvolvedores contra vazamento de segredos.
A primeira etapa é a verificação de segredo do GitHub, uma plataforma escalonável de varredura de código em tempo real que usamos para inspecionar commits recebidos em busca de informações confidenciais. A verificação de segredo detecta credenciais de várias plataformas, incluindo Amazon Web Services, Microsoft Azure, Google Cloud Platform, Slack e Stripe. Em repositórios públicos, se um desenvolvedor confirmar acidentalmente uma credencial para qualquer um dos serviços suportados, nós trabalhamos com esses serviços para identificar a divulgação e invalidar proativamente as credenciais antes que agentes maliciosos possam usá-las de forma comprometedora. Já identificamos milhões de tokens desde o lançamento da verificação de segredo, em 2018, e esperamos trabalhar com ainda mais formatos e ferramentas no futuro.
O que vem depois?
Vamos ajudar as organizações a aproveitar o que está atualmente disponível para repositórios públicos. As organizações poderão verificar os tokens que definirem, incluindo formatos potenciais, em busca de informações de identificação pessoal e outros dados confidenciais.
Além desses formatos de token, continuaremos a desenvolver a plataforma de varredura de código do GitHub, adicionando mais recursos e pontos de integração que podem:
- Detectar vulnerabilidades de segurança comuns no código enquanto ele está sendo escrito
- Detectar mais vulnerabilidades, como divulgação de nome de usuário ou senha
E, para oferecer suporte aos recursos de segurança criados pelo GitHub e pela comunidade, nossas equipes de aprendizado de máquina e de ciência de dados trabalharão com petabytes de dados para identificar melhor os problemas de segurança. Saber disso nos permitirá alertar os desenvolvedores antes que o código vulnerável seja mesclado e ajudá-los a escrever software mais seguro desde o início Nosso objetivo é impedir que projetos de código aberto introduzam vulnerabilidades de segurança, em vez de responder apenas quando forem encontradas.
Insights da atividade
Projetos de código aberto são mais do que apenas o código. Como qualquer organização, sua popularidade e impacto aumentam e diminuem ao longo do tempo. O conjunto de ferramentas mais importante hoje pode ver seu uso cair para quase zero em apenas alguns meses. O GitHub facilita a compreensão dos usuários sobre o que está por trás do código em cada projeto de código aberto.
Com o painel de atividades, as organizações podem ter insights sobre o trabalho que suas equipes estão realizando. O painel fornece informações sobre padrões de desenvolvimento, como sua equipe está usando a plataforma GitHub, vulnerabilidades de dependência e problemas. As equipes podem usar esses dados para tomar melhores decisões e criar software mais seguro, mantendo-se informadas, por exemplo, conhecendo as linguagens de desenvolvimento usadas em toda a organização e estando cientes das vulnerabilidades de segurança e como elas são resolvidas.
Nossos insights de atividades também ajudam as organizações a entender como suas equipes estão usando o GitHub para colaborar e trabalhar no código. Esses insights também ajudam a monitorar, relatar e agir de acordo no uso de código aberto da sua organização.
Segurança, conformidade e integridade da plataforma
Para proteger adequadamente o código nos projetos do GitHub, precisamos ter certeza de que a plataforma em si é segura. A manutenção de uma solução de software que atende a 40 milhões de usuários e milhares de empresas é uma tarefa difícil, especialmente quando há esforços ativos para tentar causar interrupções, incluindo o maior ataque de DDOS já registrado no início de 2018.
Além de proteger a nossa plataforma, a conformidade é uma parte importante do nosso trabalho de segurança. Temos orgulho de dizer que o GitHub é compatível com SOC II e possui baixa certificação FedRAMP.
Tornar seguro para construir em código aberto
À medida que o código-fonte aberto se torna mais seguro, o mesmo acontece com o software interno que depende dele. Embora usemos as mesmas ferramentas, recursos e produtos para proteger seus repositórios privados, também queremos ajudar suas equipes a também gerenciar códigos externos.
A primeira peça dessa estratégia é o GitHub Connect: um conjunto de recursos que traz uma integração mais estreita entre o GitHub Enterprise Cloud, nossa solução baseada em SaaS, e o GitHub Enterprise Server, nossa solução auto-hospedada que pode ser executada na instalação, atrás do seu firewall, ou em uma nuvem privada.
GitHub Connect
O código aberto seguro só é útil se você puder usá-lo facilmente em seu próprio negócio. O GitHub Connect permite que você se conecte com segurança à maior comunidade mundial de desenvolvedores de software e projetos de código aberto no GitHub, mantendo seu código mais crítico protegido por trás do firewall. Ele também nos permite fornecer recursos e dados provenientes do público no GitHub para o seu ambiente de negócios.
Com a pesquisa unificada, os desenvolvedores podem pesquisar repositórios privados e de código aberto diretamente no GitHub Enterprise. O acesso direto a esses repositórios significa que você pode aproveitar projetos existentes e entender melhor o que seus usuários procuram, tudo em um fluxo de trabalho mais gerenciado, visível e seguro.
Você também pode aproveitar os dados do GitHub, incluindo alertas críticos de segurança e um caminho claro para a eliminação de vulnerabilidades, por meio do GitHub Connect. Desenvolvedores e organizações estão corrigindo vulnerabilidades em seus projetos, mas não necessariamente notificam os outros. Com a visibilidade dos dados agregados por trás dessas correções, garantimos que você não esteja usando uma biblioteca vulnerável ou desatualizada e alertaremos se isso acontecer.
Finalmente, como líder de desenvolvimento, você tem muitas decisões a tomar, mas o GitHub Connect elimina uma decisão importante: permanecer nas instalações ou usar a nuvem. Conecte-se a uma comunidade de inovação, maximize a eficiência operacional, fique mais seguro e forneça uma experiência do desenvolvedor incomparável, tudo isso mantendo seu código o mais próximo que você precisa que ele esteja.
O que vem depois?
Esses recursos são apenas o início. A seguir, vamos integrar o fluxo de trabalho de fork e pull usado hoje em projetos de código aberto no GitHub Enterprise. As organizações poderão criar fork do o código usando um único gateway criptografado do GitHub em seu ambiente corporativo e ter acesso local a ele. Você terá acesso ao código, não apenas aos binários lançados, permitindo que você verifique e investigue com suas próprias ferramentas. E, conectado ao GitHub, você pode manter as bibliotecas atualizadas com apenas o pressionar de um botão, facilitando a integração das mais recentes correções de segurança e bugs críticos.
Estendendo ainda mais nossos recursos de pesquisa, os administradores de negócios terão controle sobre o código disponível, restringindo as bibliotecas de código aberto que os usuários podem trazer para o seu ambiente com base na licença, reputação ou outros fatores. E usando o grafo de dependências do GitHub, você pode verificar se todas as bibliotecas em uso passaram por canais aprovados.
Código aberto dentro da sua organização não envolve apenas consumir o código, trata-se também de compartilhar código. Esteja você compartilhando seus próprios projetos com o mundo ou atualizando suas correções de bugs e patches para reduzir a sobrecarga, o GitHub Connect fornece uma conexão do seu ambiente seguro com os projetos de código aberto no GitHub. Mais do que apenas um pull request, ele permitirá que você adicione verificações adicionais para garantir que esses patches ou bibliotecas de código aberto atenderam às suas aprovações internas, incluindo aprovação legal, técnica e, em alguns casos, da alta administração. Aproveitar os fluxos de trabalho de código aberto com os quais os desenvolvedores estão acostumados, mas com revisão, aprovação e conformidade adicionais, pode ajudar as organizações a aproveitar ao máximo o código aberto.
GitHub como uma biblioteca extensível
O GitHub sempre teve uma filosofia de melhor qualidade. Estamos construindo uma plataforma que permite que nossos parceiros criem integrações perfeitas e ampliem o GitHub com novos recursos, funcionalidades e fluxos de trabalho. Essa estratégia também se aplica às ferramentas de segurança.
Temos visto diferentes organizações adotarem estratégias diferentes com seus fluxos de trabalho de segurança. Algumas empresas integram a ferramenta que melhor atende às suas necessidades, enquanto outras integram diversas ferramentas com a ideia de que a prevenção de violações vale qualquer quantia gasta. Com a introdução do GitHub Actions, ficou mais fácil do que nunca integrar as ferramentas que você precisa.
Seja qual for a sua estratégia, você provavelmente não quer deixar a segurança ao acaso. Ser capaz de integrar ferramentas de líderes no espaço de segurança, incluindo Black Duck, HP, IonChannel, Sonatype, Snyk e White Source, garante que você possa usar os aplicativos e serviços mais recentes para manter sua empresa segura. E quando novas ferramentas surgirem, você poderá atualizar ou substituir as ferramentas existentes com a mesma facilidade com que as adicionou.
Se você usa ferramentas internas para gerenciar inteligência contra ameaças ou identificar vulnerabilidades de software, também poderá integrá-las à nossa plataforma usando nossas APIs ou substituí-las conforme necessário. Criar seus próprios alertas em nosso Advisory Database ou usar nossas APIs de dependência para entender melhor as bibliotecas e o código já em uso pode ajudá-lo a mover a segurança para a esquerda, integrando e se beneficiando de suas estratégias mais cedo no ciclo de vida do software.
O que vem depois?
A estratégia da plataforma GitHub acelerando, com formas adicionais de integração, parceiros adicionando suporte para GitHub e novos conjuntos de dados para tornar as interações de nossos parceiros ainda mais ricas. Assim como o melhor software é desenvolvido por uma equipe diversificada de desenvolvedores, o melhor software é desenvolvido por um conjunto diversificado de ferramentas. Na GitHub, queremos tornar isso mais fácil e mais poderoso.
Tags