quinta-feira, 5 de julho de 2007

Ferramentas de Análise Código Fonte

A análise de código para fins de segurança é uma das alternativas bastante utilizadas pelo mercado para o desenvolvimento de software seguro. Sua difusão se deve primeiro aos resultados, em termos de localização de bugs de segurança em código e, segundo, pelaa facilidade de incorporação ao ciclo de desenvolvimento, uma vez que as principais ferramentas se integram às IDEs mais usadas hoje, como o Eclipse e o Visual Studio da Microsoft.

Todas as ferramentas comerciais existentes se fundamentam no mesmo princípio, regras e padrões de codificação suspeitos. Isso as tornam muito dependentes da ação humana. Num primeiro momento, para desenhar essas regras a partir de muita pesquisa e depois, para avaliar o resultado de uma análise de código.

As ferramentas de análise de código fundamentam a an Teorema de Rice, que coloca que qualquer questão não trivial endereçada a um programa pode ser reduzido ao Problema de Halting, isso implica que os problemas de análise de código são insolúveis no pior caso e, por consequência, que essas ferramentas são obrigadas a fazer aproximação, cujo resultado é algo não perfeito.

Os principais problemas das ferramentas de análise de código fonte para segurança estão concentradas em:
  • Falso negativo - o programa contém bugs não endereçados pela ferramenta. Isso dá a falsa sensasão de que não existe bugs, que na verdade significa que a ferramenta não foi capaz de encotrar mais exemplares.
  • Falso positivo - a ferramenta endereça bugs não existentes. Isso se refere a duas possibilidades: um erro propriamente dito, onde a ferramenta localizou um bug que não existe fisicamente; ou há uma classificação da ferramenta incoerente com as variáveis do ambiente. Por exemplo, a ferramenta poderia encontrar um bug de SQL Injection, que na realidade, não interessa para o software investigado pelas suas características de operação.
Vale ressaltar que as ferramentas comerciais procuram reduzir o falso positivo, assumindo o custo de deixar passar falsos negativos.

As análises de código fonte podem ser divididas de acordo com as seguinteas abordagens:
  • Análise estática: a análise estática pode compreender as técnicas de busca direta a partir de lista de strings (grep); a análise léxica, onde os tokens do código fonte são comparados com àqueles contidos numa biblioteca de vulnerabilidades e análise semântica, onde se prevê como o programa se comportará em tempo de execução, usando a tecnologia de compiladores (árvore sintática abstrata)
  • Análise de fluxo de controle: usada para caminhar através das condições lógicas do código. O processo funciona como a seguir:
    1. Observe uma função e determine cada condição de desvio. Essas incluem loops, switchs, if's e blocos try/catch.
    2. Entenda as condições sobre como cada bloco será executado.
    3. Vá para a próxima função e repita.
  • Análise de fluxo de dados: usada para seguir fluxos de dados dos pontos de entrada aos pontos de saída. O processo funciona como descrito a seguir:
    1. Para cada entrada , determine o quanto você acredita na fonte de entrada. Quando em dúvida você não deve acreditar.
    2. Siga o fluxo de dados para cada saída possível, registrando ao longo do percurso qualquer tentativa de validação de dados.
    3. Vá para a próxima entrada e continue.
A ferramenta mais eficiente é a que consegue fazer uso dessas abordagens combinadas para reduzir tanto o falso negativo, como o falso positivo. Alguns fornecedores estão na busca por ferrnamentas efetivas em temos de análise de código para segurança. Dentre eles, vale destacar:
Vale reforçar, que para conseguir tirar o melhor proveito das ferramentas de análise de código fonte para segurança, seu uso deve estar amparado por um ciclo de desenvolvimento seguro, como o CLASP ou SDL.

Informações adicionais :
Software Security Building Security In
Secure Programming with Static Analysis
Security Engineering Explained - Versão em português.

2 comentários:

Henrique disse...

existe uma ferramenta muito boa tambem chamada Klocwork.
www.klocwork.com

Eu acho que eh a melhor de todas, eles suportam C, C++, C# e java.

Ricardo Albuquerque disse...

Tem ainda o Safeval. www.safeval.com. Nacional. Suporta 14 linguagens. Versão free. Bastante gente usando.