Introdução

Este capítulo aborda como o sistema operacional implementa políticas de segurança para controlar quem pode acessar o quê, de que maneira e sob quais condições. Duas etapas principais:

  1. Verificar se o pedido está dentro da política de segurança.
  2. Permitir ou negar o acesso com base nessa verificação.

1. O Problema do Controle de Acesso

Elementos centrais:

  • Sujeito (subject): Quem faz o pedido (usuário/processo).
  • Objeto (object): O que se deseja acessar (arquivo, dispositivo, etc.).
  • Acesso: Tipo de operação (leitura, escrita, execução…).

🔍 O sistema operacional deve tomar decisões binárias (sim/não) sobre permissões, baseando-se em sua política de segurança. Isso é feito por um reference monitor, que deve ser:

  • Confiável (correto)
  • Eficiente
  • Abrangente (princípio da mediação completa)

2. Truques com Virtualização

  • Objetos virtuais (como memória virtual ou dispositivos virtuais) podem ser usados para reduzir a necessidade de verificações repetidas.
  • O SO ainda precisa garantir o acesso correto por trás da ilusão da virtualização.

3. Access Control Lists (ACLs)

Conceito:

Cada objeto possui uma lista que define quais sujeitos têm quais permissões sobre ele.

Funcionamento:

  • O sistema identifica o usuário do processo.
  • Busca a ACL associada ao objeto.
  • Verifica permissões de leitura, escrita, execução, etc.

Implementação (Unix Clássico):

  • Usa 9 bits: permissões para usuário, grupo e outros.
  • Embutida no inode => acesso rápido.

Vantagens:

Fácil descobrir quem pode acessar um recurso.
Centraliza controle no objeto.
Eficiente em muitos casos (como Unix).

Desvantagens:

❌ Difícil saber todos os acessos de um usuário.
❌ Gerenciamento em sistemas distribuídos é complexo.
❌ Listas grandes geram sobrecarga.


4. Capabilities (Capacidades)

Conceito:

O sujeito precisa possuir um “token” (capacidade) para acessar um recurso.

Funcionamento:

  • O sistema mantém uma lista de capacidades seguras por processo.
  • A verificação de acesso é feita comparando as capacidades disponíveis com o pedido de acesso.

Vantagens:

Fácil limitar privilégios de processos.
Permite construir sistemas com princípio do menor privilégio.
Ideal para sistemas com grande volume de objetos.

Desvantagens:

❌ Difícil saber quem tem acesso a um recurso.
❌ Revogação é complexa.
❌ Precisa de proteção contra falsificação e cópia.


5. Controle de Acesso Discricionário (DAC) vs. Obrigatório (MAC)

  • DAC (Discretionary Access Control): O dono decide as permissões.
  • MAC (Mandatory Access Control): Uma autoridade central determina e impõe as permissões.

Exemplo típico: políticas militares (Top Secret).


🧠 6. Práticas de Controle de Acesso

Padrões Importam:

  • A maioria dos usuários usa as permissões padrão (definidas via umask, etc.).

Android:

  • Cada app roda sob um UID próprio.
  • Usa permission labels que funcionam como capacidades.
  • Modelo híbrido com elementos de MAC e DAC.

🧩 7. Controle Baseado em Papéis – RBAC (Role-Based Access Control)

Motivação:

Permissões baseadas em funções organizacionais.

Características:

  • Papéis têm permissões; usuários assumem papéis.
  • Papéis podem ser trocados dinamicamente.
  • Pode incluir type enforcement (controle detalhado de operações por tipo).

Ferramentas:

  • setuid, sudo, usuários artificiais.
  • Exige autenticação extra e configuração segura.

8. Perigo: Escalonamento de Privilégios

  • Um invasor com acesso limitado pode explorar falhas para obter mais privilégios.
  • Objetivo final: acesso root/superusuário.
  • Atenção especial a programas setuid.

9. Resumo Final

MecanismoACLsCapabilities
Baseado emListas por objetoTokens por processo
VerificaçãoPor identidade e objetoPor posse da capacidade
Melhor paraVer quem acessa o quêVer o que um processo pode acessar
RevogaçãoSimples (edita ACL)Complexa (exige controle centralizado)
Uso comumVisível ao usuárioInterno no SO

Complementos:

  • Sistemas podem combinar ACLs e capabilities para otimizar performance.
  • RBAC facilita administração em grandes organizações.
  • Implementações práticas devem equilibrar segurança, desempenho e usabilidade.

10. Exemplos Práticos

10.1 Tipos de Acesso

Tipo de AcessoExemplo Linux
Leituracat arquivo.txt
Escritaecho "novo conteúdo" > arquivo.txt
Execução./script.sh
Exclusãorm arquivo.txt
Criaçãotouch novo_arquivo.txt
Listagemls /diretorio

10.2 Virtualização

TipoExemplo
Memória VirtualCada processo tem seu próprio espaço de memória.
Disco VirtualVM usa disco simulado como .vdi no VirtualBox.
GPU VirtualProcessos podem acessar GPUs isoladas por namespace.
Dispositivos Virtuais/dev/null, /dev/tty são abstrações de dispositivos.

10.3 ACL (Access Control List)

SituaçãoComando
Ver ACLgetfacl arquivo.txt
Adicionar permissãosetfacl -m u:joao:r arquivo.txt
Remover permissãosetfacl -x u:joao arquivo.txt
ACL padrão para diretóriossetfacl -d -m u:ana:rw diretorio/

10.4 Capabilities

ExemploDescrição
Descritores de arquivos abertosAtuam como capacidades após open()
Linux capshDefine capacidades como cap_net_bind_service
Transferência entre processossendmsg() envia descritor de arquivo via socket Unix

10.5 DAC (Discretionary Access Control)

SituaçãoComando
Criar arquivo com permissão padrãotouch file.txt
Alterar permissõeschmod 600 file.txt
Alterar donochown maria file.txt

10.6 MAC (Mandatory Access Control)

Sistema/ExemploDescrição
SELinuxControla acesso via contextos (ls -Z)
AppArmorPerfis de acesso em /etc/apparmor.d/
AndroidApps com permission labels definidas no manifesto

10.7 Políticas de Acesso

PolíticaExemplo
Menor PrivilégioProcesso web não roda como root
Separação de DeveresAdmin não audita seus próprios logs
Mediação CompletaCada acesso passa por verificação
“Need to Know”Funcionário só vê info do seu departamento

10.8 Roles (RBAC)

PapelPermissões atribuídas
DesenvolvedorAcesso ao código, compilação
GerenteAcesso a relatórios gerenciais
ContadorAcesso a informações financeiras
MédicoAcesso ao prontuário dos pacientes

Exemplo com sudo:

sudo -u programador make install

10.9 Escalonamento de Privilégios

TipoExemplo
setuid rootpasswd altera /etc/shadow
sudosudo nano /etc/passwd
Exploração de vulnerabilidadeBuffer overflow que concede shell root
Vertical vs HorizontalVertical: user → root; Horizontal: user1 acessa arquivos de user2