Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Autenticação em apps mobile

Autenticação em apps mobile

Victor Oliveira Nascimento

December 13, 2016
Tweet

More Decks by Victor Oliveira Nascimento

Other Decks in Technology

Transcript

  1. Práticas de autenticação Usuário Device Internet Servidor - Crypto -

    Token de canal - Challenge auth - TLS Alguém que: 1. Sabe algo 2. Tem algo 3. É algo - Fingerprint - Crypto - ???? - ???? - Public Key Infrastructure - C. A.s - Crypto
  2. Alguém que SABE algo • Password, frases secretas, dados do

    cadastro • Importante que só o usuário saiba destas informações • Todos estes dados são sensíveis para serem trafegados • Pensem em algo que só vocês sabem…
  3. Alguém que TEM algo • Um celular • Um chaveiro

    token • Um cartão com números aleatórios • Porém… dá para confiar no cliente?
  4. Não confie no cliente! • O cliente sempre poderá estar

    comprometido • Nada em software pode te trazer confiança de identidade • Nem em hardware (mas dá mais trabalho… as vezes…)
  5. Alguém que É algo • Biometria ◦ Scan de íris

    ◦ Scan de digital ◦ Análise de DNA… • Infelizmente é onde o software/hardware mais possui problemas de implementação...
  6. Todo mundo é diferente? • Digitais podem mudar ou serem

    iguais ou não existirem • Os olhos sofrem alterações também • O DNA não é prático de embarcar em um celular… por enquanto...
  7. Diminuindo os problemas 1. Pinning de certificado (aumenta a confiança

    do canal) 2. Multi fatores de autenticação 3. Usar os recursos disponíveis do cliente (Fingerprint) 4. Usar uma estratégia de tokens de sessão segura!
  8. Que diabos é “pinning”? - Garante que além de termos

    um certificado válido na sessão, temos o certificado que estamos esperando. - Ajuda a autenticar o canal com o servidor sem que alguém “escute” no meio.
  9. Multi-factor authentication - Autenticação de canal cruzado - SMS, Push,

    Cartão de senha, Token chaveiro são canais diferentes da internet - SMS não é mais considerado seguro!!!
  10. Como implementar? - Usando um serviço externo (Twilio, Auth0) -

    Implementando algoritmos de OTP (one time password) como HOTP (Hash based one time password) ou TOTP (time and hash based one time password). Hoje só o TOTP é recomendado. Caso não tenha um time de segurança para validar uma implementação destas, USE UM SERVIÇO PARA ISSO QUE NÃO SEJA BASEADO EM SMS!!!
  11. Fingerprint - Todos os detalhes de implementação e a discussão

    na apresentação do Ben Oberkfell: - https://www.youtube.com/watch?v=_OiyXGTdR3Q - https://github.com/benoberkfell/android-fingerprint-de mo - Apresentação? Mas qual a dificuldade de implementar isso?
  12. Fingerprint - Fingerprint NÃO é uma API para autenticação com

    o SERVIDOR - É uma API para autenticação com o HARDWARE DO CELULAR - Quem envia true ou false para um servidor para dizer se o usuário está autenticado com o fingerprint está pedindo para apanhar… não por mim, mas apanhar pelo Deadpool por exemplo...
  13. Fingerprint - O fingerprint é uma especificação de hardware do

    Google para acesso a um storage criptografado. - Reconhecer uma digital é te dar acesso a este aramazenamento de chaves de criptografia. - Devemos usar o fingerprint para assinar uma requisição sensível e verificar no servidor se a assinatura é válida.
  14. JSON Web Token (JWT) - Tokens de sessão - Assinados

    criptograficamente - Possuem claims (premissas) sobre a sessão - São compostos por objetos JSON para fácil inspeção - Podem conter dados do domínio da aplicação como roles (tipos de permissão do usuário) - https://jwt.io/
  15. Tokens de sessão - Usem JWT e não HTTP Basic

    ou Digest - NÃO PASSEM TOKENs COMO QUERY PARAMETERS!!! - Cuidado com autenticação stateless - Pensem numa estratégia de renovação segura
  16. Renovação de token - Usem um Authenticator do OkHttp! -

    Para cada resposta 401 ele irá retentar o último request - Testem MUITO este fluxo! Este é um bom caso para usar um servidor mocado para gerar respostas de erro. - Pensem em fluxos de testes com alta concorrência (caso tenha 5 chamadas concorrentes após o término da sessão, todas irão tentar renovar ao memso tempo?)
  17. www.concretesolutions.com.br Rio de Janeiro – Rua São José, 90 –

    cj. 2121 Centro – (21) 2240-2030 São Paulo - Av. Nações Unidas, 11.541 3º andar - Brooklin - (11) 4119-0449 Ajudamos empresas a criar produtos digitais de sucesso