O documento discute vários tópicos relacionados à segurança de sistemas, incluindo criptografia de dados, autenticação e autorização de usuários, proteção contra ataques como XSS e CSRF, e o uso de cookies versus tokens para armazenamento de sessões.
8. Seus dados podem estar sendo capturados
ou alterados no meio do caminho
9. HTTPS, ou Hyper Text Transfer Protocol
Secure, é baseado em SSL ou TLS
10. Isso quer dizer que estando em um meio
criptografado, estou sempre protegido?
11. 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
16. Como fazer para proteger um recurso
utilizando o protocolo HTTP?
17. Basta combinar um código secreto com o
servidor e enviar todas as requisições
18. Em que lugar da requisição o código
secreto poderia ser trafegado?
19. 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
20. 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
21. 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
22. O código secreto precisa ser complexo, caso
contrário poderia ser facilmente quebrado
23. Como inviável decorar um código secreto, é
necessário ter uma forma fácil de obtê-lo
24.
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 que exista rastreabilidade
para realizar o acesso de uma forma fácil
28. 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
29. Tente estabelecer uma política de atraso e
bloqueio com base no número de tentativas
30. E se o ataque for distribuído, utilizando
a mesma senha em todos os usuários?
46. 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
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
52. 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.
56. 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>
57. 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
58. 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
59. 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
66. 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.
67. O que é possível fazer a partir de
um ataque do tipo XSS?
81. 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.
84. 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.
89. 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>
90. 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
91. 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"}
92. 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
102. 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
115. Uma empresa de impressão de fotos
precisa de acesso as sua conta do Picasa
116. Como fazer para conceder acesso
aos seus dados para terceiros?
117. Entregar o nome de usuário e senha
pode não ser uma boa estratégia
118. E se existisse a possibilidade de liberar um
token, com privilégios específicos associados
119.
120. 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.
121.
122. 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)
133. 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