Segurança
Será que seu sistema está mesmo protegido?
@rodrigobranas - http://www.youtube.com/rodrigobranas
JavaScript Masterclass
http://www.agilecode.com.br
O conteúdo desta palestra pode
te deixar um pouco paranóico
Quem aqui se interessa por segurança?
Quem aqui acessa a rede em lugares
públicos ou desconhecidos?
Todos os lugares são desconhecidos
Evite trafegar informações importantes
fora de um meio criptografado
Seus dados podem estar sendo capturados
ou alterados no meio do caminho
HTTPS, ou Hyper Text Transfer Protocol
Secure, é baseado em SSL ou TLS
Isso quer dizer que estando em um meio
criptografado, estou sempre protegido?
O HTTP, ou Hyper Text Transfer Protocol, é
um protocolo de comunicação, que funciona
sobre TCP/IP, baseado em requisições e
respostas em formato texto e sem
estado de conversação
http://localhost:3001/books
Requisição
GET /books HTTP/1.1
Host: localhost:3001
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/
webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en,en-US;q=0.8,pt;q=0.6
Request Line
Headers
Body (Optional)
Empty Line
Resposta
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 50
ETag: W/"32-ppv9pZKtoSnTuVC6kOAli8Hhdfg"
Date: Mon, 01 May 2017 11:52:27 GMT
Connection: keep-alive
["Clean Code", "Refactoring", "Extreme Programming"]
Status Line
Headers
Body (Optional)
Empty Line
Cada requisição é independente e
não tem relação com qualquer outra
Como fazer para proteger um recurso
utilizando o protocolo HTTP?
Basta combinar um código secreto com o
servidor e enviar todas as requisições
Em que lugar da requisição o código
secreto poderia ser trafegado?
Transmitindo na URL da requisição
GET /books?secret-code=rodrigobranas HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:46.0)
Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.8,pt-BR;q=0.5,pt;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Transmitindo no cabeçalho da requisição
GET /books HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:46.0)
Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.8,pt-BR;q=0.5,pt;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Pragma: no-cache
Secret-Code: rodrigobranas
Cache-Control: no-cache
Transmitindo no corpo da requisição
POST /books HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:46.0)
Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.8,pt-BR;q=0.5,pt;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Pragma: no-cache
Cache-Control: no-cache
secret-code=rodrigobranas
O código secreto precisa ser complexo, caso
contrário poderia ser facilmente quebrado
Como inviável decorar um código secreto, é
necessário ter uma forma fácil de obtê-lo
Existem outra formas...
• E-Mail e Senha
• Número de Telefone e Código por SMS
• CPF e Data de Nascimento
• Renavan e Placa do Carro
• Integração com diversas redes sociais
como Facebook, Google e Twitter
É importante que exista rastreabilidade
para realizar o acesso de uma forma fácil
Proteção e bloqueio de ataques no
serviço de autenticação
A exposição dos serviços de autenticação
podem dar origem a ataques, inicialmente
do tipo brute force, onde o atacante fica
testando diversas senhas, uma a uma, até
conseguir acessar o sistema
Tente estabelecer uma política de atraso e
bloqueio com base no número de tentativas
E se o ataque for distribuído, utilizando
a mesma senha em todos os usuários?
Sempre obrigue a utilização de
senhas fortes
Expirar ou não expirar a senha?
Evite despertar o ódio nos usuários
sem necessidade
Cuidado com as possibilidades de ataque
no processo de recuperação de senha
Evite a utilização de resposta secreta
Evite confirmar ou não a existência do
usuário no sistema
Apesar da usabilidade acabar sendo
muito prejudicada
Ataque distribuído, utilizando a mesma
senha em diversos usuários diferentes
Além de ser um problema de privacidade,
como no caso da Ashley Madison
Guarde as senhas criptografadas
Qual é o problema em não guardar
as senhas criptografadas?
É um problema de privacidade que pode
se tornar um problema de segurança
Muitos sistemas preferem a utilização de
senhas randômicas ou de tamanho fixo
Por precaução, evite utilizar a mesma
senha em sistemas diferentes
Multi-Factor Authentication ou MFA
Multi-Factor Authentication, ou MFA, é uma
técnica que consiste em solicitar diversos
tipos diferentes de informação para
conceder acesso a um usuário
Tipos de Informação
• Conhecimento: Algo que só o usuário sabe
como uma senha ou outro tipo de código
• Posse: Algo que só o usuário possui como
um cartão de crédito ou um token de
segurança
• Herança: Algo que só o próprio usuário
pode comprovar como um leitor biométrico,
de retina ou reconhecedor de voz
Caixa Eletrônico é um bom exemplo de
Multi-Factor Authentication
Uma vez obtido o código secreto, é
necessário armazená-lo no cliente
Existem alguns caminhos possíveis
Cookie ou Token?
Os cookies foram inventados pela Netscape
em 1994, por Lou Montulli, que na época
estava desenvolvendo um e-commerce e
precisa manter o estado entre as requisições
para viabilizar a implementação de um
carrinho de compras.
Foram inspirados nos Fortune Cookies
ex4_cookies_auth.js
Ao acessar um recurso protegido, o servidor responde
com um status code 401 e pode trazer no body
uma página de autenticação.
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
Date: Sun, 17 Jan 2016 22:56:58 GMT
Connection: keep-alive
Transfer-Encoding: chunked
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="/authenticate" method="POST">
<input type="text" name="username"/>
<input type="password" name="password"/>
</form>
</body>
</html>
O cliente envia uma requisição com as
credenciais de acesso para o servidor
GET /authenticate HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0)
Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/
*;q=0.8
Accept-Language: en,pt-BR;q=0.8,pt;q=0.5,en-US;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
username=root&password=123456
O servidor responde com o header
Set-Cookie junto com as informações
HTTP/1.1 200 OK
X-Powered-By: Express
Date: Sun, 17 Jan 2016 22:56:58 GMT
Connection: keep-alive
Set-Cookie: Name=xyz123; Expires=Wed, 09 Jun 2021 10:18:14
GMT
Transfer-Encoding: chunked
O cliente passa a enviar as próximas
requisições com o header Cookie
GET /private HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0)
Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/
*;q=0.8
Accept-Language: en,pt-BR;q=0.8,pt;q=0.5,en-US;q=0.3
Accept-Encoding: gzip, deflate
Cookie: Name=xyz123
Connection: keep-alive
Tipos de Cookie
Os session cookies não tem data de
expiração e são apagados após o
navegador ser fechado
Os persistent cookies respeitam a data de
expiração mesmo após o navegador
ser fechado
É seguro utilizar persistent cookies?
Cuidado com ataques como o XSS,
mesmo em um meio criptografado
XSS, ou Cross-Site Scripting
O ataque se baseia na injeção e execução
de script no navegador do alvo. É um dos
ataques mais utilizados da internet já que
não requer qualquer tipo de acesso
privilegiado na rede do alvo.
O que é possível fazer a partir de
um ataque do tipo XSS?
ex7_xss.js
Sequestrar a sessão ativa por meio do
roubo do cookie ou token
Roubar informações por meio da
manipulação da DOM
Realizar ações falsas se aproveitando
das credenciais do usuário
Obter vantagens a partir de cliques em
propagandas não desejadas
Utilize um tempo de expiração
compatível com tipo de software
Alguma vez, você já teve a sensação
de estar sendo seguido?
Cuidado, o mesmo princípio pode ser
utilizado para ataques como o CSRF...
CSRF, ou Cross-Site Request Forgery
Por padrão, os navegadores enviam cookies
nas requisições automaticamente, o ataque
se baseia em executar ações em sites que o
usuário já está autenticado.
Tokens
Os tokens seguem uma abordagem mais
moderna, flexível e escalável, não mantendo
estado de conversação no servidor e
facilitando o desenvolvimento de SPA, ou
Single-Page Application, onde muitas vezes
é necessária a utilização de recursos como o
CORS, ou Cross-Origin Resource Sharing.
ex5_tokens_auth.js
Ao acessar um recurso protegido, o servidor responde
com um status code 401 e pode trazer no body
uma página de autenticação.
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
Date: Sun, 17 Jan 2016 22:56:58 GMT
Connection: keep-alive
Transfer-Encoding: chunked
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="/authenticate" method="POST">
<input type="text" name="username"/>
<input type="password" name="password"/>
</form>
</body>
</html>
O cliente envia uma requisição com as
credenciais de acesso para o servidor
GET /authenticate HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0)
Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/
*;q=0.8
Accept-Language: en,pt-BR;q=0.8,pt;q=0.5,en-US;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
username=root&password=123456
O servidor responde com um JSON, que
contém os dados do usuário e o token
HTTP/1.1 200 OK
X-Powered-By: Express
Date: Sun, 17 Jan 2016 22:56:58 GMT
Content-Type: application/json; charset=UTF-8
Connection: keep-alive
Transfer-Encoding: chunked
{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwia
WF0IjoxNDUzODk0MjA1fQ.qq5jufLte2pfJ_sdGCmL_VFrYXdpDDq6l
5MmNALRAy8"}
O cliente passa a enviar as requisições
com o header Authorization
GET /private HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0)
Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/
*;q=0.8
Accept-Language: en,pt-BR;q=0.8,pt;q=0.5,en-US;q=0.3
Accept-Encoding: gzip, deflate
Authorization: Bearer
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6
MSwiaWF0IjoxNDUzODk0MjA1fQ.qq5jufLte2pfJ_sdGCmL_VFrY
XdpDDq6l
5MmNALRAy8
Connection: keep-alive
Quais são as vantagens dos tokens?
Funcionam melhor em conjunto
com CORS
Não são transmitidos automaticamente
para obter recursos estáticos
Podem melhorar a escalabilidade
da aplicação
Cookies podem sofrer com ataques do
tipo Cross-Site Request Forgery
Cuidado, nem tudo é assim tão fácil
Os tokens devem ser guardados,
gerenciados e transmitidos
Já estou autenticado, e agora?
Autorização
Enquanto a autenticação se preocupa em
identificar um determinado usuário, a
autorização tem interesse em controlar
que tipo de operações o usuário pode
ou não realizar controlado por um
conjunto de permissões
Será que apenas isso é suficiente?
Em sistemas que envolvem operações
críticas, é necessário adotar outras medidas
Pedir a senha novamente
Enviar confirmação por SMS
Utilizar algum tipo de token
Tabela de Senhas
Autorização para terceiros
Uma empresa de impressão de fotos
precisa de acesso as sua conta do Picasa
Como fazer para conceder acesso
aos seus dados para terceiros?
Entregar o nome de usuário e senha
pode não ser uma boa estratégia
E se existisse a possibilidade de liberar um
token, com privilégios específicos associados
OAuth, ou Open Authorization, atualmente
na versão 2.0, é um protocolo aberto que
permite mediar a autorização de uma forma
padronizada, simples e segura, para
aplicações web, modile e desktop.
Papéis
Resource Owner: O usuário que quer delegar a
autorização para determinados recursos (Você)
Client Application: A aplicação cliente, que está
interessada nos recursos (Photobox)
Resource Server: O servidor que contém os
recursos (Facebook)
Authorization Server: O servidor responsável por
negociar o processo de autorização (Facebook)
https://www.facebook.com/v2.3/dialog/oauth?
scope=user_photos&
redirect_uri=http://upload.photobox.com/facebook/auth.html&
client_id=212677532168766
Checklist
HTTPS
Política para utilização de senhas fortes
As senhas são guardadas encriptadas
Controle de autenticação em cada recurso
Controle de autorização em cada recurso
Proteção contra ataques de força bruta
Proteção contra ataques de SQL Injection
Proteção contra ataques de XSS
Se o sistema for crítico, utilização de meios de
autenticação alternativos como SMS ou Token?
https://www.owasp.org/index.php/Web_Application_Security_Testing_Cheat_Sheet
Rodrigo Branas
Agile Code: http://www.agilecode.com.br
Twitter: @rodrigobranas
SlideShare: http://www.slideshare.com/rodrigobranas
YouTube: http://www.youtube.com/rodrigobranas
LinkedIn: http://br.linkedin.com/in/rodrigobranas
+Plus: https://plus.google.com/+RodrigoBranas
GitHub: http://www.github.com/rodrigobranas

TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at JavaScript 3 Dia

  • 1.
    Segurança Será que seusistema está mesmo protegido? @rodrigobranas - http://www.youtube.com/rodrigobranas
  • 2.
  • 3.
    O conteúdo destapalestra pode te deixar um pouco paranóico
  • 4.
    Quem aqui seinteressa por segurança?
  • 5.
    Quem aqui acessaa rede em lugares públicos ou desconhecidos?
  • 6.
    Todos os lugaressão desconhecidos
  • 7.
    Evite trafegar informaçõesimportantes fora de um meio criptografado
  • 8.
    Seus dados podemestar sendo capturados ou alterados no meio do caminho
  • 9.
    HTTPS, ou HyperText Transfer Protocol Secure, é baseado em SSL ou TLS
  • 10.
    Isso quer dizerque estando em um meio criptografado, estou sempre protegido?
  • 11.
    O HTTP, ouHyper Text Transfer Protocol, é um protocolo de comunicação, que funciona sobre TCP/IP, baseado em requisições e respostas em formato texto e sem estado de conversação
  • 12.
  • 13.
    Requisição GET /books HTTP/1.1 Host:localhost:3001 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/ webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en,en-US;q=0.8,pt;q=0.6 Request Line Headers Body (Optional) Empty Line
  • 14.
    Resposta HTTP/1.1 200 OK X-Powered-By:Express Content-Type: application/json; charset=utf-8 Content-Length: 50 ETag: W/"32-ppv9pZKtoSnTuVC6kOAli8Hhdfg" Date: Mon, 01 May 2017 11:52:27 GMT Connection: keep-alive ["Clean Code", "Refactoring", "Extreme Programming"] Status Line Headers Body (Optional) Empty Line
  • 15.
    Cada requisição éindependente e não tem relação com qualquer outra
  • 16.
    Como fazer paraproteger um recurso utilizando o protocolo HTTP?
  • 17.
    Basta combinar umcódigo secreto com o servidor e enviar todas as requisições
  • 18.
    Em que lugarda requisição o código secreto poderia ser trafegado?
  • 19.
    Transmitindo na URLda requisição GET /books?secret-code=rodrigobranas HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:46.0) Gecko/20100101 Firefox/46.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.8,pt-BR;q=0.5,pt;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Pragma: no-cache Cache-Control: no-cache
  • 20.
    Transmitindo no cabeçalhoda requisição GET /books HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:46.0) Gecko/20100101 Firefox/46.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.8,pt-BR;q=0.5,pt;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Pragma: no-cache Secret-Code: rodrigobranas Cache-Control: no-cache
  • 21.
    Transmitindo no corpoda requisição POST /books HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:46.0) Gecko/20100101 Firefox/46.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.8,pt-BR;q=0.5,pt;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Content-Type: application/x-www-form-urlencoded; charset=utf-8 Pragma: no-cache Cache-Control: no-cache secret-code=rodrigobranas
  • 22.
    O código secretoprecisa ser complexo, caso contrário poderia ser facilmente quebrado
  • 23.
    Como inviável decorarum código secreto, é necessário ter uma forma fácil de obtê-lo
  • 25.
    Existem outra formas... •E-Mail e Senha • Número de Telefone e Código por SMS • CPF e Data de Nascimento • Renavan e Placa do Carro • Integração com diversas redes sociais como Facebook, Google e Twitter
  • 26.
    É importante queexista rastreabilidade para realizar o acesso de uma forma fácil
  • 27.
    Proteção e bloqueiode ataques no serviço de autenticação
  • 28.
    A exposição dosserviços de autenticação podem dar origem a ataques, inicialmente do tipo brute force, onde o atacante fica testando diversas senhas, uma a uma, até conseguir acessar o sistema
  • 29.
    Tente estabelecer umapolítica de atraso e bloqueio com base no número de tentativas
  • 30.
    E se oataque for distribuído, utilizando a mesma senha em todos os usuários?
  • 31.
    Sempre obrigue autilização de senhas fortes
  • 32.
    Expirar ou nãoexpirar a senha?
  • 33.
    Evite despertar oódio nos usuários sem necessidade
  • 34.
    Cuidado com aspossibilidades de ataque no processo de recuperação de senha
  • 35.
    Evite a utilizaçãode resposta secreta
  • 36.
    Evite confirmar ounão a existência do usuário no sistema
  • 37.
    Apesar da usabilidadeacabar sendo muito prejudicada
  • 38.
    Ataque distribuído, utilizandoa mesma senha em diversos usuários diferentes
  • 39.
    Além de serum problema de privacidade, como no caso da Ashley Madison
  • 40.
    Guarde as senhascriptografadas
  • 41.
    Qual é oproblema em não guardar as senhas criptografadas?
  • 42.
    É um problemade privacidade que pode se tornar um problema de segurança
  • 43.
    Muitos sistemas preferema utilização de senhas randômicas ou de tamanho fixo
  • 44.
    Por precaução, eviteutilizar a mesma senha em sistemas diferentes
  • 45.
  • 46.
    Multi-Factor Authentication, ouMFA, é uma técnica que consiste em solicitar diversos tipos diferentes de informação para conceder acesso a um usuário
  • 47.
    Tipos de Informação •Conhecimento: Algo que só o usuário sabe como uma senha ou outro tipo de código • Posse: Algo que só o usuário possui como um cartão de crédito ou um token de segurança • Herança: Algo que só o próprio usuário pode comprovar como um leitor biométrico, de retina ou reconhecedor de voz
  • 48.
    Caixa Eletrônico éum bom exemplo de Multi-Factor Authentication
  • 49.
    Uma vez obtidoo código secreto, é necessário armazená-lo no cliente
  • 50.
  • 51.
  • 52.
    Os cookies foraminventados pela Netscape em 1994, por Lou Montulli, que na época estava desenvolvendo um e-commerce e precisa manter o estado entre as requisições para viabilizar a implementação de um carrinho de compras.
  • 53.
    Foram inspirados nosFortune Cookies
  • 55.
  • 56.
    Ao acessar umrecurso protegido, o servidor responde com um status code 401 e pode trazer no body uma página de autenticação. HTTP/1.1 401 Unauthorized X-Powered-By: Express Date: Sun, 17 Jan 2016 22:56:58 GMT Connection: keep-alive Transfer-Encoding: chunked <html> <head> <title>Login</title> </head> <body> <form action="/authenticate" method="POST"> <input type="text" name="username"/> <input type="password" name="password"/> </form> </body> </html>
  • 57.
    O cliente enviauma requisição com as credenciais de acesso para o servidor GET /authenticate HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0) Gecko/20100101 Firefox/43.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/ *;q=0.8 Accept-Language: en,pt-BR;q=0.8,pt;q=0.5,en-US;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive username=root&password=123456
  • 58.
    O servidor respondecom o header Set-Cookie junto com as informações HTTP/1.1 200 OK X-Powered-By: Express Date: Sun, 17 Jan 2016 22:56:58 GMT Connection: keep-alive Set-Cookie: Name=xyz123; Expires=Wed, 09 Jun 2021 10:18:14 GMT Transfer-Encoding: chunked
  • 59.
    O cliente passaa enviar as próximas requisições com o header Cookie GET /private HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0) Gecko/20100101 Firefox/43.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/ *;q=0.8 Accept-Language: en,pt-BR;q=0.8,pt;q=0.5,en-US;q=0.3 Accept-Encoding: gzip, deflate Cookie: Name=xyz123 Connection: keep-alive
  • 60.
  • 61.
    Os session cookiesnão tem data de expiração e são apagados após o navegador ser fechado
  • 62.
    Os persistent cookiesrespeitam a data de expiração mesmo após o navegador ser fechado
  • 63.
    É seguro utilizarpersistent cookies?
  • 64.
    Cuidado com ataquescomo o XSS, mesmo em um meio criptografado
  • 65.
  • 66.
    O ataque sebaseia na injeção e execução de script no navegador do alvo. É um dos ataques mais utilizados da internet já que não requer qualquer tipo de acesso privilegiado na rede do alvo.
  • 67.
    O que épossível fazer a partir de um ataque do tipo XSS?
  • 68.
  • 69.
    Sequestrar a sessãoativa por meio do roubo do cookie ou token
  • 70.
    Roubar informações pormeio da manipulação da DOM
  • 71.
    Realizar ações falsasse aproveitando das credenciais do usuário
  • 72.
    Obter vantagens apartir de cliques em propagandas não desejadas
  • 73.
    Utilize um tempode expiração compatível com tipo de software
  • 74.
    Alguma vez, vocêjá teve a sensação de estar sendo seguido?
  • 79.
    Cuidado, o mesmoprincípio pode ser utilizado para ataques como o CSRF...
  • 80.
    CSRF, ou Cross-SiteRequest Forgery
  • 81.
    Por padrão, osnavegadores enviam cookies nas requisições automaticamente, o ataque se baseia em executar ações em sites que o usuário já está autenticado.
  • 83.
  • 84.
    Os tokens seguemuma abordagem mais moderna, flexível e escalável, não mantendo estado de conversação no servidor e facilitando o desenvolvimento de SPA, ou Single-Page Application, onde muitas vezes é necessária a utilização de recursos como o CORS, ou Cross-Origin Resource Sharing.
  • 88.
  • 89.
    Ao acessar umrecurso protegido, o servidor responde com um status code 401 e pode trazer no body uma página de autenticação. HTTP/1.1 401 Unauthorized X-Powered-By: Express Date: Sun, 17 Jan 2016 22:56:58 GMT Connection: keep-alive Transfer-Encoding: chunked <html> <head> <title>Login</title> </head> <body> <form action="/authenticate" method="POST"> <input type="text" name="username"/> <input type="password" name="password"/> </form> </body> </html>
  • 90.
    O cliente enviauma requisição com as credenciais de acesso para o servidor GET /authenticate HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0) Gecko/20100101 Firefox/43.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/ *;q=0.8 Accept-Language: en,pt-BR;q=0.8,pt;q=0.5,en-US;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive username=root&password=123456
  • 91.
    O servidor respondecom um JSON, que contém os dados do usuário e o token HTTP/1.1 200 OK X-Powered-By: Express Date: Sun, 17 Jan 2016 22:56:58 GMT Content-Type: application/json; charset=UTF-8 Connection: keep-alive Transfer-Encoding: chunked {"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwia WF0IjoxNDUzODk0MjA1fQ.qq5jufLte2pfJ_sdGCmL_VFrYXdpDDq6l 5MmNALRAy8"}
  • 92.
    O cliente passaa enviar as requisições com o header Authorization GET /private HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0) Gecko/20100101 Firefox/43.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/ *;q=0.8 Accept-Language: en,pt-BR;q=0.8,pt;q=0.5,en-US;q=0.3 Accept-Encoding: gzip, deflate Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6 MSwiaWF0IjoxNDUzODk0MjA1fQ.qq5jufLte2pfJ_sdGCmL_VFrY XdpDDq6l 5MmNALRAy8 Connection: keep-alive
  • 93.
    Quais são asvantagens dos tokens?
  • 94.
    Funcionam melhor emconjunto com CORS
  • 95.
    Não são transmitidosautomaticamente para obter recursos estáticos
  • 96.
    Podem melhorar aescalabilidade da aplicação
  • 97.
    Cookies podem sofrercom ataques do tipo Cross-Site Request Forgery
  • 98.
    Cuidado, nem tudoé assim tão fácil
  • 99.
    Os tokens devemser guardados, gerenciados e transmitidos
  • 100.
  • 101.
  • 102.
    Enquanto a autenticaçãose preocupa em identificar um determinado usuário, a autorização tem interesse em controlar que tipo de operações o usuário pode ou não realizar controlado por um conjunto de permissões
  • 103.
    Será que apenasisso é suficiente?
  • 104.
    Em sistemas queenvolvem operações críticas, é necessário adotar outras medidas
  • 105.
    Pedir a senhanovamente
  • 106.
  • 107.
  • 108.
  • 114.
  • 115.
    Uma empresa deimpressão de fotos precisa de acesso as sua conta do Picasa
  • 116.
    Como fazer paraconceder acesso aos seus dados para terceiros?
  • 117.
    Entregar o nomede usuário e senha pode não ser uma boa estratégia
  • 118.
    E se existissea possibilidade de liberar um token, com privilégios específicos associados
  • 120.
    OAuth, ou OpenAuthorization, atualmente na versão 2.0, é um protocolo aberto que permite mediar a autorização de uma forma padronizada, simples e segura, para aplicações web, modile e desktop.
  • 122.
    Papéis Resource Owner: Ousuário que quer delegar a autorização para determinados recursos (Você) Client Application: A aplicação cliente, que está interessada nos recursos (Photobox) Resource Server: O servidor que contém os recursos (Facebook) Authorization Server: O servidor responsável por negociar o processo de autorização (Facebook)
  • 128.
  • 133.
    Checklist HTTPS Política para utilizaçãode senhas fortes As senhas são guardadas encriptadas Controle de autenticação em cada recurso Controle de autorização em cada recurso Proteção contra ataques de força bruta Proteção contra ataques de SQL Injection Proteção contra ataques de XSS Se o sistema for crítico, utilização de meios de autenticação alternativos como SMS ou Token? https://www.owasp.org/index.php/Web_Application_Security_Testing_Cheat_Sheet
  • 134.
    Rodrigo Branas Agile Code:http://www.agilecode.com.br Twitter: @rodrigobranas SlideShare: http://www.slideshare.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas +Plus: https://plus.google.com/+RodrigoBranas GitHub: http://www.github.com/rodrigobranas