TRESOR: kernel patch a "cold boot" és más típusú memóriatámadások ellen

Címkék

Néhány évvel ezelőtt volt már nálunk szó arról, hogy egy egyszerű sűrített levegős spray-vel lefagyasztva a számítógépek memóriachipjeit, azok tartalmai akár még percekig is kiolvashatók (cold boot attack - lásd videó fent). Mivel az ismert lemeztitkosító szoftverek többsége az operációs rendszer működése során a RAM-ban tárolja a titkosításhoz használt kulcsot, nem tanácsos a gépet altatott (suspend), vagy lezárt (jelszóval védett lock screen) állapotban szállítani, vagy magára hagyni, mert egy esetleges elvesztés, ellopás (vagy törvényszéki vizsgálat) esetén az illetéktelenek (nyomozó hatóságok) kinyerhetik a jelszavakat, kulcsokat a gép memóriájából.

A TRESOR az ilyen támadások ellen (is) kínál védelmet.

A TRESOR egy Linux kernelpatch, amely az AES titkosítás egy biztonságos formáját valósítja meg oly módon, hogy az implementáció ellenáll a cold boot támadásoknak és más a fő memóriát célzó támadásoknak. Az elképzelés mögött álló fő gondolat az, hogy a titkos kulcsot nem a RAM-ban, hanem a CPU regisztereiben tárolják, így azok a fent vázolt támadásokkal elérhetetlenek a támadók számára. Az összes számítás a CPU regiszterekben történik, az AES állapot sosem kerül be a RAM-ba.

Ha a TRESOR-t olyan modern, 64 bites CPU-n futtatjuk, amely támogatja a AES-NI-t, nem kell számolnunk teljesítménycsökkenéssel az általános AES implementációhoz képest és az elérhető kulcsméretek 128, 192 és 256 bitesek.

Ha csak régebbi, 32 bites, de legalább SSE2-t támogató processzor áll rendelkezésre, akkor is lehetséges a TRESOR futtatása, de ebben az esetben a teljesítménycsökkenés körülbelül hatszoros a generic AES-hez képest és a kulcsméret sem lehet nagyobb 128 bitnél. Éppen ezért a TRESOR futtatásához Core i5, Core i7 processzorok javasoltak.

A TRESOR patch elérhető jelenleg a 2.6.36-os kernelhez (32 bit, 64 bit) és a 3.0.9-es kernelhez. Letölthető innen.

Referenciák:
TRESOR Runs Encryption Securely Outside RAM
Protect Linux from cold boot attacks with TRESOR
Howto: Tresor unter Ubuntu 11.10 verwenden
Lásd még: Loop-Amnesia

Hozzászólások

Oszt' legkozelebb a CPU-t "hibernaljak" es nezik meg a regisztereit? :)

Van róla szó a dokumentumban. Mivel a CPU debug regisztereit használják a kulcs tárolására, lehetőség van többféle támadási módra. Egyrészt szoftveresre és hardveresre is. A szoftverest igyekeztek kiküszöbölni a kernel patcheléssel, így az unprivileged user nem fér hozzá a regiszterekhez. A root más kérdés. Ha a kernel LKM és KMEM támogatás nélkül van fordítva, akkor elvileg a root sem férhet hozzájuk.

A hardveres támadásnál szóba jöhet támadásként, hogy képzett szakember egy oszcilloszkóppal kiolvassa a működő CPU debug regisztereinek tartalmát. A kutatók ennek a lehetőségét kizárják, mert nem tudnak ilyen sikeres támadásról.

A másik lehetőség, hogy egy boot eszközzel hasonló támadást hajtanak végre a CPU regiszterei ellen, mint a RAM cold boot támadás. A fejlesztők utánanéztek. A rossz hír, hogy ha virtuális gépben végzik a tesztet, akkor kiolvasható reboot után a regiszterek tartalma.

Az általuk fejlesztett Cobra (Cold Boot Register Attack) szoftver a Qemu, Bochs, VMware és VirtualBox alatt ki tudta olvasni a regisztereket, azok reboot-kor nem nullázódtak.

Viszont a jobb hír, hogy valós hardveren a kutatásaik szerint a debug regiszterek mindig nullázódtak reboot-kor.

Részletesen és pontosan a PDF "Security -> Processor Attacks" részében.

--
trey @ gépház

Ez már elég régi stuff...
(Mármint a patch.)

mi van abban az esetben, ha "csak" a home partíció van titkosítva, s hibernálás/suspend esetén lecsatolásra kerül, s indításkor pedig mount...
Vagy lecsatoláskor nem írja felül random adatokkal a kulcsot tartalmazó memóriablokkot?

Igaz ebben az esetben nem a teljes disk kerül titkosításra, de legalább az adatok védettek...

Véleménye valakinek?

Nem neztem bele a kodba. Meglepne ha tenylegesen megsemmisitene a kulcsokat es nem csak free()-t engedne ra. A free() meg nem nyul az adathoz.

Meg 2 dolog:
1. Pont az a poen az emlitett tamadasban, hogy nem kell hozza suspend. Lehutod a RAM-ot a mukodo gepben, kiveszed, kiolvasod, megkeresed a kulcsot.
2. Gondolom az altalad felvazolt szituacioban a kulcsot mindig kezzel adod meg. Mashogy ugyebar nem er semmit a dolog.

Rogton a L2 cache-be, onnan mar csak egy laza mozdulat a L1 cache es/vagy a debug regiszterek. Ahogy bizonyos memoria muveleteket vegzo utasitasokkal megkerulheto az osszes cache a koherencia fentartasanak erdekeben, igy az I/O is megkerulheto ezzel a modszerrel.

---
pontscho / fresh!mindworkz

Egyébként akkora baromságot azért nem mondtál, ugyanis pont a Sandy Bridgetől kezdve az I/O integrációnak köszönhetően van arra lehetőség, hogy pl. PCI-Express 3.0 esetén az eszközök tudnak írni/olvasni CPU cachet és nincs szükség a memóriába másolni az adatokat. ;)

"Nem neztem bele a kodba. Meglepne ha tenylegesen megsemmisitene a kulcsokat es nem csak free()-t engedne ra. A free() meg nem nyul az adathoz."

Mar miert? REgebben nagyon sokat programoztam, es 10+ evvel ezelott is alap volt, hogy passwordot, kulcsot, egyeb sensitive dolgot tartalmazo memoriablokkot fre() elott memset()-tel nullakkal toltunk fel...
Raadasul nem is csak fre() elott, hanem rogton ezutan, hogy hasznaltuk, es mar nem kell.
Tehat pl. login eseten bekered a nevet jelszot, authentikalsz, a jeslzot tartalmazo puffert pedig egybolt utanna torlod, mert az mar nem kell, hisz az auth megtortent.

Nem értem ezt a dolgot.
1. Az alaplap házban van. Annak oldala van. 1 kapcsoló, ha leveszik a ház oldalát akkor szakítja a tápot.
2. Ha szekrénybe szerelt és/vagy beleöntik a a nitrogént, akkor hőkapcsoló 0 Celsiusznál tápot szakít.
3. plusz még teszel bele egy mezei gyújtótrafót kedveskedésnek, hogy hova kötöd már csak fantázia kérdése. Szenes IC nem beszél!

"Nem értem ezt a dolgot."

Tenyleg nem. Odamegyek, es kitepem a falbol az egesz cuccot (no intrusion-switch, no homersekletszenzor, no gyujtotrafo, no, no...), telefujom a szellozon keresztul szarazjeggel, majd olajozott mozdulatokkal leszedem a gep oldalat, kirantom a ramokat, es kiolvasom a kulcsot.
--
"You're NOT paranoid, we really are out to get you!"

Ezekhez modositani kell a gepet. Asztali gepen meg notebookon sem fogod eljatszani, de lehet erzekeny adatod.
A harmas meg tenyleg marha jo otlet... Tenyleg fasza lehet amikor leeg a hazad, mert valaki kinyitotta a gepet. Foleg ha elcsapott a busz es csak a csaladod pakolja el a cuccaidat. Az meg klasszabb ha a szervertermet egeted le egy szerelesi hiba miatt. Talan meg par embert meg is olhetsz vele. Bombat ne rakjon a gepbe? Fel kene noni es nem a TV-bol venni az otleteket.

Felnőttem, mikor először mondták "Jönnön UV-ra".

A hármas tényleg gáz. Nem ég le a házam, mert nem áram alatt rámolja ki a gyászoló család a gépemet, hanem tiszteletteljesen bepötyögik, "init 0" :)

A TV-ből egy csomó jó ötletet szerezhetsz: katódsugárcső, nagyfreki, infravörös, soros és párhuzamos kapcsolások, forrasztási ismeretek.
A TV műsorból már kevesebbet. :)

Nem mindegy fókabél vagy főkábel, az ékezet luxuscikk?

"az ékezet luxuscikk?"
Tipikus HUP fogas. Ha mar nem tudsz mibe belekotni, akkor az ekezet miatt rinyalsz. Egyebkent igen az, mert 3 szamitogepem van es csak egyhez van magyar billentyuzetem. Kulfoldon elek es sokkal tobbet gepelek angol szoveget mint magyart. Raadasul a magyar kiosztasu gepem is csak arra jo, hogy megzavar barki mast aki hasznalna. Igen, van amikor masnak is at kell engednem a gepet. Nem, nem akarok ket kiosztas kozott valtogatni, mert nagyon kenyelmetlen, konnyu osszezavarodni es amugy sem mukodik rendesen a dolog.

"Nem ég le a házam, mert nem áram alatt rámolja ki a gyászoló család a gépemet, hanem tiszteletteljesen bepötyögik, "init 0" "
Szoval a titkositas fontos, de jelszo nem kell a gephez. :) Meg mindig ott van az, hogy szenzor hiba es leeg a haz.

Amugy a TV szonak ket jelentese van: a tv keszulek es a tv musor. Szovegkornyezetbol kiderul, illetve gyakran amugy sem kette valaszthato a ketto.

Köszönöm hogy részletesen kifejtetted azt a tényt, hogy mennyire empatikus vagy másokkal a billentyűzet használat terén. Felsoroltad, milyen engedményeket nem teszel mások iránt. Sorozatosan, már már mániákusan emlegetted a "tűz", "busz", "elüt", "leég" szavakat.
Azomban jó érzés ragadt el, amikor az olvasás közben megfogalmazódott kérdéseimre maradéktalan, szinte már a gondolat sebességét túlszárnyaló tempóval válaszoltál. Erre bármelyik, jóérzésű pszichoanalitikus is elismerően bólintana, majd egy határozott de kitörölhetetlen jelzést tenne jegyzetfüzetének azon rubrikájába, ami mellé azt nyomtatták "Súlyosan pirotomán, tudathasadásos típus.".

Részemről a konzíliumot befejezettnek tekintem.

U.I. A televízió szónak köznyelvi értelemben három jelentése van.

:) <- Ez egy szmájli!

"Nem mindegy fókabél vagy főkábel, az ékezet luxuscikk?"
"Jönnön UV-ra"

Talan elobb a sajat haz elott tessen sepregetni. Azt mar meg sem merem emliteni, hogy a gepeden a vesszo nagyon ritkan mukodik.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Szerintem egyaltalan nincs olyan szo, hogy jönnön :-) Illetve lehet, hogy van, csak nem magyarul.

Ami miatt irtam: nagyon sokan kulfoldrol irnak az oldalra, ezek kozul a legtobben munkahelyrol, ahol nem biztos, hogy van mod es lehetoseg US Intl. vagy epp magyar kiosztast felrakni (nehany oprendszer alatt ehhez kulon jog kell). Masok programoznak, ami hatekonyabb angol kiosztason, mint magyaron, es nem szivesen valtogatnak csak azert, mert n < 10 embernek nem tetszik, hogy ekezet nelkul irogatnak (ezek koze tartozok en is). Ha el tudod olvasni, akkor nincs gond, ha meg nem tetszik, ugord at. Kb. egy het utan mar lehet tudni, kik azok, akik eleve ekezet nelkul irnak.

De ez mar tobbszor volt tema is itt, keress vissza az archivumban.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

1) Egy kisulő kondenzátor megsemmisítheti a memóriát a táp lekötése után egy órával is. Elég a szekrény kapcsolójára kötni és az alaplap megfelelő pontjára. Ezzel elszáll az alaplap is és nem tudják a te gépeden kiolvasni, csak saját olvasóval. Mellesleg ezzel a megoldással tönkreteheted a hdd elektronikáját is bónuszként, amivel okozol az illetékteleneknek egy kis plusz munkát.
2) A memóriát nehezen hozzáférhetővé teszed, hogy ne tudják gyorsan kivenni. Ha a védő burok elég erős és elég sok (több féle fejű) csavar tartja, az elvesz egy kis időt.
3) Hőszigetelés: Vizhűtésű rendszerrel könnyen megoldható, hogy a memórákat elszigeteled, hogy ne lehessen gyorsan lefagyasztani őket.
A három együtt eléggé megnehezíti az adatok kinyerését ilyen úton. Az más kérdés, hogy milyen gyakran kell majd új HW-t venned ahányszor elfelejted kisütni a kondenzátort. :-D

Ez bizonyos országokban (USA) nem biztos jogy előnyös, mégpedig jogi szempontból. Ha kódolva van egy adat, és csak az általad tudott kóddal lehet feltörni, akkor nem vagy köteles a kódot megmondani, ha ezzel magadra tennél terhelő vallomást, amúgy meg a nagy stressz hatására "elfelejtetted" és kész. Lehet, hogy az eredeti bűncselekmény ügyében vádat se emelnek.

Ha viszont ilyen eszközöket építesz bele, akkor akadályoztad a nyomozást, bizonyítékot semmisítesz meg, a hármas ponttal pedig terrorista is lehetsz.

A gépet meg áram alatt is el lehet vinni a laborba, van rá eszközük.

A passzív megoldások (ld lentebb, a 10 féle csavarral és különböző anyagokkal elbarikádozott, az alaplapra ráragasztott memória) célravezetőbbek, manapság amúgy sem drága a memória, előre bele lehet építeni annyit amennyi kelleni fog.

Nem is olyan regen volt itthon botrany mar csak abbol is, h titkosszolgalat altal lefoglaltatott eszkozrol azt hittek, h meg akarja magat semmisiteni. Teljesen fel voltak haborodva, h ezt igy hogy es ezert felelos egyedek meg fognak bunhodni. Aztan kiderult, h szokas szerint idiotak voltak. :)

---
pontscho / fresh!mindworkz

Alig varom, hogy jojjon a marketing, hogy az x86 azert biztonsagos, mert benak a kulso debug lehetosegei, pedig vanak JTAG labai.

Amit nem lehet megirni assemblyben, azt nem lehet megirni.