programação segura utilizando análise estática · 2020. 1. 17. · programação segura...

39
Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado – LeadComm Applications & Database Security

Upload: others

Post on 08-Mar-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Programação Segura utilizando Análise Estática

Philippe Sevestre

Consultor Associado – LeadComm Applications & Database Security

Page 2: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Créditos

Conteúdo original: Brian Chess

Versão original disponível para download:http://www.infoq.com/presentations/secure-programming-static-analysis

Page 3: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Agenda

Cenário

Problemas

Soluções

Análise EstáticaAnálise Estática

Adoção

Conclusão

Page 4: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Cenário

A sociedade depende cada vez mais de sistemasOnipresentesConectadosConfiáveis

Conseqüência ���� Sistemas mais complexosConseqüência ���� Sistemas mais complexos

Complexidade ���� Situações inesperadas

Page 5: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Problemas

Não há uma fronteira claramente definidaDecisões aparentemente não relacionadas à segurança possuem implicações Pequenos problemas podem ter grandes conseqüências

Mesmo especialistas cometem erros primáriosMesmo especialistas cometem erros primáriosDesenvolvedores tendem a repetir os mesmos erros em relação à segurança

É preciso fazer com que não-especialistas implementem segurança de forma correta

Page 6: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

“Sucesso é antever problemas”Henry Petroski

Problemas

“Melhor prevenir que remediar”

Page 7: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Problemas

Falhas de segurança não-funcionaisErros Genéricos

Validação de dados de entradaBuffer OverflowTratamento de erros e exceçõesTratamento de erros e exceçõesManter a privacidade das informações

Variedades Comuns de SoftwareAplicações WebServiços acessíveis via rede/SOAAplicativos com acesso privilegiado

Page 8: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Problemas

Exemplo: Buffer OverflowExemplo de código do MSDN para a função DirSpec (até a pouco tempo...)

int main (int argc, char **argv) {

....char DirSpec[MAX_PATH+1];printf(“Diretório destino = %s.\n”,argv[1]);strncpy(DirSpec,argv[1],strlen(argv[1])+1);...

}

Page 9: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Problemas

Cross-Site Scripting

<c:if test=“${param.sayHello}”>Hello ${param.name} !

</c:if>

“Nunca foi nossa intenção que o código que está ali fosse utilizado em produção”Ryan Asleson

Page 10: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Problemas

Estas vulnerabilidades são mais semelhantes do que aparentam

Indicam uma falta de visão em relação ao problema de segurança

Explorar estas vulnerabilidades é cada vez mais fácil

Page 11: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Soluções (Erradas)

Mais Esforço

Desenvolvedores capacitados e esfor-çados

Pedir que não cometam os

Deixar para Depois

Codifique como sempre fez

Deixe o problema com o firewall

Mais testes

PenTest na versão final

Ataque os problemas encontradoscometam os

mesmos erros

Nem todos serão especialistas em segurança

Implementar segurança de forma correta requer feedback

Paredes mais grossas não resolvem se vc. precisa de janelas e portas

Time de segurança vira gargalo

encontrados

PenTest é bom para evidenciar o problema

Corrigir problemas não torna o sistema seguro

Page 12: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Soluções - Correta

Segurança no ciclo de vida

Page 13: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Soluções

Segurança no ciclo de vida - Hoje

Planejamento Construção Testes Operação

•Firewalls•Detecção de Intrusão•Testes de Penetração

Planejamento Construção Testes Operação

Page 14: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Soluções

Segurança no ciclo de vida

Planejamento Construção Testes Operação

•Avaliação de Riscos•Revisão de Código•Requisitos de Segurança

Planejamento Construção Testes Operação

Segurança praticada por não especialistas

Page 15: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática

Visão Geral

Dissecando uma ferramenta de análise estática

Análise estática na prática

O que vem a seguir ?O que vem a seguir ?

Page 16: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Definição

Analisa o código sem executá-lo

Capaz de contemplar um número bem maior de possibilidades do que um ser humano em testes convencionais

Não possui conhecimento prévio do que o código deve(ria?) fazer

Precisa de informações sobre o que se quer encontrar

Page 17: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Analise Estática

É uma ferramenta

Não vai fazer o seviço sozinhaÉ preciso utilizá-la de forma correta

Page 18: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática e suas faces

Verificação de tipos

Validação de regras/estilos de codificação

Entendimento de programas

Validação formal/Validação de propriedadesValidação formal/Validação de propriedades

Identificação de bugs

Análise de segurança

Page 19: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise estática para segurança: motivadores

Rápida se comparada a análise manual

Rápida se comparada a um teste de execução

Cobertura completa e consistente

Aporta o conhecimento de segurança embutido na mesma Aporta o conhecimento de segurança embutido na mesma para o processo

Facilita o processo de revisão por não-especialistas em segurança

Page 20: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Ferramentas Pré-Históricas

Page 21: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Ferramentas Pré-Históricas

Versões especializas do grep

Pontos PositivosApoio para especialistas de segurançaCentralização de informações sobre más práticas de codificação

Pontos NegativosDificuldade de uso por não-especialistas

Page 22: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Ferramentas avançadas

Ponto diferenciador importante: Priorização

int main (int argc, char **argv) {{

char buf1[1024];char buf2[1024];char *shortString = “message”;

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

}

Page 23: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: O que ela NÃO encontra

Erros estruturais na arquiteturaTelescópio x Microscópio

Bugs que não forem procuradosAs categorias devem ser pré-definidas

Erros administrativos

BIOS

Page 24: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Segurança != Qualidade

Ferramentas “Caça-Bug” focam em resultados em resultados de alto grau de certitude

Bugs tem baixo custo unitário (são muitos !)Incorporam grande base de bugs e práticas que levam a bugsFalsos-positivos inviabilizam o uso da ferramentaFalsos-positivos inviabilizam o uso da ferramenta

Ferramentas de segurança focam em resultados de alto risco

Requer intervenção manualFalsos-negativos são o grande problema

Page 25: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Como Funciona ?

Modelo

Código-fonte

Regras

Análise

Resultados

Page 26: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Atributos de um Analizador

Algorítmos de AnáliseUtilização de técnicas apropriadas para identificar e priorizar apontamentos

Linguagens SuportadasSuporte às linguagens e dialetos relevantes

CapacidadeHabilidade de tratar milhões de linhas de código

Base de RegrasModelagem de regras e propriedades de segurança

Gestão dos ResultadosPermitir a revisão manual dos resultadosPriorização dos apontamentosSeleção dos resultados a apresentar

Page 27: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Analise Estática: Construção do Modelo

Front-End similar ao de um compilador

Suporte a uma linguagemUma linguagem/compilador é simplesMultiplas combinações de linguagens/compiladores torna o problema bem mais complexo

Abordagem possível: análise estática do binário...O binário sempre está disponívelNão é necessário saber como se chegou a eleDiminui o número de regras necessárias

... porem:Decompilação pode ser não trivialA perda do contexto prejudica a análiseRemediação requer os fontes para apresentação dos resultados

Page 28: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Técnicas de Análise

Propagação de atributos (Taint Propagation)Segue os caminhos possíveis que dados potenciamente contaminados podem tomar na execução de um aplicativoIdentifica pontos onde um atacante pode tirar proveito de uma função vulnerável

buff = getInputFromNetwork();

copyBuffer(newBuff,buff);

exec(newBuff);

Várias abordagens disponíveis, nenhuma exclui interamente as demais

Page 29: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Regras

EspecificamPropriedades de segurançaComportamento de rotinas de biblioteca em relação a estas propriedades

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

Regras utilizadasgetInputFromNetwork() : pós-condição = resultado insegurocopyBuffer(arg1,arg2): pós-condição = conteúdo de arg1 igual ao de arg2exec(arg1): pré-condição = arg1 deve ser seguro

Page 30: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Apresentação de Resultados

Deve convencer o desenvolvedor de que existe um problema no código

Apresentação diferenciadas por audiênciaAuditor, caindo de paraquedas em uma base de milhões de LOCsProgramadores revisando o próprio códigoProgramadores revisando código de outrosProgramadores revisando código de outros

A interface de apresentação é tão importante quanto a análise em si.

Não mostrar resultados incorretos mais de uma vez

“Bonito” este seu código, hein ?

Page 31: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: O que pode dar Errado

Falsos-PositivosModelo incompleto/incorretoAnálise :conservadora

Falsos-Negativos

Sua ferramenta só aponta bobagem !

Melhor sobrar do que faltar !

Modelo incompleto/incorretoAusência de regras específicasAnálise “relaxada”

Page 32: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Formas de Uso

Análise de Programas FinalizadosForma sofisticadas de PenTestQunatidade de resultados torna-os intratáveisPonto de partida para a maioriaBom motivadorBom motivador

Análise incorporada à codificaçãoExecutada como parte do buildDiário/Semanal/MilestoneCorreções feitas à medida que o código forcriado

Page 33: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Objeções

Objeção Tradução

“Demora demais para rodar” “Segurança não é problema meu”

“Encontra muitos falsos-positivos” “Segurança não é problema meu”

“Não é adequado à nossa forma de trabalho”

“Segurança não é problema meu”trabalho”

Page 34: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Métricas

Densidade de defeitos ���� Densidade de Vulnerabilidades (??)

Não é uma boa medida

Serve para responder algumas questões:Quais bugs ocorrem com mais freqüência ?Qual o esforço ($$$) necessário para tornar meu aplicativo seguroQual o esforço ($$$) necessário para tornar meu aplicativo seguro

Page 35: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Adoção

Requer mudança na culturaMais do que apenas outra ferramentaPorta-estandarte da segurança de softwareAtenção: A ferramenta não irá resolver o problema por si só

Mantenha o focoMantenha o focoAs ferramentas são capazes de identificar diversos tipo de problema: Iniba a maioria Foque nos problemas de entendimento mais fácil e relevantes

Treine logo que possívelTreinamento em segurança de software é fundamentalTreinamento nas ferramentas ajudam a tornar o processo mais eficiente

Page 36: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Análise Estática: Adoção

Mensure os resultadosResultados encontrados pela ferramentaVulnerabilidades resolvidas

Deixe a ferramenta com a “sua cara”Invista em customizaçãoUse a ferramenta para garantir a adoção de padrões internos de segurança

Conceba os padrões de codificação de forma a poderem ser verificados pela ferramenta

A primeira vez é a piorCusto é o dobro na primeira análiseNúmeros típicos: 10% do tempo para segurança, 20% na primeira vez

Page 37: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Conclusão

Erros acontecem: esteja preparado

Segurança faz parte do desenvolvimento

Para auditores: A ferramenta torna viável e eficiente a análise de código

Para programadores: A ferramenta aporta conhecimento Para programadores: A ferramenta aporta conhecimento em segurança

Componentes críticos de uma boa solução:AlgorítmosRegrasApresentaçãoPlano de adoção

Page 38: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Dúvidas ?

DÚVI

Page 39: Programação Segura utilizando Análise Estática · 2020. 1. 17. · Programação Segura utilizando Análise Estática Philippe Sevestre Consultor Associado –LeadComm Applications

Obrigado !