Segurança: Controlo de Acesso November 27, 2009 Sumário Modelo de Controlo de Acesso Matriz de Controlo de Acesso Listas de Controlo de Acesso Capabilities Camadas e Controlo de Acesso
Controlo de Acesso A segunda componente de segurança é o controlo de acesso. No modêlo cliente-servidor, quando um servidor recebe um pedido para execução duma operação, o servidor deverá verificar se o cliente tem permissões de acesso (access rights). Controlo de Acesso é a verificação das permissões de acesso. Autorização é a atribuição de permissões de acesso. Autenticação é a verificação da identidade do utilizador e é uma pré-condição. Modêlo de Controlo de Acesso (Lampson) Subject Access Req. Reference Monitor o é uma entidade sobre a qual se pode executar um conjunto de operações sujeitas a autorização. As operações dependem do tipo de objecto, e do sistema. Sujeito é uma entidade activa que executa operações sobre objectos, desde que tenha as permissões necessárias. Pode ser um utilizador ou um processo. Reference Monitor é a entidade que permite ou rejeita a execução das operações por um sujeito sobre um objecto.
Matriz de Controlo de Acesso Conceptualmente o reference monitor usa uma matriz de controlo de acesso para representar as permissões de acesso. Cada elemento da matriz de controlo de acesso associa um sujeito a um objecto e representa o conjunto de operações que o sujeito tem permissões para executar sobre o objecto Formalmente, seja S o conjunto de sujeitos O o conjunto de objectos A o conjunto de operações de acesso Então, M é tal que: M[s, o] A, s S, o O Matriz de Controlo de Acesso: Exemplo Matriz de controlo de acesso a ficheiros e processos (Unix) Domain 1 File1 File2 File3 File4 File5 File6 Printer1 Plotter2 Domain1 Domain2 Enter Domain3 2 Execute 3 Execute Domínio de Protecção : É uma linha da matriz de controlo de acesso e representa um conjunto de permissões. Pode ser definido independentemente dum sujeito (principal). Pode ser associado dinamicamente a um sujeito.
Matriz de Controlo de Acesso: Problemas Uma implementação simplista da matriz de controlo de acesso (MCA) não é muito eficiente: Um sistema com uma centena de utilizadores e uma dezena de milhar de objectos precisaria duma matriz com mais de... Contudo, a maioria dos elementos desssa matriz são nulos... Acrescentar um objecto ou um sujeito, levantaria problemas de gestão de memória. Listas de Controlo de Acesso (LCA) Associar a cada objecto uma Lista de Controlo de Acesso (Access Control List (ACL)): Um conjunto de pares (sujeito, permissões), que especificam as operações que o sujeito pode executar sobre o objecto. Process Owner A B C User space File F1 A: RW; B: A ACL F2 F3 A: R; B:RW; C:R B:RWX; C: RX Kernel space
Abreviação de LCAs LCAs podem ainda conduzir à necessidade de manter uma grande quantidade de informação de controlo de acesso. Em Unix esta informação é condensada 1. associando utilizadores a grupos; 2. dividindo o conjunto de sujeitos que operam sobre um objecto em 3 classes: owner tipicamente o utilizador que criou o objecto; group owner grupo do owner no momento em que criou o objecto; other restantes utilizadores. A principal limitação desta solução é a granularidade: No máximo, há 3 combinações de permissões possíveis. Alguns sistemas aumentam abreviaturas de ACLs com: ACLs propriamente ditas. Permissões negativas. Capabilities Uma capability é uma elemento da matriz de controlo de acesso (MCA). Uma linha da MCA é uma capability list. Cada elemento desta lista é um par, (objecto, permissões). Process Owner A B C User space F1 F1:R F1:R F2:R F2 F3 F2:R F2:RW F3:RWX F3:RX C-list Kernel space
Uso de ACLs vs. Uso de Capabilities Client Create access request r as subject s (s,r) (a) ACL Server if (s appears in ACL) if (r appears in ACL[s]) grant access; Client Server Create access request r for object o. Pass capability C (o, r) C if (r appears in C) grant access; (b) Implementação de Capabilities com Criptografia Problema Como impedir um sujeito de forjar capabilities? Solução Usar criptografia para garantir integridade: Além da identidade do objecto e das permissões, inclui uma assinatura digital. O sistema distribuído Amoeba desenvolvido por Tanenbaum no final dos anos 80, usa extensivamente este tipo de capability. Server Rights f(s,rights,check)
Capabilities: Cópia A capacidade de fazer cópias de capabilities implica a capacidade de atribuir direitos. Um processo pode dotar outro processo de capacidades restritas, usando, p.ex., o esquema: Port Capability 11111111 C Proposed new rights 00000001 Exclusive or f One-way function Restricted capability Port 00000001 f(c 00000001) Capabilities: Revogação de Direitos A revogação de todos os direitos de acesso a um objecto requer a eliminação de todas as capabilities associadas ao objecto A solução é usar indirecção: A capability aponta não para o objecto mas para a sua entrada numa tabela. Em Informática, não há problema que não se resolva usando indirecção. A revogação de apenas algumas capabilities é mais complexa, embora possa, teoricamente, ser realizada usando o mesmo mecanismo.
Comparação entre LCA e Capabilities LCAs são mais apropriadas para responder à pergunta: Quem está autorizado a realizar que operações sobre um objecto? Capabilities são mais apropriadas para a pergunta: Que operações sobre que objectos um sujeito está autorizado a fazer? Como a primeira põe-se sempre que se cria um objecto, LCAs são usadas mais frequentemente do que capabilities. Bishop sugere que atendendo a que na resposta a incidentes de intrusão a pergunta: Quem acedeu ao objecto? é menos relevante do que: A que outros objectos o intruso acedeu? é de esperar um interesse renovado em capabilities. Protecção e Camadas Alguns dos exemplos apresentados referem-se a sistemas operativos, mas aplicam-se a outras camadas dum sistema computacional. App Middleware SO HW A segurança numa camada depende da segurança da camada inferior (ou exterior). Em particular, a segurança depende dos mecanismos de protecção fornecidos pelo HW.
Leitura Adicional Capítulo 9 de Tanenbaum e van Steen, Distributed Systems, 2nd Ed. Secção 9.3: Access Control Apenas Subsecção 9.3.1: General Issues in Access Control Subsecção 9.4.3: Authorization Management