1) O documento discute análise de código e segurança de software, incluindo inspeção de código, programação segura, e análise de vulnerabilidades como buffer overflows e injeção.
2) Também aborda proteção de software através de ofuscação, incorruptibilidade e marca d'água para dificultar engenharia reversa e modificações não autorizadas.
3) Conclui que as falhas de software em infraestruturas críticas aumentam a necessidade de novas regulamentações, serviços de avaliação de
2. Clavis
Segurança da informação
www.clavis.com.br
Green Hat
Segurança da Informação
whoami
Doutor 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 BOCCARDO
DIRETOR DO GREEN HAT LABS
Green Hat
Segurança da Informação
3. Green Hat
Segurança da informação
www.clavis.com.br
Sobre a Green Hat
Análise de Segurança
Orientada 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
4. Green Hat
Seguranç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
5. Green Hat
Segurança da Informação
www.clavis.com.br
Falhas crescentes envolvendo software 04
[GIZMODO, 2014] [FINANCIAL TIMES, 2014]
6. Green Hat
Segurança da Informação
www.clavis.com.br
Falhas crescentes envolvendo software 05
[SLASHDOT, 2012]
[REDDIT, 2014]
[THEGUARDIAN, 2013]
7. Green Hat
Segurança da Informação
www.clavis.com.br
Falhas crescentes envolvendo software 06
[NEWYORKTIMES, 2011] [FORBES, 2014]
8. Green Hat
Segurança da Informação
www.clavis.com.br
Falhas de software são custosas 07
[NEWYORKTIMES, 2014]
[THE WALL STREET JORNAL, 2014]
9. Green Hat
Seguranç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
10. Green Hat
Seguranç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 um
entendimento específico de cada
linguagem de programação
09Desenvolvimento de Software Seguro
11. Green Hat
Seguranç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
12. Green Hat
Seguranç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
13. Green Hat
Seguranç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
14. Green Hat
Segurança da Informação
www.clavis.com.br
Inspeção de Código e Programação Segura
13
Análise do Fluxo de Controle: Rastreabilidade de Software
15. Green Hat
Segurança da Informação
www.clavis.com.br
14
Inspeção de Código e Programação Segura
Análise do Fluxo de Controle: Funcionalidades Escondidas
16. Green Hat
Segurança da Informação
www.clavis.com.br
15
Inspeção de Código e Programação Segura
Orientações para Codificação Segura
17. Green Hat
Seguranç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 Segura
Análise de Vulnerabilidades: Buffer overflow
Origem
Destino
16 Bytes
Memória Alocada Memória Adjacente
Montparnasse
derailment [1895]
18. Green Hat
Segurança da Informação
www.clavis.com.br
17
Inspeção de Código e Programação Segura
Aná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
19. Green Hat
Segurança da Informação
www.clavis.com.br
18
Inspeção de Código e Programação Segura
Análise de Vulnerabilidades: Buffer overflow
printf(“Nome:.n");
rc = scanf("%s", registro[idx].nome);
if (rc != 1) {
printf(“Entrada inválida.n");
exit(1);
}
20. Green Hat
Segurança da Informação
www.clavis.com.br
19
Inspeção de Código e Programação Segura
Aná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 ou
encontrar um espaço
21. Green Hat
Segurança da Informação
www.clavis.com.br
20
Inspeção de Código e Programação Segura
Aná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
22. Green Hat
Seguranç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 Segura
Aná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
23. Green Hat
Segurança da Informação
www.clavis.com.br
22
Inspeção de Código e Programação Segura
Aná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
24. Green Hat
Segurança da Informação
www.clavis.com.br
23
Inspeção de Código e Programação Segura
Aná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;
}
25. Green Hat
Seguranç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;
}
24
Inspeção de Código e Programação Segura
Análise de Vulnerabilidades: Injeção SQL
26. Green Hat
Seguranç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;
}
25
Inspeção de Código e Programação Segura
Análise de Vulnerabilidades: Injeção SQL
name e password não foram tratados!
27. Green Hat
Seguranç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;
}
26
Inspeção de Código e Programação Segura
Análise de Vulnerabilidades: Injeção SQL
sanitização da entrada =)
28. Green Hat
Segurança da Informação
www.clavis.com.br
27
Inspeção de Código e Programação Segura
Análise Dinâmica: Análise do Fluxo de Controle e Dados
29. Green Hat
Segurança da Informação
www.clavis.com.br
28
Inspeção de Código e Programação Segura
Análise Dinâmica: Propagação de Atributos e Execução Simbólica
30. Green Hat
Seguranç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
31. Green Hat
Segurança da Informação
www.clavis.com.br
30
Ofuscação
Marca d’água Incorruptibilidade
Proteção de Software
32. Green Hat
Seguranç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
33. Green Hat
Segurança da Informação
www.clavis.com.br
Movfuscator: Grafo de Fluxo de Controle 32
35. Green Hat
Segurança da Informação
www.clavis.com.br
Marca d’água e Impressão Digital 34
Como?Para quê?
36. Green Hat
Segurança da Informação
www.clavis.com.br
Marca d’água e Impressão Digital: CFG 35
37. Green Hat
Seguranç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
38. Green Hat
Segurança da informação
www.clavis.com.br
Muito Obrigado!
37
davidson@clavis.com.br
Davidson R. Boccardo
Diretor do Green Hat Labs