V článku mi chybí popis, jak TLBleed proces zajistí, aby běžel na správném virtuálním HT jádře konkrétního fyzického jádra, na jehož druhém virtuálním HT jádře běží proces, kterému chce zcizit data a jak zajistí, že proces jeho zájmu tam poběží dostatečně dlouho, aby měl čas svou záškodnickou činnost vykonat, protože ten může svou práci mezitím dokončit (např. webový server jak je zmíněno v článku, který mezitím obsloužil konkrétního klienta) a "uteče" pro další běh na jiné jádro.
no to by nemusel byt zase az taky neprekonatelny problem - ked spustis dostatocny pocet vlakien (viac nez jadier), tak je statisticky dost pravdepodobne, ze jedno z tych vlakien sa ocitne "hned vedla" procesu, ktory nas zaujima...
Kazdopadne cim viac vlakien spustis, tym vacsia sanca, ze si tvoj proces niekto vsimne ;-)
Já netvrdil, že to je nepřekonatelný problém, já jen psal, že mi to v článku chybí. Nicméně úplně jednoduché to nebude, viz váš vlastní příspěvek...
Zatím mi to přijde, že jim to funguje dobře v laboratorních podmínkách, v běžném provozu by se úspěšnost 100% asi neblížila. Ale možná se pletu. Prostě to v článku chybí.
Máš stroj, 16 jader fyzických, 32 logických. Připojí se ti současně řekněme 60 klientů po HTTPS, pro každýho server vytvoří vlastní vlákno ne odbavení požadavků, který má v náplni práce i šifrování. Jaká je pravděpodobnost, že na některým z těch 16 jader pojede vlákno, který používá šifrovací klíč toho serveru?
Stačí číhat a analyzovat provoz. Až zjistí, že na jádře běží něco, co šifruje,...
Otázka je, jak zajistit, že se na (veřejný web server) připojí několikanásobně víc klientů, než má ten server jader... Ale spustit si na jednom stroji (nebo několika virtuálech) několikrát wget je docela triviální věc.
To je hodně zjednodušené... Na takové serveru poběží daleko více úloh, než jen web server s HTTPS, ale také připojování do DB, I/O a kdo ví co ještě.
Každopádně souhlasím s tím (jak píšu jinde v tomto vlákně), že když poběží delší dobu, je jisté, že se k nějakým užitečným datům dostane. Neobhajuji Intel a jeho HT, jen se více zajímám o tento typ útoku.
Přinejmenším není problém udělat spršku dotazů po HTTPS a doufat, že se to u jednoho z nich potká. To může i za celkem krátkou dobu.
Podobně by šlo útočit i na klienta, možná trochu krkolomněji:
1. Oběť si načte example.com přes plain HTTP. To mě sice nezajímá, ale mohu tam vložit svůj skript.
2. Skript spustí měření side channelu, ideálně ve WebWorkers.
3. Skript udělá spršku požadavků na https://foo.com. Cross domain policy tomu nezabrání, lze použít třeba <img>.
Na klientovi sice obvykle není privátní klíč, ale k ukradení jedné session a přečtení cookie nebo otrávení cache to stačit může.
Zkusím hádat:
* Útok byl prvně proveden v laboratorních podmínkách, kde toto prostě zajistili. V reálných podmínkách se to na první pokud nepodaří, za chvíli to bude mít úspěšnost 10 % a během roku to vyroste třeba na 50 %. A s nižším úspěchem brzy i z JS v prohlížeči. Ono i 1% šance na úspěch je celkem dost, zvlášť pokud útočník může útok opakovat.
* Ta šance není malá, přecejen nemáme až tolik vláken.
* Trochu problém může být, že se chytrý plánovač bude snažit obsadit fyzická vlákna rovnoměrně, čistě kvůli výkonu.
* Mohu spustit více útočných vláken.
* Útok je celkem rychlý, takže je celkem málo pravděpodobné, že se v průběhu útoku oběť nebo útočník přestěhuje jinam.
* Co vím, tak plánovač se snaží úlohy typicky držet nějakou dobu na jednom jádře.
V tom máme asi hodně podobný názor... Logicky čím více procesů, čím více jader, čím inteligentnější plánovač tím to má záškodnický kód složitější.
Zas tak rychlý mi ten útok nepřipadá. První fáze trvá 2 ms, kolik cyklů u 4 GHz CPU za tu dobu proběhne se dá snadno spočítat.
Spuštěním více vláken se útočník IMO velmi snadno prozradí a má po žížalkách. Na druhou stranu je fakt, že záškodnický proces může sbírat data dlouhodobě a nějaká užitečná data po čase určitě vykutá.
Každopádně jsem zvědavý na další detaily, protože když přišel Intel s HT, tak to byla jedna z prvních věcí která mě napadla - jak moc dobře jsou chráněna data na jednotlivých virtuálních jádrech proti jinému procesu běžícímu na stejném fyzickém jádře. Dnes už víme jistě, že špatně... Otázka také je jak to má AMD, jak moc tomu pomůže schopnost šifrovat paměť atd. No bude to zajímavé sledovat...
> První fáze trvá 2 ms, kolik cyklů u 4 GHz CPU za tu dobu proběhne se dá snadno spočítat.
Jenže, co jsem kdysi od oka pozoroval, když vytížím jedno jádro jedním procesem a ostatní jsou v klidu, trvá třeba 15s (od oka) než se úloha přesune na jiné jádro. To je proti několika ms dost dlouhá doba. (Nejspíš bude záviset i na teplotách jednotlivých jader a dalších faktorech.)
> Spuštěním více vláken se útočník IMO velmi snadno prozradí a má po žížalkách.
Dost záleží. Pokud se bude snažit je mít spuštěné 24/7, tak možná jo. (A ani to není jisté – kdo to bude řešit v cloudu?) Pokud je inteligentně spustí, když je to relevantní, uvidíme třeba pár malých spiků za den – kdo to bude řešit? A někdy (vlastně asi celkem často) je možné oběť „vyprovokovat“ k nějaké kryptografické operaci, pak nemusíme hledat vhodnou příležitost.
> jak moc tomu pomůže schopnost šifrovat paměť
Dost pochybuju, že to pomůže proti tomuto útoku.
Protože Intel tlačil na to, aby to běhalo rychle (a to už od dob Pentia, které špatně počítalo ve FP, ale zato rychle :D), ne aby to běhalo správně a podle toho to teď vypadá. Samé Meltdown, Spectre, teď TLBleed... Kolik výkonu Intel ztrácí, když se to zazáplatuje? Pokud si vzpomínám dobře, v době AMD FX tuším ztrácelo na Intel cca 30 %, na druhou stranu dnes víme, že např. na Meltdown netrpí, takže pravděpodobná příčina ztráty výkonu AMD je nasnadě. S HT to vidím podobně. Možná to je důvod, proč SMT AMD nasazuje až teď, kdo ví.
Detaily nevím, ale pochopil jsem to tak, že se zneužívá spíše memory access pattern, na což šifrování moc nepomůže.
Záleží taky na detailech toho šifrování:
* Některé módy vyžadují přečíst více dat (celý blok), ale to asi nebude případ šifrování v RAM, podepsalo by se to dost na výkonu.
* Pokud šifrování funguje dostatečně transparentně, těžko to pomůže čemukoliv kromě cold boot attacku.