Codificação Segura

Introdução

Objetivo

  • Compreender a forma que as ferramentas existentes realizam a análise de código em busca de vulnerabilidades.
  • Compreender as diferentes técnicas utilizadas para detecção de vulnerabilidades;
  • Encontrar os problemas enfrentados atualmente.

Técnicas

  • DFA (Data Flow Analysis);
  • CFG (Control Flow Graph);
  • Taint Analysis;
  • Lexical Analysis;

Vantagens

  • Altamente escalável;
  • Pode ser executada repetidamente;
  • Ferramentas poder auxiliar na detecção de falhas como Buffer Overflow, Injection e Address Switching;

DESVantagens

  • Muitas vulnerabilidades não são fáceis de encontrar, como problemas de autenticação;
  • Falsos positivos;
  • Difícil comprovar que o problema encontrado é realmente uma vulnerabilidade;

Ferramentas Analizadas

Bandit

  • Desenhado para encontrar vulnerabilidades mais comuns em código Python
  • Realiza seus testes utilizando uma AST, executando os plugins necessários e apropriados para cada nó.
  • Fácil utilização e instalação.

FindBugs & FindSECBugs

  • Mais utilizado para encontrar problemas de código do que vulnerabilidades;
  • Plugin permite uma melhoria nessa habilidade;
  • Realiza análise estática de código Java, distribuído sobre a LGPL;
  • Necessita SDK 1.7.0 ou superior, mas analisa códigos de qualquer versão de Java desde 1.0 a 1.8.

FlawFinder

  • Examina código C/C++ baseado em análise léxica;
  • Excelente para verificação superficial de falhas antes da distribuição pública;
  • Produz uma lista de "hits" , ranqueados de acordo com o seu nível de risco associado;

SonarQube

  • Suporta mais de 20 linguagens diferentes através de plugins;
  • Utilizado para controle de qualidade;
  • Utiliza a metodologia de "Consertar o Vazamento";

Outras Ferramentas

  • ShellCheck;
  • Pylint;
  • PyT;
  • RIPS;
  • Google Search Diggity.

Procedimento

  1. Inserir código vulnerável, e verificar o resultado;
  2. Inserir código não vulnerável, e verificar o resultado;
  3. Inserir falso-positivo, e verificar o resultado;
  4. Inserir falso-negativo, e verificar o resultado;

 

Inserir código fora dos padrões, mal escrito ou com problemas de escopo;

Foram utilizados 50 exemplos de código de diferentes fontes, incluindo o NIST, Github e Exploit-db.

Resultados

Reais Positivos

Reais Negativos

Falsos Positivos

Falsos Negativos

"Código Ruim"

Observações

  • A técnica utilizada pela ferramenta pareceu influenciar muito nos resultados;
  • Muitas ferramentas não foram capazes de lidar com código propositalmente ruim;
  • Em códigos que envolviam uma arquitetura cliente - servidor, houveram casos onde não foi possível uma verificação precisa.
Made with Slides.com