Implementação de mecanismos de privacidade no OpenID
Connect
Pedro Henrique Pereira Martins1∗, Rodrigo Duarte Lopez1†, Rafael Weingärtner1 ,
Jorge Werner1 , Carla Merkle Westphall1
1
Laboratório de Redes e Gerência
Universidade Federal de Santa Catarina (UFSC)
Caixa Postal 476 – 88.040-970 – Florianópolis – SC – Brasil
{pedro,rodrigo,weingartner,jorge,carla}@lrg.ufsc.br
Abstract. In cloud computing it is necessary to prevent data leakage that could
compromise the privacy of its users. Data stored by users on a cloud identity
provider must be stored using secure methods and the user must be aware of
the use of his data. This work aims to develop a way to prevent attackers or
administrators to have access to the cloud user data ensuring users’ privacy.
Our model proposes encryption of data stored on the identity provider as well
as request the user’s permission for the dissemination of his data, whenever data
is requested by any application. Thus, the user participates in the process as it
provides encryption/decryption keys and allows or not the release of data when
an application (service provider) requests data from the identity provider. The
proposals were implemented through an extension of MITREid software that is
an available implementation of OpenID Connect.
Resumo. Na computação em nuvem é necessário impedir o vazamento de dados
que possam comprometer a privacidade de seus usuários. Os dados guardados
pelos usuários em um provedor de identidade na nuvem devem ser armazenados usando métodos seguros e o usuário deve ter ciência sobre o uso dos seus
dados. Este trabalho tem como objetivo desenvolver uma maneira de impedir
que invasores/administradores tenham acesso aos dados dos usuários da nuvem garantindo a privacidade dos usuários. Nosso modelo propõe cifrar os
dados armazenados no provedor de identidades além de requisitar a permissão
do usuário para disseminação dos seus dados, sempre que estes forem requisitados por alguma aplicação. Dessa forma, o usuário participa do processo já
que fornece chaves de cifragem/decifragem e permite ou não a liberação dos
seus dados quando uma aplicação (provedor de serviço) requisita dados para
o provedor de identidade. As propostas foram implementadas através de uma
extensão do software MITREid que é uma implementação disponı́vel do OpenID
Connect.
1. Introdução
A computação em nuvem é um modelo ubı́quo, conveniente e de acesso compartilhado
a recursos computacionais como servidores e diferentes tipos de serviços. Este modelo
∗
†
Bolsista do CNPq - Brasil
Bolsista do CNPq - Brasil
também é capaz de fornecer e liberar recursos rapidamente com baixo custo de gestão
[Mell and Grance 2011].
A propagação das identidades e das informações pessoais chamadas PII (Personally Identifiable Information) deve ser controlada e monitorada de acordo com a
legislação. As informações sensı́veis como identidades de funcionários, ou ainda,
informações sobre estruturas organizacionais, serviços e aplicações de empresas, não podem ser expostas nos provedores de serviços nas nuvens [Weingärtner 2014].
A privacidade é um direito fundamental [Lauterpacht 1948] e deve ser garantido mesmo em ambientes online [Council 2012]. A melhoria da segurança e privacidade nos ambientes de computação em nuvem é fonte de pesquisas [Sánchez et al. 2012]
[Betgé-Brezetz et al. 2012] [Kalloniatis et al. 2014]. Há preocupação com a segurança
dos usuários para impedir o vazamento dos seus dados sensı́veis.
Para gerenciar as identidades de ambientes de computação em nuvem são usados
os sistemas de gerenciamento de identidades (IdM - Identity Management), que podem
ser definidos como frameworks capazes de administrar informações pessoais ligadas a
identidade do usuário [Bertino et al. 2009] [Hansen et al. 2008].
Uma federação é um conjunto de provedores de identidade (IdP - Identity Provider) e de serviço (SP - Service Provider) que estabelecem uma confiança mútua para
aceitar e confiar nos dados trocados entre esses provedores. Usando identidades federadas
usuários realizam a autenticação uma única vez no domı́nio de origem e podem acessar
recursos e serviços de múltiplos e diferentes domı́nios pertencentes à federação, já que
os participantes da federação confiam no resultado da autenticação feita pelos parceiros
[Orawiwattanakul et al. 2010] [Bertino and Takahashi 2011].
O gerenciamento de identidades na computação em nuvem precisa de garantia e transparência nas práticas de privacidade, no controle do uso e fluxo dos dados
[Weingärtner and Westphall 2014] [Santos et al. 2014]. Para isso, é necessário que mecanismos de privacidade presentes na autenticação e na autorização definam modelos e
polı́ticas de uso de atributos adequadas [Faraji et al. 2014] [Chadwick and Fatema 2012].
Nos sistemas de gerenciamento de identidade garantir a segurança de PIIs é um problema
quando se assume que existem administradores ou invasores maliciosos e/ou curiosos que
tem acesso aos PIIs dos clientes armazenados em um ambiente online de nuvem computacional.
Neste trabalho o objetivo principal foi a inserção de caracterı́sticas de privacidade
na versão MITREid [MIT 2014] que é uma implementação do sistema de gerenciamento
de identidades OpenID Connect [OpenID 2014], que não possuia controles de privacidade. O modelo proposto tem a etapa diferenciada no cadastro do usuário no provedor de
identidade e é fortemente centrado no usuário, já que precisa do consentimento e ciência
do próprio usuário para liberação de atributos para o provedor de serviço. Nesse sentido
este trabalho apresenta uma contribuição significativa pois estende o OpenID Connect
para melhorar a privacidade dos usuários.
O texto está organizado em 6 seções. Na seção 2 os trabalhos relacionados são
descritos. A seção 3 apresenta as ferramentas usadas no desenvolvimento. A seção 4
explica como a privacidade foi inserida no OpenID Connect. Na seção 5 a implementação
realizada é descrita e as conclusões sobre o trabalho estão na seção 6.
2. Trabalhos Relacionados
O trabalho de [Switch 2012] desenvolveu um plugin para o sistema Shibboleth que fornece ao usuário a ciência sobre a divulgação de dados repassados para um provedor de
serviço. Todos os usuários do ambiente usam a mesma polı́tica de liberação que é fixa no
sistema. Já no trabalho de [Orawiwattanakul et al. 2010] os usuários podem selecionar,
no sistema Shibboleth, entre todos os atributos não-obrigatórios que pretendam divulgar
ao SP que está sendo acessado. É um trabalho usado na federação japonesa GakuNin.
Em ambos trabalhos não há cifragem dos dados no provedor de identidade. Assim, um
administrador malicioso pode ter acesso aos dados existentes na base de dados do IdP.
O trabalho de [Sánchez et al. 2012] propõe um protocolo de reputação para o estabelecimento dinâmico de uma federação usando a reputação das entidades. Os usuários
podem verificar as reputações dos provedores da federação antes de enviar quaisquer dados aos provedores. O modelo propõe uma maneira de verificar o que está sendo feito
com os dados liberados e assim os próprios usuários aumentam ou diminuem a reputação
do provedor. Um protótipo usando o sistema Authentic para implementar o IdP que considera a reputação foi desenvolvido.
No artigo de [Betgé-Brezetz et al. 2012] é proposta uma maneira de definir se um
usuário confia ou não em um provedor de nuvem. Com base na confiança do provedor de
nuvem, o usuário pode enviar seus dados em texto plano, parcialmente criptografado (com
alguns metadados em texto plano) ou totalmente criptografado para a nuvem. Também foi
proposto o envelope de dados privados para transportar os dados dos usuários para a nuvem. Esse envelope pode conter os dados criptografados (ou não) com algumas polı́ticas
que declaram como, onde, por quem e quando esses dados podem ser usados.
3. Ferramentas utilizadas
No desenvolvimento do trabalho várias ferramentas foram estudadas e testadas: OpenId
Connect, Spring, CloudStack, Cryptico e Sjcl.
OpenId Connect [OpenID 2014]: O OpenId Connect é um sistema de gerenciamento de identidades que dispõe de implementações em diversas linguagens, mas tem
IdP e SP escritos em Java com boa documentação. O OpenId Connect funciona como
uma camada extra no protocolo OAuth2.0, permitindo que os usuários de serviços online
possam observar a identidade do servidor que está requisitando seus dados e saber quais
dados estão sendo requisitados pelo servidor, além de auxiliar na resolução de qual IdP
usar, usando como referência o nome/aplicação/endereço do IdP. Foi usada a MITREid
que é uma implementação do OpenId Connect feita pelo MIT [MIT 2014]. Na figura 1 é
representado o fluxo da interação entre usuário (browser), IdP e SP no OpenID Connect.
No passo 1 o usuário requisita acesso ao recurso protegido. No passo 2 o SP requisita
a autenticação do usuário que é realizada no passo 3. No passo 4 o usuário pode ter a
chance de consentir com a liberação de dados para o SP. No passo 5 o IdP envia a prova
da autenticação para o SP que é validada no passo 6. No passo 7 o SP obtém atributos do
usuário a partir do IdP para liberar ou não o acesso ao recurso no passo 8.
Spring [Spring 2015]: é um framework de desenvolvimento Java com várias bibliotecas. Foi usado o Spring para auxiliar na criação e gestão de objetos Java em memória.
Spring-MVC é uma parte do Spring que cuida da infraestrutura do código que foi usada
Figura 1. Fluxo da interação entre Usuário, IdP e SP no OpenID Connect
[Weingärtner 2014]
para separar a parte lógica da parte da interface do usuário. Spring-Web é uma parte
do Spring que cuida do mapeamento das páginas web que foi usada para mapear todas
as páginas utilizadas no projeto. Spring-Security [Spring 2015] é uma parte do Spring
que cuida dos aspectos de segurança da aplicação e foi usada para proteção de URL,
autenticação de usuário e redirecionamento de URL.
CloudStack [Apache 2015]: é uma ferramenta usada para gerenciar os dispositivos de hardware de uma ou mais máquinas para suportar a criação de máquinas virtuais
com uso dinâmico dos recursos e compatibilidade entre diferentes tipos de software. Cria
um ambiente do tipo IaaS (Infrastructure as a Service). Foi usada essa ferramenta para
criação de máquinas virtuais nas quais hospedamos as aplicações de IdP e SP usadas.
Cryptico [Terrell 2015]: é uma biblioteca de criptografia em JavaScript. Foi
usada para o desenvolvimento da cifragem dos dados do usuário usando o algoritmo
RSA para geração de par de chaves assimétricas com uma semente (seed) e cifragem/decifragem de dados usando criptografia assimétrica.
Sjcl [Stark et al. 2015]: é uma bibilioteca de criptografia em JavaScript que foi
usada para o cálculo do valor obtido com a função PBKDF2. O PBKDF2 é uma função
de derivação de chaves a partir de senhas, que usa um valor salt e repete o processo do
HMAC-SHA256 inúmeras vezes, resultando num valor mais seguro, porém mais custoso
também para ser gerado.
4. Extensão do OpenID Connect para melhoria da privacidade
Nossa proposta de extensão do OpenID Connect é fazer o usuário, dono dos seus dados,
participar de toda a interação feita entre o IdP e o SP. Essa extensão proposta foi desenvolvida em conjunto durante o trabalho de dissertação de mestrado de [Weingärtner 2014].
O modelo proposto está representado e explicado na figura 2, e demonstra todo o
fluxo na interação entre usuário, IdP e SP.
Figura 2. Fluxo da interação entre Usuário, IdP e SP no modelo proposto
No IdP o usuário cifra os dados a serem armazenados durante o processo de cadastro do usuário no provedor de identidade. No momento que a aplicação no provedor de
serviço precisa dos dados do usuário, é o próprio usuário que, com sua chave, irá decifrar
os dados necessários com a chave escolhida no cadastro, e então irá cifrar os dados novamente com uma chave de sessão que será enviada para o SP. No momento da decifragem
o usuário tem a chance de escolher qual o conjunto de atributos será decifrado. Assim,
o usuário escolhe e fica consciente sobre a disseminação dos seus dados. Foram criados
alguns tipos de conjuntos de dados: total e parcial. No conjunto total todos os dados do
usuário serão decifrados para serem disseminados. Já no conjunto parcial apenas alguns
dados escolhidos pelo usuário serão decifrados e disseminados para o SP.
Foi criada a possibilidade do provedor de serviço especificar um conjunto de dados (escopo) que será necessário para o funcionamento correto da aplicação. O IdP por
sua vez irá mapear esses escopos para os atributos correlacionados. Para isso, foram criadas algumas classes: SystemScopeDao que carrega da base de dados do IdP os escopos
selecionados; SystemScopeService que constrói o escopo em tempo de execução; LrgScopeClaimTranslationService que traduz os escopos carregados para tipos de atributos.
5. Resultados experimentais
Para adicionar nossas propostas ao protocolo padrão do OpenID Connect foi usada a
versão de código desenvolvida pelo MITRE chamada MITREid [MIT 2014]. Foi necessário realizar várias modificações nesse código do MITREid.
Primeiramente o código fonte da implementação do OpenID Connect feita pelo
MITRE foi obtido [MIT 2014]. Foram instaladas as aplicações OpenId Connect Spring
Server e Simple Web App do MITRE e foram feitos alguns testes. As seguintes
modificações iniciais foram feitas no código fonte obtido:
• Após testar a aplicação com o IdP do MIT e ver que tudo funcionou perfeitamente,
realizou-se testes com outro IdP, no caso, o IdP da Google. Então foi criado um
cadastro para a aplicação em questão no IdP da Google para esta poder fazer
requisições de autenticação e dados neste IdP. Logo de inı́cio foram encontrados
problemas de compatibilidade entre a aplicação e o IdP, pois a aplicação obtinha
o endereço do IdP através do protocolo WebFinger, que não é implementado pelo
IdP da Google. Assim, foi criada uma opção extra para que na hora de selecionar
o IdP, fosse possı́vel fornecer um recurso do IdP para o WebFinger resolver o
endereço do IdP. De outra forma o endereço do IdP é fornecido diretamente, para
resolver tais problemas, foi criada a página da figura 3.
• Foi testada a compatibilidade da aplicação com outros IdPs, no caso o IdP da
Google, então encontraram-se algumas inconsistências na implementação do protocolo pela parte do MITRE. Existia um atributo NONCE que sempre era requisitado pela aplicação, sendo que na especificação do protocolo, esse atributo poderia
ou não ser requisitado. A aplicação estava implementada para exigir esse atributo
por parte do IdP e o IdP da Google não fornece esse atributo. Com isso, modificamos as classes PlainAuthRequestUrlBuilder com a adição de um valor lógico
UseNonce para adicionar o campo do nonce ou não, na formação da URL, e na
classe OIDCAuthenticationFilter também foi colocado um UseNonce para que a
aplicação possa suportar o uso seletivo do NONCE. Depois que essas incompatibilidades foram acertadas a aplicação passou a funcionar corretamente para o IdP
da Google e do MITRE.
Foram criadas novas páginas web para a aplicação: página para seleção de IdP
para autenticação, página para cadastro de usuários e página para alteração dos dados
dos usuários. A criação de todas essas páginas envolveu a modificação do código da
plataforma OpenID Connect.
5.1. Seleção de IdP para autenticação
Nesta página web, apresentada na figura 3, o usuário irá definir qual IdP ele gostaria de
usar, informando o endereço do próprio IdP ou usando web-finger para fazer a resolução
automática do IdP através de um recurso.
Figura 3. Página web para seleção do IdP
5.2. Cadastro de usuários
Na página de cadastro, representada na figura 4, novos usuários irão fornecer seus dados para serem armazenados no banco de dados do IdP. Os campos para cadastro são:
nome de usuário para autenticação, senha para autenticação, nome, sobrenome, e-mail,
telefone, data de nascimento, gênero, cpf, rg, além de uma chave ou uma palavra passe
que o usuário irá fornecer para cifrar os dados do banco de dados do IdP. Após o usuário
entrar com todos os dados em seus respectivos campos, é enviado para o IdP os valores
calculados pelo PBKDF2 a partir da senha e dos dados do usuário, e, esses mesmos dados
(menos a senha) são cifrados usando a chave/palavra que o usuário escolheu e enviados
para o IdP. O salt usado no PBKDF2 é derivado do nome de usuário fornecido e também
é enviado para o IdP onde tudo é armazenado. A chave ou palavra passe não é enviada
para o IdP, apenas é usada na página e depois descartada.
Figura 4. Página web para cadastro no IdP
A figura 5 mostra a página gerada para retornar uma resposta para o usuário após
ele ter terminado de se cadastrar. É possı́vel verificar como os dados do usuário foram
persistidos no banco de dados em sua forma cifrada.
5.3. Disseminação dos dados do usuário para o SP
A página de disseminação de dados (figura 6) alerta o usuário dos perigos em relação
ao SP e os dados que o mesmo deseja obter. Nesta página, o usuário deve informar quais
dados deseja liberar para o SP. Selecionados os dados, o usuário deverá fornecer sua chave
ou palavra passe, para decifrar estes dados antes de enviá-los para o SP.
Para desenvolver nossa proposta de controle da disseminação foi necessário criar
um conjunto de classes para armazenar os dados temporariamente. A classe UserInfoTempController é responsável por receber uma requisição AJAX com os atributos selecionados que devem ser enviados ao SP e armazenar esses atributos utilizando o objeto chamado lrgUserInforTempService. Esse objeto lrgUserInforTempService deve ser injetado
Figura 5. Dados do usuário cifrados ao final do processo de cadastro
no userInfoUserDetailsService que é o objeto responsável por responder as requisições do
SP. Alterações no arquivo approve.jsp foram necessárias para possibilitar ao usuário escolher quais dados serão disseminados para o SP. Outra modificação realizada no arquivo
approve.jsp foi a adição de um filtro para interceptar todas as requisições que utilizam
este arquivo. Este filtro é responsável por carregar e definir no objeto requisitado todos
os metadados necessários para auxiliar o usuário durante o processo de disseminação de
dados ao SP. Todo processo de cifragem e definição de atributos a serem disseminados foi
uma extensão implementada no código original.
Figura 6. Processo de disseminação estendido
5.4. Alteração dos dados de usuário
A página web apresentada na figura 4 é usada para alterar os dados do usuário. O usuário,
após autenticado no IdP, pode alterar seus dados, inclusive a chave usada na cifragem.
Para fazer isso, o usuário irá acessar esse recurso, fornecer sua chave para abrir os dados,
ver qual dado ele quer trocar e alterar o dado. Para alterar a senha o usuário terá que
fornecer a senha antiga e a nova senha duas vezes. Feito isso, na hora de enviar as novas
informações para o IdP, toda a operação de cifrar e calcular os valores com o PBKDF2 é
feita novamente, como na página de cadastro, e então esses dados são alterados no banco
de dados.
6. Conclusão
Este trabalho de iniciação cientı́fica contribuiu na implementacao dos aspectos de privacidade propostos na dissertacao de mestrado de [Weingärtner 2014], já que existe uma
grande quantidade de classes e códigos presentes no sistema MITREid.
No desenvolvimento do trabalho foram criadas novas páginas para interação do
usuário com o IdP, foram criadas novas classes e modificadas classes existentes e também
foram feitos testes do funcionamento. O IdP foi preenchido com dados exemplo através
dessas páginas, e, depois, uma aplicação de testes foi desenvolvida para usar o IdP. Com
esta implementação todo usuário cadastrado no IdP tem seus dados cifrados antes da
persistência no banco de dados do IdP que está executando no ambiente de computação
em nuvem do LRG (Laboratório de Redes e Gerência) da UFSC. No momento que uma
aplicação requisita os dados do usuário, o IdP notifica o usuário a respeito dos dados
requisitados pela aplicação. O usuário então decifra estes dados com sua chave para fazer
a liberação desses dados para a aplicação. Para facilitar o processo de decifragem, o
usuário também pode optar por derivar um par de chaves a partir de uma palavra passe
(palavra que servirá como a senha): o usuário fornece a palavra/frase e o próprio sistema
deriva o par de chaves a ser usado para decifrar os dados.
Assim a decisão final de liberar ou não os dados para a aplicação é do usuário,
que está ciente a respeito de todo o processo. Essa foi uma grande modificação feita no
funcionamento do código MITREid do OpenId Connect.
Todo processo de cadastro, cifragem e definição de atributos a serem liberados foi
uma extensão implementada no código original. É importante observar que toda a parte
de criptografia adicionada gera um aumento no processamento e no espaço de armazenamento no banco de dados, mas é um acréscimo que garante a privacidade do usuário.
Questões de usabilidade da aplicação foram facilitadas com a possibilidade de derivação
de chaves com a entrada da palavra passe.
Com estas precauções no manejo dos dados entre IdP e SP há uma grande melhoria
na privacidade do usuário nesse ambiente de gerenciamento de identidades que pode ser
usado na nuvem. Diferente dos trabalhos [Switch 2012] [Orawiwattanakul et al. 2010],
que usam o sistema Shibboleth, o nosso trabalho garante a privacidade dos dados cadastrados no IdP e o usuário participa do processo de decifragem e disseminação dos
seus dados, usando o OpenID Connect. Semelhante aos trabalhos [Sánchez et al. 2012]
[Betgé-Brezetz et al. 2012], o nosso trabalho também é centrado no usuário, alerta os
usuários antes do envio dos dados ao provedor e desenvolveu um protótipo.
Referências
Apache (2015). Apache cloudstack. http://cloudstack.apache.org/.
Bertino, E., Paci, F., Ferrini, R., and Shang, N. (2009). Privacy-preserving digital identity
management for cloud computing. IEEE Data Eng. Bull., 32(1):21–27.
Bertino, E. and Takahashi, K. (2011). Identity Management: Concepts, Technologies, and
Systems. Artech House.
Betgé-Brezetz, S., Kamga, G.-B., Ghorbel, M., and Dupont, M.-P. (2012). Privacy control
in the cloud based on multilevel policy enforcement. In CLOUDNET 2012, pages 167–
169. IEEE.
Chadwick, D. W. and Fatema, K. (2012). A privacy preserving authorisation system for
the cloud. Journal of Computer and System Sciences, 78(5):1359–1373.
Council, H. R. (2012). The promotion, protection and enjoyment of human rights on the
internet (a/hrc/20/l.13). http://ap.ohchr.org/documents/alldocs.aspx?doc id=20280.
Faraji, M., Kang, J.-M., Bannazadeh, H., and Leon-Garcia, A. (2014). Identity access
management for multi-tier cloud infrastructures. In NOMS 2014, pages 1–9. IEEE.
Hansen, M., Schwartz, A., and Cooper, A. (2008). Privacy and identity management.
Security & Privacy, IEEE, 6(2):38–45.
Kalloniatis, C., Mouratidis, H., Vassilis, M., Islam, S., Gritzalis, S., and Kavakli, E.
(2014). Towards the design of secure and privacy-oriented information systems in the
cloud: Identifying the major concepts. Comp. Standards & Interfaces, 36(4):759–775.
Lauterpacht, H. (1948). The universal declaration of human rights. Brit. YB Int’l L.,
25:354.
Mell, P. and Grance, T. (2011). The nist definition of cloud computing. NIST.
MIT (2014). Mitreid connect. https://github.com/mitreid-connect/.
OpenID (2014). Welcome to openid connect. http://openid.net/connect/.
Orawiwattanakul, T., Yamaji, K., Nakamura, M., Kataoka, T., and Sonehara, N. (2010).
User-controlled privacy protection with attribute-filter mechanism for a federated sso
environment using shibboleth. In 3PGCIC, 2010 Int. Conf. on, pages 243–249. IEEE.
Sánchez, R., Almenares, F., Arias, P., Dı́az-Sánchez, D., and Marı́n, A. (2012). Enhancing
privacy and dynamic federation in idm for consumer cloud computing. IEEE Trans.
on Cons. Elec., 58(1):95–103.
Santos, D. R. D., Nascimento, T. J., Westphall, C. M., Leandro, M. A. P., and Westphall,
C. B. (2014). Privacy-preserving identity federations in the cloud: A proof of concept.
Int. J. Secur. Netw., 9(1):1–11.
Spring (2015). Spring framework. https://spring.io/.
Stark, E., Hamburg, M., and Boneh, D. (2015). Stanford javascript crypto library. Stanford University. https://github.com/bitwiseshiftleft/sjcl/tree/version-0.8.
Switch (2012). uapprove - user consent module for shibboleth identity providers.
https://www.switch.ch/aai/support/tools/uapprove/.
Terrell, R. (2015). Cryptico library. https://github.com/wwwtyro/cryptico.
Weingärtner, R. (2014). Controle de disseminação de dados sensı́veis em ambientes federados. Master’s thesis, UFSC, Florianópolis, Brasil.
Weingärtner, R. and Westphall, C. M. (2014). Enhancing privacy on identity providers. In
2014 The Eighth International Conference on Emerging Security Information, Systems
and Technologies (SECURWARE), pages 82–88, Lisbon, Portugal.
Download

Implementação de mecanismos de privacidade no OpenID Connect