38
Análise de Código e Segurança de Software Por Davidson Boccardo Data: 23/11/2016

Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Embed Size (px)

Citation preview

Page 1: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Análise de Código e Segurança de SoftwarePor Davidson Boccardo Data: 23/11/2016

Page 2: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

ClavisSegurança da informação

www.clavis.com.br

Green HatSegurança da Informação

whoamiDoutor em Engenharia Elétrica (UNESP/ULL)

Instrutor dos cursos de Forense, Testes de Invasão e de Desenvolvimento Seguro, Proteção de Software

Coordenador de projetos de pesquisa, orientador de alunos de mestrado/doutorado MPMQ/PPGI - mais de 50 artigos científicos publicados

Entre 2007 e 2009 trabalhou no Software Research Lab da University of Louisiana at Lafayette, na qual se especializou em análise estática e dinâmica de artefatos maliciosos

Entre 2010 e 2015 desenvolveu metodologias para o Serviço de Avaliação de Produtos de Software no Laboratório de Informática da Divisão de Metrologia em Tecnologia da Informação e Telecomunicações do Inmetro

02

DAVIDSON RODRIGO BOCCARDODIRETOR DO GREEN HAT LABS

Green HatSegurança da Informação

Page 3: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da informação

www.clavis.com.br

Sobre a Green Hat

Análise de SegurançaOrientada por Dados

Análise de Código e Segurança de Software

Auditorias Teste de Invasão

Forense Computacional

• 2009: empresa spin-off corporativa que nasceu a

partir de um grupo da Clavis Segurança da

Informação • 2010: Framework de Teste de Invasão (FINEP)• 2015: Auditoria de Código-Fonte e Análise Dinâmica• 2016: Análise de Código e Segurança de Software• 2016: Análise de Segurança Orientada por Dados

(FAPERJ)

Green Hat

01

Auditoria de Código-Fonte Análise dinâmica

Page 4: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Segurança de Software

• A economia e as defesas das nações dependem, em grande parte, da execução de software confiável

• Software é onipresente! • afeta todos os aspectos de nossas vidas pessoais e profissionais

• Vulnerabilidades de software também são ubíquas, comprometendo:• identidades pessoais• propriedade intelectual• confiança do consumidor• serviços empresariais e operações • infra-estruturas críticas e governo

03

Page 5: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Falhas crescentes envolvendo software 04

[GIZMODO, 2014] [FINANCIAL TIMES, 2014]

Page 6: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Falhas crescentes envolvendo software 05

[SLASHDOT, 2012]

[REDDIT, 2014]

[THEGUARDIAN, 2013]

Page 7: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Falhas crescentes envolvendo software 06

[NEWYORKTIMES, 2011] [FORBES, 2014]

Page 8: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Falhas de software são custosas 07

[NEWYORKTIMES, 2014]

[THE WALL STREET JORNAL, 2014]

Page 9: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

• Maioria das vulnerabilidades são causadas por erros de programação • 64% das vulnerabilidades da base do NIST NVD • 51% dessas são originadas em erros clássicos como buffer overflows, cross-site scripting, falhas de injeção

• Vulnerabilidades mais comuns incluem: • Integer overflow • Buffer overflow • Format string • Autenticação ausente • Autorização ausente ou incorreta • Confiar em entradas não-confiáveis

08Origem das falhas de software

Page 10: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

• Começa com o entendimento de práticas de codificação inseguras e como podem ser exploradas

• Projetos inseguros podem levar a “erros intencionais”, ou seja, o código está corretamente implementado, mas o software resultante é vulnerável

• Projetos seguros exigem um entendimento dos requisitos de software funcionais e não-funcionais

• Codificação segura exige umentendimento específico de cada linguagem de programação

09Desenvolvimento de Software Seguro

Page 11: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Fontes de Insegurança em Software

• Considerações mínimas ou ausentes de segurança durante todo o ciclo de vida do software

• Complexidade, mudanças, suposições incorretas

• Não pensar como um atacante

• Especificações e projetos falhos

• Implementação “pobre” das interfaces de software

• Interações inesperadas e não-intencionais

• Conhecimento inadequado de práticas de codificação segura

10

Page 12: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

11

• Análise de requisitos de segurança e arquitetura de software

• Inspeção de código e programação segura• Análise de fluxo de controle e de dados• Análise de vulnerabilidades (CWE/SANS Top 25, OWASP Top 10) • Análise dinâmica de software e testes funcionais

• Proteção de Software• Ofuscação, Incorruptibilidade e Marca d'água

Análise de Código e Segurança de Software

Page 13: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Análise de Requisitos de Segurança e Arquitetura de Software 12

• Requisitos gerais de segurança• Confidencialidade, integridade e disponibilidade• Ambiente de implantação, arquivamento, anti-pirataria• Gerenciamento de sessões, gerenciamento de erros e excessões, gerenciamento de parâmetros de configuração

• Arquitetura de segurança• Princípios básicos de projeto seguro: redução das superfícies de ataque, falha segura, defesa em profundidade, privilégio mínimo, separação de deveres, etc…

• Utilização correta de algoritmos criptográficos e protocolos de segurança

Page 14: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Inspeção de Código e Programação Segura13Análise do Fluxo de Controle: Rastreabilidade de Software

Page 15: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

14Inspeção de Código e Programação SeguraAnálise do Fluxo de Controle: Funcionalidades Escondidas

Page 16: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

15Inspeção de Código e Programação SeguraOrientações para Codificação Segura

Page 17: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

16

Um estouro de buffer ocorre quando dados são gravados fora dos limites da memória alocada para uma estrutura de dados específica

Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Buffer overflow

Origem

Destino

16 Bytes

Memória Alocada Memória Adjacente

Montparnasse derailment [1895]

Page 18: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

17Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Buffer overflow

• Ocorre quando o limite de buffer é negligenciado e não-verificado• Pode ocorrer em qualquer segmento de memória• Pode ser explorado para modificar:• variável• ponteiro de dados• ponteiro de função• endereço de retorno na pilha

Page 19: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

18Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Buffer overflow

printf(“Nome:.\n"); rc = scanf("%s", registro[idx].nome);if (rc != 1) {

printf(“Entrada inválida.\n");exit(1);

}

Page 20: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

19Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Buffer overflow

printf(“Nome:.\n"); rc = scanf("%s", registro[idx].nome);if (rc != 1) {

printf(“Entrada inválida.\n");exit(1);

} Captura até acabar a entrada ouencontrar um espaço

Page 21: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

20Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Buffer overflow

void* rp; ... printf(“Nome:.\n");rp = fgets(registro[idx].nome, sizeof(registro[idx].nome), stdin);if(rp == NULL) {

printf(“Entrada inválida.\n"); exit(1);} Captura até acabar a entrada ou

atingir o limite do buffer

Page 22: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

21

Uma entrada de usuário maliciosa é enviada para algum processador:

Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Injeção

Processador Tipo de Injeção

HTML Parser (inc. navegador) Cross-Site Scripting (XSS)

Shell OS Command

C printf () Format String

Banco de Dados SQL

Função de acesso a arquivo (fopen()) Pathname

Page 23: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

22Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Injeção SQL

• Programas devem tomar medidas para garantir que quaisquer dados que cruzem uma fronteira de confiança sejam apropriados e não-malicioso

Page 24: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

23Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Injeção SQL

boolean isPasswordCorrect(String name, char[] password) throws SQLException, ClassNotFoundException {

Connection connection = getConnection(); ... String pwd = new String(password);String sqlString = "SELECT * FROM Users WHERE name = '” + name + "' AND password = '" + pwd + "'"; Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sqlString); if (!rs.next())

return false;}

Page 25: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

boolean isPasswordCorrect(String name, char[] password) throws SQLException, ClassNotFoundException {

Connection connection = getConnection(); ... String pwd = new String(password);String sqlString = "SELECT * FROM Users WHERE name = '” + name + "' AND password = '" + pwd + "'"; Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sqlString); if (!rs.next())

return false;}

24Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Injeção SQL

Page 26: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

boolean isPasswordCorrect(String name, char[] password) throws SQLException, ClassNotFoundException {

Connection connection = getConnection(); ... String pwd = new String(password);String sqlString = "SELECT * FROM Users WHERE name = '” + name + "' AND password = '" + pwd + "'"; Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sqlString); if (!rs.next())

return false;}

25Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Injeção SQL

name e password não foram tratados!

Page 27: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

boolean isPasswordCorrect(String name, char[] password) throws SQLException, ClassNotFoundException {

Connection connection = getConnection(); ... String pwd = new String(password);String sqlString = "SELECT * FROM Users WHERE name=? AND password=?"; PreparedStatement stmt = connection.prepareStatement(sqlString); stmt.setString(1, name); stmt.setString(2, pwd);ResultSet rs = stmt.executeQuery(); if (!rs.next()) { return false;}

26Inspeção de Código e Programação SeguraAnálise de Vulnerabilidades: Injeção SQL

sanitização da entrada =)

Page 28: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

27Inspeção de Código e Programação SeguraAnálise Dinâmica: Análise do Fluxo de Controle e Dados

Page 29: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

28Inspeção de Código e Programação SeguraAnálise Dinâmica: Propagação de Atributos e Execução Simbólica

Page 30: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

29

• Resistir à engenharia reversa estática e dinâmica• Resistir à modificações não autorizadas• Resistir à clonagem de software• Resistir ao spoofing• Esconder segredos estáticos e dinâmicos (criação, transmissão, utilização)• Impedir a distribuição de programas “crackeados”

• Ofuscação — proteção contra engenharia reversa • Incorruptibilidade — proteção contra modificação/monitoramento• Marca d’água — identificação de autoria e rastreamento de propriedade

Proteção de Software

Page 31: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

30

Ofuscação

Marca d’água Incorruptibilidade

Proteção de Software

Page 32: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Ofuscação: movfuscator

The M/o/Vfuscator compiles programs into "mov" instructions, and only "mov" instructions. Arithmetic, comparisons, jumps, function calls, and everything else a program needs are all performed through mov operations; there is no self-modifying code, no transport-triggered calculation, and no other form of non-mov cheating

31

Page 33: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Movfuscator: Grafo de Fluxo de Controle 32

Page 34: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Incorruptibilidade 33

Page 35: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Marca d’água e Impressão Digital 34

Como?Para quê?

Page 36: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Marca d’água e Impressão Digital: CFG 35

Page 37: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da Informação

www.clavis.com.br

Conclusões

• A iminência de falhas de software em infraestruturas críticas, aplicações e serviços aumenta a necessidade de

• Novas regulamentações referentes à segurança de software

• Serviços, metodologias e ferramentas para avaliação de segurança

• Treinamento/conscientização em desenvolvimento seguro

36

Page 38: Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação

Green HatSegurança da informação

www.clavis.com.br

Muito Obrigado!

37

[email protected]

Davidson R. BoccardoDiretor do Green Hat Labs