SlideShare uma empresa Scribd logo
1 de 93
Baixar para ler offline
Segurança na Web
Será que seu sistema está realmente seguro?
Rodrigo Branas – @rodrigobranas - youtube.com/rodrigobranas
youtube.com/rodrigobranas
inscreva-se
Quais são seus piores pesadelos
em relação a segurança do seu sistema?
Piores Pesadelos
• Vazamento de dados expondo informações
importantes de um ou mais usuários
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
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
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
Lei Geral de Proteção de Dados ou LGPD
As multas podem chegar a 2% do
faturamento, limitado a 50 milhões de reais
Não é só isso, como fica a sua reputação
frente aos seus clientes e ao mercado?
Quem aqui acessa a rede em lugares
públicos ou desconhecidos?
Nunca trafegue informações importantes
fora de um meio criptografado
Riscos
• Vazamento dos dados que estiverem sendo
trafegados
Riscos
• Vazamento dos dados que estiverem sendo
trafegados
• Manipulação de informações sendo induzido a
tomar determinadas ações
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
A utilização de HTTPS deve ser obrigatória
Dependendo da rede que você acessar,
considere a utilização de VPN
Serviço de autenticação
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
Por isso é necessário trafegar um código
secreto em cada requisição
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
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
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
Se esse código secreto for obtido é
possível se passar pelo usuário
Em termos de segurança, o serviço de
autenticação é o mais crítico do sistema
Crie atrasos na resposta e bloqueie a conta
dos usuários por excesso de tentativa
Dados geográficos também podem ser
utilizados para aumentar a segurança
Cuidado com ataques utilizando a mesma
senha em uma lista de usuários diferentes
Onde um atacante conseguiria a lista
de usuários do sistema?
Em alguns sistemas essa informação é
pública: GitHub, Instagram ou Twitter
Em outros, são usados dados conhecidos
como documentos ou números sequenciais
A sua tela de recuperação de senha deixa
claro se um usuário existe ou não?
Além de expor a existência dos usuários
ainda pode trazer problemas de privacidade
Por isso, independente das reclamações, o
uso de senhas fortes deve ser obrigatório
Expirar a senha é uma boa prática?
Evite despertar o ódio dos usuários se não
for realmente necessário
Cuidado, evite a recuperação de senha
por meio de resposta secreta
Alguém deve saber o nome do seu primeiro
cachorro ou o seu apelido de infância
Sempre guarde as senhas de forma
criptografada no banco de dados
Não confie em um sistema que manda
a senha aberta por e-mail
É um problema de privacidade que
pode se tornar um risco de segurança
Utilize um salt diferente para cada senha,
prevenindo o uso de rainbow table
Não importa onde, evite usar a mesma
senha em sistemas diferentes
Você tem uma técnica para criar as suas
senhas de forma segura e confiável?
Dependendo do nível de segurança
necessário, use Multi-Factor Authentication
Uma vez obtido o código, é necessário
armazená-lo em algum lugar no cliente
E agora, cookie ou token?
Cookies
Surgiram em 1994, foram criados por Lou
Montulli na Netscape para viabilizar a criação
de carrinhos de compras
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>
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
Vantagens dos cookies
• São passados automaticamente nas
requisições, simplificando o
desenvolvimento
• Podem ser marcados como httpOnly,
impedindo ataques do tipo XSS
Alguma vez, você já teve a sensação
de estar sendo seguido?
Tokens
Os tokens seguem uma abordagem mais
moderna, flexível e escalável, não mantendo
estado de conversação no servidor
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_VFrYXd
pDDq6l
5MmNALRAy8
Connection: keep-alive
Quais são as vantagens dos tokens?
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
Tipos de Ataques
https://seginfo.com.br/2017/12/12/artigo-1-3-atualizacao-do-owasp-top-10-2017-
conheca-os-10-atuais-e-principais-riscos-de-seguranca-em-aplicacoes-web/
SQL Injection
Injeção de código SQL malicioso por meio
de campos de formulários, parâmetros da
URL entre outras possibilidades
O que é possível fazer a partir de
um ataque do tipo SQL Injection?
Ataques de SQLInjection
• Obter acesso não autorizado
• Extrair informações
• Atacar a base de dados apagando
tabelas, registros e outros recursos
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.
O que é possível fazer a partir de
um ataque do tipo CSRF?
Ataques de CSRF
• Realizar requisições se passando pelo
usuário
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?
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
Prevenção
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
Espalhe boatos sobre a segurança e o
rastreamento de operações do sistema
Obrigado!
Rodrigo Branas
Twitter: http://www.twitter.com/rodrigobranas
Instagram: http://www.instagram.com/rodrigobranas
YouTube: http://www.youtube.com/rodrigobranas
LinkedIn: http://br.linkedin.com/in/rodrigobranas
GitHub: http://www.github.com/rodrigobranas
Medium: http://www.medium.com/@rodrigobranas

Mais conteúdo relacionado

Semelhante a [DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realmente seguro?

Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...Jeronimo Zucco
 
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Alcyon Ferreira de Souza Junior, MSc
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)Leandro Lugaresi
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQuality Press
 
Sequestro de dados e o contador do futuro
Sequestro de dados  e o contador do futuroSequestro de dados  e o contador do futuro
Sequestro de dados e o contador do futuroMarcelo dos Santos
 
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosSegurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosLuis Cipriani
 
O que há de PHP e Websockets por aí?
O que há de PHP e Websockets por aí?O que há de PHP e Websockets por aí?
O que há de PHP e Websockets por aí?Marianna Cruz Teixeira
 
Apresentação VII Secomp e 3º Seel - Jataí - GO
Apresentação VII Secomp e 3º Seel - Jataí - GOApresentação VII Secomp e 3º Seel - Jataí - GO
Apresentação VII Secomp e 3º Seel - Jataí - GOFernando Soares
 
PHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIsPHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIsiMasters
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSLMarcelo Milhomem
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos WebSergio Henrique
 
Mule pe salesforce mule security
Mule pe   salesforce mule securityMule pe   salesforce mule security
Mule pe salesforce mule securityJeison Barros
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 

Semelhante a [DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realmente seguro? (20)

Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
Além do HTTPS - Como (tentar) Aumentar a Segurança de seu Website e Aplicação...
 
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 01 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHP
 
Segurança em Angular SPA
Segurança em Angular SPASegurança em Angular SPA
Segurança em Angular SPA
 
Sequestro de dados e o contador do futuro
Sequestro de dados  e o contador do futuroSequestro de dados  e o contador do futuro
Sequestro de dados e o contador do futuro
 
Aula 1
Aula 1Aula 1
Aula 1
 
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupadosSegurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
Segurança de APIs HTTP, um guia sensato para desenvolvedores preocupados
 
Aula20 open vpn
Aula20 open vpnAula20 open vpn
Aula20 open vpn
 
O que há de PHP e Websockets por aí?
O que há de PHP e Websockets por aí?O que há de PHP e Websockets por aí?
O que há de PHP e Websockets por aí?
 
Apresentação VII Secomp e 3º Seel - Jataí - GO
Apresentação VII Secomp e 3º Seel - Jataí - GOApresentação VII Secomp e 3º Seel - Jataí - GO
Apresentação VII Secomp e 3º Seel - Jataí - GO
 
PHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIsPHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIs
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSL
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
 
Fundamentos de Segurança da Informação
Fundamentos de Segurança da InformaçãoFundamentos de Segurança da Informação
Fundamentos de Segurança da Informação
 
Mule pe salesforce mule security
Mule pe   salesforce mule securityMule pe   salesforce mule security
Mule pe salesforce mule security
 
Aula 5 - Cookies e sessões em PHP
Aula 5 - Cookies e sessões em PHPAula 5 - Cookies e sessões em PHP
Aula 5 - Cookies e sessões em PHP
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
 
Tratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com phpTratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com php
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 

[DTC21] Rodrigo Branas - Segurança na Web: Será que o seu sistema está realmente seguro?

  • 1. Segurança na Web Será que seu sistema está realmente seguro? Rodrigo Branas – @rodrigobranas - youtube.com/rodrigobranas
  • 2.
  • 3.
  • 5. Quais são seus piores pesadelos em relação a segurança do seu sistema?
  • 6. Piores Pesadelos • Vazamento de dados expondo informações importantes de um ou mais usuários
  • 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
  • 10.
  • 11.
  • 12. Lei Geral de Proteção de Dados ou LGPD
  • 13. As multas podem chegar a 2% do faturamento, limitado a 50 milhões de reais
  • 14. Não é só isso, como fica a sua reputação frente aos seus clientes e ao mercado?
  • 15. Quem aqui acessa a rede em lugares públicos ou desconhecidos?
  • 16. Nunca trafegue informações importantes fora de um meio criptografado
  • 17. Riscos • Vazamento dos dados que estiverem sendo trafegados
  • 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
  • 20. A utilização de HTTPS deve ser obrigatória
  • 21. Dependendo da rede que você acessar, considere a utilização de VPN
  • 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
  • 31. Dados geográficos também podem ser utilizados para aumentar a segurança
  • 32. Cuidado com ataques utilizando a mesma senha em uma lista de usuários diferentes
  • 33. Onde um atacante conseguiria a lista de usuários do sistema?
  • 34. Em alguns sistemas essa informação é pública: GitHub, Instagram ou Twitter
  • 35. Em outros, são usados dados conhecidos como documentos ou números sequenciais
  • 36. A sua tela de recuperação de senha deixa claro se um usuário existe ou não?
  • 37. Além de expor a existência dos usuários ainda pode trazer problemas de privacidade
  • 38. Por isso, independente das reclamações, o uso de senhas fortes deve ser obrigatório
  • 39. Expirar a senha é uma boa prática?
  • 40. Evite despertar o ódio dos usuários se não for realmente necessário
  • 41. Cuidado, evite a recuperação de senha por meio de resposta secreta
  • 42. Alguém deve saber o nome do seu primeiro cachorro ou o seu apelido de infância
  • 43. Sempre guarde as senhas de forma criptografada no banco de dados
  • 44. Não confie em um sistema que manda a senha aberta por e-mail
  • 45. É um problema de privacidade que pode se tornar um risco de segurança
  • 46. Utilize um salt diferente para cada senha, prevenindo o uso de rainbow table
  • 47. Não importa onde, evite usar a mesma senha em sistemas diferentes
  • 48. Você tem uma técnica para criar as suas senhas de forma segura e confiável?
  • 49. Dependendo do nível de segurança necessário, use Multi-Factor Authentication
  • 50. Uma vez obtido o código, é necessário armazená-lo em algum lugar no cliente
  • 51. E agora, cookie ou token?
  • 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
  • 60. Alguma vez, você já teve a sensação de estar sendo seguido?
  • 61.
  • 62.
  • 63.
  • 64.
  • 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
  • 72.
  • 73.
  • 74. Quais são as vantagens dos tokens?
  • 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
  • 79. Injeção de código SQL malicioso por meio de campos de formulários, parâmetros da URL entre outras possibilidades
  • 80. O que é possível fazer a partir de um ataque do tipo SQL Injection?
  • 81. Ataques de SQLInjection • Obter acesso não autorizado • Extrair informações • Atacar a base de dados apagando tabelas, registros e outros recursos
  • 82. CSRF, ou Cross-Site Request Forgery
  • 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?
  • 85. Ataques de CSRF • Realizar requisições se passando pelo usuário
  • 86. XSS, ou Cross-Site Scripting
  • 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
  • 92. Espalhe boatos sobre a segurança e o rastreamento de operações do sistema
  • 93. Obrigado! Rodrigo Branas Twitter: http://www.twitter.com/rodrigobranas Instagram: http://www.instagram.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas GitHub: http://www.github.com/rodrigobranas Medium: http://www.medium.com/@rodrigobranas