segurança em aplicações asp.net (xss e csrf)

33
LUCIANO GERHARDT, SETEMBRO 2014 SEGURANÇA EM APLICAÇÕES ASP.NET (XSS E CSRF)

Upload: luciano-gerhardt

Post on 19-Feb-2017

140 views

Category:

Software


4 download

TRANSCRIPT

Page 1: Segurança em Aplicações ASP.NET (XSS e CSRF)

LUCIANO GERHARDT, SETEMBRO 2014

SEGURANÇA EM APLICAÇÕES

ASP.NET (XSS E CSRF)

Page 2: Segurança em Aplicações ASP.NET (XSS e CSRF)

HOJE

FALAREMOS

SOBRE1. SEGURANÇA EM APLICAÇÕES ASP.NET

2. ATAQUES CROSS-SITE SCRIPTING

3. MITIGANDO ATAQUES XSS

4. ATAQUES CROSS-SITE REQUEST FORGERY

5. MITIGANDO ATAQUES CSRF

6. FERRAMENTAS DE AUDITORIA

2

Page 3: Segurança em Aplicações ASP.NET (XSS e CSRF)

SEGURANÇA EM APLICAÇÕES

ASP.NET

Page 4: Segurança em Aplicações ASP.NET (XSS e CSRF)

INTRODUÇÃO

SEGURANÇA EM

APLICAÇÕES ASP.NET

Esta apresentação tem por finalidade evidenciar elementos a respeito da

segurança de aplicações ASP.NET.

Os tipos de ataque abordados são: XSS e CSRF, que através de exemplos,

são demonstrados códigos e possíveis soluções.

4

Page 5: Segurança em Aplicações ASP.NET (XSS e CSRF)

ENCODE/DECODE

SEGURANÇA EM

APLICAÇÕES ASP.NET

Primeiramente, devemos saber as diferenças entre um HTML codificado e

decodificado.

Exemplo de código HTML:

<b> Isso é um texto qualquer. </b>

Codificado, ele fica da seguinte maneira;

&lt;b&gt; Isso &eacute; um texto qualquer. &lt;/b&gt;

No navegador, ele será exibido da seguinte maneira:

<b> Isso é um texto qualquer. </b>

Enquanto que, caso ele seja apresentado em sua forma pura, sem codificar,

será apresentado da seguinte maneira:

Isso é um texto qualquer.

5

Page 6: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES CROSS-SITE SCRIPTING

Page 7: Segurança em Aplicações ASP.NET (XSS e CSRF)

O QUE É?

ATAQUES XSS

Cross Site Scripting é um tipo de brecha de segurança onde o hacker insere

código malicioso (geralmente um script js) em uma página ou banco de dados

sem o conhecimento do usuário.

7

Page 8: Segurança em Aplicações ASP.NET (XSS e CSRF)

COMO FUNCIONA?

ATAQUES XSS

Existem três tipos de ataque XSS:

• Refletido (reflected): quando o usuário envia código malicioso para o

servidor, e esse código retorna do servidor;

• Persistente (persistent): quando o código malicioso fica armazenado em

algum lugar, como um banco de dados, por exemplo. Dessa forma, pode

ser executado várias vezes, o que se torna mais perigoso que o primeiro;

• Baseado no DOM (DOM based): pode ser utilizado pelos dois tipos de

ataque anteriores. Utiliza dados e manipula elementos DOM da página

onde o código malicioso foi inserido.

8

Page 9: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES REFLETIDOS

ATAQUES XSS

Esse tipo de ataque geralmente é feito incluindo script ou HTML na querystring

de um Request do tipo GET, como por exemplo, no parâmetro de uma

mensagem que retorna ao usuário, colocar um form para roubar as credenciais

do usuário, como no exemplo abaixo:

9

Page 10: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES REFLETIDOS

ATAQUES XSS

Ou então, utilizar um script para emitir um alerta:

10

Page 11: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES PERSISTENTES

ATAQUES XSS

Nesse tipo de ataque, o hacker pode inserir um script malicioso no banco de

dados, através de um campo de comentários, por exemplo. E dessa forma,

toda vez que um usuário entrar na página abrirá um form de login fake, como

no exemplo abaixo:

11

Page 12: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES PERSISTENTES

ATAQUES XSS

12

Page 13: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES BASEADOS NO DOM

ATAQUES XSS

Nessa categoria de ataques, podem ser utilizadas técnicas tanto persistentes

quanto refletidas. Podem ser exploradas funções vulneráveis do jQuery, como

no exemplo a seguir:

13

Page 14: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES BASEADOS NO DOM

ATAQUES XSS

14

Page 15: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES BASEADOS NO DOM

ATAQUES XSS

Mesmo com a string codificada, é possível convertê-la novamente para html e

exibir o alert através da função html(htmlString).

Outra forma, é utilizando uma técnica parecida com SQL Injection, como por

exemplo, em situações em que é utilizado um alerta com conteúdo dinâmico

vindo do usuário.

<img onmouseover=alert(user input) />

Então, através desse input, o script é alterado intencionalmente:

<img onmouseover=alert(1) onmouseout=alert(document.cookie) >

Dados sensíveis do cookie podem ser adquiridos dessa maneira.

15

Page 16: Segurança em Aplicações ASP.NET (XSS e CSRF)

MITIGANDO ATAQUES XSS

Page 17: Segurança em Aplicações ASP.NET (XSS e CSRF)

ANTIXSS SANITIZER

MITIGANDO ATAQUES XSS

Todo HTML armazenado deve ser codificado, ou seja, limpo de tags HTML e js.

Quando não há interesse em armazenar HTML, e sim apenas texto, é preferível

utilizar alguma biblioteca para “limpar” o HTML e scripts do texto.

Existe uma biblioteca da Microsoft chamada AntiXss, que possui métodos do

tipo GetSafeHtml() e GetSafeHtmlFragment(), que remove scripts de strings

para renderizar na tela de forma segura, mesmo que estejam codificados, como

está na imagem abaixo:

17

Page 18: Segurança em Aplicações ASP.NET (XSS e CSRF)

FORÇAR CODIFICAÇÃO UTF-8

MITIGANDO ATAQUES XSS

Forçar a codificação da página em UTF-8 no web.config, pois o atacante

poderá utilizar UTF-7, por exemplo, e assim dificultar a codificação do script

pelo encoder.

18

Page 19: Segurança em Aplicações ASP.NET (XSS e CSRF)

POLÍTICAS DE SEGURANÇA DE CONTEÚDO

MITIGANDO ATAQUES XSS

Aplicar políticas de segurança de conteúdo, para autorizar apenas a execução

de script do próprio host, ou autorizar scripts de determinados hosts. Isso é

feito através de headers para impedir a execução de scripts de terceiros,

porém, o IE ainda não tem suporte para esse recurso.

19

Page 20: Segurança em Aplicações ASP.NET (XSS e CSRF)

OUTROS MÉTODOS

MITIGANDO ATAQUES XSS

Apenas usar a abordagem de filtros para detectar e retirar as tags <script> e

removê-las ou substituí-las não garante nada, pois existem várias técnicas de

rodar scripts sem a tag <script>, como por exemplo: onload=alert(‘qualquer

coisa’).

Validar os dados! Nunca confie no seu usuário, é essencial garantir que os

dados submetidos sejam exatamente o que a aplicação espera.

Não setar o atributo ValidateRequest para false. Ela lança uma exception

quando há algum erro, previna esse erro usando a codificação adequada antes

de enviar dados ao servidor.

20

Page 21: Segurança em Aplicações ASP.NET (XSS e CSRF)

OUTROS MÉTODOS

MITIGANDO ATAQUES XSS

Saiba onde os elementos DOM são criados e modificados. Utilize funções do

tipo setAttribute e document.createElement(‘div’) ao invés de document.writein

e $(‘div’).html().

Se for possível, evitar o uso do IE6. Redirecione o usuário para IE6update.com.

Audite todos os lugares onde dados podem ser atribuídos. Utilize text-boxes

com codificação (encode), podem ser utilizada ferramentas de auditoria como

XSS-ME para Firefox e DOM-SNITCH para o Chrome.

Mantenha-se atualizado quanto à técnicas de ataque e vulnerabilidades das

tecnologias utilizadas! OWASP tem um bom cheat-sheet de defesa contra XSS

com atualizações regulares.

21

Page 22: Segurança em Aplicações ASP.NET (XSS e CSRF)

OUTROS MÉTODOS

MITIGANDO ATAQUES XSS

Conheça as codificações (encoding) do ASP.NET para configurar os arquivos

de configuração (.config) adequadamente.

22

Page 23: Segurança em Aplicações ASP.NET (XSS e CSRF)

ATAQUES CROSS-SITE REQUEST

FORGERY

Page 24: Segurança em Aplicações ASP.NET (XSS e CSRF)

O QUE É?

ATAQUES CSRF

Requisições feitas por um site malicioso a outro site no qual o usuário está

autenticado.

24

Page 25: Segurança em Aplicações ASP.NET (XSS e CSRF)

COMO FUNCIONA?

ATAQUES CSRF

1. Usuário faz o login no banco.com;

2. Servidor autentica usuário e o HTTP Response inclui um cookie de

autenticação;

3. Sem realizar o logout no banco.com, o usuário visita outro site que contém

um form oculto;

4. O site contém um HTML malicioso como o seguinte, que executa um post

no site vulnerável:

5. O usuário clica no botão e o cookie de autenticação é enviado junto pelo

navegador;

6. O request roda no servidor do banco.com no contexto autenticado do

usuário, podendo realizar qualquer coisa que um usuário autenticado pode

fazer.

25

Page 26: Segurança em Aplicações ASP.NET (XSS e CSRF)

Exemplo de código malicioso:

ATAQUES CSRF

26

Page 27: Segurança em Aplicações ASP.NET (XSS e CSRF)

MITIGANDO ATAQUES CSRF

Page 28: Segurança em Aplicações ASP.NET (XSS e CSRF)

AÇÕES PARA MITIGAR ATAQUES CSRF

MITIGANDO ATAQUES CSRF

SSL não previne contra ataques CSRF, pois requisições podem ser feitas

utilizando “https://”.

Ataques CSRF não estão limitados a sites que utilizam cookies para

autenticação.

Basic e Digest authentication também são vulneráveis, pois o browser envia as

credenciais em todas as requisições até a sessão terminar.

Para mitigar esses problemas, no ASP.NET MVC podemos utilizar o helper

HtmlHelper.AntiForgeryToken no Razor. Ou então, o método

AntiForgery.GetTokens(null, out cookieToken, out formToken); encapsulado

numa function para centralizar todas as requisições AJAX.

28

Page 29: Segurança em Aplicações ASP.NET (XSS e CSRF)

FERRAMENTAS DE AUDITORIA

Page 30: Segurança em Aplicações ASP.NET (XSS e CSRF)

PLUGINS PARA GOOGLE CHROME

FERRAMENTAS DE

AUDITORIA

https://code.google.com/p/domsnitch/

http://resources.infosecinstitute.com/19-extensions-to-turn-google-chrome-into-

penetration-testing-tool/

http://blog.anantshri.info/chrome-extensions-for-security-professionals/

30

Page 31: Segurança em Aplicações ASP.NET (XSS e CSRF)

PLUGINS PARA FIREFOX

FERRAMENTAS DE

AUDITORIA

https://addons.mozilla.org/en-US/firefox/addon/xss-me/

http://resources.infosecinstitute.com/use-firefox-browser-as-a-penetration-

testing-tool-with-these-add-ons/

http://labs.securitycompass.com/exploit-me/

31

Page 32: Segurança em Aplicações ASP.NET (XSS e CSRF)

OUTRAS FERRAMENTAS

FERRAMENTAS DE

AUDITORIA

http://www.acunetix.com/cross-site-scripting/scanner-download

32

Page 33: Segurança em Aplicações ASP.NET (XSS e CSRF)

Obrigado ;)

LUCIANO GERHARDTANALISTA DE SISTEMAS, FSW POA

+ 55 (51) 2139-5300 RAMAL [email protected]