segurança de aplicações web e opensource

16
Segurança de Aplicações WEB e Open Source 10 dicas de segurança para desenvolvedores AlexandreMarco lino

Upload: alexandre-jesus-marcolino

Post on 05-Dec-2014

615 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

10 dicas de segurança para desenvolvedores

AlexandreMarcolino

Page 2: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

A segurança de um sistema inicia da primeira linha de código ?

NÃO !

10 dicas de segurança para desenvolvedores

Page 3: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

10 dicas para orientar você a

desenvolver/projetar aplicações de forma

mais segura.

10 dicas de segurança para desenvolvedores

Page 4: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

01 – O Arquiteto de Segurança

Profissional capacitado em segurança que irá determinar as diretrizes a serem seguidas 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

Page 5: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

02 – Autenticação

A primeira coisa que uma aplicação precisa ter bem desenvolvida é o módulo de autenticação de usuário.

Existem frameworks ótimos no mercado, pagos e não pagos, que cuidam exclusivamente disso.

Opensource – OpenAM ( Antigo OpenSSO, descontinuado pela Oracle/Sun )

Exemplo-openAM.txt

10 dicas de segurança para desenvolvedores

Page 6: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

03 – Gerenciamento de Sessão

Aplicações WEB são ASSÍNCRONAS, isto é, cada transação desconecta o usuário do servidor ao fim da execução.

Isto delega à camada CLIENTE ( Insegura e não controlável ) a informação sobre 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ção IDxDADOS 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 WEB

10 dicas de segurança para desenvolvedores

Page 7: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

04 – Controle de Acesso

Controle 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 decidir quem acessa o que.

Coloque o seu MENU de opções em uma tabela e associe grupos de acesso aos MENUS. Seus programas ficarão mais limpos e fáceis de permissionar.

Não crie grupos demais. Não foque permissionamento em grupos ou usuários, tenha os dois. Coloque o usuário como precedente.

Mantenha em LOG todas as alterações de permissionamento, registrando quem 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

Page 8: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

05 – Validação de dados de Entrada

Basta 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 string

palavras chave. Afinal ninguém se chama DROP SYSTEM CASCADE;Framework utilizando Struts 1.2

struts-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 plugin

package com.pcs.necronomicon import 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

Page 9: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

06 – Codifique sua saída

Uma saída codificada impede que um atacante saiba como injetar có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=googlemail

Exemplo certo:https://painel.host.uol.com.br/painel.php?fn=authUser&gr=35&a=8c57776b63174afa529a253814e1bde72e316fab|d4de5c0447858bb08ee0760043a6abb8589a8a39&x=XOmoVd124LaIf03i2sgD|d4de5c0447858bb08ee0760043a6abb8589a8a39&z=d4de5c0447858bb08ee0760043a6abb8589a8a39&t=0&panelOpen=inicio

10 dicas de segurança para desenvolvedores

Page 10: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

07 – Criptografia ( SSL, TLS, etc... ) e certificados digitais

Algo tão simples e tão no dia a dia que a galera simplesmente deixa de usar por displiscência, igual a preservativos!

OpenSSL é seu amigo!

10 dicas de segurança para desenvolvedores

Page 11: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

08 – LOG e Tratamento de Erros

Armazenar os LOGS de forma simples, de fácil acesso e compreensão, preservados e gerenciados adequadamente.

SYSLOG-NG

Não cuspa o erro no LOG só porque você é capaz de saber o que ele significa. Crie uma transação única que trata todos os erros e documenta eles adequadamente nos LOGS. Isso servirá como uma evidência real.

Guarde junto com o seu erro TUDO QUE PUDER sobre o que o usuário estava transacionando. E sincronize isso com o registro da AUDITORIA da aplicação. Você vai me agradecer um dia.

10 dicas de segurança para desenvolvedores

Page 12: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

08 – LOG e Tratamento de Erros

Log MUITO RUIM:

[Thread-4986] 26-04-2012 11:56:36.736 > ERROR (?:?) - Ocorreu erro no tratamento ou envio do socket do BANCO XXXX br.com.sistema.cartao.exception.IFException: Ocorreu erro ao efetivar o bloqueio 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 more

10 dicas de segurança para desenvolvedores

Page 13: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

08 – LOG e Tratamento de Erros

Log 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 number

10 dicas de segurança para desenvolvedores

Page 14: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

09 – Proteção dos Dados

BackupNã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 de banco tem que acompanhar isso. O ideal é que o usuário que loga no sistema seja o que existe no banco e ambos tenham seus repositórios de usuários aderentes a solução de SSO escolhida.

10 dicas de segurança para desenvolvedores

Page 15: Segurança de Aplicações WEB e OpenSource

Segurança de Aplicações WEB e Open Source

AlexandreMarcolino

10 – Proteção das Comunicações

Redes de dados controladas e certificadas.Se você pretende usar WIFI, Criptografia. Internet, Firewall, IDS, Proxy Reverso para um filtro inicial de conexões indesejadas e outros ativos de segurança devem fazer parte do aparato de que sustenta 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

Page 16: Segurança de Aplicações WEB e OpenSource

Sim, eu quero saber mais!facebook.com/AlexandreMarcolino

twitter.com/ajmarcolwww.owasp.org

AlexandreMarcolino