Programação Segura - Flawfinder
-
Upload
jorge-messa-junior -
Category
Documents
-
view
248 -
download
3
description
Transcript of Programação Segura - Flawfinder
-
Anlise Esttica de Algoritmo
Flawfinder
Clayton Oliveira, Jorge Messa Jr., Mateus Zitelli
Programao Segura Universidade Federal do ABC (UFABC) Santo Andr SP Brasil
{[email protected], [email protected],
Abstract. Flawfinder is a statical program analysis tool used to find security
problems in others programs written in C and C++ languages. The reviewed
programs were: (HLBR and HTMLCXX). The analysis concluded that:
Flawfinder is useful and can provide information that allows programmers
know about possible failures, but it does not eliminate the human analysis.
Resumo. Flawfinder uma ferramenta de anlise esttica de algoritmo para
encontrar problemas de segurana em outros programas escritos nas
linguagens de programao C e C++. Os programas avaliados com a
ferramenta supracitada foram: (HLBR e HTMLCXX). A anlise concluiu que:
Flawfinder uma ferramenta til e pode prover informao que permite que
programadores saibam sobre possveis falhas, mas no dispensa a anlise
humana.
-
1. Introduo
Atualmente, na era da computao ubqua, em que dificilmente no encontramos
dispositivos mveis, softwares embarcados, servidores, computadores e a internet das coisas no cotidiano das pessoas, no s em pases desenvolvidos, mas tambm em pases em desenvolvimento de maneira crescente.
Esses dispositivos normalmente contm sistemas que podem ser programveis e
reprogramveis. Ao programar necessrio preservar a:
Confidencialidade;
Integridade;
Disponibilidade.
Algumas definies incluem a proteo privacidade.
Negligenciar o modo como um programa concebido, principalmente durante o processo
de planejamento e de programao, propriamente dita, pode levar a falhas que afetem os
objetivos supracitados.
No ano de 2004, segundo o ICAT/NIST uma grande porcentagem dos problemas de
segurana que foram encontrados se devem a m prtica de programao. Essas ms
prticas de programao pode levar a problemas como estouros na pilha de execuo,
injeo de cdigos, acessos no autorizados, poder de edio em dados confidenciais etc.
Por isso necessrio manter o programa o mais seguro possvel durante todo o processo
de sua criao, e mais precisamente durante a programao em si. Para ajudar o
programador a manter essa premissa existem diversas ferramentas que avaliam o
programa desenvolvido, seja executando-o e inserindo diferentes dados, e/ou analisando
estaticamente o cdigo-fonte do programa. Essa ltima categoria de ferramentas que ser
abordada nesse artigo; ser analisada a ferramenta de anlise esttica Flawfinder.
2. Anlise esttica de Algoritmos
Durante muito tempo a anlise do cdigo-fonte foi feita manualmente. Pessoas
procuravam manualmente por possveis falhas na codificao dos programas linha por
linha. Obviamente essa prtica demasiada morosa, o que motivou a criao de
ferramentas que fizessem esse trabalho para os programadores, claro, sem dispensar o
intelecto humano no processo de apurao das possveis falhas.
Precisamente, as ferramentas de anlise esttica no rodam o programa; apenas fazem
uma leitura do cdigo-fonte em busca por padres conhecidamente vulnerveis e alertam
sobre as possveis falhas de acordo com os seus mtodos utilizados.
3. Flawfinder
3.1. Introduo ao Flawfinder
Flawfinder um programa simples baseado em Python que examina algoritmos escritos
em C e C++ para encontrar possveis falhas (flaws) de segurana que possam deixar o programa vulnervel. Essa ferramenta exibe ao final da anlise um relatrio com as falhas
encontradas e as ordena de acordo com uma escala de risco utilizada pelos
desenvolvedores do projeto.
-
O Flawfinder foi testado no GNU/Linux e no Windows com o Cygwin, que uma coleo
de ferramentas que permite que o Windows execute alguns programas desenvolvidos para
GNU/Linux. Alm disso, a ferramenta foi lanada sob a licena General Public License
(GPL), sendo assim um programa de cdigo-aberto, e tambm gratuito para uso.
3.2. Funcionamento
O Flawfinder trabalha com um banco de dados embutido com a listagem das principais
funes escritas nas linguagens de programao C e C++ que apresentem algum risco em
potencial, numa escala de 0 a 5, tais como:
Entrada de dados (strcpy(), strcat(), gets(), sprintf(), e scanf());
Problemas com formatao de string ([v][f]printf(), [v]snprintf(), and syslog());
Condies de corrida (access(), chown(), chgrp(), chmod(), tmpfile(), tmpnam(), tempnam(), e mktemp());
Risco potencial com metacaracteres shell (famlia exec(), system(), popen());
Obteno ineficiente de nmeros aleatrios (como random()).
Para analisar um programa basta executar o comando a seguir numa linha de comando:
flawfinder arquivo_com_cdigo_fonte|pasta_com_cdigo
O Flawfinder gerar uma sada com o resumo das falhas existentes ou no.
A sada consta com a localizao da falha (nome do arquivo e linha da ocorrncia),
periculosidade (variando de 1 5), tipo de vulnerabilidade, funo vulnervel e uma breve
descrio do erro associada um cdigo CWE.
As falhar encontradas esto agrupadas nos seguintes tipos:
Obsolete: Routinas consideradas obsoletas.
Integer: Overflow de inteiros.
Misc: Outros erros, como a possibilidade de abrir arquivos que redirecionam para arquivos de dispositivos (unix).
Port: Problemas de segurana relacionados portabilidade do software.
Format: Erro de string the formatao.
Buffer: Possibilidade de estouro de pilha.
4. Programas avaliados
4.1. HLBR The Invisible IPS
Segundo a prpria pgina do desenvolvedor:
O HLBR um IPS (Intrusion Prevention System) capaz de filtrar pacotes diretamente na camada 2 do modelo OSI (no necessita de endereo IP na mquina). A deteco de trfego malicioso baseada em
regras simples (o prprio usurio poder confeccionar novas regras). bastante eficiente e verstil,
podendo ser usado at mesmo como bridge para honeypots e honeynets. Como no usa a pilha TCP/IP do
sistema operacional, ele "invisvel" a outras mquinas na rede e atacantes.
-
O projeto foi descontinuado em 31 de agosto de 2013, e seu uso no mais encorajado
por conter muitos bugs, o que oportuno para testar as capacidades do Flawfinder.
4.2. HTMLCXX HTML e CSS API para C++
um analisador de cdigo HTML e CSS. Analisadores CSS e HTML tm dois
propsitos: acesso e modificao do cdigo HTML e CSS para programadores; tornar o
cdigo CSS e HTML corrigido e identado.
5. Metodologia
Foi utilizado o sistema operacional OS X da Apple para executar o Flawfinder (verso
1.31) com os cdigos-fonte dos programas analisados.
Foi necessria a leitura da documentao da ferramenta para se conhecer os comandos e
opes do software. Entre as diversas opes fornecidas pelo software, neste trabalho o
comando utilizado na anlise dos projetos citados foi:
flawfinder source-folder | analyser.py
Onde:
flawfinder: Comando para execuo do software.
source-folder : Opo que define onde se encontra a pasta onde o arquivo ser analisado.
analyse.py: script criado em Python que ir tratar a sada do Flawfinder.
Para a anlise de dados foi utilizado no sistema operacional GNU/Linux um script escrito
em Python que interpreta a sada do Flawfinder e usa a biblioteca matplotlib para gerar
as visualizaes dos dados.
6. Discusses e Resultados
6.1. Anlise dos dados
6.1.1 HLBR
A partir da execuo do Flawfinder para o HLBR foram encontradas 406 possveis
vulnerabilidades. Analisando em mais detalhes a sada do da ferramenta observamos a
seguinte distribuio dos erros por tipo de vulnerabilidade:
-
possvel observar que a maioria dos problemas esto relacionados buffer overflow,
mas ainda assim apresenta um nmero significativo de problemas de portabilidade. Em
menor quantidade mas ainda abundante, temos problemas de string de formao, de
estouro de inteiros e outros diversos.
Se observarmos a distribuio da periculosidade desses problemas temos:
-
Observamos que mesmo a maioria dos problemas tendo nvel de periculosidade 1, temos
diversos problemas com periculosidade 2 e 4, que pode indicar graves problemas de
segurana do programa.
Para entendermos que tipo de problemas so mais perigosos foram relacionados o nvel
de periculosidade com o tipo de falha, resultando em:
-
Esse grfico evidencia que tipos de problemas so mais graves de acordo com o
Flawfinder e ento presentes no HLBR. Podemos observar que existem nveis de
periculosidade para problemas de buffer overflow, no caso do HLBR a maioria de nvel
de periculosidade 1 e 2, mas existem ainda, em menor quantidade, alguns com nvel 3 e
4. Esse grfico mostra tambm que o tipo de problema com maior gravidade mais presente
foram os problemas de string de formatao.
-
Para entendermos quais funes so responsveis pelas vulnerabilidades observadas
geramos a seguinte distribuio onde funo, tipo do erro e periculosidade so
relacionados:
Podemos observar que o erro mais comum cometido foi o de buffer overflow com
periculosidade 2, identificado como char pelo Flawfinder, o que indica que h strings
com tamanho fixo definido, que so vulnerveis ao overflow quando no so bem
gerenciadas. H outros problemas muito comuns de periculosidade 1 e 2, mas quando
procuramos por problemas de maior periculosidade encontramos alguns casos com
periculosidade 3 e 4 espalhados por diversas funes e gerando possveis erros de diversos
tipos. Alguns exemplos so a ausncia de string de formatao snprintf, fprintf e printf,
diversos casos de risco de buffer overflow como no uso de strcpy sem checagem do buffer
a ser copiado, getopt_long, sprintf, strcat, getopt e getenv.
6.1.2. HTMLCXX
A partir da execuo do Flawfinder para o HTMLCXX foram encontradas 51 possveis
vulnerabilidades. Analisando em mais detalhes a sada do da ferramenta observamos a
seguinte distribuio dos erros por tipo de vulnerabilidade:
-
possvel observar que a maioria dos problemas esto relacionados buffer overflow,
mas ainda assim apresenta em um nmero menor problemas de string de formao, de
portabilidade, de estouro de inteiros e outros diversos.
Se observarmos a distribuio da periculosidade desses problemas temos:
-
Observamos que mesmo a maioria dos problemas tendo nvel de periculosidade 1, temos
diversos problemas com periculosidade 2 e 4, que podem indicar graves problemas de
segurana do programa.
Para entendermos que tipo de problemas so mais perigosos, foram relacionados o nvel
de periculosidade com o tipo de falha tambm para o HTMLCXX, resultando em:
-
Esse grfico evidencia que tipos de problemas so mais graves de acordo com o
Flawfinder. Temos em maior abundncia problemas no to graves de buffer overflow e
portabilidade. Mas ainda h um pouco mais de 20 problemas de formatao graves
encontrados e ainda alguns outros de buffer overflow com periculosidade 3 e 4.
Para entendermos quais funes so responsveis pelas vulnerabilidades observadas
geramos a seguinte distribuio onde funo, tipo e periculosidade so relacionados,
agora para o HTMLCXX:
-
O principal problema possvel encontrado pelo Flawfinder foi o risco de buffer overflow
no uso do strlen, mas apresenta baixa periculosidade. Os problemas mais graves (com
periculosidade 3 e 4) est no uso de funes como getopt, strcat, sprintf e strcpy que
podem gerar problemas de buffer overflow e fprintf, snprintf, vprintf com problemas de
string de formatao.
7. Concluso
O Flawfinder uma ferramenta poderosa para identificao de erros no cdigo-fonte dos
programas, oferecendo uma considervel relao de erros que podem ser encontrados em
seu banco de dados. Alm disso, tambm oferece um sistema didtico para a organizao
dos erros de acordo com a gravidade dos riscos possivelmente oferecidos e tambm
atravs da categoria a qual o erro se enquadra.
Com os programas utilizados foi possvel ver erros de diversas categorias e
periculosidades. notvel que a grande maioria dos erros foram relacionados a estouros
de pilha e formatao de strings, em periculosidades baixas a mdias. Tendo tambm em
nmeros menores, outros erros e periculosidades mais altas.
A grande quantidade de erros encontrados no significa necessariamente que so erros
que possam ser explorados; indispensvel a averiguao humana para identificar a real
possibilidade de explorar a falha.
Segundo a prpria documentao do projeto: A fool with a tool is still a fool, em livre traduo: Um bobo com uma ferramenta, continua um bobo. Ou seja o Flawfinder no dispensa o olhar crtico do programador, e nem sempre relata erros verdadeiros, emitindo
muitas vezes falsos positivos. O bom senso ainda a ferramenta mais importante do
programador.
-
Referncias
BARBATO, Luiz. DUARTE, Luiz e MONTES, Antonio. Programao Segura: Um
estudo de falhas e ferramentas de auxlio. Disponvel em: http://mtc-
m18.sid.inpe.br/col/lac.inpe.br/worcap/2004/09.30.14.17/doc/progsec-WORCAP-LLA-
2004.pdf. ltimo acesso em 05 de abril de 2015.
LINUX MAGAZINE. Programao Segura. Disponvel em:
http://www.linuxnewmedia.com.br/images/uploads/pdf_aberto/LM_63_16_17_02_col_
kurt.pdf. ltimo acesso em 05 de abril de 2015.
SANTO, Filipa e BARBOSA, Joo. Programaoo Segura. Disponvel em
http://web.fe.up.pt/~jmcruz/ssi/ssi.1112/trabs-als/final/G2T6-secur.program-final.pdf.
ltimo aceso em 05 de abril de 2015.
WHEELER, David A. Flawfinder. Acesso disponvel em
http://www.dwheeler.com/flawfinder/. ltimo acesso em 05 de abril de 2015.
ZITELLI, Mateus. Flawfinder analyzer. Disponvel em:
https://github.com/MateusZitelli/flawfinder-analyzer. ltimo acesso em 05 de abril de
2015.