Meltdown (zraniteľnosť): Rozdiel medzi revíziami

Smazaný obsah Přidaný obsah
TibX (diskusia | príspevky)
kontrola oprávnení
TibX (diskusia | príspevky)
rozšírenie
Riadok 20:
Mechanizmy uvedené vyššie sú zvyčajne považované za bezpečné. Poskytujú základ pre väčšinu moderných operačných systémov a procesorov. Meltdown však zneužíva spôsob interakcie týchto funkcií na obídenie základnej riadiacej funkcie [[CPU]], ktorej úlohou je vyhodnocovať oprávnenia prístupu k privilegovaným a citlivým údajom operačného systému a iných procesov. Pochopenie tohto mechanizmu je možné ilustrovať na dátach, ktoré sú mapované vo virtuálnej pamäti (ku väčšine týchto dát by proces nemal mať prístup) a spôsobe reakcie CPU na požiadavky procesu na prístup k neoprávnenej pamäti. Proces beží na zraniteľnej verzii systému [[Microsoft Windows|Windows]] alebo [[Linux (operačný systém)|Linux]], na [[64-bit|64 bitovom]] procesore zraniteľného typu. <ref name="MeltdownPaper"/> Táto kombinácia je bežná pre takmer všetky stolné počítače, notebooky, servery a mobilné zariadenia.
 
<ol>
# Podvodný proces má, ako každý iný proces a samotný operačný systém, prístup k virtuálnemu adresnému priestoru (virtuálnej pamäti) v rozsahu miliárd gigabajtov. Bez ohľadu na oprávnenia, tento priestor sa využíva spôsobom, ktorý maximalizuje efektivitu. Väčšina z tohto priestoru je nepridelená (neobsahuje žiadne údaje). Niektoré oblasti sú vyhradené pre samotný podvodný proces pre jeho vlastné inštrukcie a dáta. Z dôvodu efektivity, neberúc do úvahy oprávnenia pre prístup k privilegovaným častiam pamäti, tento priestor obsahuje ''tiež'' všetky ostatné dáta, ktoré sa používajú vo všetkých ''ostatných'' bežiacich procesoch, vrátane operačného systému a tiež prípadne dáta v pamäti, ktorá bola použitá, avšak nebola vyprázdnená, alebo adresy, ktoré sú vždy priamo mapované na celú fyzickú pamäť.<br><br>Princíp, že všetky uvedené dáta sú rovnako mapované do virtuálnej pamäti každého procesu, sa zvyčajne považuje za úplne bezpečný, pretože funkcia CPU na riadenia prístupu zabráni ich zneužitiu. Akýkoľvek pokus podvodného procesu na prístup k všetkým ostatným dátam, na ktoré nemá oprávnenie, spôsobí [[Výnimka (programovanie)|výnimku]] (chybový stav). Požiadavka zlyhá a podvodnému procesu nebudú poskytnuté žiadne údaje, čím sa zachová bezpečnosť.<br><br>
<li>Podvodný proces má, ako každý iný proces a samotný operačný systém, prístup k virtuálnemu adresnému priestoru (virtuálnej pamäti) v rozsahu miliárd gigabajtov. Bez ohľadu na oprávnenia, tento priestor sa využíva spôsobom, ktorý maximalizuje efektivitu.
# Aj keď sa proces pokúša čítať pamäť, na ktorú nemá oprávnenie, inštrukciu čítania procesor najskôr naplánuje a zreťazí, podobne ako pri iných inštrukciách. Ako zvyčajne zvolí výkonnú jednotku a riadiacu jednotku pamäte požiada o načítanie obsahu pamäti na adrese, ktorá bola uvedená v inštrukcii, tak aby dáta boli pripravené a rýchlo dostupné v procesore, keď nastane čas na dokončenie zvyšku inštrukcie. V určitom okamihu, predtým než je inštrukcii dovolené vygenerovať vôbec nejaký výstup, na inom mieste dôjde k dokončeniu kontroly oprávnení. V prípade neoprávneného čítania, bude výkonnej jednotke oznámené, že inštrukcia zlyhala pri kontrole oprávnení. Zrušia sa všetky dáta z inštrukcie, procesu sa neodovzdá nič, inštrukcia sa zahodí a vykonávanie sa posunie na nasledujúcu inštrukciu.
* Väčšina z tohto priestoru je nepridelená (neobsahuje žiadne údaje).
* Niektoré oblasti sú vyhradené pre samotný podvodný proces pre jeho vlastné inštrukcie a dáta.
* Z dôvodu efektivity, neberúc do úvahy oprávnenia pre prístup k privilegovaným častiam pamäti, tento priestor obsahuje ''tiež'' všetky ostatné dáta, ktoré sa používajú vo všetkých ''ostatných'' bežiacich procesoch, vrátane operačného systému a tiež prípadne dáta v pamäti, ktorá bola použitá, avšak nebola vyprázdnená, alebo adresy, ktoré sú vždy priamo mapované na celú fyzickú pamäť.
* Princíp, že všetky uvedené dáta sú rovnako mapované do virtuálnej pamäti každého procesu, sa zvyčajne považuje za úplne bezpečný, pretože funkcia CPU na riadenia prístupu zabráni ich zneužitiu. Akýkoľvek pokus podvodného procesu na prístup k všetkým ostatným dátam, na ktoré nemá oprávnenie, spôsobí [[Výnimka (programovanie)|výnimku]] (chybový stav). Požiadavka zlyhá a podvodnému procesu nebudú poskytnuté žiadne údaje, čím sa zachová bezpečnosť.<br><br></li>
<li>Aj keď sa proces pokúša čítať pamäť, na ktorú nemá oprávnenie, inštrukciu čítania procesor najskôr naplánuje a zreťazí, podobne ako pri iných inštrukciách.
# Aj keď sa proces pokúša čítať pamäť, na ktorú nemá oprávnenie, inštrukciu čítania procesor najskôr naplánuje a zreťazí, podobne ako pri iných inštrukciách.* Ako zvyčajne zvolí výkonnú jednotku a riadiacu jednotku pamäte požiada o načítanie obsahu pamäti na adrese, ktorá bola uvedená v inštrukcii, tak aby dáta boli pripravené a rýchlo dostupné v procesore, keď nastane čas na dokončenie zvyšku inštrukcie. V určitom okamihu, predtým než je inštrukcii dovolené vygenerovať vôbec nejaký výstup, na inom mieste dôjde k dokončeniu kontroly oprávnení. V prípade neoprávneného čítania, bude výkonnej jednotke oznámené, že inštrukcia zlyhala pri kontrole oprávnení. Zrušia sa všetky dáta z inštrukcie, procesu sa neodovzdá nič, inštrukcia sa zahodí a vykonávanie sa posunie na nasledujúcu inštrukciu.
* Teoreticky, za predpokladu, že vykonávacia jednotka, riadiaca jednotka pamäte, plánovač a kontrola oprávnení fungujú bez chyby, ide o úplne bezpečný prístup. Napriek tomu, že privilegovaná pamäť bola spočiatku vykonávacou jednotkou a riadiacou jednotkou pamäte načítaná, vykonávanie inštrukcie bolo následne zrušené a neoprávnené, čiastočne spracované operácie boli zahodené, teda výstup bol správny. Avšak, ako ukazuje Meltdown, nie je to tak bezpečné, ako sa predpokladalo.
* V skorom štádiu vykonávania inštrukcie, plánovač procesora naplánoval dve udalosti – kontrolu oprávnení a prvé kroky vykonávania inštrukcie. Súčasťou tohto procesu, ''zatiaľ čo sa čakalo na dokončenie kontroly oprávnení'', výkonná jednotka začala proces načítania dát. V prípade podvodného procesu, dáta boli požadované z neoprávnenej adresy v pamäti, avšak ''aj napriek tomu'' boli načítané riadiacou jednotkou pamäte počas počiatočného štádia vykonávania inštrukcie, aj keď boli neskôr zahodené potom, ako sa dokončila kontrola oprávnení a táto zlyhala.<br><br></li>
<li></li>
<li></li>
</ol>
 
== Referencie ==