Controlo de acessos e fluxos
Matriz, ACL, capacidades, DAC, RBAC, Bell-LaPadula, Biba e permissões Unix.
A Ana tem sessão iniciada mas continua sem permissão para ler a pauta de outro curso. Autenticar confirma quem é a Ana. Uma entidade pode ser uma pessoa, conta ou processo. Autorizar decide se essa entidade pode executar uma operação sobre um objeto concreto como a pauta. É esse passo que decide o acesso.
Matriz de acessos
Dois pedidos concretizam a matriz: Ana quer ler precos.csv e um processo de atualização quer escrever nesse ficheiro. A matriz regista uma linha por sujeito, uma coluna por objeto e, em cada célula, as operações permitidas. Uma ACL guarda permissões junto do objeto, como uma coluna da matriz: para decidir, o sistema procura o sujeito na lista do objeto. Uma capacidade é o percurso oposto: uma referência protegida contra falsificação que o sujeito apresenta e que concede operações sobre um objeto. Não confundas este conceito com as Linux capabilities, que são fragmentos de privilégio de root divididos por tipo de operação.
DAC, MAC e RBAC
No DAC (controlo discricionário), o dono pode decidir parte dos acessos, por exemplo partilhar a sua pasta com um colega. No MAC (controlo obrigatório), uma política central limita decisões dos sujeitos, mesmo que sejam donos, por exemplo impedir que um documento Secreto seja partilhado. No RBAC (controlo baseado em papéis), atribuímos permissões a papéis e papéis a utilizadores: o papel Docente pode alterar pautas e o papel Aluno só pode consultar as suas. Trocar o papel de uma pessoa não garante que retiramos autorizações concedidas por outros caminhos: temos de considerar a política completa.
ABAC: atributos e contexto
No ABAC (controlo baseado em atributos), a política avalia atributos do sujeito, do objeto e da operação, podendo incluir o contexto. Por exemplo, ler uma pauta exige que o sujeito seja docente da cadeira dessa pauta e que o período de consulta esteja aberto. Ter o papel Docente, sozinho, deixa de ser suficiente.
Considera Ana, docente de FSI, e uma pauta de FSI disponível até às 18:00. Às 17:00, o pedido satisfaz as duas condições. Uma pauta de outra cadeira falha a correspondência; a mesma pauta às 19:00 falha o horário. Em ambos os casos, a identidade continua autenticada. Os atributos relevantes vêm de fontes que o servidor valida: aceitar cadeira=FSI enviado pelo cliente como prova de que é docente volta a dar ao requerente a decisão de autorização.
RBAC pode ser representado por atributos de papel. ABAC permite acrescentar condições sobre objetos e contexto; não é outra forma de armazenar uma coluna da matriz.
Confidencialidade com Bell-LaPadula
Considera níveis ordenados Público < Confidencial < Secreto. Na versão básica de Bell-LaPadula, um sujeito não lê acima do seu nível, no read up, e não escreve abaixo, no write down. Assim, um sujeito Confidencial lê Público ou Confidencial e escreve Confidencial ou Secreto, sujeito às restantes permissões.
A proibição de escrita para baixo impede que um processo que conhece um segredo o copie para um objeto público. Não impede corrupção de dados em níveis superiores. O modelo protege confidencialidade, não integridade.
Desclassificar um resumo exige um procedimento confiável fora desta regra básica. Anonimizar alguns campos não prova automaticamente que um documento deixa de ser confidencial.
Integridade com Biba
Na política estrita de Biba, os níveis representam integridade, não secretismo. Um sujeito não lê dados de integridade inferior, no read down, e não escreve em integridade superior, no write up. Isto evita que dados menos confiáveis contaminem decisões e objetos mais confiáveis.
Um processo de integridade Alta pode ler Alta e escrever Alta ou Baixa. Um processo Baixa não pode alterar um objeto Alta. O modelo não impede a divulgação de segredos. Antes de aplicar setas, identifica qual propriedade e qual variante da política o enunciado usa.
No diagrama, o sujeito está no nível alto e o objeto no nível baixo, e assumimos que as restantes permissões estão satisfeitas. As setas mostram o sentido dos dados, não o nome da operação: ao ler, os dados vão do objeto para o sujeito; ao escrever, vão do sujeito para o objeto. Em Bell-LaPadula, os níveis medem confidencialidade; em Biba estrito, medem integridade.
Permissões Unix
Num ficheiro regular, r permite ler conteúdo, w alterar conteúdo e x executar. Num diretório, r permite enumerar nomes, x procurar/atravessar e w, em conjunto com x, permite alterar entradas, como criar ou remover nomes, sujeito a restrições adicionais.
Escolhemos um trio: dono se o processo corresponde ao dono; senão grupo se pertence ao grupo; senão outros. Não tentamos as permissões dos outros quando o trio do dono nega uma operação. Esta regra assume os bits tradicionais, sem ACL adicionais, capacidades especiais ou privilégios de root.
Em octal, , , . O modo 640 significa rw-r-----, e 750 significa rwxr-x---.
Exemplo resolvido
Todos os diretórios anteriores são atravessáveis. /srv/loja pertence a loja:vendas e tem 750. precos.csv pertence ao mesmo dono e grupo e tem 640.
| Pedido | Decisão | Regra |
|---|---|---|
| Ana, grupo vendas, lê o ficheiro | Permitido | Tem x na pasta e r no ficheiro |
| Bruno, grupo vendas, escreve conteúdo | Negado | O trio do grupo no ficheiro não tem w |
| Carlos, fora de vendas, lê | Negado | O trio dos outros na pasta não tem x |
| Processo com identidade efetiva loja escreve | Permitido | Tem x na pasta e w de dono no ficheiro |
A última linha usa a identidade efetiva do processo. Não assumimos que um script ganha setuid: em sistemas como Linux, o bit setuid de scripts interpretados é ignorado. Um executável setuid pode mudar a identidade efetiva segundo as regras do sistema, e por isso exige revisão cuidada.
Agora muda a pasta para 770. Bruno pode remover o nome do ficheiro, apesar de não poder escrever o seu conteúdo, porque tem w+x no diretório. O sticky bit, como em diretórios temporários partilhados, acrescenta restrições à remoção. Por isso, «ficheiro só de leitura» não implica «impossível de apagar»: remover um nome altera o diretório, não o conteúdo do ficheiro.
Revogação e autoridade
Retirar uma permissão não desfaz dados já copiados. Em Unix, alterar os bits de permissão de um ficheiro não retira automaticamente todos os direitos de um descritor já aberto. O guião Set-UID mostra o caso relacionado: baixar o UID não fecha um descritor obtido antes. Quando analisamos revogação, precisamos de indicar qual referência se verifica, quando se verifica e que acessos existentes a política pretende terminar.
Isolamento no sistema operativo
Permissões e políticas dependem do mecanismo que as aplica. Continua em memória virtual e fronteira do kernel para distinguir traduções e autoridade; em Android, observa UID e políticas da aplicação; em containers e seccomp, identifica o kernel partilhado e os limites de cada controlo, porque cada fronteira tem hipóteses diferentes.
Exercícios
Não há segunda tentativa nos outros
Sem ACL nem privilégios especiais, Ana é dona de um ficheiro com modo 004. Pode ler o conteúdo por ter r no trio dos outros? Assume diretórios atravessáveis.
Pista
Seleciona a classe antes de avaliar o bit.
Solução
Ana é dona, por isso usa o trio ---. A leitura é negada na configuração dada. A possibilidade de alterar permissões é uma operação diferente.
- Não, aplica-se o trio do dono, que não tem r.. Ser dona seleciona o primeiro trio; não há recurso ao trio dos outros.
- Sim, outros inclui toda a gente.. A seleção de classe usa precedência dono, grupo, outros.
- Sim, todo dono pode ler sempre.. O dono pode normalmente mudar permissões, mas isso não é já ter leitura no estado dado.
- Só se executar o ficheiro.. Execução não concede automaticamente leitura do conteúdo.
Erros frequentes
Não confundir poder mudar a política com a decisão do acesso atual.
Dois modelos, duas propriedades
Nos níveis Baixo < Alto, um sujeito Alto pretende ler Baixo e escrever Baixo. Decide as duas operações em Bell-LaPadula básico e Biba estrito. Assume as restantes permissões satisfeitas.
Pista
Escreve as regras de cada modelo antes de decidir.
Mais uma pista
Bell-LaPadula impede leitura acima e escrita abaixo; Biba estrito inverte as direções relevantes.
Solução
Em Bell-LaPadula, Alto lê Baixo mas não escreve Baixo, para não divulgar informação. Em Biba estrito, Alto não lê Baixo mas escreve Baixo, para evitar contaminação por informação menos confiável, ou seja a diferença está em confidencialidade versus integridade.
Confere a tua resposta:
- Bell-LaPadula permite leitura Baixo e nega escrita Baixo.
- Biba estrito nega leitura Baixo e permite escrita Baixo.
- Relaciona a diferença com confidencialidade versus integridade.
Erros frequentes
Não uses secreto e confiável como se fossem o mesmo nível.
Só de leitura, mas removível
Bruno tem apenas r no ficheiro e w+x no diretório que o contém. Sem sticky bit, ACL ou outras restrições, pode alterar o conteúdo? Pode remover o nome do ficheiro?
Pista
São dois objetos diferentes e duas operações diferentes.
Solução
Bruno não pode escrever o conteúdo. Pode remover a entrada porque tem escrita e procura no diretório, nas hipóteses dadas. O objeto pode continuar acessível por outros nomes ou descritores.
Confere a tua resposta:
- Nega escrita no conteúdo por faltar w no ficheiro.
- Permite remover a entrada com w+x no diretório.
- Distingue conteúdo do ficheiro e entrada do diretório.
Erros frequentes
Não deduzir proteção contra remoção apenas da ausência de w no ficheiro.
Matriz, ACL e mudança de papel
Ana quer ler precos.csv e um processo de atualização quer escrever nesse ficheiro. A ACL do ficheiro permite leitura a Ana e escrita ao processo. Regista os pedidos na matriz e decide-os. Depois a Ana muda de papel e perde o papel de leitura, mas continua dona do ficheiro com entrada própria na ACL. Perde o acesso?
Pista
A matriz tem uma célula por par sujeito-objeto.
Solução
A matriz regista (Ana, ficheiro, ler) e (processo, ficheiro, escrever); ambas as células estão permitidas pela ACL. Depois da mudança de papel, a Ana mantém o acesso pela entrada de dona: retirar um papel não remove autorizações concedidas por outro caminho. É preciso rever a política completa.
Confere a tua resposta:
- Regista os dois pedidos como células da matriz.
- Decide cada pedido pela ACL do objeto.
- Explica que retirar um papel não remove acessos dados por outro caminho.
Erros frequentes
Retirar um papel não apaga uma autorização própria que ainda está na política.
Papel correto, pedido recusado
Uma política permite ler uma pauta apenas se o sujeito tiver papel Docente, pertencer à cadeira da pauta e o horário for anterior às 18:00. Ana é docente de FSI, segundo o registo validado do servidor. Decide três pedidos: pauta FSI às 17:00; pauta de RC às 17:00; pauta FSI às 18:00. A decisão por defeito é negar e não há outras concessões. Para o segundo, Ana envia cadeira=RC no pedido. Esse campo pode substituir o atributo validado? Explica por que o papel sozinho não decide estes casos.
Solução
O primeiro é permitido: papel, cadeira e horário satisfazem a regra. O segundo é negado pela cadeira e o terceiro é negado pelo horário, pois «anterior» exclui as 18:00. O campo externo não demonstra pertença a RC; usá-lo como autoridade permitiria ao requerente escolher os próprios direitos. RBAC descreve o papel; a política ABAC deste caso acrescenta relações com o objeto e contexto temporal.
Confere a tua resposta:
- Apliquei a correspondência entre cadeira do sujeito e do objeto.
- Apliquei o horário separadamente do papel.
- Rejeitei atributos declarados pelo cliente como prova de autoridade.