7. Piores Pesadelos
• Vazamento de dados expondo informações
importantes de um ou mais usuários
• Descoberta de fraudes pela execução de
operações de forma indevida
8. Piores Pesadelos
• Vazamento de dados expondo informações
importantes de um ou mais usuários
• Descoberta de fraudes pela execução de
operações de forma indevida
• Perda parcial ou total dos dados ou até
mesmo sequestro com pedido de resgate
9. Piores Pesadelos
• Vazamento de dados expondo informações
importantes de um ou mais usuários
• Descoberta de fraudes pela execução de
operações de forma indevida
• Perda parcial ou total dos dados ou até
mesmo sequestro com pedido de resgate
• Queda do sistema por conta de ataques
18. Riscos
• Vazamento dos dados que estiverem sendo
trafegados
• Manipulação de informações sendo induzido a
tomar determinadas ações
19. Riscos
• Vazamento dos dados que estiverem sendo
trafegados
• Manipulação de informações sendo induzido a
tomar determinadas ações
• Execução de operações indevidas por meio
do sequestro de sessão ativa
23. 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
24. Por isso é necessário trafegar um código
secreto em cada requisição
25. Transmitindo na URI da requisição
GET /resources?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
Cache-Control: no-cache
26. Transmitindo no header da requisição
GET /resources 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
Secret-Code: rodrigobranas
Cache-Control: no-cache
27. Transmitindo no body da requisição
POST /resources 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
secret-code=rodrigobranas
28. Se esse código secreto for obtido é
possível se passar pelo usuário
29. Em termos de segurança, o serviço de
autenticação é o mais crítico do sistema
30. Crie atrasos na resposta e bloqueie a conta
dos usuários por excesso de tentativa
53. Surgiram em 1994, foram criados por Lou
Montulli na Netscape para viabilizar a criação
de carrinhos de compras
54.
55. Ao acessar um recurso protegido, o servidor
pode redirecionar ou mesmo retornar
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>
56. 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
57. 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
58. 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
59. Vantagens dos cookies
• São passados automaticamente nas
requisições, simplificando o
desenvolvimento
• Podem ser marcados como httpOnly,
impedindo ataques do tipo XSS
66. Os tokens seguem uma abordagem mais
moderna, flexível e escalável, não mantendo
estado de conversação no servidor
67.
68. 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>
69. 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
70. 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"}
71. 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_VFrYXd
pDDq6l
5MmNALRAy8
Connection: keep-alive
75. Vantagens dos tokens
• Não são transmitidos automaticamente
para obter recursos estáticos
• Podem melhorar a escalabilidade da
aplicação
• Não sofrem ataques de CSRF
83. 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. O que é possível fazer a partir de
um ataque do tipo CSRF?
87. 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.
88. O que é possível fazer a partir de
um ataque do tipo XSS?
89. Ataques de XSS
• Sequestrar sessão ativa
• Roubar informações
• Manipular o usuário com informações
falsas
• Obter vantagens a partir de cliques em
propagandas não desejadas
91. Checklist
HTTPS
Política para utilização de senhas (sem senha master)
As senhas são guardadas de forma criptografada
Tempo de expiração compatível com o tipo de software
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 CSRF
Proteção contra ataques de XSS
Confirmação de senha ou código SMS em operações mais críticas
Política de segurança da informação
Registro de todas as operações
Dependências e pacotes sempre atualizados