Po CPU se našla díra v paměti DDR3/DDR4. RAMBleed dovoluje krást data

Bezpečnostní výzkumníci objevily nové zneužití hardwarové slabiny pamětí DDR3 a DDR4 zvané RowHamer. Místo destrukce dat umožňuje útočníkovi vám je ukrást.

4

Asi už máte plné zuby toho, že se pořád objevují nějaké bezpečnostní díry v procesorech, které narušují klasické zabezpečení softwaru a jen složitě se obcházejí. Teď si od této nepříjemnosti konečně můžete odpočinout, protože tu máme zranitelnost, za kterou mohou pro změnu operační paměti v počítačích: útok RAMBleed. Ten souvisí s již dlouhou dobu známým problémem RowHammer, ale zneužívá ho zákeřnějším způsobem ke krádežím citlivých dat a údajů uživatele.

RowHammer je docela závažná slabina odhalená v u operačních pamětí typu DRAM (v té době DDR3, přes pokusy ji oslabit ale v menší míře trápí i DDR4). Spočívá v tom, že jednotlivé buňky DRAM se částečně ovlivňují a pokud hodně agresivně opakovaně budete zapisovat například jedničku do jedné buňky, může se vám podařit překlopit na jedničku i sousední buňku (respektive buňky v sousední řadě), pokud měla stav 0. Škodlivý kód tak může přepsat oblasti paměti, ke kterým nemá přístup, ale jsou na modulu fyzicky blízko oblasti, do které může. Tento zápis poruší integritu paměti a může tedy způsobit poškození dat, pád programů a tak podobně.

A bohužel bylo demonstrováno, že jej lze provádět třeba i javascriptovým kódem na webové stránce, takže ač jde primárně o útok vyžadující spuštění programu lokálně, je rizikem i při prohlížení webu. Kromě primitivního útoku snažícího se prostě porušit data ale byly nalezeny i způsoby, jak tímto útokem dosáhnout sofistikovanější cíle jako je zvýšení privilegií.

Tip: Útok Rowhammer funguje i na paměti DDR4. RAM je zranitelnější, než se myslelo

RAMBleed: RowHammer naruby

Nyní ovšem bezpečnostní výzkumníci demonstrovali, že je možné i reverzní zneužití tohoto problému s pamětí RAM. A sice ne už k „tlučení“ do nepřípustné oblasti paměti, ale naopak vytažení dat z oblastí RAM, ke kterým proces útočníka nemá přístup. Nový útok pojmenovaný RAMBleed tak má podobná rizika jako útoky Spectre – útočník (ale i třeba javascript na webu) může číst z RAM počítače a dostat se k potenciálně citlivým datům jako jsou hesla.

Logo zranitelnosti RAMBleed
Logo zranitelnosti RAMBleed

RAMBleed využívá „překlápění“ bitů kvůli efektu RowHammer k tomu, aby naopak překlopil bity ve svém vlastním rozsahu podle obsahu sousedních bitů, k nimž přístup nemá, a tím je přečetl. Postup spočívá v umístění vlastního útočného kódu mezi řádky paměti, kde je cílový program či data (oběť). Útočník pak útok RowHammer s opakovanými zápisy na určité adresy provede na svojí vlastní paměť a s pomocí speciálního postupu, který výzkumníci vyvinuli a popsali, se dá způsobit, aby se jemu patřící paměť překlopila na hodnoty závisející na hodnotách nepřístupné paměti v sousedních řádcích.

Ačkoliv je to asi dost obtížné, je dokázáno, že princip funguje. Výzkumníkům se zneužitelnost podařilo demonstrovat tím, že RAMBleedem vyčenichali 2048bitový RSA klíč z knihovny OpenSSH 7.9. Čtení nicméně experimentálním kódem trvalo hodně dlouho, až čtyři hodiny.

Schema exploitu RAMBleed
Schéma postupu, kterým exploit RAMBleed získává data ze sousedních oblastí paměti. Více v referátu k útoku

Nepříjemné je, že zatímco u RowHammeru pomáhá proti útoku ECC (protože dokáže překlopené bity vrátit na jejich správné hodnoty), proti RAMBleedu ECC nestačí. Útočník totiž může „leaknutá“ data přečíst předtím, než ECC změněné buňky opraví. Je to trochu složitější (ECC opraví data při přístupu, ale protože přístup při opravě trvá výrazně déle, lze využít timing attack a zjistit, zda ECC opravilo překlopený bit, nebo ne).

Moduly DDR4 s technologií TRR jsou bezpečnější, ale ne na 100 %

Není asi příliš pravděpodobné, že na váš konkrétní počítač bude tímto způsobem útočeno, a neví se o tom, že by se tato zranitelnost aktivně zneužívala (byť kvůli tomu, že jde o krádeže dat, by útoky nezaznamenaly stopy v protokolech). Nebezpečí můžete zmírnit, pokud budete používat paměti DDR4, u nichž je aktivní technologie „Targetted Row Refresh“. Jejím cílem je právě ztížit útok RowHammer tím, tím, že častěji obnovuje buňky, které jsou pod velkou zátěží, ovšem ani TRR není stoprocentně účinné. RowHammer byl demonstrován i proti těmto modulům, jen je o dost obtížnější.

Až na volbu TRR modulů asi není příliš mnoho, co proti této potenciální hrozbě tedy momentálně můžete dělat. Dobrá zpráva je, že problém RAMBleed je momentálně hlavně akademický. Ale v budoucnu z něj může být reálná hrozba…

Galerie: Paměťové čipy DRAM a NAND


Po CPU se našla díra v paměti DDR3/DDR4. RAMBleed dovoluje krást data
Ohodnoťte tento článek!
5 (100%) 3 hlas/ů

4 KOMENTÁŘE

  1. Je to už pár rokov čo som sa tým zaoberal, tak mi prosím pripomente, aké privilégiá potrebujem k tomu, aby som si dokázal alokovať premenné v ľubovoľnej časti pamäte na ľubovoľnej adrese?

    A v prípade že mám dostatočné práva na alokáciu na n+1 adrese, prečo nie rovno na n-tej (teda tej ktorá ma zaujíma)?

    • Nevím jaké práva přesně na tohle potřebuješ, ale tohle jde obejít různými způsoby. Třeba alokuješ data po menších blocích a sleduješ ukazatele na kus paměti (tj. pozici v paměti). Tím že postupně zaplňuješ paměť tak ti systém přiděluje postupně další a další bloky volné paměti až ji zaplníš a tvůj program vlastní takřka celou paměť. Pak můžeš ostatní bloky uvolnit a máš kus paměti který jsi chtěl.

      “A v prípade že mám dostatočné práva na alokáciu na n+1 adrese, prečo nie rovno na n-tej (teda tej ktorá ma zaujíma)?”
      Protože systém ti logicky nepřidělí paměť patřící jinému programu, nebo s jinou úrovní zabezpečení.

      Jenom pro zajímavost, některé implementace zneužití rowhammeru využívají zaplnění paměti i pro jiné účely. Třeba tak, že když najdou “slabé” buňky paměti, které mají možnost rowhammerem ovlivnit, tak donutí systém aby do nich načetl citlivá data tak, že právě zbylou paměť předtím zaplní. Systému nezbyde žádná jiná možnost kam je dát, a po tom co je tam načte, tak mu ty data rowhammerem “přebijí”.

    • Možná si to nepamatuji správně. Real mode x86 umožňoval přístup do celé paměti, ale od protected 286 a vyšších snad byla oddělena fyzicka adresace od logické. Procesu je přidělena logická oblast paměti, která je mapována na části fyzické paměti, proces by tak v rámci logické paměti neměl mít přístup(ponětí) o obsahu nepřidělené fyzické paměti.
      https://en.wikipedia.org/wiki/Protected_mode#Segment_addressing

      • Existují různé postupy, jak tohle překonat, stejně jako jak překonat randomizaci adres. Třeba ten bezpečnostní problém Intel CPU Spoiler právě k tomuhle sloužil, ale těch metod je IIRC dost i čistě softwarových.