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

Post on 18-Feb-2017

1.016 views 0 download

Transcript of 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

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

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

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

Green HatSegurança da Informação

www.clavis.com.br

Falhas crescentes envolvendo software 04

[GIZMODO, 2014] [FINANCIAL TIMES, 2014]

Green HatSegurança da Informação

www.clavis.com.br

Falhas crescentes envolvendo software 05

[SLASHDOT, 2012]

[REDDIT, 2014]

[THEGUARDIAN, 2013]

Green HatSegurança da Informação

www.clavis.com.br

Falhas crescentes envolvendo software 06

[NEWYORKTIMES, 2011] [FORBES, 2014]

Green HatSegurança da Informação

www.clavis.com.br

Falhas de software são custosas 07

[NEWYORKTIMES, 2014]

[THE WALL STREET JORNAL, 2014]

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

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

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

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

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

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

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

Green HatSegurança da Informação

www.clavis.com.br

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

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]

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

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);

}

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

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

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

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

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;}

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

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!

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 =)

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

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

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

Green HatSegurança da Informação

www.clavis.com.br

30

Ofuscação

Marca d’água Incorruptibilidade

Proteção de Software

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

Green HatSegurança da Informação

www.clavis.com.br

Movfuscator: Grafo de Fluxo de Controle 32

Green HatSegurança da Informação

www.clavis.com.br

Incorruptibilidade 33

Green HatSegurança da Informação

www.clavis.com.br

Marca d’água e Impressão Digital 34

Como?Para quê?

Green HatSegurança da Informação

www.clavis.com.br

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

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

Green HatSegurança da informação

www.clavis.com.br

Muito Obrigado!

37

davidson@clavis.com.br

Davidson R. BoccardoDiretor do Green Hat Labs