Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Segurança de Aplicações WEB e OpenSource

634 views

Published on

Material da palestra de OWASP aplicada em 2012 no Flisol Campinas.

  • Be the first to comment

  • Be the first to like this

Segurança de Aplicações WEB e OpenSource

  1. 1. Segurança de Aplicações WEB eOpen Source10 dicas de segurança para desenvolvedoresAlexandreMarcolino
  2. 2. Segurança de Aplicações WEB e Open SourceAlexandreMarcolinoA segurança de um sistema inicia da primeira linha de código ?NÃO !10 dicas de segurança para desenvolvedores
  3. 3. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino10 dicas para orientarvocê adesenvolver/projetaraplicações de formamais segura.10 dicas de segurança para desenvolvedores
  4. 4. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino01 – O Arquiteto de SegurançaProfissional capacitado em segurança que irá determinar as diretrizes a seremseguidas para garantir a segurança de sua aplicação, dados e servidores.Desenvolvedores desenvolvem. Arquitetos de segurança não.Arquitetos de segurança querem fechar tudo. Aplicações WEB são PÚBLICAS.Deve ser estabelecido então um consenso sobre o nível de RISCO.10 dicas de segurança para desenvolvedores
  5. 5. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino02 – AutenticaçãoA primeira coisa que uma aplicação precisa ter bem desenvolvida é o módulode autenticação de usuário.Existem frameworks ótimos no mercado, pagos e não pagos, que cuidamexclusivamente disso.Opensource – OpenAM ( Antigo OpenSSO, descontinuado pela Oracle/Sun )Exemplo-openAM.txt10 dicas de segurança para desenvolvedores
  6. 6. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino03 – Gerenciamento de SessãoAplicações WEB são ASSÍNCRONAS, isto é, cada transação desconecta ousuário do servidor ao fim da execução.Isto delega à camada CLIENTE ( Insegura e não controlável ) a informaçãosobre a autenticação, autorizações e estado de utilização da aplicação.Não transfira DADOS. Coloque um ID na sessão e mantenha uma relaçãoIDxDADOS em uma TABELA!Criptografe os DADOS e o ID com um hash ( segredo ) mutante, que éalterado todo dia pelo menos sem intervenção humana.WADI – Framework que gerencia o ID da sessão, para aplicações WEB10 dicas de segurança para desenvolvedores
  7. 7. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino04 – Controle de AcessoControle de Acesso é a política de o que pode ser acessado por quem!Não é o DESENVOLVEDOR que define isso.Não se dê ao trabalho de decidirquem acessa o que.Coloque o seu MENU de opções em uma tabela e associe grupos de acessoaos MENUS. Seus programas ficarão mais limpos e fáceis de permissionar.Não crie grupos demais. Não foque permissionamento em grupos ouusuários, tenha os dois. Coloque o usuário como precedente.Mantenha em LOG todas as alterações de permissionamento, registrandoquem deu o ACESSO a QUEM! Isso pode salvar seu emprego.Mantenha os LOGS de ACESSO a salvo. Isso pode salvar seu emprego.10 dicas de segurança para desenvolvedores
  8. 8. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino05 – Validação de dados de EntradaBasta ter tempo e imaginação ( conhecimento técnico é obrigação )para descobrir uma forma de injetar código em um formulário WEB.Campos do tipo ALFANUMÉRICOS são os mais vulneráveis.Crie validações em duas camadas:a) Com javascript, antes de submeter a página já elimine os&$%| e outros caracteres maliciosos, usados para injeção de código.b) Antes de sair submetendo ao banco, busque na stringpalavras chave. Afinal ninguém se chama DROP SYSTEM CASCADE;Framework utilizando Struts 1.2struts-config.xml<plug-in className="org.apache.struts.validator.ValidatorPlugIn"><set-property property="pathnames" value="/technology/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/></plug-in>Código em Java do pluginpackage com.pcs.necronomiconimport org.apache.struts.validator.ValidatorForm;public class LogonForm extends ValidatorForm {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}Publicação do objeto (struts-config.xml de novo )<form-beans><form-bean name="logonForm"type=" com.pcs.necronomicon.LogonForm"/></form-beans>Arquivo validation.xml<form-validation><formset><form name="logonForm"><field property="username"depends="required"><arg0 key="prompt.username"/></field></form></formset></form-validation>CUIDADO COM TUDO NO XML! Lembre-se, XML é case sensitive!10 dicas de segurança para desenvolvedores
  9. 9. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino06 – Codifique sua saídaUma saída codificada impede que um atacante saiba como injetarcódigo ou colher dados de sua aplicação.Exemplo de errado:https://www.google.com/a/webviva.com.br/ServiceLogin?service=mail&passive=true&rm=false&continue=http://mail.google.com/a/webviva.com.br/&ltmpl=googlemailExemplo certo:https://painel.host.uol.com.br/painel.php?fn=authUser&gr=35&a=8c57776b63174afa529a253814e1bde72e316fab|d4de5c0447858bb08ee0760043a6abb8589a8a39&x=XOmoVd124LaIf03i2sgD|d4de5c0447858bb08ee0760043a6abb8589a8a39&z=d4de5c0447858bb08ee0760043a6abb8589a8a39&t=0&panelOpen=inicio10 dicas de segurança para desenvolvedores
  10. 10. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino07 – Criptografia ( SSL, TLS, etc... ) e certificados digitaisAlgo tão simples e tão no dia a dia que a galera simplesmente deixade usar por displiscência, igual a preservativos!OpenSSL é seu amigo!10 dicas de segurança para desenvolvedores
  11. 11. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino08 – LOG e Tratamento de ErrosArmazenar os LOGS de forma simples, de fácil acesso e compreensão,preservados e gerenciados adequadamente.SYSLOG-NGNão cuspa o erro no LOG só porque você é capaz de saber o que elesignifica. Crie uma transação única que trata todos os erros e documentaeles adequadamente nos LOGS. Isso servirá como uma evidência real.Guarde junto com o seu erro TUDO QUE PUDER sobre o que o usuárioestava transacionando. E sincronize isso com o registro da AUDITORIA daaplicação. Você vai me agradecer um dia.10 dicas de segurança para desenvolvedores
  12. 12. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino08 – LOG e Tratamento de ErrosLog MUITO RUIM:[Thread-4986] 26-04-2012 11:56:36.736 > ERROR (?:?) - Ocorreu erro no tratamento ou envio dosocket do BANCO XXXX br.com.sistema.cartao.exception.IFException: Ocorreu erro ao efetivar obloqueio do cartão PL - CPF 71304421734 at br.com.sistema.cartao.business.IFBusiness.efetivaBloqueioCartaoPL(IFBusiness.java:664)at br.com. sistema.cartao.if.socket.ComunicadorIF.run(ComunicadorIF.java(Compiled Code))at java.lang.Thread.run(Thread.java(Compiled Code))Caused by: br.com. sistema.cartao.if.exception.IFException: O cliente 71304421734 não serádesbloqueado porque não está aguardando desbloqueio. At br.com.sistema.cartao.if.business.IFBusiness.efetivaBloqueioCartaoPL(IFBusiness.java:631)... 2 more10 dicas de segurança para desenvolvedores
  13. 13. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino08 – LOG e Tratamento de ErrosLog MELHORZINHO:2012-04-26 13:09:27,452 ERROR br.com.neurotech.shr.util.NUtils - [Frontend] [erro] => StackTrace da Exceção: [26/04/2012 13:09:27]........................................................- Id da Exceção: #133545656744625137141665- Nome da Classe: br.com.neurotech.excecoes.ExcecaoSistema- Servidor: mari111 - 128.1.30.49- CPF do Usuário: 1607680475- Nome do Usuário: MARIA LUCIANA OLIVEIRA DE SOUSA- Login do Usuário: L506_MARIAL- Filial do Usuário: 506- Debug: br.com.neurotech.cadastro.sql.DAOGenericBD | pSql = SELECT CCM_DOCUMENTO.DOC_COD| pExcecao = java.sql.SQLSyntaxErrorException: ORA-01722: invalid number[ORA-01722: invalid number]- Data Hora: 26/04/2012 13:09:27- Stack Trace:java.sql.SQLSyntaxErrorException: ORA-01722: invalid number10 dicas de segurança para desenvolvedores
  14. 14. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino09 – Proteção dos DadosBackupNão adianta a aplicação ser segura e as fitas ficarem na mesa do operador.Não adianta a aplicação ser segura e o backup não existir.SGBD de VERDADE – PostgreSQL, MySQL, Oracle...DB2.Se a aplicação é aderente às melhores práticas de segurança, a solução debanco tem que acompanhar isso. O ideal é que o usuário que loga no sistemaseja o que existe no banco e ambos tenham seus repositórios de usuáriosaderentes a solução de SSO escolhida.10 dicas de segurança para desenvolvedores
  15. 15. Segurança de Aplicações WEB e Open SourceAlexandreMarcolino10 – Proteção das ComunicaçõesRedes de dados controladas e certificadas.Se você pretende usar WIFI, Criptografia.Internet, Firewall, IDS, Proxy Reverso para um filtro inicial de conexõesindesejadas e outros ativos de segurança devem fazer parte do aparato de quesustenta as comunicações.Na rede INTERNA, na comunicação entre a Aplicação e o SGBD, criptografa.Não é exagero. Cada elo da corrente é importante.10 dicas de segurança para desenvolvedores
  16. 16. Sim, eu quero saber mais!facebook.com/AlexandreMarcolinotwitter.com/ajmarcolwww.owasp.orgAlexandreMarcolino

×