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/passwd si 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í:

  1. El nucli crea objectes i capacitats.
  2. Cada procés té un espai de capacitats (sovint anomenat CSpace), que emmagatzema les seves capacitats.
  3. Un procés només pot operar sobre objectes per als quals posseeix capacitats.
  4. Les capacitats es poden transferir entre processos mitjançant IPC.
  5. 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:

  1. Un procés crida open("/etc/config")
  2. El nucli comprova els permisos:
    • ID d’usuari
    • pertinença a grups
    • bits de mode del fitxer
  3. 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:

  1. Un procés ja ha de posseir una capacitat de fitxer
  2. 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.