.1 Controle-de-Acesso
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:
- Verificar se o pedido está dentro da política de segurança.
- 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
| Mecanismo | ACLs | Capabilities |
|---|---|---|
| Baseado em | Listas por objeto | Tokens por processo |
| Verificação | Por identidade e objeto | Por posse da capacidade |
| Melhor para | Ver quem acessa o quê | Ver o que um processo pode acessar |
| Revogação | Simples (edita ACL) | Complexa (exige controle centralizado) |
| Uso comum | Visível ao usuário | Interno 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 Acesso | Exemplo Linux |
|---|---|
| Leitura | cat arquivo.txt |
| Escrita | echo "novo conteúdo" > arquivo.txt |
| Execução | ./script.sh |
| Exclusão | rm arquivo.txt |
| Criação | touch novo_arquivo.txt |
| Listagem | ls /diretorio |
10.2 Virtualização
| Tipo | Exemplo |
|---|---|
| Memória Virtual | Cada processo tem seu próprio espaço de memória. |
| Disco Virtual | VM usa disco simulado como .vdi no VirtualBox. |
| GPU Virtual | Processos 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ção | Comando |
|---|---|
| Ver ACL | getfacl arquivo.txt |
| Adicionar permissão | setfacl -m u:joao:r arquivo.txt |
| Remover permissão | setfacl -x u:joao arquivo.txt |
| ACL padrão para diretórios | setfacl -d -m u:ana:rw diretorio/ |
10.4 Capabilities
| Exemplo | Descrição |
|---|---|
| Descritores de arquivos abertos | Atuam como capacidades após open() |
Linux capsh | Define capacidades como cap_net_bind_service |
| Transferência entre processos | sendmsg() envia descritor de arquivo via socket Unix |
10.5 DAC (Discretionary Access Control)
| Situação | Comando |
|---|---|
| Criar arquivo com permissão padrão | touch file.txt |
| Alterar permissões | chmod 600 file.txt |
| Alterar dono | chown maria file.txt |
10.6 MAC (Mandatory Access Control)
| Sistema/Exemplo | Descrição |
|---|---|
| SELinux | Controla acesso via contextos (ls -Z) |
| AppArmor | Perfis de acesso em /etc/apparmor.d/ |
| Android | Apps com permission labels definidas no manifesto |
10.7 Políticas de Acesso
| Política | Exemplo |
|---|---|
| Menor Privilégio | Processo web não roda como root |
| Separação de Deveres | Admin não audita seus próprios logs |
| Mediação Completa | Cada acesso passa por verificação |
| “Need to Know” | Funcionário só vê info do seu departamento |
10.8 Roles (RBAC)
| Papel | Permissões atribuídas |
|---|---|
| Desenvolvedor | Acesso ao código, compilação |
| Gerente | Acesso a relatórios gerenciais |
| Contador | Acesso a informações financeiras |
| Médico | Acesso ao prontuário dos pacientes |
Exemplo com sudo:
sudo -u programador make install10.9 Escalonamento de Privilégios
| Tipo | Exemplo |
|---|---|
| setuid root | passwd altera /etc/shadow |
| sudo | sudo nano /etc/passwd |
| Exploração de vulnerabilidade | Buffer overflow que concede shell root |
| Vertical vs Horizontal | Vertical: user → root; Horizontal: user1 acessa arquivos de user2 |

