Você está na página 1de 39

Programao Segura utilizando Anlise Esttica

Philippe Sevestre Consultor Associado LeadComm Applications & Database Security

Crditos

Contedo original: Brian Chess Verso original disponvel para download:


http://www.infoq.com/presentations/secure-programming-static-analysis

Agenda

Cenrio Problemas Solues Anlise Esttica Adoo Concluso

Cenrio

A sociedade depende cada vez mais de sistemas


Onipresentes Conectados Confiveis

Conseqncia Complexidade

Sistemas mais complexos Situaes inesperadas

Problemas

No h uma fronteira claramente definida


Decises aparentemente no relacionadas segurana possuem implicaes Pequenos problemas podem ter grandes conseqncias

Mesmo especialistas cometem erros primrios


Desenvolvedores tendem a repetir os mesmos erros em relao segurana

preciso fazer com que no-especialistas implementem segurana de forma correta

Problemas

Sucesso antever problemas


Henry Petroski

Melhor prevenir que remediar

Problemas

Falhas de segurana no-funcionais


Erros Genricos Validao de dados de entrada Buffer Overflow Tratamento de erros e excees Manter a privacidade das informaes

Variedades Comuns de Software


Aplicaes Web Servios acessveis via rede/SOA Aplicativos com acesso privilegiado

Problemas

Exemplo: Buffer Overflow


Exemplo de cdigo do MSDN para a funo DirSpec (at a pouco tempo...)

int main (int argc, char **argv) { .... char DirSpec[MAX_PATH+1]; printf(Diretrio destino = %s.\n,argv[1]); strncpy(DirSpec,argv[1],strlen(argv[1])+1); ... }

Problemas

Cross-Site Scripting
<c:if test=${param.sayHello}> Hello ${param.name} ! </c:if>

Nunca foi nossa inteno que o cdigo que est ali fosse utilizado em produo Ryan Asleson

Problemas

Estas vulnerabilidades so mais semelhantes do que aparentam


Indicam uma falta de viso em relao ao problema de segurana

Explorar estas vulnerabilidades cada vez mais fcil

Solues (Erradas)
Mais Esforo
Desenvolvedores capacitados e esforados Pedir que no cometam os mesmos erros Nem todos sero especialistas em segurana Implementar segurana de forma correta requer feedback

Deixar para Depois


Codifique como sempre fez Deixe o problema com o firewall

Mais testes
PenTest na verso final Ataque os problemas encontrados

Paredes mais grossas no resolvem se vc. precisa de janelas e portas Time de segurana vira gargalo

PenTest bom para evidenciar o problema Corrigir problemas no torna o sistema seguro

Solues - Correta
Segurana no ciclo de vida

Solues
Segurana no ciclo de vida - Hoje

Planejamento

Construo

Testes

Operao

Firewalls Deteco de Intruso Testes de Penetrao

Solues
Segurana no ciclo de vida

Planejamento

Construo

Testes

Operao

Avaliao de Riscos Reviso de Cdigo Requisitos de Segurana Segurana praticada por no especialistas

Anlise Esttica

Viso Geral Dissecando uma ferramenta de anlise esttica Anlise esttica na prtica O que vem a seguir ?

Anlise Esttica: Definio

Analisa o cdigo sem execut-lo Capaz de contemplar um nmero bem maior de possibilidades do que um ser humano em testes convencionais No possui conhecimento prvio do que o cdigo deve(ria?) fazer Precisa de informaes sobre o que se quer encontrar

Analise Esttica

uma ferramenta No vai fazer o sevio sozinha


preciso utiliz-la de forma correta

Anlise Esttica e suas faces

Verificao de tipos Validao de regras/estilos de codificao Entendimento de programas Validao formal/Validao de propriedades Identificao de bugs Anlise de segurana

Anlise esttica para segurana: motivadores

Rpida se comparada a anlise manual Rpida se comparada a um teste de execuo Cobertura completa e consistente Aporta o conhecimento de segurana embutido na mesma para o processo Facilita o processo de reviso por no-especialistas em segurana

Anlise Esttica: Ferramentas Pr-Histricas

Anlise Esttica: Ferramentas Pr-Histricas

Verses especializas do grep Pontos Positivos


Apoio para especialistas de segurana Centralizao de informaes sobre ms prticas de codificao

Pontos Negativos
Dificuldade de uso por no-especialistas

Anlise Esttica: Ferramentas avanadas

Ponto diferenciador importante: Priorizao


int main { char char char (int argc, char **argv) buf1[1024]; buf2[1024]; *shortString = message;

strcpy(buf1,shortString); /* Bad Practice */ strcpy(buf2,argv[0]); /* VULNERABILITY */ }

Anlise Esttica: O que ela NO encontra

Erros estruturais na arquitetura


Telescpio x Microscpio

Bugs que no forem procurados


As categorias devem ser pr-definidas

Erros administrativos BIOS

Anlise Esttica: Segurana != Qualidade

Ferramentas Caa-Bug focam em resultados em resultados de alto grau de certitude


Bugs tem baixo custo unitrio (so muitos !) Incorporam grande base de bugs e prticas que levam a bugs Falsos-positivos inviabilizam o uso da ferramenta

Ferramentas de segurana focam em resultados de alto risco


Requer interveno manual Falsos-negativos so o grande problema

Anlise Esttica: Como Funciona ?

Modelo Cdigo-fonte

Resultados Anlise Regras

Anlise Esttica: Atributos de um Analizador


Algortmos de Anlise
Utilizao de tcnicas apropriadas para identificar e priorizar apontamentos

Linguagens Suportadas
Suporte s linguagens e dialetos relevantes

Capacidade
Habilidade de tratar milhes de linhas de cdigo

Base de Regras
Modelagem de regras e propriedades de segurana

Gesto dos Resultados


Permitir a reviso manual dos resultados Priorizao dos apontamentos Seleo dos resultados a apresentar

Analise Esttica: Construo do Modelo


Front-End similar ao de um compilador Suporte a uma linguagem
Uma linguagem/compilador simples Multiplas combinaes de linguagens/compiladores torna o problema bem mais complexo

Abordagem possvel: anlise esttica do binrio...


O binrio sempre est disponvel No necessrio saber como se chegou a ele Diminui o nmero de regras necessrias

... porem:
Decompilao pode ser no trivial A perda do contexto prejudica a anlise Remediao requer os fontes para apresentao dos resultados

Anlise Esttica: Tcnicas de Anlise


Propagao de atributos (Taint Propagation)
Segue os caminhos possveis que dados potenciamente contaminados podem tomar na execuo de um aplicativo Identifica pontos onde um atacante pode tirar proveito de uma funo vulnervel

buff = getInputFromNetwork(); copyBuffer(newBuff,buff); exec(newBuff);

Vrias abordagens disponveis, nenhuma exclui interamente as demais

Anlise Esttica: Regras


Especificam
Propriedades de segurana Comportamento de rotinas de biblioteca em relao a estas propriedades buff = getInputFromNetwork(); copyBuffer(newBuff,buff); exec(newBuff);

Regras utilizadas
getInputFromNetwork() : ps-condio = resultado inseguro copyBuffer(arg1,arg2): ps-condio = contedo de arg1 igual ao de arg2 exec(arg1): pr-condio = arg1 deve ser seguro

Anlise Esttica: Apresentao de Resultados


Deve convencer o desenvolvedor de que existe um problema no cdigo Apresentao diferenciadas por audincia
Auditor, caindo de paraquedas em uma base de milhes de LOCs Programadores revisando o prprio cdigo Programadores revisando cdigo de outros

A interface de apresentao to importante quanto a anlise em si. No mostrar resultados incorretos mais de uma vez
Bonito este seu cdigo, hein ?

Anlise Esttica: O que pode dar Errado

Falsos-Positivos
Modelo incompleto/incorreto Anlise :conservadora Sua ferramenta s aponta bobagem ! Melhor sobrar do que faltar !

Falsos-Negativos
Modelo incompleto/incorreto Ausncia de regras especficas Anlise relaxada

Anlise Esttica: Formas de Uso

Anlise de Programas Finalizados


Forma sofisticadas de PenTest Qunatidade de resultados torna-os intratveis Ponto de partida para a maioria Bom motivador

Anlise incorporada codificao


Executada como parte do build Dirio/Semanal/Milestone Correes feitas medida que o cdigo for criado

Anlise Esttica: Objees

Objeo Demora demais para rodar Encontra muitos falsos-positivos No adequado nossa forma de trabalho

Traduo Segurana no problema meu Segurana no problema meu Segurana no problema meu

Anlise Esttica: Mtricas


Densidade de defeitos (??)
No uma boa medida

Densidade de Vulnerabilidades

Serve para responder algumas questes:


Quais bugs ocorrem com mais freqncia ? Qual o esforo ($$$) necessrio para tornar meu aplicativo seguro

Anlise Esttica: Adoo

Requer mudana na cultura


Mais do que apenas outra ferramenta Porta-estandarte da segurana de software Ateno: A ferramenta no ir resolver o problema por si s

Mantenha o foco
As ferramentas so capazes de identificar diversos tipo de problema: Iniba a maioria Foque nos problemas de entendimento mais fcil e relevantes

Treine logo que possvel


Treinamento em segurana de software fundamental Treinamento nas ferramentas ajudam a tornar o processo mais eficiente

Anlise Esttica: Adoo

Mensure os resultados
Resultados encontrados pela ferramenta Vulnerabilidades resolvidas

Deixe a ferramenta com a sua cara


Invista em customizao Use a ferramenta para garantir a adoo de padres internos de segurana Conceba os padres de codificao de forma a poderem ser verificados pela ferramenta

A primeira vez a pior


Custo o dobro na primeira anlise Nmeros tpicos: 10% do tempo para segurana, 20% na primeira vez

Concluso
Erros acontecem: esteja preparado Segurana faz parte do desenvolvimento Para auditores: A ferramenta torna vivel e eficiente a anlise de cdigo Para programadores: A ferramenta aporta conhecimento em segurana Componentes crticos de uma boa soluo:
Algortmos Regras Apresentao Plano de adoo

Dvidas ?

DVI

Obrigado !

Você também pode gostar