BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias GitHub integra análise de código Semmle para detecção contínua de vulnerabilidades

GitHub integra análise de código Semmle para detecção contínua de vulnerabilidades

Favoritos

Com a aquisição da startup Semmle, o GitHub visa tornar a detecção contínua de vulnerabilidades parte do serviço de integração e implantação contínua.

Anunciando a aquisição, Nat Friedman, CEO do GitHub, escreveu:

O revolucionário mecanismo de análise de código semântico da Semmle permite que os desenvolvedores escrevam consultas que identificam padrões de código em grandes repositórios de código e pesquisem vulnerabilidades e problemas de segurança.

A Semmle criou a LGTM, uma plataforma de análise de código contínua destinada a identificar vulnerabilidades nos sistemas de software. No coração da LGTM, está o Semmle QL, um mecanismo de pesquisa de código e linguagem de consulta que permite que a análise de código encontre e resolva as vulnerabilidades de segurança.

O QL usa análise de variantes, uma técnica que os engenheiros de segurança geralmente usam para identificar vulnerabilidades a partir de uma já conhecida que é tratada como uma semente para o processo de pesquisa. Em outras palavras, depois que uma vulnerabilidade é identificada por meio de um teste de penetração, por exemplo, os pesquisadores de segurança auditam o restante da base de código para encontrar problemas semelhantes. Esse é o processo que o QL automatiza e se estende por vários blocos de código, permitindo que os desenvolvedores escrevam consultas que podem ser compartilhadas e reutilizadas. Segundo a Semmle, as soluções foram usadas para identificar milhares de vulnerabilidades, incluindo mais de 100 CVEs em projetos de código aberto.

Um recurso importante do mecanismo de análise Semmle é tratar o código como dados no nível AST, e não como texto no qual operamos usando expressões regulares. Este é um exemplo de como podemos analisar uma função C que itera sobre uma matriz passada como argumento e garante que a matriz de comprimento suficiente seja passada em cada chamada:

import cpp

from Function f, FunctionCall c, int i, int a, int b
where f = c.getTarget()
  and a = c.getArgument(i).getType().(ArrayType).getArraySize()
  and b = f.getParameter(i).getType().(ArrayType).getArraySize()
  and a < b
select c.getArgument(i), "Array of size " + a
       + " passed to $@, which expects an array of size " + b + ".",
       f, f.getName()

No trecho anterior, f é a função, c a chamada da função, i é um número inteiro usado para iterar sobre os argumentos da chamada, a e b são usados para armazenar o tamanho esperado e o tamanho real da matriz. O seguinte trecho visa garantir que todos os campos públicos de uma classe sejam declarados como finais:

from Field f
 where f.hasModifier("public")
       and
       not(f.hasModifier("final"))
 select f.getDeclaringType().getPackage(),
        f.getDeclaringType(),
        f

Como podemos observar, a sintaxe da QL é declarativa, um pouco parecida com o SQL, e orientada a objetos. Atualmente, o Semmle suporta C e C++, C#, COBOL, Java, JavaScript, TypeScript e Python. O suporte ao Go está sendo desenvolvido.

O Semmle QL não é um produto novo e foi usado por grandes empresas, diz a Semmle, incluindo Uber, NASA, Microsoft e Google. Isso contribuiu para a construção de uma grande biblioteca de consultas QL. De acordo com a Semmle, os desenvolvedores podem reutilizar milhares de consultas de código aberto e executá-las como parte dos pipelines de IC automáticos sempre que enviarem uma nova solicitação de recebimento.

Atualmente, o Semmle QL pode ser usado através do LGTM, que pode se conectar à conta do GitHub, mas a empresa planeja torná-lo parte integrante do serviço de CI/CD por meio do GitHub Actions.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT