Anells (seguretat informàtica)

De Viquipèdia
Dreceres ràpides: navegació, cerca
Anells de privilegi per al x86 disponibles al mode protegit

En ciències de la computació, els dominis de protecció jeràrquica,[1][2] amb freqüència anomenats anells de protecció, són mecanismes per protegir dades i funcionalitat dels errors (tolerància a fallades) i comportament maliciós (seguretat de computadors). Aquest enfocament és diametralment oposat a la de la seguretat basada en capacitat.

Els sistemes operatius proporcionen diferents nivells d'accés als recursos. Un anell de protecció és un de dos o més nivells jeràrquics o capes de privilegis dins de l'arquitectura d'un sistema de computació. Això és generalment imposat pel maquinari per algunes arquitectures de CPU que ofereixen diferents modes de CPU en el maquinari o nivell de microcodi. Els anells estan disposats en una jerarquia des dels més privilegiats (de més confiança), usualment numerat zero, fins al menys privilegiat (de menys confiança), usualment amb el major nombre d'anell. En la majoria de sistemes operatius, l'anell 0 és el nivell amb la majoria dels privilegis i interacciona més directament amb el maquinari físic, com el CPU i la memòria.

Es proporcionen portes especials entre els anells per permetre a un anell exterior accedir als recursos d'un anell interior d'una manera predefinida, en lloc de permetre'n un ús arbitrari. Un accés correcte per portes entre els anells pot millorar la seguretat prevenint que els programes d'un anell o nivell de privilegi mai no usi els recursos destinats als programes d'un altre anell. Per exemple, s'ha d'evitar que el spyware que s'executa com un programa d'usuari a l'anell 3 encengui una càmera web sense informar a l'usuari, ja que l'accés al maquinari ha de ser una funció reservada l'anell 1 per als controladors de dispositius. Els programes com navegadors web corrent en els anells de nombres més alts, han de sol·licitar l'accés a la xarxa, un recurs restringit a un anell de numeració inferior.

Implementacions[modifica | modifica el codi]

Els anells suportats en maquinari van ser alguns dels conceptes més revolucionaris introduïts pel sistema operatiu Multics, un altament segur predecessor de la família UNIX de sistemes operatius d'avui. No obstant això, la majoria dels sistemes de propòsit general usen només dos anells, encara que el maquinari on corren proporciona més mode de CPU. Per exemple, Windows XP i anteriors només utilitza dos anells, amb el anell 0 corresponent al mode de nucli i l'anell 3 per al mode d'usuari.

Moltes modernes arquitectures de CPU (incloent la popular arquitectura Intel x86) inclouen alguna forma de protecció d'anell, encara que el sistema operatiu Windows NT, igual que el Unix, no explota plenament aquesta característica. El OS/2 ho va fer fins a cert punt, ja que utilitza tres anells: [3] l'anell 0 per al codi del nucli i controladors de dispositius, l'anell 2 per al codi privilegiat (programes d'usuari amb permisos d'accés d'entrada/sortida) i l'anell 3 per al codi sense privilegis (gairebé tots els programes d'usuari). Sota DOS, el nucli, els controladors i les aplicacions típicament s'executen en l'anell 3, mentre que els controladors de memòria del 386, com el EMM386 corren en l'anell 0. Addicionalment, el EMM386 3.xx del DR-DOS pot córrer opcionalment alguns mòduls (com el DPMS) en l'anell 1. OpenVMS utilitza quatre maneres de trucades (en ordre decreixent de privilegis): nucli, executiu, supervisor i usuari.

Hi ha hagut un renovat interès en aquesta estructura de disseny, amb la proliferació del programari hipervisor Xen, el debat en curs sobre el nucli monolític o el micronucli (particularment en grups de notícies Usenet i fòrums d'Internet), l'estructura de disseny de l'anell 1 de Microsoft com a part de la seva iniciativa NGSCB i els hipervisores encastats al firmware, com el Intel VT-x (anteriorment Vanderpool).

L'original sistema Multics tenia vuit anells, però molts sistemes moderns en tenen menys. El maquinari és conscient en tot moment de l'anell actual del fil de la instrucció que s'està executant, gràcies a registres de màquina especials. En alguns sistemes, les àrees de memòria virtual són assignades en maquinari a números d'anells. Un exemple és el Data General Eclipsi MV/8000, en el qual els tres primers bits del PC serveix com el registre d'anell. Per tant el codi que s'executa en el PC Virtual PC en 0xE200000, estaria automàticament en l'anell 7, per exemple, i cridar a una subrutina en una secció diferent de la memòria automàticament causaria una transferència d'anell.

El maquinari restringeix severament les maneres en què el control pot ser passat d'un anell a un altre, i també imposa restriccions en els tipus d'accés a la memòria que poden ser fets a través dels anells. Típicament hi ha una porta especial o instrucció de trucada que transfereix el control d'una manera segura cap a punts d'entrada predefinits en anells de menor nivell (de més confiança), això funciona com una trucada de supervisor en molts sistemes operatius que fan servir l'arquitectura d'anell . Les restriccions de maquinari estan dissenyades per limitar les oportunitats per violacions accidentals o malicioses de seguretat. A més, l'anell més privilegiat pot tenir capacitats especials (com l'adreçament de memòria real que passa per sobre de la del maquinari de memòria virtual).

En alguns sistemes, la protecció de l'anell pot ser combinada amb les maneres del processador (mestre/nucli/forma privilegiada versus esclau/usuari/mode no privilegiat). Els sistemes operatius que corren en maquinari que suporta ambdues poden usar les dues formes de protecció o només una.

L'ús eficaç de l'arquitectura d'anell requereix una estreta cooperació entre el maquinari i el sistema operatiu. Els sistemes operatius dissenyats per treballar en múltiples plataformes de maquinari poden fer només un ús limitat dels anells si no estan presents en cadascuna de les plataformes suportades. Sovint, el model de seguretat és simplificat a "nucli" i "usuari", encara que el maquinari ofereix una granularitat més fina a través d'anells.

Mode supervisor[modifica | modifica el codi]

El mode de supervisor és un flag intervingut pel maquinari que pot ser canviat per codi corrent en el programari de nivell de sistema. Les tasques o fils a nivell de sistema tindran aquest flag activat mentre s'estan executant, mentre que les aplicacions en l'espai d'usuari no. Aquest flag determina si seria possible executar operacions de codi màquina com la modificació de registres per a diverses taules de descriptors o dur a terme operacions com ara desactivar les interrupcions. La idea de tenir dues maneres diferents per operar ve de "amb més control, ve més responsabilitat" - es confia que mai falli un programa en la manera supervisor, ja que una fallada pot provocar que tot el sistema operatiu de l'ordinador falli i s'aturi .

El mode supervisor és "una manera d'execució en alguns processadors que activa l'execució de totes les instruccions, incloent les privilegiades. També pot donar accés a un espai d'adreces diferent, al maquinari de maneig de memòria i altres perifèrics. Aquesta és la manera en què usualment corre el sistema operatiu ".[4]

En un nucli monolític, el sistema operatiu corre en mode supervisor i les aplicacions corren en mode d'usuari. Altres tipus de sistemes operatius, com els que tenen un exonucli o micronucli, no necessàriament comparteixen aquest comportament.

Alguns exemples del món del PC:

Linux i Windows són dos sistemes operatius que utilitzen supervisor / mode usuari. Per realitzar funcions especialitzades, el codi de manera d'usuari ha de fer una trucada al sistema dins de la manera de supervisor o fins i tot a l'espai del nucli on el codi de confiança del sistema operatiu portarà a terme la tasca necessària i retornarà a l'espai d'usuari.
DOS, així com altres sistemes operatius simples i molts dispositius encastats corren en mode de supervisor permanentment, el que significa que els controladors poden ser escrits directament com programes d'usuari. (Mentre no siguin carregats controladors de memòria 386 com el EMM386)

La majoria dels processadors tenen almenys dos modes diferents. Els processadors x86 tenen quatre modes diferents dividits en quatre diferents anells. Els programes que corren en l'anell 0 poden fer qualsevol cosa amb el sistema, i el codi que s'executa en anell 3 podríeu fallar en qualsevol moment sense que això afecti a la resta del sistema de computador. Els anells 1 i 2 són rarament usats, però pot ser configurats amb diferents nivells d'accés.

El canvi de "mode usuari" a "mode nucli" és, en la majoria dels sistemes existents, molt costós. S'ha mesurat que, en la sol·licitud bàsica de getpid, costa entre 100 i 1500 cicles en la majoria de les màquines. D'ells només al voltant de 100 són per al Swithen real (70 des de l'espai de l'usuari a l'espai del nucli, i 40 de tornada), la resta és "overhead del nucli".[5][6] Al microkernel L3 la minimització d'aquesta sobrecàrrega redueix el cost total al voltant de 150 cicles.[5]

Maurice Wilkes va escriure: [7]

... it eventually became clear that the hierarchical protection that rings provided did not closely match the requirements of the system programmer and Gave little or no improvement on the simple system of having two modes only. Rings of protection lent themselves to efficient implementation in maquinari, but there was little else de ser said for them. [...] The attractiveness of fine-grained protection remained, even after it was seen that rings of protection did not provide the answer ... This again proved a blind alley ...

... amb el temps va quedar clar que la protecció jeràrquica que els anells proporcionen no sempre concorda amb les exigències del programador de sistema, i tenir dos modes únics al sistema simple va donar poca o cap millora. Anells de protecció es presten a una implementació eficient en el maquinari, però hi havia poc més a dir sobre ells. [...] L'atractiu de la protecció de granular fina es va mantenir, fins i tot després que s'ha vist que els anells de protecció no van donar la resposta ... Això de nou va resultar ser un carreró sense sortida ...

Per guanyar rendiment i determinisme, alguns sistemes col·loquen les funcions que probablement serien vistes com a lògica d'aplicació, en lloc de com controladors de dispositiu, de cap manera nucli; aplicacions de seguretat (control d'accés, tallafocs, etc), i els monitors del sistema operatiu són citats com a exemples. Almenys un sistema de gestor de base de dades encastat, eXtremeDB Kernel Mode, ha estat desenvolupat específicament per a la implementació de manera de nucli, per proporcionar una base de dades local per a les funcions d'aplicació basades en el nucli, i per eliminar els canvis de context que en cas contrari ocorren quan interaccionen les funcions del nucli amb un sistema de base de dades corrent en mode usuari.[8]

També està al revés. El nucli de Linux, per exemple, s'injecta una secció VDSO en els processos que conté funcions que requeririen normalment una trucada al sistema, és a dir, un anell de transició. Però en comptes de de fer una crida al sistema, aquestes funcions fan servir dades estàtics proporcionades pel nucli que eviten la necessitat d'una transició d'anell, el que és més lleuger que una trucada al sistema. La funció gettimeofday pot ser proporcionada d'aquesta manera.

Mode de hypervisor[modifica | modifica el codi]

Els recents CPU d'Intel i AMD ofereixen instruccions de virtualització x86 perquè un hipervisor controli l'accés de maquinari d'anell 0. Tot i que són mútuament incompatibles, tant Intel VT-x (nom en codi "Vanderpool") com el AMD-V (nom en codi "Pacifica") crea un nou "Anell -1" perquè un sistema operatiu convidat pot executar operacions de Anell 0 de forma nativa sense afectar altres convidats o al sistema operatiu amfitrió.[9]

Interoperativitat entre el CPU i els nivells d'abstracció del sistema operatiu[modifica | modifica el codi]

Moltes arquitectures de maquinari de CPU proporcionen molta més flexibilitat que la que és explotada pels sistemes operatius que normalment corren en elles. L'ús adequat dels modes complexos del CPU requereix una cooperació molt estreta entre el sistema operatiu i el CPU, i per tant tendeix a enganxar el sistema operatiu a l'arquitectura de CPU. Quan el sistema operatiu i el CPU estan dissenyats específicament l'un per l'altre, això no és un problema (encara que algunes de les característiques de maquinari encara pot deixar-se sense explotar), però quan el sistema operatiu està dissenyat per a ser compatible amb arquitectures múltiples, diferents arquitectures de CPU, una gran part de les característiques de les maneres de CPU poden ser ignorades pel sistema operatiu. Per exemple, la raó per la qual Windows utilitza només dos nivells (anell 0 i anell 3) és que algunes arquitectures de maquinari que van ser contemplades en el passat (com PowerPC o MIPS) van implementar només dos nivells de privilegi.[10]

Multics va ser un sistema operatiu dissenyat específicament per a una arquitectura de CPU especial (que al seu torn va ser dissenyada específicament per Multics), i va aprofitar completament l'avantatge dels modes del CPU a la seva disposició. No obstant això, va ser una excepció a la regla. Avui en dia, aquest alt grau d'interoperabilitat entre el sistema operatiu i el maquinari no sol ser rendible, tot i els avantatges potencials per a la seguretat i l'estabilitat.

En última instància, el propòsit de diferents modes d'operació per al CPU és proporcionar protecció de maquinari contra la corrupció accidental o deliberada de l'ambient del sistema pel programari (i les corresponents infraccions de la seguretat del sistema). Només a porcions de programari del sistema "de confiança" se'ls permet executar en l'ambient sense restriccions de manera de nucli, i llavors només quan sigui absolutament necessari. Tots els altres productes es s'executa en un o més modes d'usuari. Si un processador genera una fallada o condició d'excepció en una manera d'usuari, en la majoria dels casos l'estabilitat del sistema no es veu afectada, si un processador genera una fallada o condició d'excepció en la manera de nucli, la majoria dels sistemes operatius detindran el sistema amb un error no recuperable. Quan una jerarquia de maneres existeix (seguretat basada en anells), els errors i excepcions en un nivell de privilegi només pot desestabilitzar els nivells de privilegis de numeracions superiors. Per tant, una fallada en l'anell 0 (la manera de nucli amb el més alt privilegi) s'estavellarà tot el sistema, però una fallada en l'anell 2 només afectarà els anells de 3 i següents i l'anell 2, com a màxim .

Les transicions entre les maneres estan a discreció del fil en execució quan la transició és des d'un nivell de privilegi alt a un de baix privilegi (com des del nucli per les maneres d'usuari), però les transicions de menor a major nivell de privilegi pot tenir lloc només a través de segures "portes" controlades per maquinari que són travessades executant instruccions especials, o quan són rebudes interrupcions externes.

Sistemes operatius de microkernel tracten de minimitzar la quantitat de codi que s'executa en mode privilegiat, als fins de la seguretat i elegància, però en última instància, sacrificant el rendiment.

Referències[modifica | modifica el codi]

  1. Paul A. Karger, Andrew J. Herbert, An Augmented Capability Architecture to Support Lattice Security and traceability of Access, sp, p. 2, 1984 IEEE Symposium on Security and Privacy, 1984
  2. Walter Binder, Design and Implementation of the J-SEAL2 Mobile Agent nucli, saint, p. 35, 2001 Symposium on Applications and the Internet (SAINT'01), 2001
  3. \book\DDK\PDRREF.INF+5 Presentació Device Driver Reference for OS/2-5. Introduction to US/2 Presentació Drivers
  4. FOLDOC supervisor model
  5. 5,0 5,1 Jochen Liedtke . On μ-nucli Construction, Proc. 15th ACM Symposium on Operating System Principles (SOSP), desembre 1995
  6. Ousterhout, J. K. 1990. Why aren't operating systems getting faster as faster in hardware? In USENIX Summer Conference, Anaheim, CA, pàg. 247 {256.
  7. Maurice Wilkes Operating systems in a changing world ACM SIGOPS Operating Systems Review. Volume 28, Issue 2 (abril 1994). pp. 9-21 ISSN :0163-5980 quote from.
  8. Gorine, Andrei and Krivolapov, Alexander. "Kernel Mode Databases: A DBMS Technology For High-Performance Applications", Dr Dobb s Journal, May, 2008 ..
  9. Dornan, Andy. «Intel VT vs. AMD Pacifica». CMP, 1 novembre 2005. [Consulta: 16 juliol 2008].
  10. Microsoft Windows Internals. 4a ed.. Microsoft Press, 2005, p. 16. ISBN 978-0-7356-1917-3. 

Lectura addicional[modifica | modifica el codi]

Vegeu també[modifica | modifica el codi]