análise estática do framework demoiselle
DESCRIPTION
Análise Estática do Framework Demoiselle do Governo Federal com Ênfase em Segurança de Aplicações WebTRANSCRIPT
12/11/09 1
UCB / UniversaLato Sensu – Sistemas Orientados a Objetos
Alexandre MenezesGisele Rodrigues
12/11/09 2
Análise Estática do Framework Demoiselle do Governo Federal com Ênfase em Segurança de
Aplicações Web
12/11/09 3
Agenda
1. Introdução2. Segurança mais que necessidade3. Segurança no desenvolvimento de software4. Estudo de caso5. Conclusão
12/11/09 4
1. Introdução
12/11/09 5
Dependência de Recursos Tecnológicos
12/11/09 6
Segurança da Informação
Assegurar e proteger ativos;Mudança de Cultura e Paradigma;Integridade + Disponibilidade + Confidencialidade.
12/11/09 7
2. Segurança mais que necessidade
12/11/09 8
Entidades de Segurança
12/11/09 9
Total de Incidentes Reportados ao Cert.br (1999 - 2009)
12/11/09 10
Fatores de Risco nos Sistemas Atuais
Conectividade;Extensibilidade;Complexidade.
12/11/09 11
Vulnerabilidades
OWASP Top 10 - 2007A1 XSS
A2 Injection Flaws
A3 Malicious File Execution
A4 Insecure Direct Object
A5 CSRF
A6 Information Leakage and Improper Error Handling
A7 Broken Authentication and Session Management
A8 Insecure Cryptographic
A9 Insecure Communications
A10 Failure to Restrict URL Access
12/11/09 12
Vulnerabilidades (Softwares)
12/11/09 13
3. Segurança no Desenvolvimento de Software
12/11/09 14
Sistemas Seguros
Secure by design;Secure by default;Secure by deployment.
12/11/09 15
Ferramentas
12/11/09 16
4. Estudo de Caso
12/11/09 17
Características do Projeto
Arquitetura modular;Open Source;Padronização de frameworks especialistas;Interoperabilidade e manutenibilidade.
12/11/09 18
Análise Estática
Ferramentas de Análise EstáticaFerramenta Número de Alarmes
PMD 351Checkstyle 9304
Ferramentas de Análise Estática com Ênfase em Segurança
Ferramenta Número de AlarmesFindbugs 14LAPSE 2
12/11/09 19
Resultados Constatados
Retorno inadequado;Validação imprópria;Utilização de Statement;Tratamento inadequado de exceção;Utilização inadequada de cookie.
12/11/09 20
Conclusão
12/11/09 21
Conclusões
Análise humana é mais eficiente;Ferramentas de análise estática colaboram para identificação de bugs, mas não devem ser a última palavra;Bugs de alto impacto.
12/11/09 22
Recomendações para Utilização do Projeto Demoiselle
Substituição dos módulos de persistência até que seja sanado os problemas de SQL Injection;Utilizar cookies não persistente por padrão (Secure by default);Rever questões arquiteturais com foco em segurança;Notificar a comunidade os riscos de utilização da implementação padrão;Disponibilizar patches ou fixes para os problemas.
12/11/09 23
Pesquisas Futuras
Realizar análise estática das APIs externas utilizadas pelo projeto;Realizar análise binária do framework.
12/11/09 24
Dúvidas?
12/11/09 25
Obrigado!
12/11/09 26
Retorno Inadequado
public Object[] getArguments() {return this.arguments;
}
12/11/09 27
Sugestão para Tratamento do Retorno Inadequado
public Objec[] getArguments(){ Object[]copyOf = Arrays.copyOf(arguments, arguments.length); return copyOf;}
12/11/09 28
Validação Imprópria
public final int execute(String sql) throws PersistenceJDBCException {
if (sql == null) throw new PersistenceJDBCException("SQL is null");
... Statement st = JDBCUtil.getInstance().getConnection(). createStatement(); result = st.executeUpdate(sql); ...}
12/11/09 29
Sugestão para Validação Imprópria
public final int execute(String sql) throws PersistenceJDBCException { String trustedQuery = ESAPI.encoder().encodeForSQL( new OracleCodec(), sql); ... PreparedStatement pst = JDBCUtil.getInstance().getConnection(). createStatementPreparedStatement(); result = pst.executeUpdate(sql); ...}
12/11/09 30
Tratamento Inadequado de Exceção
Private Field getFieldByName( A object, String name) throws PersistenceJDBCException { ...} catch (SecurityException e) { return null;}
}
12/11/09 31
Sugestão para Tratamento Inadequado de Exceção
Private Field getFieldByName( A object, String name) throws PersistenceJDBCException { ...} catch (SecurityException e) { return SomeException;}
}
12/11/09 32
Utilização Inadequada de Cookie
public static final void saveCookie(HttpServletResponse response, String cookieName, String cookieValue, String path) { int maxAge = (10000 + 3600) * 24 * 30; saveCookie(response, cookieName, cookieValue, path, maxAge);}
12/11/09 33
Sugestão para Utilização Inadequada de Cookie
public static final void saveCookie(HttpServletResponse response, String cookieName, String cookieValue, String path) { saveCookie(response, cookieName, cookieValue, path);}