Ferramentas de auditoria de segurança

Existem diversos pacotes disponíveis dentro do repositório do Debian que são projetados para ajudar em auditorias de código-fonte. Dentre eles:

Além disso, note que existem outras ferramentas específicas para determinados conjuntos de vulnerabilidades de segurança que talvez não estejam empacotadas para o Debian ainda, mas podem ser úteis para um(a) auditor(a). Dentre elas:

Nenhuma dessas ferramentas é perfeita e somente podem ser usadas como diretrizes para estudo posterior, mas dado que são muito simples de usar, é válido gastar um tempo para tentá-las.

Cada uma das ferramentas tem diferentes pontos fortes e fracos, então recomenda-se usar mais de uma.

Flawfinder

O flawfinder é uma ferramenta Python que é projetada para analisar código-fonte C e C++ e procurar por possíveis falhas de segurança.

Quando executada contra um diretório contendo código-fonte, ela retornará um relatório dos possíveis problemas detectados, classificados por risco (onde risco é um inteiro 1–5). Para ignorar riscos menores, é possível dizer ao programa para não reportar falhas abaixo de um determinado nível de risco. Por padrão a saída aparecerá em texto puro, mas um relatório HTML também está disponível.

O programa trabalha escaneando o código e procurando pelo uso de funções que estão contidas dentro do seu banco de dados de funções, que são comumente usadas indevidamente.

Para ajudar na leitura do relatório, é possível fazer com que o relatório de saída contenha a linha que possua a função que está sendo usada; isto pode ser útil para detectar imediatamente um problema ou rejeitá-lo da mesma forma.

Você pode ver um exemplo de como o flawfinder é usado, e sua saída, na seção de exemplos de auditoria.

ITS4

O ITS4 é uma ferramenta contida na seção non-free do repositório Debian e somente está disponível para a versão woody.

O ITS4 pode ser usado para escanear tanto código C quanto C++, procurando por possíveis brechas de segurança, muito parecido com o flawfinder.

A saída que ele produz tenta ser inteligente, ignorando alguns casos nos quais as chamadas para funções perigosas foram feitas cuidadosamente.

RATS

O RATS é uma ferramenta similar às listadas acima, com a exceção de que ela vem com suporte para uma gama muito maior de linguagens. Atualmente, ela tem suporte para C, C++, Perl, PHP e Python.

A ferramenta usa um arquivo XML simples para ler suas vulnerabilidades, de modo que é uma das ferramentas disponíveis mais fáceis de modificar. Novas funções podem ser adicionadas facilmente para cada linguagem suportada.

Você pode ver um exemplo de como o RATS é usado, e sua saída, na seção de exemplos de auditoria.

pscan

O pscan difere das ferramentas descritas anteriormente porque não é um scanner de propósito geral. Ao contrário, ela é um programa especificamente voltado para detecção de bugs de formato de string.

A ferramenta tentará encontrar possíveis problemas com o uso de funções variadas dentro do código-fonte C e C++, tais como printf, fprintf e syslog.

Bugs de formato de string são fáceis de detectar e corrigir; embora eles sejam a mais recente classe de ataques de software, a maioria deles provavelmente já foi encontrada e reparada.

Você pode ver um exemplo de como o pscan é usado, e sua saída, na seção de exemplos de auditoria.

Entendendo a saída do escaneamento

Cada uma das ferramentas gerais de escaneamento incluirá uma saída descrevendo a falha detectada e possivelmente dará sugestões sobre como o código pode ser corrigido.

Por exemplo, a saída a seguir foi retirada do RATS e descreve os perigos da getenv:

"Variáveis de ambiente são entradas altamente não confiáveis. Elas podem ser de qualquer tamanho e podem conter qualquer dado. Não faça qualquer suposição em relação ao conteúdo ou tamanho. Se possível evite usá-las a todo custo, e se necessário, higienize-as e restrinja-as para tamanhos razoáveis".

Se precisar de conselhos adicionais sobre como corrigir uma falha que foi reportada, você deve estudar um livro de programação segura, como o documento (em inglês) HOWTO programação segura para Linux e Unix do David A. Wheeler.

(Lembre-se de que ao reportar problemas de segurança, uma correção (patch) que conserte essa brecha é altamente apreciada)

Discussões relativas ao fechamento de partes de código particularmente problemáticos podem ser feitas na lista de discussão debian-security; como esta é uma lista de discussão com arquivo público, tenha cuidado em não deixar óbvio qual programa contém a falha.