Programação Segura - Flawfinder

download Programação Segura - Flawfinder

of 13

description

Trabalho feito para a disciplina de Programação Segura da Universidade Federal do ABC, para avaliar a ferramenta de análise estática de algoritmo - Flawfinder.

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],

    [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.