Um modelo pragmático de separação de responsabilidades para o controle de acesso baseado em papéis Bruno César Barreto de Figueirêdo PPGI – UFPB / Unimed João Pessoa [email protected] Gustavo Henrique Matos Bezerra Motta PPGI – UFPB [email protected] Conceitos Necessários Tomaremos um cenário bem familiar a todos como exemplo, para tornar clara a motivação e os resultados pretendidos com nosso trabalho Conceitos Necessários Modelo de controle de acesso baseado em papéis (CABP) Usuários Papéis Permissões Goleiro Defender Atacante Fazer Gols Conceitos Necessários Conflito de Interesses Defender Separação de Responsabilidades Fazer Gols Conceitos Necessários Como implementar a separação de responsabilidades quando o mesmo usuário assume funções conflitantes ? Defender Fazer Gols Conceitos Necessários Conceitos Necessários Modelo de controle de acesso baseado em papéis (CABP) Separação de Responsabilidades Estática Usuários não poderão estar associados a papéis que contenham permissões de acesso com conflitos de interesses entre si. Logo, um usuário que seja goleiro, não poderá estar associado ao papel atacante, visto que as permissões : defender e fazer gols, estão associadas a esses papéis e contêm um conflito de interesses entre si. Tomando o modelo, temos : SRE = {({goleiro,atacante},2)}. Conceitos Necessários Modelo de controle de acesso baseado em papéis (CABP) Separação de Responsabilidades Estática Usuários Papéis Permissões Goleiro Defender Atacante Fazer Gols Conceitos Necessários Modelo de controle de acesso baseado em papéis (CABP) Separação de Responsabilidades Dinâmica Usuários poderão estar associados a papéis que contenham conflitos de interesses entre si, porém os mesmos papéis não poderão estar ativos simultaneamente. Logo, caso um goleiro queira fazer gols, terá de sair de campo e entrar novamente como um atacante, e então fazer gols. Caso o mesmo deseje voltar a defender, deverá sair outra vez de campo e entrar mais uma vez como goleiro. Tomando o modelo, temos : SRD = {({goleiro,atacante},2)}. Conceitos Necessários Modelo de controle de acesso baseado em papéis (CABP) Separação de Responsabilidades Dinâmica Usuários Papéis Permissões Goleiro Defender Atacante Fazer Gols Motivação para o Trabalho Concluímos que o Modelo de controle de acesso baseado em papéis (CABP), afasta-se da realidade do dia-a-dia, quando trata da separação de responsabilidades. As soluções encontradas hoje em dia ficam dependentes da aplicação e não do controle do acesso, o que traz problemas de segurança, padronização, etc. Proposta de Trabalho Formatar um modelo de controle de separação de responsabilidades mais poderoso e flexível, de forma a permitir que esse controle fique centrado no mecanismo de controle do acesso e não nas aplicações. Modelo PRAGMA SR Extensão do CABP Associação de permissões a papéis e de papéis a usuários, sem restrições Configuração de todas as operações conflitantes para que o modelo possa controlar o seu acesso Modelo PRAGMA SR Controla o acesso às operações em tempo de execução, restringindo que o mesmo usuário acesse uma permissão que tenha um conflito de interesses com outra disponível para ele, independente do papel que contenha a mesma. Controle do histórico do acesso às informações, permitindo que um usuário possa utilizar permissões conflitantes numa mesma sessão, desde que, as mesmas não atuem sob as informações acessadas por ele próprio, mas sim sobre as informações acessadas pelos demais usuários (Exemplo a seguir). Modelo PRAGMA SR A função Check_Access Check_access(s: Sessions; op: OPS; ob: OBS; id: ID) Boolean. Check_access (s, op, ob, id) ( r Roles : r Papéis_da_sessão(s) (r, (op, ob)) PA Usuário_tem_operação_conflitante ( Usuário_da_sessão(s), op, ob, id)) Modelo PRAGMA SR A função Usuário_tem_operação_conflitante Usuário_tem_operação_conflitante (u, op, ob, id) ( (ps, h, n) OPC | (op, ob) ps: h Permissões_usuário(u) ps ≥ n h (Operações_excutadas_usuário(u, id) {(op, ob)}) ps ≥ n) Modelo PRAGMA SR Tomando o exemplo do goleiro, temos: OPC = ({defender, fazer gols}, true, 2) Permissões_usuário(u) = {defender, fazer gols} HA = ({Rogério,{Defender},Minha_Meta}, {Rogério,{Fazer Gols}, Meta_Adversário} Modelo PRAGMA SR Aplicando à função Check_access, temos: Check_access(Partida_Futebol,{Fazer Gols},Minha_Meta) Usuário_tem_Operação_Conflitante(Rogério,{Fazer Gols}, Minha_Meta) | Operações_executadas_usuário(Rogério,Minha_Meta) U {Fazer Gols} {Fazer Gols, Defender} | | {{Defender} U {Fazer Gols}} {Fazer Gols, Defender} | = 2 Logo como n = 2, a função retorna true como resposta. Portanto não será possível “Fazer Gols” na sua própria meta. Caso apliquemos a mesma função para a meta do adversário, a função retornará true, indicando que será sim possível fazer gols na meta oposta, resolvendo, dessa forma o problema. Modelo PRAGMA SR Permite que o mesmo usuário possa ter permissões conflitantes e utilizá-las simultaneamente, desde que não sob suas próprias informações (sua meta), mas sim sob as dos outros usuários. Usuários Papéis Permissões Goleiro Defender Fazer Gols Trabalhos Futuros Investigação sobre a eficiência e facilidade de uso do modelo num sistema real Implementação do modelo Prova da complexidade dos algoritmos Conclusão Estende o CABP Contribuições Livre associação de permissões a papéis e de papéis a usuários Controle do acesso às permissões em tempo de execução Auditoria de conflitos de atribuições de permissões a usuários Controle do acesso de acordo com o histórico de utilização, verificando se um objeto pode ser acessado por um usuário através de uma determinada permissão Configuração simples para a obtenção do resultado esperado Um modelo pragmático de separação de responsabilidades para o controle de acesso baseado em papéis Bruno César Barreto de Figueirêdo PPGI – UFPB / Unimed João Pessoa [email protected] Gustavo Henrique Matos Bezerra Motta PPGI – UFPB [email protected]