Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação
-
Author
clavis-seguranca-da-informacao -
Category
Technology
-
view
1.016 -
download
0
Embed Size (px)
Transcript of Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação
-
Anlise de Cdigo e Segurana de SoftwarePor Davidson Boccardo Data: 23/11/2016
-
ClavisSegurana da informao
www.clavis.com.br
Green HatSegurana da Informao
whoamiDoutor em Engenharia Eltrica (UNESP/ULL)
Instrutor dos cursos de Forense, Testes de Invaso e de Desenvolvimento Seguro, Proteo de Software
Coordenador de projetos de pesquisa, orientador de alunos de mestrado/doutorado MPMQ/PPGI - mais de 50 artigos cientficos publicados
Entre 2007 e 2009 trabalhou no Software Research Lab da University of Louisiana at Lafayette, na qual se especializou em anlise esttica e dinmica de artefatos maliciosos
Entre 2010 e 2015 desenvolveu metodologias para o Servio de Avaliao de Produtos de Software no Laboratrio de Informtica da Diviso de Metrologia em Tecnologia da Informao e Telecomunicaes do Inmetro
02
DAVIDSON RODRIGO BOCCARDODIRETOR DO GREEN HAT LABS
Green HatSegurana da Informao
-
Green HatSegurana da informao
www.clavis.com.br
Sobre a Green Hat
Anlise de SeguranaOrientada por Dados
Anlise de Cdigo e Segurana de Software
Auditorias Teste de Invaso
Forense Computacional
2009: empresa spin-off corporativa que nasceu a
partir de um grupo da Clavis Segurana da
Informao 2010: Framework de Teste de Invaso (FINEP) 2015: Auditoria de Cdigo-Fonte e Anlise Dinmica 2016: Anlise de Cdigo e Segurana de Software 2016: Anlise de Segurana Orientada por Dados
(FAPERJ)
Green Hat
01
Auditoria de Cdigo-Fonte Anlise dinmica
-
Green HatSegurana da Informao
www.clavis.com.br
Segurana de Software
A economia e as defesas das naes dependem, em grande parte, da execuo de software confivel
Software onipresente! afeta todos os aspectos de nossas vidas pessoais e profissionais
Vulnerabilidades de software tambm so ubquas, comprometendo:
identidades pessoais
propriedade intelectual
confiana do consumidor
servios empresariais e operaes
infra-estruturas crticas e governo
03
-
Green HatSegurana da Informao
www.clavis.com.br
Falhas crescentes envolvendo software 04
[GIZMODO, 2014] [FINANCIAL TIMES, 2014]
-
Green HatSegurana da Informao
www.clavis.com.br
Falhas crescentes envolvendo software 05
[SLASHDOT, 2012]
[REDDIT, 2014]
[THEGUARDIAN, 2013]
-
Green HatSegurana da Informao
www.clavis.com.br
Falhas crescentes envolvendo software 06
[NEWYORKTIMES, 2011] [FORBES, 2014]
-
Green HatSegurana da Informao
www.clavis.com.br
Falhas de software so custosas 07
[NEWYORKTIMES, 2014]
[THE WALL STREET JORNAL, 2014]
-
Green HatSegurana da Informao
www.clavis.com.br
Maioria das vulnerabilidades so causadas por erros de programao 64% das vulnerabilidades da base do NIST NVD 51% dessas so originadas em erros clssicos como buffer overflows, cross-site scripting, falhas de injeo
Vulnerabilidades mais comuns incluem: Integer overflow Buffer overflow Format string Autenticao ausente Autorizao ausente ou incorreta Confiar em entradas no-confiveis
08Origem das falhas de software
-
Green HatSegurana da Informao
www.clavis.com.br
Comea com o entendimento de prticas de codificao inseguras e como podem ser exploradas
Projetos inseguros podem levar a erros intencionais, ou seja, o cdigo est corretamente implementado, mas o software resultante vulnervel
Projetos seguros exigem um entendimento dos requisitos de
software funcionais e no-funcionais
Codificao segura exige um
entendimento especfico de cada
linguagem de programao
09Desenvolvimento de Software Seguro
-
Green HatSegurana da Informao
www.clavis.com.br
Fontes de Insegurana em Software
Consideraes mnimas ou ausentes de segurana durante todo o ciclo de vida do software
Complexidade, mudanas, suposies incorretas
No pensar como um atacante
Especificaes e projetos falhos
Implementao pobre das interfaces de software
Interaes inesperadas e no-intencionais
Conhecimento inadequado de prticas de codificao segura
10
-
Green HatSegurana da Informao
www.clavis.com.br
11
Anlise de requisitos de segurana e arquitetura de software
Inspeo de cdigo e programao segura
Anlise de fluxo de controle e de dados
Anlise de vulnerabilidades (CWE/SANS Top 25, OWASP Top 10)
Anlise dinmica de software e testes funcionais
Proteo de Software
Ofuscao, Incorruptibilidade e Marca d'gua
Anlise de Cdigo e Segurana de Software
-
Green HatSegurana da Informao
www.clavis.com.br
Anlise de Requisitos de Segurana e Arquitetura de Software 12
Requisitos gerais de segurana
Confidencialidade, integridade e disponibilidade
Ambiente de implantao, arquivamento, anti-pirataria
Gerenciamento de sesses, gerenciamento de erros e excesses, gerenciamento de parmetros de configurao
Arquitetura de segurana
Princpios bsicos de projeto seguro: reduo das superfcies de ataque, falha segura, defesa em profundidade, privilgio mnimo, separao de deveres, etc
Utilizao correta de algoritmos criptogrficos e protocolos de segurana
-
Green HatSegurana da Informao
www.clavis.com.br
Inspeo de Cdigo e Programao Segura13Anlise do Fluxo de Controle: Rastreabilidade de Software
-
Green HatSegurana da Informao
www.clavis.com.br
14Inspeo de Cdigo e Programao SeguraAnlise do Fluxo de Controle: Funcionalidades Escondidas
-
Green HatSegurana da Informao
www.clavis.com.br
15Inspeo de Cdigo e Programao SeguraOrientaes para Codificao Segura
-
Green HatSegurana da Informao
www.clavis.com.br
16
Um estouro de buffer ocorre quando dados so gravados fora dos limites da memria alocada para uma estrutura de dados especfica
Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Buffer overflow
Origem
Destino
16 Bytes
Memria Alocada Memria Adjacente
Montparnasse derailment [1895]
-
Green HatSegurana da Informao
www.clavis.com.br
17Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Buffer overflow
Ocorre quando o limite de buffer negligenciado e no-verificado
Pode ocorrer em qualquer segmento de memria
Pode ser explorado para modificar:
varivel
ponteiro de dados
ponteiro de funo
endereo de retorno na pilha
-
Green HatSegurana da Informao
www.clavis.com.br
18Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Buffer overflow
printf(Nome:.\n"); rc = scanf("%s", registro[idx].nome);
if (rc != 1) {
printf(Entrada invlida.\n");
exit(1);
}
-
Green HatSegurana da Informao
www.clavis.com.br
19Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Buffer overflow
printf(Nome:.\n"); rc = scanf("%s", registro[idx].nome);
if (rc != 1) {
printf(Entrada invlida.\n");
exit(1);
} Captura at acabar a entrada ouencontrar um espao
-
Green HatSegurana da Informao
www.clavis.com.br
20Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Buffer overflow
void* rp;
...
printf(Nome:.\n");
rp = fgets(registro[idx].nome, sizeof(registro[idx].nome), stdin);
if(rp == NULL) {
printf(Entrada invlida.\n");
exit(1);
} Captura at acabar a entrada ou
atingir o limite do buffer
-
Green HatSegurana da Informao
www.clavis.com.br
21
Uma entrada de usurio maliciosa enviada para algum processador:
Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Injeo
Processador Tipo de Injeo
HTML Parser (inc. navegador) Cross-Site Scripting (XSS)
Shell OS Command
C printf () Format String
Banco de Dados SQL
Funo de acesso a arquivo (fopen()) Pathname
-
Green HatSegurana da Informao
www.clavis.com.br
22Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Injeo SQL
Programas devem tomar medidas para garantir que quaisquer dados que cruzem uma fronteira de confiana sejam apropriados e no-malicioso
-
Green HatSegurana da Informao
www.clavis.com.br
23Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Injeo 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 HatSegurana da Informao
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;
}
24Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Injeo SQL
-
Green HatSegurana da Informao
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;
}
25Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Injeo SQL
name e password no foram tratados!
-
Green HatSegurana da Informao
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;
}
26Inspeo de Cdigo e Programao SeguraAnlise de Vulnerabilidades: Injeo SQL
sanitizao da entrada =)
-
Green HatSegurana da Informao
www.clavis.com.br
27Inspeo de Cdigo e Programao SeguraAnlise Dinmica: Anlise do Fluxo de Controle e Dados
-
Green HatSegurana da Informao
www.clavis.com.br
28Inspeo de Cdigo e Programao SeguraAnlise Dinmica: Propagao de Atributos e Execuo Simblica
-
Green HatSegurana da Informao
www.clavis.com.br
29
Resistir engenharia reversa esttica e dinmica
Resistir modificaes no autorizadas
Resistir clonagem de software
Resistir ao spoofing
Esconder segredos estticos e dinmicos (criao, transmisso, utilizao)
Impedir a distribuio de programas crackeados
Ofuscao proteo contra engenharia reversa
Incorruptibilidade proteo contra modificao/monitoramento
Marca dgua identificao de autoria e rastreamento de propriedade
Proteo de Software
-
Green HatSegurana da Informao
www.clavis.com.br
30
Ofuscao
Marca dgua Incorruptibilidade
Proteo de Software
-
Green HatSegurana da Informao
www.clavis.com.br
Ofuscao: 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 HatSegurana da Informao
www.clavis.com.br
Movfuscator: Grafo de Fluxo de Controle 32
-
Green HatSegurana da Informao
www.clavis.com.br
Incorruptibilidade 33
-
Green HatSegurana da Informao
www.clavis.com.br
Marca dgua e Impresso Digital 34
Como?Para qu?
-
Green HatSegurana da Informao
www.clavis.com.br
Marca dgua e Impresso Digital: CFG 35
-
Green HatSegurana da Informao
www.clavis.com.br
Concluses
A iminncia de falhas de software em infraestruturas crticas, aplicaes e servios aumenta a necessidade de
Novas regulamentaes referentes segurana de software
Servios, metodologias e ferramentas para avaliao de segurana
Treinamento/conscientizao em desenvolvimento seguro
36
-
Green HatSegurana da informao
www.clavis.com.br
Muito Obrigado!
37
Davidson R. BoccardoDiretor do Green Hat Labs