Què és un sistema operatiu basat en capacitats
Els sistemes operatius moderns imposen límits de seguretat entre processos, fitxers, dispositius i usuaris. Tanmateix, la manera com s’implementen aquests límits varia significativament segons el disseny del sistema.
La majoria de sistemes operatius convencionals depenen del control d’accés basat en identitat i dels espais de noms globals. Els sistemes operatius basats en capacitats adopten un enfocament fonamentalment diferent: representen l’autoritat de manera explícita i en fan un concepte de primer ordre.
Aquest article introdueix els sistemes basats en capacitats, explica en què es diferencien dels dissenys tradicionals i descriu per què són centrals per al disseny d’EriX.
El problema: l’autoritat ambiental⌗
En els sistemes tradicionals, els processos sovint tenen accés als recursos a través de l’autoritat ambiental.
L’autoritat ambiental significa que un programa pot accedir a un recurs simplement perquè existeix en un espai de noms compartit i el sistema determina que el programa té permís per utilitzar-lo.
Per exemple:
- Un procés pot obrir
/etc/passwdsi té permisos suficients. - Un programa pot connectar-se a un sòcol de xarxa si el sistema operatiu ho permet.
- Un servei pot accedir a fitxers basant-se en la identitat de l’usuari o en la pertinença a un grup.
En tots aquests casos, l’autoritat per accedir al recurs és implícita.
El procés no manté una referència directa i explícita al recurs. En canvi, depèn de:
- noms globals (camins de fitxer, ports, identificadors de dispositiu)
- comprovacions d’accés (IDs d’usuari, permisos, ACL)
Aquest model crea diversos problemes:
1. Problema del delegat confós⌗
Un programa pot fer servir accidentalment la seva autoritat en nom d’un altre programa.
Per exemple, un servei privilegiat podria llegir un fitxer sol·licitat per un client no fiable, encara que aquest client no hauria de tenir-hi accés.
2. Autoritat massa àmplia⌗
Els programes sovint s’executen amb més permisos dels que realment necessiten. Això incrementa l’impacte dels errors o dels compromisos de seguretat.
3. Difícil de raonar⌗
És difícil determinar què pot fer un procés sense analitzar l’estat global, les identitats d’usuari i les polítiques de control d’accés.
La idea central: les capacitats⌗
Una capacitat és un testimoni infalsificable que concedeix accés a un objecte específic amb drets específics.
En lloc de preguntar:
“Aquest procés té permís per accedir a aquest recurs?”
un sistema basat en capacitats pregunta:
“Aquest procés posseeix una capacitat que autoritza aquesta operació?”
Si la resposta és no, l’operació no pot continuar.
Propietats de les capacitats⌗
Les capacitats tenen diverses propietats definidores:
1. Infalsificabilitat⌗
Un procés no pot crear una capacitat vàlida del no-res.
Les capacitats són creades i gestionades pel nucli, cosa que garanteix que no es puguin falsificar ni endevinar.
2. Autoritat explícita⌗
Tota l’autoritat es representa explícitament mitjançant capacitats.
Si un procés pot dur a terme una operació, ha de posseir una capacitat que la permeti. No hi ha accés implícit a través d’espais de noms globals.
3. Drets de gra fi⌗
Les capacitats poden codificar permisos específics, com ara:
- accés només de lectura
- accés d’escriptura
- permisos d’execució
- subconjunts limitats d’operacions
Això permet un control precís sobre què pot fer cada procés.
4. Transferibilitat⌗
Les capacitats es poden transferir entre processos, habitualment mitjançant comunicació entre processos (IPC).
Això permet una delegació controlada de l’autoritat.
Objectes i capacitats⌗
En un sistema basat en capacitats, tot es modela com un objecte:
- regions de memòria
- fitxers
- dispositius
- punts finals d’IPC
- processos
Una capacitat és una referència a un objecte combinada amb un conjunt de drets.
Un procés interactua amb el sistema invocant operacions sobre objectes a través de les seves capacitats.
No calen noms globals com camins de fitxer o identificadors de dispositiu dins del nucli. Tot accés està mediat per capacitats.
Com funcionen els sistemes basats en capacitats⌗
A alt nivell, un sistema basat en capacitats funciona així:
- El nucli crea objectes i capacitats.
- Cada procés té un espai de capacitats (sovint anomenat CSpace), que emmagatzema les seves capacitats.
- Un procés només pot operar sobre objectes per als quals posseeix capacitats.
- Les capacitats es poden transferir entre processos mitjançant IPC.
- El nucli fa complir totes les comprovacions de capacitats.
Això dona lloc a un sistema en què l’autoritat és:
- explícita
- localitzada
- transferible
- fàcil de raonar
Exemple: obrir un fitxer⌗
Model tradicional⌗
En un sistema tradicional:
- Un procés crida
open("/etc/config") - El nucli comprova els permisos:
- ID d’usuari
- pertinença a grups
- bits de mode del fitxer
- Si es permet, es retorna un descriptor de fitxer
L’autoritat prové de l’estat global i de la identitat.
Model basat en capacitats⌗
En un sistema basat en capacitats:
- Un procés ja ha de posseir una capacitat de fitxer
- Utilitza aquesta capacitat per dur a terme operacions de lectura o escriptura
Si el procés no té la capacitat, no pot accedir al fitxer, independentment del nom que faci servir.
No hi ha cap pas de cerca global dins del nucli.
Delegació i mínim privilegi⌗
Un dels aspectes més poderosos dels sistemes basats en capacitats és la delegació.
Un procés pot donar a un altre procés un subconjunt de la seva autoritat transferint-li una capacitat.
Per exemple:
- Un servidor de fitxers dona a un client accés només de lectura a un fitxer
- Un gestor de memòria concedeix accés a una regió de memòria específica
- Un procés concedeix accés a un punt final d’IPC
Això fa possible el principi de mínim privilegi:
Cada component rep només l’autoritat que realment necessita.
Eliminar l’autoritat ambiental⌗
Els sistemes basats en capacitats eliminen completament l’autoritat ambiental.
No hi ha:
- espais de noms globals dins del nucli
- accés implícit basat en la identitat
- privilegis ocults
Tota l’autoritat s’ha de passar explícitament.
Això facilita molt analitzar:
- què pot fer un procés
- com flueix l’autoritat pel sistema
- on poden aparèixer possibles problemes de seguretat
Revocació (un problema difícil)⌗
Un dels reptes dels sistemes basats en capacitats és la revocació.
Un cop s’ha donat una capacitat a un procés, com es pot retirar?
Diferents sistemes implementen la revocació de maneres diferents:
- capes d’indirecció
- seguiment de referències
- arbres de capacitats
- mecanismes de versionat
La revocació és una àrea important de recerca i s’explorarà en fases posteriors d’EriX.
Sistemes basats en capacitats a la pràctica⌗
Les idees basades en capacitats no són noves. Diversos sistemes les han implementades:
- KeyKOS / EROS
- seL4 (un micronucli verificat formalment)
- CHERI (capacitats assistides per maquinari)
- Capsicum (extensions de capacitats per a FreeBSD)
Aquests sistemes demostren que els dissenys basats en capacitats són alhora pràctics i potents.
Com utilitza EriX les capacitats⌗
EriX està dissenyat des del principi com un sistema basat en capacitats.
A EriX:
- tota l’autoritat es representa mitjançant capacitats
- les capacitats estan fortament tipades
- les capacitats són immutables un cop creades
- les capacitats es transfereixen mitjançant IPC
- el nucli fa complir la infalsificabilitat i les invariants de seguretat
No hi ha espais de noms globals dins del nucli. Tot accés als recursos està mediat per capacitats.
Això s’alinea amb l’objectiu més ampli de fer que l’autoritat sigui:
- explícita
- mínima
- fàcil de raonar
Per què això importa⌗
Els sistemes basats en capacitats proporcionen una base per construir:
- sistemes més segurs
- arquitectures més modulars
- sistemes més fàcils d’analitzar i verificar
En eliminar l’autoritat implícita i fer explícit tot accés, eliminen classes senceres de vulnerabilitats que són habituals en els sistemes tradicionals.
Mirant endavant⌗
Les capacitats són un concepte fonamental a EriX. En futurs articles explorarem com s’implementen a la pràctica, incloent-hi:
- espais de capacitats (CSpace)
- comunicació entre processos (IPC)
- gestió de memòria mitjançant capacitats sense tipus
- delegació i grafs d’autoritat
Entendre les capacitats és el primer pas per entendre la resta del sistema.