17. Características do Projeto
Arquitetura modular;
Open Source;
Padronização de frameworks especialistas;
Interoperabilidade e manutenibilidade.
12/11/09 17
18. Análise Estática
Ferramentas de Análise Estática
Ferramenta Número de Alarmes
PMD 351
Checkstyle 9304
Ferramentas de Análise Estática com Ênfase
em Segurança
Ferramenta Número de Alarmes
Findbugs 14
LAPSE 2
12/11/09 18
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 19
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 21
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 22
23. Pesquisas Futuras
Realizar análise estática das APIs externas
utilizadas pelo projeto;
Realizar análise binária do framework.
12/11/09 23
27. Sugestão para Tratamento do Retorno Inadequado
public Objec[] getArguments(){
Object[]copyOf =
Arrays.copyOf(arguments,
arguments.length);
return copyOf;
}
12/11/09 27
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 28
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 29
30. Tratamento Inadequado de Exceção
Private Field getFieldByName(
A object, String name) throws
PersistenceJDBCException {
...
} catch (SecurityException e) {
return null;
}
}
12/11/09 30
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 31
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 32
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);}
12/11/09 33