O protocolo de autorização OAuth 2.0 e o protocolo de autenticação Two-factor-Authentication(2FA)

André Miguel dos Reis Marques Domingues
labmm4a
Published in
6 min readMar 6, 2022

Uma análise crítica

Resumo

Atualmente, é seguro assumir-se que cada vez mais informação de natureza muito diversa é depositada online. Efetivamente, a maioria das pessoas depositam quase todo o tipo de informações em plataformas sociais, como o Facebook, Instagram e Twitter. Assim, é de grande interesse que as bases de dados tenham implementados mecanismos de segurança forte, de forma a impedir a divulgação de dados pessoais, incluindo informação sensível, tal como dados financeiros ou de identificação pessoal.

Para uma maior segurança dos utilizadores e dos desenvolvedores de software, estão a ser cada vez mais usados protocolos de segurança, para assegurar que possíveis ataques informáticos tenham uma menor probabilidade de ocorrer. Com este ensaio teórico, pretendemos analisar alguns protocolos de segurança importantes na atualidade, como a implementação do protocolo de autorização OAuth 2.0 e alguns métodos de autenticação baseados em Two-factor-Authentication(2FA). Pretende-se discutir a sua arquitetura, modo de funcionamento, mas também conhecer os seus pontos fortes e as suas potenciais fraquezas.

Auth2.0

Após uma breve reflexão é fácil de compreender que a quantidade de informação que cada pessoa deposita em diversas bases de dados espalhadas pelo globo é enorme. Desde redes sociais, a contas em lojas com contas multibanco, a fotos partilhadas entre múltiplos chats e o próprio conteúdo do chat, toda esta informação é guardada em múltiplas bases de dados. No entanto, o que é que aconteceria se essas bases de dados não fossem bem protegidas? O que aconteceria se houvesse um ataque e fosse retirada a informação bancaria de milhares de pessoas? Para evitar este tipo de situações ao longo dos anos e com a evolução da tecnologia têm sido desenvolvidos serviços e normas de segurança para evitar estas potencias catástrofes da sociedade moderna. Neste pequeno artigo serão apresentadas duas normas de segurança, o Auth2.0 e Two-factor-Authentication(2FA), ambas são normas que as pessoas usam no seu dia a dia e será questionada a veracidade e utilidade destes protocolos.

Começando pela norma que é mais utilizada de forma geral, o Auth2.0. O Auth2.0 é a norma que permite aos serviços partilharem apenas algumas informações de outros serviços, normalmente API’s, de forma segura, por exemplo, um utilizador do Spotify ao fazer login com o Facebook utiliza o Auth2.0, uma vez que nunca partilha com o Spotify nunhuma das credenciais, no entanto o Spotify fica com acesso aos amigos, foto de perfil, entre outros. Resumidamente, “Primary goal of OAuth 2.0 is to authorize a third-party to access protected resources “[1,2]. No entanto como é que garantido o acesso de certos recursos sem a password nem o nome de utilizador?

Aprofundado a explicação do Auth2.0, este protocolo funciona na base de tockens de identificação, estes tockens são denominados de JSON Web Tockens, como referenciado “These identity information are transferred through a JSON Web token (JWT). Formally this token is identifying as ID Token. The authentication mechanism is built on this identity layer” [1]. Estes ID Tockens são utilizados na identificação e na permissão de transferência de dados. No entanto estes tockens são utilizados por várias identidades que têm papeis, sendo que no Auth2.0 são identificados 4 papeis primários [1]. Estes papeis são divididos em Resource Owner, este é o portador da informação, por exemplo um utilizador do Facebook, que é portador de username, informações pessoais, entre outros. Assim, o Resource Owner é visto como o end-user, visto que é o que usufrui deste processo. O segundo papel é o Resource Server, que é a entidade que guarda as informações, normalmente numa base de dados, em que transpondo para o exemplo que tem sido usado, seria o servidor do Facebook, que por usa vez guarda as informações dos seus utilizadores. O terceiro papel é o Client, que é o serviço que usufrui do Tocken e por sua vez da informação do Resource Owner, em que neste caso seria o Spotify que necessita da informação do utilizador para utilizar no seu serviço. Por fim o quarto papel é o Authorization Server, que é o servidor responsável por validar os Tockens que vão ser utilizados pelo Client, no entanto o Resource Server e o Authorization Server podem ser o mesmo, que é caso do exemplo que tem sido usado, onde os servidores do Facebook fazem esses dois papeis. Na figura 1 é possível observar e compreender como é que cada componente interage com as restantes de forma que o Auth2.0 consiga funcionar de forma tão segura.

Figura 1 — Processo de autorização do Auth2.0

Todo este processo é possível devido às relações de confiança que cada componente tem com os restantes, em que sem esta relação o Auth2.0 não funcionaria. Num nível mais aprofundado é necessário uma relação de confiança entre o Resource Owner e o Client, visto que sem a confiança do utilizador no Spotify não seria possível este processo acontecer. Outros casos de locais em que a confiança é necessária é entre o Client e o Auth Server, entre o Client e o Resource Server, entre o Auth Server e o Resource Server e por fim o Resource Owner e o Authorization Server. Se não houver destas relações não será possível o Auth2.0 funcionar.

Com isto dito, o Auth2.0 é um protocolo de segurança de fiabilidade elevada, e como é possível observar está implementada em múltiplos serviços utilizados pela população geral todos os dias. No entanto, para este serviço funcionar é preciso haver confiança entre todas as partes envolventes, que em certas situações pode ser um entrave, no entanto, de uma forma geral não o é. É importante de notar que este protocolo traz uma convergência de dados para menos bases de dados o que vai contra as “normas de segurança” uma vez que existem mais dados no mesmo espaço, fazendo um ótimo alvo de potenciais ataques.

Two-factor-Authentication(2FA)

Hoje em dia, os utilizadores de milhares de serviços, websites e mesmo dispositivos utilizam passwords de texto para protegerem os seus dispositivos, apesar de ser uma opção muito popular não reflete a segurança que traz. Através do método de tentativa e erro, ou seja, brute force, como conhecido, é possível descobrir cerca de 80% das passwords em apenas uma semana[3]. Existem vários métodos para reduzir esta percentagem de passwords descobertas, como usar palavras que não fazem parte do dicionário, usar caracteres aleatórios e “especiais”, ou password aging, apesar de não ser um método muito utilizado, no entanto nenhum destes resolve o problema, apenas o abranda. Para além deste problema existem outras formas banais de descobrir uma password de outra pessoa, como por exemplo por observação decorar a palavra pass de outra pessoa, adivinhar, phishing, SQL Injection, servidores podem ser hackeados, entre muitos outros. Para a solução destes problemas foi sugerido um método denominado de Two-factor-Authentication ou 2FA.

O Two-factor-Authentication é um complemento à password, em que durante o processo de autentificação é pedido ao utilizador para efetuar algum tipo de passo para haver realmente um double-check da identidade do utilizador. Existem vários tipos de 2FA, ou seja, apesar de ser necessário o utilizador efetuar uma atividade, existem várias atividades que podem ser pedidas para ser efetuadas. As formas de 2FA mais conhecidas são: Graphical centered systems, que se baseia em “systems which combined graphics/colours with textual password as a session password in order to defeat eavesdropping and some other sorts of attacks.” [3]. O Smartphone Centered System pede ao utilizador para autenticar através de uma foto, NFC ou mensagem com um PIN. O Touch-Based systems em que o utilizador tem de desenhar um padrão de identificação. O EGG-based que retira dados biométricos do utilizador para o conseguir autentificar, no entanto este sistema ainda não está implementado para o uso comum, porem existem prespetivas de uso no futuro. Por fim, o Web-centered que através de scripts e de Tockens consegue autentificar o utilizador.

Apesar do 2FA não ser o sistema mais robusto ou à prova de falha, é extremamente eficaz para não permitir a entrada de utilizadores com passwords roubadas em websites e serviços. Para além disso a implementação não requer muitas aplicações extra, uma vez que o processo de autentificação é bastante simples.

Conclusão

Perante este trabalho de pesquisa houve certos aspetos que não tinham sido tomados em consideração, o que provocou algum espanto na descoberta de certos aspetos. Visto que ambos o Auth2.0 e o Two Factor Authentication são tecnologias muito utilizadas é fácil presumir que estas são praticamente à prova de erro, no entanto após alguma pesquisa foi possível descobrir que ao contrário do espectado existem fragilidades em ambas as tecnologias. Dito isto, as vantagens que cada uma trás em relação às potenciais perdas são de uma compensação astronómica, uma vez que trazem, não só aos utilizadores como às empresas responsáveis uma enorme segurança.

Bibliografia

[1] K. Dodanduwa, I.Kaluthanthri (2018). “Role of Trust in OAuth 2.0 and OpenID Connect”.

[2] D. Hardt. “The OAuth 2.0 Authorization Framework.” [Online]. Available: https://tools.ietf.org/html/rfc6749.

[3] Mohammadreza Hazhirpasand Barkadehi, Mehrbaksh Nilashi, Othman Ibrahim, Ali Zakeri Fardi, Sarminah Samad (2018). Authentication systems: A literature review and classification,Telematics and Informatics,

--

--