TRESOR: šifrujte bezpečně mimo RAM

Petr Krčmář 21. 6. 2011

Běžné implementace šifrovacích algoritmů spoléhají na ukládání šifrovacích klíčů i algoritmů v paměti RAM. To je sice standardní způsob, má ale svá úskalí a bezpečnostní nedostatky. Šifrovací klíče je možné z paměti několika způsoby dostat, a pak máme velký bezpečnostní problém. TRESOR na to jde jinak.

V paměti není bezpečno

Šifrovací algoritmy dnešních operačních systémů jsou léty prověřené a můžeme je směle považovat za bezpečné. I ony ale mají svou slabinu – udržují šifrovací klíče v paměti RAM. V minulosti už bylo předvedeno několik technik, které umožňují klíče z paměti násilím dostat.

Nejznámější je takzvaný cold boot attack, při kterém je běžící počítač restartován a z externího média je načten miniaturní operační systém, který uloží obsah paměti. Jelikož se obvykle paměť při tvrdém resetu nemaže, můžeme se takto jednoduše ke klíčům dostat. Ještě jistější varianta tohoto útoku spočívá v podchlazení paměťových modulů a jejich přenesení do jiného počítače i s daty.

Druhou zajímavou možnost nabízejí FireWire porty, které mají mnoho let známou zranitelnost – pomocí přímého přístupu do paměti (DMA) obcházejí jakoukoliv hardwarovou bezpečnostní politiku a dovolují útočníkovi libovolně načítat i modifikovat obsah paměti. Existují hotová řešení v podobě „FireWire flash disků s tlačítkem“, které stačí do počítače zasunout a ony se postarají o rychlé stažení obsahu paměti.

Tyto (a další) útoky vyžadují fyzický přístup k počítači, ale stejně tak je možné skrze bezpečnostní díru v systému získat práva roota a opět si klíče několika způsoby z paměti přečíst. Tyto útoky demonstrují, že šifrovací klíče v paměti RAM nejsou uchovány zcela bezpečně. To si uvědomili pánové z univerzity v německém Erlangenu a připravili implementaci AES, která v paměti RAM neuchovává vůbec nic.

Zamkneme klíče v trezoru

Výsledkem je TRESOR – patch do linuxového jádra, který využívá rozšířené instrukční sady AES-NI. Tu výrobci (Intel i AMD) dávají do svých nejnovějších 64bitových procesorů. Intel do Core i5 a i7, AMD do procesorů řady Bulldozer. Primárním cílem této technologie je hardwarová akcelerace AES šifrování. Zároveň ale umožňuje zcela zrušit tradiční softwarové šifrování v paměti RAM.

Na místo toho jsou všechny kritické informace uloženy přímo v ladících registrech procesoru. Ty jsou netradičně využity jako datové úložiště, které je schopno pojmout klíče o délce 128, 192 i plných 256 bitů. Díky hardwarové podpoře nedochází k žádnému úbytku výkonu proti jiným implementacím udržujícím klíče v RAM.

TRESOR je možné využít i na procesorech, které nedisponují AES-NI instrukcemi. Postačí, že podporují instrukční sadu SSE2, která je v procesorech už téměř deset let. V takovém případě se ale budete muset smířit jen se 128bitovým AES a připravit se na výrazný pokles výkonu – až na šestinu původní „softwarové“ hodnoty.

TRESOR pak provádí veškeré šifrování a všechny datové struktury, klíče, ale i samotný AES algoritmus uchovává přímo (a pouze) v procesoru. Jak už jsme si řekli, software je implementován jako patch do jádra. V uživatelském prostoru by nemohl běžet ze dvou důvodů: jednak je zde riziko, že by se při přepnutí kontextu objevil obsah registrů v RAM a především je třeba zajistit, aby se běžné procesy k citlivým registrům nedostaly ani přímo. Jakákoliv aplikace by si pak mohla klíče přečíst. Proto k nim může jen jádro.

Samozřejmě klíče musí být na začátku nějak získány, než jsou přeneseny do chráněných registrů v procesoru. K tomu je samozřejmě použita paměť RAM, ale jen na kratičký okamžik. Vše navíc proběhne v kernel space odděleně od aplikací. Pak jsou klíče z paměti odstraněny, takže při běžném provozu už není možné se k nim dostat.

Použití v praxi

TRESOR je dodáván jako patch proti jádru 2.6.36. To bylo v době jeho vzniku nejnovější a zatím není k dispozici verze pro novější jádra. TRESOR je integrován do jaderného Crypto API a umožňuje tak bezproblémové využití v různých aplikacích, které toto API používají. Pokud například šifrujete disk pomocí dm-crypt, můžete výhod TRESORu využít. Naopak třeba populární TrueCrypt Crypto API nevyužívá.

V rámci jádra je možné zavádět jednotlivé šifrovací algoritmy jako samostatné moduly. Tvůrci TRESORu se rozhodli nechat klasický AES modul být a zavedli zcela nový šifrovací modul. Obě implementace AES je tak možné mít v jádře najednou a třeba porovnávat jejich výkony.

Pokud si chcete TRESOR vyzkoušet, stáhněte si z jeho domovské stránky příslušný patch. K dispozici jsou dvě verze – pro procesory s podporou AES-NI a bez ní. Oba mají okolo 40 KB. Kromě tohoto patche budete potřebovat také zdrojové kódy jádra 2.6.36, které získáte třeba na Kernel.org. Poté jádro rozbalte (standardně do /usr/src/linux-2.6.36 a aplikujte patch:

# patch --directory /usr/src/linux-2.6.36 -p1 < tresor-patch-2.6.36

Poté proveďte konfiguraci a překlad jádra. Nezapomeňte v sekci Cryptographic API povolit AES algoritmus TRESOR. Poté jádro nainstalujte do systému a restartujte do něj.

Systém se vás při startu zeptá na heslo. To je použito k vygenerování klíčů a jejich následnému uložení do registrů procesoru. Pokud navíc počítač uspíte, klíče budou automaticky zahozeny a během probuzení se vás jádro (respektive TRESOR) zeptá na heslo znovu. Jeho správnost (aby se nerozbily připojené disky vlivem změny klíčů) je kontrolována pomocí hashe, který je uložen normálně v RAM.

Po startu systému už můžete rovnou vytvořit šifrovaný oddíl a použít jej. Například takto:

# cryptsetup create tresor /dev/sdb1 --cipher tresor --key-size 256
# mkfs.ext3 /dev/mapper/tr
# mount /dev/mapper/tr /mnt/bezpecno

Data na novém disku jsou automaticky transparentně šifrována pomocí TRESORu.

Je to opravdu bezpečné?

Zásadní je pro nás otázka, zda se skutečně jedná o stoprocentně bezpečnou technologii. Z hlediska zmíněných i nezmíněných útoků na paměť RAM je to ochrana absolutní. Z paměti jednoduše nezjistíte nic. Nabízí se ale otázka, zda není možné podobným (nebo jiným) způsobem zaútočit na obsah registrů v procesoru.

Existují dva teoretické způsoby, jak se pokusit údaje vydolovat. Běžný uživatel se k nim nedostane, ale pokud by útočník získal práva roota, mohl by zavést vlastní jaderný modul, který by byl schopen data získat. Stejně tak by bylo možné využít /dev/kmem a propašovat do jaderného prostoru svůj vlastní kód. Tato hrozba je naprosto reálná.

Existuje ale řešení – pokud byste připravili vlastní jádro bez podpory LKM a KMEM, ani root by pak neměl možnost klíče z procesoru dostat nebo je vyměnit. Klíč by pak byl nastavitelný jen při startu počítače a už by nebylo možné na něj bez restartu sahat.

Samozřejmě ještě existuje teoretická možnost útoku na hardware samotný. Mohla by se objevit metoda čtení registrů z elektromagne­tického pole počítače nebo třeba proměřováním signálů na základní desce. Zatím ale nic konkrétního k dispozici není, i když není možné vyloučit, že časem někdo zajímavý a účinný útok nevymyslí.

widgety

Zatím jako ukázka

TRESOR je zatím jen takový proof of concept a ukazuje, že je možné se na běžnou problematiku podívat ze zcela jiného úhlu. Faktem je, že je to ukázka plně funkční a využitelná. V praxi vám pravděpodobně bude vadit především závislost na jediné verzi linuxového jádra a nedostatečná prověřenost této technologie včetně možných bezpečnostních problémů.

Že to není myšlenka nezajímavá, dokazuje fakt, že se o ni zdaleka nezajímají jen autoři TRESORu, ale existují i konkurenční implementace, jako například Loop-Amnesia. Třeba se ale jednoho dne dočkáme integrace něčeho podobného přímo do jádra.

Našli jste v článku chybu?
DigiZone.cz: RRTV: frekvence pro Country Radio

RRTV: frekvence pro Country Radio

Podnikatel.cz: I vám můžou vykrást značku. Braňte se

I vám můžou vykrást značku. Braňte se

Podnikatel.cz: Babišovi se nedá věřit, stěžovali si hospodští

Babišovi se nedá věřit, stěžovali si hospodští

Lupa.cz: Jak udělat formulář, aby ho vyplnil i negramotný?

Jak udělat formulář, aby ho vyplnil i negramotný?

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují

Vitalia.cz: Nová vakcína proti chřipce se aplikuje nosem

Nová vakcína proti chřipce se aplikuje nosem

DigiZone.cz: Regionální tele­vize CZ vysílá "Mapu úspěchu"

Regionální tele­vize CZ vysílá "Mapu úspěchu"

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Root.cz: Podívejte se na shořelé Samsung Note 7

Podívejte se na shořelé Samsung Note 7

Vitalia.cz: Běháte a nehubnete? 6 častých chyb

Běháte a nehubnete? 6 častých chyb

Lupa.cz: Odkazy na pirátský obsah mohou být nelegální

Odkazy na pirátský obsah mohou být nelegální

Podnikatel.cz: ČSSZ posílá přehled o důchodovém kontě

ČSSZ posílá přehled o důchodovém kontě