• Nenhum resultado encontrado

09- AulaIHS-Modo Protegido-Protecao

N/A
N/A
Protected

Academic year: 2021

Share "09- AulaIHS-Modo Protegido-Protecao"

Copied!
35
0
0

Texto

(1)

Interface Hardware-Software

Modo Protegido de Operação de

Processadores x86 – Proteção

(2)

Descritores

gdt_data:

dd 0 ; null descriptor dd 0

; gdt code: ; code descriptor dw FFFFh ; limit low dw 0 ; base low db 0 ; base middle db 10011010b ; access db 11001111b ; granularity db 0 ; base high ... Descritor 0 Descritor 1

(3)

Usando Seletores

jmp 08h:Stage3 ... Stage3: mov ax, 0x10 ... Colocando o seletor 08h no CS

(4)
(5)

Fluxo de Carregamento de Registradores de

Segmentos

Seletores só são carregados nos registradores de segmentos depois da verificação do nível de privilégio, tipo de acesso e

(6)

Proteção Via Nível de Privilégio

O suporte a níveis de privilégio permite restrições de:

Acesso a dados

Chamadas a procedimentos Instruções privilegiadas

Os novos registradores e estruturas de dados introduzidos

na arquitetura IA-32 facilitam a proteção a acessos

indevidos

– Registradores de segmentos

– Seletores

– Descritores de segmentos

(7)
(8)

CPL, RPL e DPL

CPL (Current Privilege Level)

- Nível de privilégio do código sendo executado

- Encontra-se no registrador CS e SS (na parte escondida)

RPL (Requestor Privilege Level)

- Nível de privilégio do código que origina o seletor - Encontra-se no seletor

- Pode ser alterado com instruções específicas

DPL (Descriptor Privilege Level)

- Nível de privilégio do segmento ou do gate - Encontra-se no descritor

(9)

Esquemas de Proteção com Níveis de Privilégio

Níveis de privilégios são verificados quando se carrega um

seletor para um descritor no registrador de segmento

- Utiliza-se o CPL, RPL e DPL

A forma de verificação é diferente dependendo do tipo de

seletor que se deseja carregar

- Código - Dados

(10)

Acesso a Segmentos de Dados

Seletores de segmentos de dados devem ser carregados

no registradores DS,ES,FS,GS ou SS

- Com instruções como: MOV, POP, LDS, LES, LFS, LGS, etc

Max(CPL,RPL) <= DPL

Ou seja, CPL e RPL devem ter um nível de privilégio

maior ou igual a DPL

(11)
(12)

Exemplo de Acesso Inválido a Segmento de

Dados

(13)

Acesso a Segmentos de Pilha

A regra de acesso é mais restrita

(14)

Acesso a Segmentos de Código

Transferência de controle pode resultar em mudança do

segmento de código executado

- Quando há desvios inter-segmentos

- Instruções que provocam transferência: CALL, JMP, SYSENTER, SYSEXIT, RET, etc

As regras de acesso a segmentos de código diferem das

de acesso a dados

As regras diferem se:

- Acesso for a segmentos de código non-conforming - Acesso for a segmentos de código conforming

(15)

Acesso a Segmentos de Código sem Gates

Informações verificadas neste tipo de acesso

- CPL do segmento que contém código que chamou a rotina - RPL do seletor para o segmento destino que contém rotina - DPL do descritor do segmento destino que contém rotina - Bit C do descritor do segmento destino que contém rotina

(16)

Acesso a Segmentos de Código Non-Conforming

Maioria dos segmentos de código são non-conforming

- Transferência de controle só pode ocorrer entre segmentos de mesmo nível de privilégio (exceto quando um gate é

usado)

Se (C == 0)

CPL == DPL &&

RPL <= CPL

(17)

Exemplo de Acesso Válido a Segmento

Non-Conforming

(18)

Exemplos de Acessos Inválidos a Segmento

Non-Conforming

CPL < DPL

(19)

Acesso a Segmentos de Código Conforming

Permite que se faça chamadas de um segmento com

menor nível de privilégio para uma rotina localizada em um

segmento com maior nível de privilégio

- CPL não se altera

Geralmente, utilizado em rotinas de bibliotecas utilitárias

if (C == 1)

CPL >= DPL

Valor numérico

(20)

Exemplo de Acesso Válido a Segmento

Conforming

(21)

Exemplo de Acesso Inválido a Segmento

Conforming

(22)

Gates

Gate é um tipo de descritor que permite transferência de

controle segura entre níveis diferentes de privilégio

- É um descritor de sistema

Diferentemente de descritores de segmento, um descritor

de gate contém um ponteiro para um descritor de

segmento

- Geralmente permite acesso a apenas uma parte de um segmento

(23)

Tipos de Gates

Call Gates

- Usados para controlar acesso a rotinas de outros segmentos - Localizados na GDT ou LDT

Interrupt Gates e Trap Gates

- Usados para controlar acesso a rotinas de interrupção - Localizados na IDT

Task Gates

- Usados para controlar acesso entre diferentes tarefas - Localizados na GDT

(24)

Call Gates

Permite controlar que partes de um segmento de código

possam ser acessadas por outro segmento de código

Forma mais segura de transferência de controle

Funções principais:

- Especifica o segmento de código a ser acessado

- Especifica o ponto de entrada para uma rotina no segmento de código especificado

- Determina o nível de privilégio requerido do caller que tenta acessar a rotina

- Se ocorrer uma troca de pilha, especifica o número de parâmetros que devem ser copiados entre as pilhas

- Define o tamanho dos valores a serem adicionados na pilha de destino

(25)

Descritor de um Call Gate

Target Code-Segment Selector

- Especifica o descritor do segmento de código a ser acessado - Este seletor é carregado no CS na transferência de controle

Target Code-Segment Offset

- Especifica o ponto de entrada para uma rotina no segmento de código especificado

(26)

Transferência de Controle com Call Gates

Um “far” pointer para o gate é fornecido como o operando

destino em uma instrução CALL ou JMP

- Seletor deste pointer identifica o call gate

- Instruction offset é necessário, porém é descartado pelo processador

(27)

Uso Típico de Call Gates: Sistema Operacional

SO tem serviços (rotinas) que podem ser utilizados tanto

por programas de aplicação quanto pelo próprio SO

- Call Gates podem ser definidos para rotinas que permitam o acesso a todos os níveis de privilégio (Ex: rotinas de E/S)

- Call Gates mais privilegiados podem ser definidos para rotinas que só podem ser chamadas pelo SO (Ex:rotinas que

inicializam drivers)

Aplicação

(28)

Acesso a Segmentos de Código com Gates

Informações verificadas neste tipo de acesso

- CPL do segmento que contém código que chamou a rotina - RPL do seletor para o call gate

- DPL do call gate (DPLg)

- DPL do descritor do segmento destino que contém rotina (DPLs)

(29)

Regras de Acesso Para Segmentos Destinos

Conforming

Nível de privilégio do segmento atual deve ser maior ou

igual ao do descritor do call gate

CPL <= DPLg &&

RPL <= DPLg &&

DPLs <= CPL

(30)

Regras de Acesso Para Segmentos Destinos

Non-Conforming

Regras diferem um pouco se utilizado JMP ou CALL para

um call gate, quando o segmento destino é non-conforming

- Somente CALL pode mudar para um segmento non-conforming de maior privilégio

CPL <= DPLg &&

RPL <= DPLg

Regra Geral:

Se CALL:

DPLs <= CPL

Se JMP:

DPLs == CPL

(31)

Exemplo de Acesso Inválido a Segmento via

Call Gate

DPLs > CPL

CPL > DPLg

RPL > DPLg

(32)

Exemplo de Acesso Válido a Segmento via Call

Gate

Se o CALL é feito para um segmento non-conforming de

maior privilégio, ocorre uma troca de pilha

(33)

Troca de Pilha

A mudança de pilha ocorre por dois motivos

- Evitar que a rotina de maior privilégio não consiga executar da forma correta por espaço insuficiente na pilha

- Evitar que rotinas de menor privilégio interfiram em rotinas de maior privilégio através de pilhas compartilhadas

O SO é responsável por criar pilhas e descritores de pilha

de todos os níveis de privilégio que são usados (por uma

tarefa) e por armazenar os apontadores para ela na TSS

(Task State Segment)

- TSS é apontado por um tipo de descritor de sistema mantido na GDT

- Mesmo se o SO não for multi-tarefa, mas se ele roda no

(34)

Troca de Pilha entre Rotinas de Níveis de

Privilégios Diferentes

Pilha de nível de

privilégio maior

Deve empilhar registradores necessários para o retorno da rotina

(35)

Uso de Call Gates Hoje em Dia

Call gates cairam em desuso há algum tempo

- Principalmente depois do Pentium

Hoje em dia os sistemas operacionais permitem acesso a

rotinas de nível de privilégio maiores, através de interfaces

oficiais, com chamadas de sistema

- São acessíveis através de interrupções de sistema

- Ou através de instruções como SYSENTER(32 bits) ou SYSCALL(64 bits)

Contudo, um tipo especial de Call Gate é utilizado para a

chamada de rotinas de tratamento de interrupções

Referências

Documentos relacionados

Em amostras de sementes coletadas na mesma área, das 12 linhagens estudadas, apenas na linhagem RJ 04-26 foi observada uma incidência fúngica de 2%, podendo indicar possíveis fontes

Agrupa as palavras em agudas, graves e esdrúxulas, tendo em conta a posição da sílaba tónica.. Esdrúxulas

8- Bruno não percebeu (verbo perceber, no Pretérito Perfeito do Indicativo) o que ela queria (verbo querer, no Pretérito Imperfeito do Indicativo) dizer e, por isso, fez

A Sementinha dormia muito descansada com as suas filhas. Ela aguardava a sua longa viagem pelo mundo. Sempre quisera viajar como um bando de andorinhas. No

5- Bruno não percebeu (verbo perceber, no Pretérito Perfeito do Indicativo) o que ela queria (verbo querer, no Pretérito Imperfeito do Indicativo) dizer e, por isso, fez

Combinaram encontrar-se às 21h

Este trabalho busca reconhecer as fragilidades e potencialidades do uso de produtos de sensoriamento remoto derivados do Satélite de Recursos Terrestres Sino-Brasileiro

é bastante restrita, visto que tanto suas duas entradas, quanto as galerias e condutos que interligam os pequenos salões são bastante estreitos, e a umidade na maioria dos salões