UCB / Universa
           Lato Sensu – Sistemas Orientados a Objetos


                                      Alexandre Menezes
                                         Gisele Rodrigues




12/11/09                                                1
Análise Estática do Framework Demoiselle do
      Governo Federal com Ênfase em Segurança de
                      Aplicações Web




12/11/09                                             2
Agenda

    1. Introdução
    2. Segurança mais que necessidade
    3. Segurança no desenvolvimento de software
    4. Estudo de caso
    5. Conclusão




12/11/09                                          3
1. Introdução




12/11/09                   4
Dependência de Recursos Tecnológicos




12/11/09                                      5
Segurança da Informação

    Assegurar e proteger ativos;
    Mudança de Cultura e Paradigma;
    Integridade + Disponibilidade + Confidencialidade.




12/11/09                                                 6
2. Segurança mais que necessidade




12/11/09                                       7
Entidades de Segurança




12/11/09                        8
Total de Incidentes Reportados ao Cert.br (1999 - 2009)




12/11/09                                                  9
Fatores de Risco nos Sistemas Atuais

    Conectividade;
    Extensibilidade;
    Complexidade.




12/11/09                                                 10
Vulnerabilidades

                OWASP Top 10 - 2007
           A1             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                                                     11
Vulnerabilidades (Softwares)




12/11/09                             12
3. Segurança no Desenvolvimento de Software




12/11/09                                         13
Sistemas Seguros

    Secure by design;
    Secure by default;
    Secure by deployment.




12/11/09                                  14
Ferramentas




12/11/09            15
4. Estudo de Caso




12/11/09                       16
Características do Projeto

    Arquitetura modular;
    Open Source;
    Padronização de frameworks especialistas;
    Interoperabilidade e manutenibilidade.




12/11/09                                             17
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
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
Conclusão




12/11/09               20
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
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
Pesquisas Futuras

    Realizar análise estática das APIs externas
    utilizadas pelo projeto;
    Realizar análise binária do framework.




12/11/09                                            23
Dúvidas?




12/11/09              24
Obrigado!




12/11/09               25
Retorno Inadequado




public Object[] getArguments() {
    return this.arguments;
}




12/11/09                                 26
Sugestão para Tratamento do Retorno Inadequado




public Objec[] getArguments(){
  Object[]copyOf =
    Arrays.copyOf(arguments,
                   arguments.length);
  return copyOf;
}




12/11/09                                               27
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
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
Tratamento Inadequado de Exceção



Private Field getFieldByName(
  A object, String name) throws
        PersistenceJDBCException {
  ...
  } catch (SecurityException e) {
      return null;
  }
}



12/11/09                                    30
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
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
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

Análise Estática do Framework Demoiselle

  • 1.
    UCB / Universa Lato Sensu – Sistemas Orientados a Objetos Alexandre Menezes Gisele Rodrigues 12/11/09 1
  • 2.
    Análise Estática doFramework Demoiselle do Governo Federal com Ênfase em Segurança de Aplicações Web 12/11/09 2
  • 3.
    Agenda 1. Introdução 2. Segurança mais que necessidade 3. Segurança no desenvolvimento de software 4. Estudo de caso 5. Conclusão 12/11/09 3
  • 4.
  • 5.
    Dependência de RecursosTecnológicos 12/11/09 5
  • 6.
    Segurança da Informação Assegurar e proteger ativos; Mudança de Cultura e Paradigma; Integridade + Disponibilidade + Confidencialidade. 12/11/09 6
  • 7.
    2. Segurança maisque necessidade 12/11/09 7
  • 8.
  • 9.
    Total de IncidentesReportados ao Cert.br (1999 - 2009) 12/11/09 9
  • 10.
    Fatores de Risconos Sistemas Atuais Conectividade; Extensibilidade; Complexidade. 12/11/09 10
  • 11.
    Vulnerabilidades OWASP Top 10 - 2007 A1 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 11
  • 12.
  • 13.
    3. Segurança noDesenvolvimento de Software 12/11/09 13
  • 14.
    Sistemas Seguros Secure by design; Secure by default; Secure by deployment. 12/11/09 14
  • 15.
  • 16.
    4. Estudo deCaso 12/11/09 16
  • 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
  • 20.
  • 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çãodo 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
  • 24.
  • 25.
  • 26.
    Retorno Inadequado public Object[]getArguments() { return this.arguments; } 12/11/09 26
  • 27.
    Sugestão para Tratamentodo Retorno Inadequado public Objec[] getArguments(){ Object[]copyOf = Arrays.copyOf(arguments, arguments.length); return copyOf; } 12/11/09 27
  • 28.
    Validação Imprópria public finalint 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çãoImpró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 deExceção Private Field getFieldByName( A object, String name) throws PersistenceJDBCException { ... } catch (SecurityException e) { return null; } } 12/11/09 30
  • 31.
    Sugestão para TratamentoInadequado 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 deCookie 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çãoInadequada de Cookie public static final void saveCookie(HttpServletResponse response, String cookieName, String cookieValue, String path) { saveCookie(response, cookieName, cookieValue, path);} 12/11/09 33