Um Modelo de Controle de Acesso com Política Compulsória Implementável em Catálogo Antônio Eustáquio Ferreira Galvão, Ilmério Reis Silva, João Nunes de Souza Faculdade de Computação - Universidade Federal de Uberlândia (UFU) e-mail: [email protected], {ilmerio, Nunes}@ufu.br Abstract. The purpose of this work is introduce a relational database control access security model using a new approach of mandatory policy. The main contribution of the model is a new focus, making feasible implementation in database catalog, but maintaining the principles of the policy. Resumo. O objetivo deste trabalho é apresentar um modelo de segurança para controle de acesso a banco de dados relacional utilizando uma nova abordagem da política compulsória (mandatory policy). A principal contribuição do modelo reside em um novo enfoque, que viabilize a implementação via catálogo do banco de dados, porém mantendo os princípios da política. 1. Introdução O desenvolvimento de sistemas gerenciadores de bancos de dados (SGBDs) de grande eficácia, com licença gratuita, contribui para a popularização de aplicações de banco de dados. Dispomos hoje de gerenciadores de bancos de dados de código aberto, capazes de manipular grandes volumes de informações de forma confiável e com excelente desempenho, mesmo em face de um número considerável de transações [01]. Porém, no tocante ao controle de acesso, questão fundamental para a segurança das informações, estes gerenciadores carecem de recursos, não dispondo, por exemplo, de funcionalidades que auxiliem a implementação de uma política compulsória de controle de acesso [02][03][04]. Como veremos na seção 2, uma política compulsória de controle de acesso é capaz de melhorar substancialmente a segurança de um sistema, possibilitando um maior controle no fluxo de informações e criando uma nova camada de segurança independente do administrador do banco de dados. Tais requisitos de segurança são importantes em qualquer sistema que tenha como requisito a confidencialidade das informações. Porém, os modelos de política compulsória propostos na literatura são de implementação complexa, necessitando mudanças no núcleo do SGBD, não existindo nenhuma implementação em SGBDs de código aberto e poucas implementações em SGBDs comerciais. Como exemplo, temos que um dos mais populares softwares para gerenciamento de banco de dados, o “Microsoft SQL Server 2000“ [11], não possui implementada esta política. A principal implementação disponível comercialmente é o software “Oracle10g Database” [05], porém sendo comercializada como um produto adicional à versão básica do produto, com um custo equivalente a 200% da versão “Standard” do produto (Dados obtidos em 28/04/2004) [06]. Propomos neste trabalho um modelo que viabilize a implementação de política compulsória com esforço de implementação reduzido, se comparado aos modelos sobre os quais falaremos na seção 2, e sem que sejam necessárias mudanças no núcleo do gerenciador, visando principalmente os SGBDs de código aberto. Na seção 2 apresentaremos uma visão geral de políticas e modelos de controle de acesso. Na seção 3 descreveremos o modelo proposto e finalmente, na conclusão, discutiremos as vantagens do modelo e sua contribuição para a melhoria na segurança dos bancos de dados. 2. Políticas de segurança e controle de acesso A implementação do controle de acesso em sistemas de banco de dados tem como objetivo garantir o acesso às informações disponíveis segundo as regras estipuladas pela política de controle adotada [07]. Neste contexto temos três componentes: - Sujeitos: Usuários ou processos que requisitam operações ao SGBD; - Objetos: Dados ou Funcionalidades (Tabelas, Visões, Rotinas Armazenadas, Funções ...); - Operações: Requisições que podem ser feitas pelos sujeitos (Ler, Escrever, Inserir, Executar). Através de mecanismos de segurança, o SGBD deverá ser capaz de analisar as requisições de acesso dos sujeitos, permitindo, recusando ou modificando-as, limitando o acesso a dados não autorizados, de acordo com as regras estabelecidas. Uma política de segurança define a estratégia a ser utilizada no controle de acesso a informações contidas no banco de dados. São definidos os princípios pelos quais o acesso é permitido ou negado. Regras de acesso estabelecem como e por quem as operações (leitura, escrita, ...) poderão ser executadas, definindo os privilégios dos sujeitos. A política de segurança define como estas regras serão administradas. Políticas de controle de acesso estabelecem como objetos e sujeitos podem ser agrupados para compartilhar as autorizações e regras estabelecidas de acordo com a política de segurança. Também podem definir se e como os privilégios podem ser transferidos de um sujeito para outro. Agrupando ou classificando sujeitos que compartilham privilégios, simplificamos a especificação da política de segurança a ser adotada e também a implementação dos mecanismos de segurança e sua administração. Políticas de controle de acesso podem ser classificadas em discricionárias ou compulsórias. A seguir descreveremos estas políticas. 2.1. Políticas Discricionárias Numa política de controle de acesso discricionária, são especificadas para cada sujeito, as regras e privilégios de acesso aos objetos do sistema. As requisições de acesso são analisadas por um mecanismo de segurança discricionário e o acesso é concedido de acordo com as regras de autorização. Políticas discricionárias se baseiam na concessão e revogação de privilégios. O controle poderá ser centralizado, isto é, a autorização é administrada por um controle central, normalmente o administrador do banco de dados. Podem ter também um controle descentralizado de maneira que o proprietário da informação possui o direito de conceder ou revogar os privilégios. Estas políticas têm a vantagem de serem flexíveis podendo ser utilizadas por vários tipos de sistemas e aplicações comerciais e industriais e, conseqüentemente, são atualmente as mais utilizadas. Vários modelos foram propostos e implementados em vários sistemas operacionais e SGBDs, porém não satisfazem totalmente certos requisitos de segurança, como no caso em que um usuário com permissão de leitura a determinada informação poderá transferi-la para um objeto de outro usuário que não possui esta permissão. Podemos então concluir que as políticas discricionárias protegem os objetos do sistema, mas não são capazes de controlar o fluxo das informações. No caso específico de aplicações de banco de dados, as políticas de controle de acesso discricionárias não permitem classificar os objetos e sujeitos no que diz respeito à confidencialidade. Com isto, não é possível criar uma política que possa restringir os privilégios de acesso a informações confidenciais com base na classificação dos sujeitos, independentemente de especificações determinadas pelo administrador. Este tipo de política é importante quando se deseja limitar a autoridade do administrador do banco de dados, protegendo informações confidenciais, muitas vezes vitais, como no caso dos sistemas militares. Mas sua aplicação pode ser bem mais abrangente, sendo fundamental em qualquer sistema onde a confidencialidade das informações for importante. 2.2. Políticas Compulsórias O primeiro modelo de política de controle de acesso compulsória (Mandatory Access Control MAC) foi apresentado por Bell e La Padula [10] como uma extensão ao modelo discricionário baseado em matriz de acesso [07]. O modelo foi orientado para a proteção de recursos de Sistemas Operacionais em face ao problema de sigilo de informações, porém se tornou um modelo conceitual que deu origem a outros com aplicações específicas, inclusive em bancos de dados relacionais. As políticas compulsórias se caracterizam pela definição de classes de segurança para os sujeitos e objetos. As classes de segurança são determinadas por duas características: O nível de classificação e a categoria. O nível de classificação reflete a sensibilidade da informação, como por exemplo: Público, confidencial, secreto e ultra secreto. Já as categorias buscam refletir áreas ou departamentos das organizações. Em uma indústria, por exemplo, poderíamos ter as seguintes áreas: - Produção - Comercial - Administração, etc ... Cada objeto possui um nível de classificação e pode pertencer a mais de uma categoria, o mesmo acontecendo com os sujeitos. De forma simplificada, podemos dizer que um sujeito poderá ter acesso a determinado objeto se seu nível de classificação for igual ou superior ao do objeto e se pertencer a pelo menos a uma classe a que o objeto também pertença. Foram propostos modelos com política compulsória, voltados para proteção de bancos de dados relacionais como o “SeaView (Secure dAta VIEW)” [07], que agrega política discricionária com política compulsória, o modelo proposto por Jajodia and Sandhu [07] e o modelo “Smith and Winslett” [07]. Estes modelos têm em comum o fato de que o nível de classificação da informação é definido para cada tupla de uma relação, sendo que cada atributo desta instância poderá ter um nível diferente (relações multi-nível). Tomando como base o modelo SeaView, temos que cada tupla de uma relação é representada na forma (a1|c1, ..., an|cn, t) onde ai|ci representa respectivamente o valor e a classe do atributo i e t a classe de acesso associada à tupla. Neste caso, a nível de implementação, cada elemento ai de uma tupla deve ser acompanhado de um rótulo ci, o que é denominado por “Labeled Security Protection” [09]. Este tipo de implementação requer modificações no núcleo do SGBD, pois envolve o armazenamento das informações de segurança associadas a cada linha. Além disso, as avaliações de segurança para o retorno de informações aos usuários são realizadas após a recuperação das informações do banco de dados. Concluímos que este tipo de implementação da política compulsória em SGBDs requer um grande esforço de desenvolvimento, pois determinam mudanças no núcleo. Motivados pela importância das políticas compulsórias, propomos neste trabalho, a discussão de um modelo alternativo, que possa contar com a maior parte das vantagens da aplicação destas políticas em bancos de dados relacionais, mas que propicie uma implementação com menor esforço. 3. O Modelo Proposto Nossa proposta parte da premissa de que as características de uma dada relação, bem com os significados de seus atributos (em detrimento do seus valores), são suficientes para se definir sua classificação quanto à segurança. A política se baseia na organização hierárquica dos componentes do banco de dados. A organização e os componentes são: - Base de dados - Tabela (Relação) - Coluna (Atributo) As políticas compulsórias se caracterizam pela definição de classes de segurança para os sujeitos e objetos. As classes de segurança são determinadas pelo nível de classificação que reflete a sensibilidade da informação e a categoria, ou área de aplicação. Nos modelos “SeaView (Secure dAta VIEW)”[07], “Jajodia and Sandhu” [07] e “Smith and Winslett” [07], as classe de segurança são tratadas considerando o conteúdo do banco de dados, isto é, podem variar de acordo com instâncias de uma relação. O modelo aqui proposto trata as classes de segurança de acordo com o esquema do banco de dados, independentemente de seu conteúdo, facilitando a implementação. Cabe salientar que a política compulsória vem complementar a política discricionária, de forma que a autorização de acesso primeiramente deve ser concedida através de regras da política discricionária e confirmada ou negada pela política compulsória. A política compulsória é então aplicada somente nas operações de leitura e escrita de dados (SELECT, UPDATE, INSERT). 3.1. Nível de classificação De forma semelhante ao modelo SeaView dividimos os níveis de classificação em quatro: Ultrasecreto (US); Secreto (S); Confidencial (C); Publico (P). Estes níveis são assim ordenados: US > S > C > P. Tratemos aqui como objetos, a base de dados, as tabelas (relações) e as colunas (atributos). Cada objeto pode ser classificado segundo os níveis de classificação acima, ou simplesmente não ser classificado (Nível N), o mesmo ocorrendo com os sujeitos (usuários). Chamamos de Cs o nível de classificação do sujeito, dado pelo administrador do sistema e Co o nível de classificação do objeto que é obtido analisando a hierarquia de objetos do banco de dados. 3.1.1. Determinando o nível de classificação do objeto (Co) A seguir descrevemos os passos para a obtenção do nível de classificação do objeto. Passo 1: Inicialmente consideramos o nível de classificação Co como Não Classificado (N ou NULL). Passo 2: Verificamos o nível de classificação da base de dados à qual os dados solicitados pertencem ou na qual os dados serão gravados. Caso possua classificação, esta passará a ser a classificação Co do Objeto, caso contrário Co continuará como N. Passo 3: Verificamos o nível de classificação da tabela à qual os dados solicitados pertencem ou na qual serão gravados. Caso possua classificação, esta passará a ser a classificação Co, caso contrário permanecerá com a classificação obtida no passo 2. Observamos que caso uma tabela não possua classificação, esta herdará a classificação da base de dados a que pertence. Portanto uma tabela não classificada difere de uma tabela classificada como pública. Passo 4: Por fim são analisadas as colunas. A classificação Co será a maior classificação das colunas requisitadas para a operação. Caso uma coluna não possua classificação, a mesma terá a classificação obtida no passo 3. Da mesma forma que as tabelas, uma coluna não classificada herda a classificação da tabela a qual pertence. Na seção seguinte exemplificaremos a aplicação destes passos para a obtenção do nível de classificação do objetos de acordo com a operação solicitada. 3.1.2. Obtendo a permissão de acesso A permissão de acesso será concedida se o nível de classificação do sujeito (Cs) for maior ou igual ao nível de classificação do objeto (Co). A Tabela 3.1 apresenta um exemplo. Base de Dados: Administracao – Co = P (Publico) Tabela: Funcionarios – Co = NULL (Não classificada) Nome - Co = P Departamento - Co = C Salario - Co = S Paulo Dep1 1000 Roberto Dep2 1000 Sérgio Dep2 1000 Um sujeito com nível de classificação Confidencial (Cs = C), poderá executar a pesquisa: SELECT Nome, Departamento FROM FUNCIONARIOS Aplicando os passos da seção 3.1.1. para obter o nível de classificação Co correspondente à pesquisa temos: Passo 1: Inicialmente faremos Co = N. Passo 2: O nível de classificação da base de dados Administracao, conforme a Tabela 3.1 é P, portanto o objeto passa a ter Co = P. Passo 3: - Ao verificarmos o nível de classificação da tabela Funcionarios vemos que a mesma não é classificada. Portanto ela herda a classificação da base de dados. Neste caso continuamos com Co = P. Passo 4: Finalmente analisamos os níveis de classificação das colunas solicitadas pela consulta, no caso Nome e Departamento. O maior nível de classificação é Confidencial, fazendo então Co = C. A operação será permitida, pois Cc = Co. Devido à herança do nível de classificação, nos casos em que todas as colunas tiverem a mesma classificação, não será necessário classificarmos individualmente cada coluna, bastando classificar a tabela à qual pertencem, facilitando a administração. Aplicando os mesmo passos acima concluímos que sujeito não será autorizado a executar a consulta: SELECT * FROM FUNCIONARIOS Isto ocorre porque no Passo 4 a maior classificação será da coluna Salario, fazendo Co = S. Com isto temos Cc < Co, isto é, o nível de classificação do objeto é superior ao do sujeito. Opcionalmente a implementação poderá definir que neste caso o sujeito terá permissão de executar a consulta, porém a coluna Salario não será mostrada, ou retornará com valores nulos. Neste caso o item 4 da seção 3.1.1 deverá ser alterado e o nível de classificação do objeto será obtido considerando individualmente como objeto cada coluna requisitada. 3.2. Categoria Complementando a organização em classes de segurança, os objetos são agrupados em categorias. A classificação em categorias sugerida neste trabalho se baseia nos princípios do modelo Bell-Lapadula [10], adaptado para aplicação no controle de acesso a Bancos de Dados Relacionais. As categorias podem representar os mais diversos aspectos de acordo com a aplicação do banco de dados. Uma empresa industrial, por exemplo, pode representar os diversos departamentos, como: Compras, Produção, Vendas, Financeiro, Pessoal, etc .... Neste caso, cada departamento é representado por uma categoria. Os sujeitos e objetos podem pertencer a mais de uma categoria, ou não serem classificados. Ao classificar o sujeito, determinamos para cada categoria, à qual ele pertencer, que tipo de operação ele poderá realizar: SELECT, INSERT, UPDATE, DELETE. Para que seja concedido acesso de um sujeito a determinado objeto, duas condições devem ser satisfeitas. A primeira é que ele deverá pertencer a pelo menos uma categoria à qual o objeto também pertença, ou o objeto não ser classificado. A segunda é que o sujeito deve estar autorizado a realizar a operação requisitada sobre esta categoria. De acordo com a hierarquia dos componentes do banco de dados, os componentes de nível hierárquico inferior herdam as categorias dos níveis superiores. Dado o conjunto de categorias C1, C2, .., CN temos os seguintes subconjuntos de acordo com a hierarquia dos componente: - CTb[C1, C2, .., CNb] – Conjunto de categorias da base de dados que contém o objeto - CTt[C1, C2, .., CNt] – Conjunto de categorias da tabela à qual o objeto pertence - CTc[C1, C2, .., CNc] – Conjunto de categorias da coluna cujos dados são solicitados O conjunto de categorias do objeto (CT) a ser acessado será dado por: - CT = CTb ∪ CTt ∪ CTc Caso o conjunto CT seja vazio significa que o objeto não está classificado, podendo ser acessado por sujeitos de qualquer categoria, desde que a permissão não tenha sido negada pelo nível de classificação ou pela política discricionária. A organização por categorias não pode ser confundida com o controle de acesso através de papéis (Roles), presente em SGDBs comerciais, como o “Microsoft SQL Server 2000“ [11]. Neste tipo de controle não ocorre a classificação dos objetos, mas somente dos sujeitos, de forma a compartilharem privilégios determinados pela política discricionária. 3.3. Sugestões para Implementação A maioria dos SGBDs relacionais modernos possuem um catálogo [08]. No catálogo se encontram armazenadas informações como nome de tabelas, nomes de colunas, descrições de restrições (chaves, NULL/NOT NULL., etc...) e outras informações referentes à estrutura do banco de dados. Além disso, o catálogo inclui informações de segurança para implementação de políticas de controle de acesso discricionárias. É prática comum, armazenar o próprio catálogo sob a forma de tabelas, podendo utilizar o software do SGBD para consultar e atualizar o catálogo, por meio de linguagens de consulta como a SQL. As informações de nível de classificação e categoria propostas em nosso modelo, poderão ser implementadas como novos dados no catálogo do SGBD, o que não ocorre nos outros modelos propostos que dependem do conteúdo do banco de dados. Se o SGBD utiliza tabelas para armazenamento do catálogo, poderemos acrescentar as informações em tabelas já existentes, ou criar novas tabelas para estas informações. A vantagem de criar novas tabelas é que uma nova versão do software do SGBD poderá ser compatível com bases de dados já instaladas, não necessitando nenhum tipo de conversão de dados. 4. Conclusão A união do controle de acesso discricionário e compulsório possibilita a implementação de uma política de segurança mais versátil e eficaz, tornando o SGBD capaz de atender a um número cada vez maior de aplicações, principalmente as que requerem um nível de segurança mais elevado. A grande vantagem do modelo proposto reside em um novo enfoque da política compulsória de controle de acesso, facilitando sua implementação e possibilitando sua utilização inclusive em SGBSs de código aberto. Como dito anteriormente, a implementação das políticas já propostas requer mudanças no núcleo dos SGBDs, pois as informações de segurança deverão estar registradas em cada linha das tabelas e, no caso das relações multi-nível, associadas a cada campo de informação. Estas mudanças requerem um grande esforço de desenvolvimento. Ao o tratarmos a segurança da informação com base apenas em suas características (base de dados-relação-atributo) e não em seu conteúdo com nos modelos já propostos, possibilitamos seu armazenamento no catálogo do SGBD, não se fazendo necessária a recuperação dos dados para autorizar o acesso. Se dividirmos uma operação em um banco de dados em duas etapas, “controle de acesso” e “recuperação ou atualização da informação”, no modelo proposto as duas fases são distintas. Isto ocorre porque o controle de acesso depende apenas das informações do catálogo do SGBD, tornando mais rápida a concessão ou negação do direito de acesso. Nos modelos existentes o controle de acesso dependerá da recuperação da informação para sua tomada de decisão, levando em muitos casos a esforços desnecessários do SGBD, no caso de uma resposta negativa à solicitação de acesso. A proposta apresentada é ponto de partida para implementação de política compulsória em SGBDs de baixo custo de propriedade (Software livre), possibilitando que um maior número de usuários utilizem estas tecnologias. Um protótipo foi desenvolvido utilizando linguagem de alto nível, possibilitando a verificação da facilidade da implementação. Porém é importante esclarecer que apesar do modelo proposto ser de implementação mais simples, qualquer tipo de implementação em um SGDB depende do estudo detalhado de seu código fonte, motivo pelo qual esta implementação não foi feita por ocasião deste trabalho. 5. Referências [01] Timothy Dyck , “Server Databases Clash”, eWEEK Enterprise News and Reviews, http://www.eweek.com/article2/0,4149,293,00.asp, 2000 [02] Inprise/Borland, Interbase 6 – Operations Guide, 1999 [03] Steve Suehring, MySQL, a Bíblia, Tradução Edson Furmankiewicz, Ed. Campus, 2002 [04] The PostgreSQL Global Development Group, PostgreSQL 7.3.2 - Administrator´s Guide, 2002 [05] Oracle Corporation, “Oracle10g Label Security”, 2004 [06] http://oraclestore.oracle.com - Acesso em 28/04/2004 [07] Silvana Castano, Mariagrazia Fugini, Giancarlo Martella, e Pierangela Samarati, Database Security, ACM Press, 1995 [08] Ramez Elmasri, Shamkant B. Navathe, Sistemas de Banco de Dados - Fundamentos e Aplicações, LTC Editora, 2002 [09] Systems Security Organization National Security Agency, “LABELED SECURITY PROTECTION PROFILE Version 1.b Information”, NSA, 1999 [10] Bell D.E. and La Padula L.J. , “Secure computer systems: unified exposition and Multics Interpretation”, The MITRE Corp., Bedford, MA, 1975 [11] Waymire, Richard e Thomas, Bem., “Microsoft SQL Server 2000 Security”, Microsoft Press, 2000