Aspecto PROTECTION do EPOS

 

Alunos: Ângelo dos Santos Melo

               Cleyton André Pires

               Eduardo Afonso Billo

 

Introdução

 

O conceito de capability reforça a idéia de fornecer proteção a objetos dentro de um sistema operacional afim de restringir o acesso a estes objetos para garantir a integridade dos mesmos.  O aspecto protection tem como objetivo fornecer esta característica de proteção aos objetos dentro do EPOS e utiliza capabilities como recurso de proteção.

Através deste trabalho estaremos estendendo a análise do domínio explicitando a implementação do aspecto protection e sua implantação no sistema EPOS.

 

Aspectos

 

Aspectos de cenário (Scenario Aspects) são propriedades que geralmente não fazem parte ou não dizem respeito ao escopo de uma abstração.

Os aspectos podem ser aplicados a uma abstração através de adaptadores de cenário.

 

 

                                      

           

Família de aspectos Protection

 

O aspecto protection tem como objetivo controlar o acesso a recursos do sistema. Este será feito através da família de aspectos mostrada abaixo:

 

 

 

No aspecto Checked,  a proteção será conseguida através da capability  associada que nada mas é que um número randômico esparso, que dá identificação única aos objetos. Sendo assim,  um objeto terá que saber a capability do outro objeto para acessá-lo.

O aspecto Permitted estende Checked, para permitir diferentes níveis de acesso para cada processo. Isso é feito através de um wrap da capability (será melhor explicado abaixo). Além disso, temos a aspecto Enrolled, que tem a função de guardar das listas de capabilities associadas aos  objetos criados por cada processo.

 

Baseado nisto, o aspecto Protection funcionará da seguinte forma:

 

1-                          Quando uma abstração em que o aspecto Protection se aplica é criada, é associada a ela uma capability (número de 32 a 64 bits gerado aleatoriamente). Essa capability é chamada de owner capability, e tem nível de acesso máximo ao objeto;

2-                          A partir daí, essa abstração pode conceder permissão de acesso a objetos. Porém, a capability inicialmente criada não pode ser repassada para outros objetos, pois por ter nível máximo de acesso, comprometeria toda a proteção ao objeto. Com isso, são criadas versões restritas através de um “wrap” da capability original. Essas capabilities restritas que são repassadas para os objetos que acessarão o objeto protegido.

3-                          Quando o objeto quer acessar o objeto protegido, ele passa a capability restrita que tinha sido a ele passado. O aspecto Protection, através de uma função polinomial verifica se aquela capability restrita foi gerada a partir da owner capability, e permite o acesso ao objeto protegido.

 


 

O acesso ao objeto protegido, porém, deve ser transparente ao cliente que vai acessá-lo. Isto é feito como mostrado abaixo: o “Handle” passa para o adaptador de cenário a capability restrita associada ao objeto que requer o acesso. O adaptador por sua vez, verifica através da chamada de uma rotina do aspecto Protection, se aquela capability pode acessar o objeto protegido. Ou seja, o objeto chamador acessa o objeto protegido transparentemente, sem ter que ficar passando toda a vez sua capability restrita.

 

 

 

           


 

Diagrama de classes

           

            Baseado no que foi exposto acima, não fica muito difícil definir o diagrama de classes da aplicação. O diagrama ficaria:

           

 

          O principal método é o grant. Quando o objeto chamador chama o objeto protegido, esse método é invocado para verificar se a capability passada pelo objeto chamador foi gerada a partir da capability owner. Além disso, é verificado também se o objeto chamador tem o nível de acesso (“rights”) que ele passou como parâmetro.

         

 

 

Aplicabilidade no EPOS

 

            Sendo um aspecto, não se encaixa no escopo de qualquer abstração que possa ser usada no sistema. A seguir é apresentada uma lista contendo a aplicabilidade do aspecto Protection nas principais abstrações do EPOS:

 

Memory Management  - Uma abstração para gerencia de memória necessita do aspecto protection para prover a proteção de seguimentos de memória que precisam ter sua integridade protegida. O aspecto de proteção Permitted utiliza a abstração segment para prover a proteção de memória. Neste caso torna-se necessário uma MMU (memory management unit) para prover os endereços a serem protegidos;

Process Management - O aspecto protection pode ser incluído a abstrações de gerencia de processos exceto a Processor Schedulers pois neste caso a verificação de privilégio de acesso em cada escalonamento reduziria o desempenho do sistema de forma proibitiva.

Inter-Process Communication - Em ambientes multi-tarefas a proteção é essencial para o controle de acesso a recursos compartilhados. Neste caso o aspecto Checked torna-se útil pois um objeto pode ter sua capability divulgada provendo privilégio de acesso diferenciado conforme a necessidade (somente leitura, somente escrita, leitura e escrita etc). 

Time Management  - Esta abstração implementa clocks e cronômetros. Neste caso o aspecto protection pode ser incluído para dar proteção às variáveis do cronômetro garantindo a integridade da abstração.

I/O Management - A integridade do estado dos dispositivos usados no sistema pode ser conseguida através da utilização de um esquema de proteção usado para proteção de segmentos de memória, visto que todos os dispositivos possuem suas variáveis de estado armazenadas em um certo  segmento de memória.

 

COMPLEMENTO DA ANÁLISE DE DOMÍNIO APÓS FEITA IMPLEMENTAÇÃO

 

Estrutura de uma capability:

 

A capability é um número que oferece identificação única a um objeto do S.O. A capability tem uma parte aleatória (rand) que foi usada para proteção do objeto. Ou parte (grants) foi usada para definir o nível de acesso ao objeto.

 Para uma capability owner, ou seja, a versão irrestrita da capability, o campo grants é preenchido com nível máximo de acessibilidade. Assim, como somente o processo que criou o objeto possui a versão restrita da capability, este passa a ter direito total de acesso sobre o objeto.

 

Ganhando permissão de acesso a um objeto protegido

 

Para que outros processos possam ganhar direito de acesso a um objeto protegido, estes devem possuir uma cópia restrita da capability deste objeto. Esta capability restrita é fornecida pelo processo owner do objeto protegido. Cabe a este processo decidir fornecer ou não capabilities restritas e ainda especificar qual o nível de acessibilidade a ser fornecido. Para isso é invocado o método (getRestrictedId da classe Checked)

 

Acessando um objeto protegido

 

O acesso a um objeto protegido é feito após o reconhecimento da capability restrita (verifica-se  se a capability restrita está associada a capability owner). Isto é feito através do método check da classe checked. Se o método retornar verdadeiro então o acesso é permitido. 

 

Acessando métodos

           

            No campo grants, o bit menos significativo define se o método 0 da abstração poderá ou não ser executado (1 ou 0 respectivamente). O segundo bit menos significativo define o acesso ao método 1, e assim por diante. Isso é implementado pela função access da classe Checked.

 

 

Classe checked

 

 

Método getRestritedId(grants)

 

Este método é invocado pelo processo criador do objeto protegido a fim de fornecer uma versão restrita de sua capability irrestrita. Os níveis de acesso devem ser fornecidos como parâmetro.

            Este método devolve um Id que é uma versão criptografada da capability irrestrita através da aplicação de uma função não reversível.

            Nesta implementação foi feito um XOR entre os quatro primeiros bytes da capability a fim de obter-se o campo ID da versão irrestrita. O campo grants fornecido como parâmetro é anexado.

Abaixo segue a descrição do processo:

 

            Capability restrita: A A BB CC DD | F F F F

 

            Somente o campo ID é encriptado:

           

                              AA BB              AA DD

                        Å   CC  DD         Å  BB CC

                              _____               ______

                              XX YY              ZZ WW

 

            Campo ID da versão restrita: XX YY ZZ WW

 

            Versão restrita com o campo grants anexado: XX YY ZZ WW | G G G G

 

Método check(capability)

 

Este método fornece o direito de acesso a um objeto protegido através da avaliação do campo rand da versão restrita da capability passada como parâmetro. Isto é feito da seguinte forma:

 

1 - O campo rand da versão irrestrita da capability é encriptado pela mesma função não reversível usada para obter a versão restrita.

2 - O campo rand da versão restrita é separado e comparado com o resultado de 1, se forem iguais o acesso e fornecido.

 

Método access(methodNumber)

 

 O campo grants é decodificado para especificar quais os métodos e atributos que o processo usuário pode acessar.