Tak kdepak jsou ty exploity na zranitelnosti Meltdown a Spectre?

Opravdu už přestávám věřit v uváděné závažnosti zranitelností, které mají své logo a webové stránky, a na které vedou odkazy ze spousty „odborných“ a zpravidla i apokalyptických článků.

Je to jak s těmi asteroidy. Každou chvíli se někde objeví nějaká poplašná zpráva, že by se mohl srazit s naší matičkou Zemí a ono pořád nic.

Na základě propočtů je pravděpodobnost nízká, nakonec se nic nestane, ale v mezidobí se zcela nečekaně třeba na poloviční vzdálenosti měsíce prokmitne nějaký jiný velký kamínek, kterého si nikdo předem ani nevšiml a je z toho Čeljabinský meteor. Zdá se vám tento příměr přitažený za vlasy?

Mně ne, před měsícem byly veřejně publikovány zranitelnosti procesů pod názvy Meltdown a Spectre. To o čem budu psát, nebude překlad výše uvedeného ani opakování publicistických článků.

V souhrnu tedy jde o zranitelnosti (bez překladu):

Spectre: Exploiting Speculative Execution
CVE-2017-5753 [bounds check bypass] aka ‚Spectre Variant 1
CVE-2017-5715 [branch target injection] aka ‚Spectre Variant 2
Meltdown: Exploiting Out-of-order Execution
CVE-2017-5754 [rogue data cache load] aka ‚Meltdown‘ aka ‚Variant 3

Co mě vlastně vede k tomu ještě něco k těmto zranitelnostem napsat, když toho je všude plno? Důvod je vcelku jednoduchý, prý se už teď čeká jen na hackery nebo malware, který tyto zranitelnosti zneužije a bude vymalováno.

Určitě nebudu tvrdit, že zranitelnosti nefungují nebo, že nejsou vážné, nicméně vážnost není z důvodu jejich zneužitelnosti, ale protože se nachází v HW tj. v procesoru a nelze je snadno opravit, i když např. Intel, který má největší problém, se velmi snaží vše napravit, viz příručka. K opravám taktéž dochází na úrovni operačních systémů ale i webových prohlížečů kvůli možnosti jejich zneužití přes javascript, viz příklad níže:

if (index < simpleByteArray.length) {
index = simpleByteArray[index | 0];
index = (((index * TABLE1_STRIDE)|0) & (TABLE1_BYTES-1))|0;
localJunk ^= probeTable[index|0]|0;
}

Proof-of-concept exploit

Na stránkách Meltdown nebo Spectre je ukázáno, jak se např. pomocí Meltdown zranitelnosti dá odcizit heslo, provést dump paměti či rekonstruovat obrázek z paměti. První věcí, která nemohla snad nikomu zůstat skryta, je rychlost čtení z paměti. Nevěříte? Zkuste se podívat na video Meltdown in Action: Dumping memory.

Videa jsou samozřejmě jen videa a člověk by si měl udělat vlastní názor, pokud si může informaci ověřit, a v tomto případě to jde, protože byly zveřejněny i zdrojové kódy např. na Githubu. A to jak pro Meltdown tak i pro Spectre. K dispozici je i mnoho vyladěných variant, bohužel stále jen a jen PoC. A kde jsou ty skutečné exploity?

Níže vidíme PoC test pro Meltdown (lehce upraven pro lepší čitelnost), kde proces secret spuštěný pod právy roota uloží textové pole s textem tadynicneni, který zobrazí a zároveň vypíše fyzickou adresu, kde tento text je, a druhý proces běžící pod neprivilegovaným účtem neoprávněně tento text přečetl.

Ano, to člověka vyleká, a tak jsem hned zkusil, zda si načtu v procesu Firefoxu citlivé informace, ale ouha, ono to nefunguje. Proč? Odpověď je v samotném PoC kódu. Vytvořil jsem secret-nocache, a jak vidíme níže, text supertajneheslo jsem už nenačetl.

Co se vlastně stalo? Ze zdrojového kódu jsem odstranil část nazvanou výstižně for better results, která udržovala v cache onen text, který se měl načíst.

Samozřejmě nebyl jsem jediný, koho to iritovalo …slovo fake jsem zcela úmyslně podbarvil.

Je pravda, že jsem to testoval na i5 a je tak možné, že na jiném CPU to bude fungovat přesněji řečeno just slower. Takže, když to shrnu, je to pomalé, spíše to nefunguje, pokud nežhavím cache v jiném procesu a je to nespolehlivé. Na obrázku je vidět, jak to občas načetlo text a ve virtuálu to mělo obzvláště velké problémy.

PoC pro Meltdown je k dispozici na GitHub v mnoha variacích, takže uvedu ještě, ten který načte z kernel paměti linux_proc_banner a bere si ze Spectre užití Flush+Reload.

Meltdown se týká jen Intel procesorů, takže asi OK, ale co Spectre? To vypadá lépe a má umět exploitovat i ARM procesory, … ale co vlastně ten PoC pro Spectre ukazuje?

 Linux:

Windows:

PoC pro Spectre testuje pouze schopnost číst data v rámci stejného procesu pomocí spekulativního vykonávání kódu, aniž by překročil hranice oprávnění (data jsou procesu přístupná). Zjednodušeně řečeno testuje se pro každý byte všech 255 možností a zjistí se nejkratší dobu výsledku operace => už v CPU existuje => hledaná hodnota.

Faktem je, že ti co zveřejnili zranitelnosti, skutečně uvedli, co a jak ověřili (PoC), a kdyby si to bezpečnostní popularizátoři pozorně přečetli, viděli by, co je psáno ve čtyřech bodech zde.

Když se podíváme na článek FLUSH+RELOAD: a High Resolution, Low Noise, L3 Cache Side-Channel Attack z roku 2013 (Spectre útok používá flush+reload nebo evict+reload), tak už to nevypadá na objev Ameriky, ale to snad nikdo netvrdil.

A samozřejmě nezpochybňuji základní princip, o který se to hlavně opírá vyjádřený na níže uvedeném obrázku, kde je ukázáno, jak je celá fyzická paměť typicky mapována do kernelu a ten je mapován do user space všech procesů.

Poslední věcí jsou smartphony v drtivé většině postavené na ARM procesorech s Android OS. Pokud chce někdo PoC vyzkoušet na Androidu upozorňuji, že není jednoduché nalézt vhodný smartphone se zranitelným CPU. Zmínit je třeba i Meltdown, který se sice týká pouze Intel procesorů, nicméně jistá možnost byla objevena a označuje se jako varianta 3a.

Zranitelnost 3a pro ARM 64bitové mikroprocesory s architekturou AArch64 byla ověřena např. zde  s důležitým závěrem: „No cryptographic keys or user data are expected to be exposed in most cases“. A jsou zde naznačeny i možné oblasti zneužití spočívající v pomoci jiným exploitům či zranitelnostem.

Je potřeba si uvědomit, že v případě Androidu jsou mnohem jednodušší a účinnější formy útoku. Navíc výše uvedené teoreticky může pouze pomoci nějakému útoku, ale prakticky je to nereálné. Mnohem větší nebezpečí zůstává v nepodporovaných zařízeních, které může malware rootnout a získat nad zařízením plnou kontrolu nebo běžné a časté overlay útoky.

Pokud vás tento článek zaujal, můžete odkaz na něj sdílet.

Štítky:


K článku “Tak kdepak jsou ty exploity na zranitelnosti Meltdown a Spectre?” se zde nenachází žádný komentář - buďte první.

Diskuse na tomto webu je moderována. Pod článkem budou zobrazovány jen takové komentáře, které nebudou sloužit k propagaci konkrétní firmy, produktu nebo služby. V případě, že chcete, aby z těchto stránek vedl odkaz na váš web, kontaktujte nás, známe efektivnější způsoby propagace.

Přihlášeným uživatelům se tento formulář nezobrazuje - zaregistrujte se.

Jméno:(požadováno)
E-mail:(požadováno - nebude zobrazen)
Web:

Text vaší reakce: