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
- Inserir código vulnerável, e verificar o resultado;
- Inserir código não vulnerável, e verificar o resultado;
- Inserir falso-positivo, e verificar o resultado;
- 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.
Projeto TCC
By Robson Cruz
Projeto TCC
Apresentação parcial sobre os resultados obtidos na pesquisa para o projeto de TCC 1.
- 103