Portál AbcLinuxu, 18. května 2024 23:53

Suspend to RAM, šifrovaný disk a coldboot útok

18.1.2012 01:24 | Přečteno: 2611× | Linux | Výběrový blog | poslední úprava: 18.1.2012 01:28

Jako správný paranoik mám (až na /boot) šifrovaný celý disk - a taky rád používám suspend to RAM. Tady už místní paranoici asi čuchají problém - uspaný počítač je totiž snad to nejlepší, co si útočník plánující coldboot útok může přát. cryptsetup má už delší dobu funkci "luksSuspend", která klíče zahodí. Z pochopitelných důvodů to nejde jednoduše použít na připojený root. I když... Po pár hodinách hraní můžu prohlásit obligátní "jde to, ale dře to!".

Co budeme potřebovat

Jak to funguje

Z tarballu nám vypadne jeden prográmek v C, dva shell skripty a jeden patch. Celé představení se spouští skriptem "cryptsleep", ve kterém je zároveň i pár konfiguračních voleb (já vím, /etc...):

Pokud se vám nechce číst zdroják - tenhle skript vytvoří mountpoint, připojí do něj ramfs, nakopíruje cryptsleep-bin a cryptsleep-script, o kterých ještě bude řeč, spustí cryptsleep-bin a uklidí po sobě. Já vím, mohl jsem to napsat v C všechno, ale nebyla chuť :)

cryptsleep-bin je bastl v C, který: změní terminál na vybraný, přesune /proc, /sys a /dev do ramfs, chrootne do ramfs, v chrootu spustí cryptsleep-script a přesune filesystémy zase zpátky.

cryptsleep-script zavolá luksSuspend, uspí systém do RAM, po probuzení si řekne o heslo a zavolá luksResume. V tomhle skriptu je potřeba upravit název pod kterým máme v device mapperu root!

Jak to rozchodit?

Instalace by měla být jednoduchá - upravit cryptsleep-script a cryptsleep, zkompilovat cryptsleep-bin: gcc cryptsleep.c -o cryptsleep-bin, opatchovat a zkompilovat jádro. cryptsleep-script a cryptsleep-bin nakopírovat do $LIBDIR.

Proč je potřeba patchovat?

Ve chvíli kdy zavoláme luksSuspend dojde ke smazání šifrovacích klíčů k disku a jakákoliv disková operace se zablokuje. Co se stane s jádrem které chytře zavolá před uspáním sync() je asi jasné. Pro jistotu se sync() volá i těsně před spuštěním skriptu z cryptsetup-bin. Druhý problém je v tom, že jakmile se zavolá luksSuspend začnou všechny procesy sahající na disk tuhnout ve stavu "Disk wait". A kernel před suspendem volá freeze na jednotlivé procesy - a pokud některý čeká na IO je zle. Moc jsem nevěděl co s tím, zkusil jsem mrazák vyhodit a překvapivě to funguje (to neznamená, že vám to fungovat bude taky!). Jestli to budete chtít taky zkusit, hodně štěstí!

TODO

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (3) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

18.1.2012 12:18 Divný host
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Odpovědět | Sbalit | Link | Blokovat | Admin
Dobrá práce! Škoda že je asi nereálné dostat podporu této funkce do běžných distribucí ...
Josef Kufner avatar 18.1.2012 17:58 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Tohle by chtělo dostat rovnou do jádra, aby se userspace vůbec nepoužíval, protože jedině tak odpadne problém s mrazákem.
Hello world ! Segmentation fault (core dumped)
18.1.2012 23:11 Divný host
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Pokud to dobře chápu, tak v jádře vše potřebné je (modulo problém se syncem). Je jen potřeba od uživatele po probuzení získat znova heslo, což už je záležitost userspace.
Josef Kufner avatar 19.1.2012 00:06 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
To právě že moc nejde, protože userspace je tou dobou zamrzlý. Prostě je potřeba do jádra dostat uživatelské rozhraní, které po zmražení userspace vypláchne klíče a po probuzení se zeptá na heslo a nebo umožní opětovné uspání, pokud by uživatel nechtěl/nemohl zadat heslo. Dávat tohle do userspace bude celkem zbytečná a nemalá komplikace.
Hello world ! Segmentation fault (core dumped)
19.1.2012 01:27 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
No, ale tyhle věci zas do kernelspace nepatří a patřit nebudou :) Uživatelské rozhraní do jádra? To fakt ne...
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
Josef Kufner avatar 19.1.2012 09:35 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Já vím, ale tou dobou prostě userspace není.
Hello world ! Segmentation fault (core dumped)
31.1.2012 10:11 VM
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Není jen disk I/O. Takže rozhraní by se mělo načíst celé do paměti na začátku uspávání, a to včetně případných knihoven, a mělo by se zajistit proti odswapování. Jít by to ale mělo.
31.1.2012 20:42 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
zajistit proti odswapování

Na to by měl stačit mlock(2). Jen nevím, jestli vztahuje i na stránky mapované ze souboru.

22.1.2012 23:10 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok

Suspend nepoužívám, takže ani moc neznám, ale pokud vím, tak jádro normální boot a resume rozlišuje pomocí signatury ve swapu. Nedalo by se prvně nabootovat jen do initarmfs, tam se zeptat na heslo a pak přes kexec předat heslo třeba přes /proc/cmdline novému jádru s podporou uspávání? (Nebo složitěji přes reservovanou fyzickou paměť, protože u kexecu do paměti BIOS nešahá.)

Ale i myšlenka plně jaderné implementace není špatná. Jaderná správa klíčů umí klíče zašifrovat a zase odšifrovat a interaktivní jádro už stejně je (vga=ask).

Každopádně jsem viděl, že Fedora má resume do šifrovaného rootfs nějak vyřešený. Aspoň se to tak tváří.

Josef Kufner avatar 23.1.2012 03:02 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Řeč je o uspávání do paměti, nikoliv na disk. Při uspání na disk se klíče zahazovat nemusí, protože swap do kterého se uspává je na šifrovaném disku. Po zavedení jádra z nešifrovaného /boot se to normálně zeptá na heslo k disku (LVM s / a swapem) a pak teprve kouká do swapu jestli se lze probudit. Takle to má defaultně Debian.

Uspání do paměti je úplně o něčem jiném: Nic se znovu nenačítá, žádné bootování. Prostě se jen vypne procesor a ty blbosti okolo. Zůstane naživu jen RAM s jejím řadičem a tlačítko na zapnutí. (Zjednodušeně řečeno.) Tím pádem stačí vzít paměť, stříknout dusík, přendat do jiného počítače a zkopírovat si ji. Velmi jednoduše se tak dostane kdokoliv dostatečně šikovný ke všemu, co zrovna běží, včetně klíčů od disku.
Hello world ! Segmentation fault (core dumped)
23.1.2012 12:03 Lol Phirae | skóre: 23
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Tím pádem stačí vzít paměť, stříknout dusík, přendat do jiného počítače a zkopírovat si ji. Velmi jednoduše se tak dostane kdokoliv dostatečně šikovný ke všemu, co zrovna běží, včetně klíčů od disku.
Opravdu bych chtěl vidět tu jednoduchou demonstraci... Kdy na to máte po neděli čas? Počítám max. s půlhodinkou, je to přece velmi jednoduché. :-D
23.1.2012 23:32 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
18.1.2012 14:30 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Odpovědět | Sbalit | Link | Blokovat | Admin
ten nesifrovany /boot mas na nejaky flashce kterou nosis porad sebou, nebo ho nechavas nehlidany?
18.1.2012 14:36 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Bootuju z flashky, ale /boot je na disku taky, samozřejmě nešifrovaný (jako fallback řešení). Nutno dodat, že mám v init skriptech kontrolu SHA hashe MBR a celého /boot :)
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
Max avatar 18.1.2012 23:18 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Díky za hint, to bych si mohl také zavést :)
Zdar Max
Měl jsem sen ... :(
19.1.2012 00:02 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
nejaky takovy test bych si mel taky vytvorit. Jenom doresit nektery detaily...

Napada me to udelat treba takhle:

- na HDD mit plne funkcni /boot, ale bez tehle testu, ktery by slouzil jako fallback a zaroven jako honeypot

- na flashdisku mit stejny boot ale navic s kontrolou dat na HDD

Pokud utocnik modifikuje boot na hdd tak pri bootu z flash na to prijdu a vim ze mam problem... Flashce bohuzel musim verit protoze kdyby ju modifikoval tak muze tyhle testy vypnout, pripadne zmenit aby zobrazili co chci videt...

Mit ten test i v bootu na hdd by asi bylo zbytecny, protoze pokud ma utocnik pristup k hdd tak muze upravit i test a navic by to zbytecne poutalo pozornost.

Nezapomel jsem na nejaky detail?

Jeste me ted napada ze utocnik s fyzickym pristupem by mohl nastavit bios aby bootoval z hdd s upravenym bootem, misto z usb. Nejaky napady jak tohle resit, krome kontroly biosu pri kazdym spusteni?
Josef Kufner avatar 19.1.2012 00:12 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Říká se tomu Trusted Computing. Ty lepší notebooky mají v sobě čip, který tohle řeší místo tvé flashky.
Hello world ! Segmentation fault (core dumped)
19.1.2012 00:53 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
no teda, studoval jsem to jenom na rychlo ale z toho co jsem se docetl to vypada jako root of all evil :-(
19.1.2012 06:04 Sten
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Trusted Computing je dvousečná zbraň. Současná „polovičatá“ implementace je velmi dobrá věc, právě protože umožňuje tyhle ochrany. V původním konceptu ale měl ten čip umožnit spouštět jenom zavaděč podepsaný klíčem, který uživatel nebude mít k dispozici, což asi budou ty informace, na které jste narazil (dnešní implementace místo toho používá heslo nebo jinou identifikaci zadanou uživatelem v nastavení BIOSu) — to naštěstí neprošlo, tak se to teď snaží MS dohnat s UEFI Secure Boot.
19.1.2012 01:25 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Tak tu integritu netestuje přímo skript v /boot (v initramfs) - to by tak trochu postrádalo smysl. Tu integritu testuju po připojení šifrovaného rootu z něj. Jasně pokud nabootuju z HDD, útočník může patchnout jádro tak, aby se /boot tvářil jako nezměněný. Ale bez znalosti toho co přesně a jak kontroluji to nebude nic moc.

Navíc, pokud útočník získá fyzický přístup k HW, záleží jen na schopnostech útočníka jestli se tam dostane nebo ne. Může patchnout BIOS, může tam dát HW keylogger, může napíchnout sběrnici...
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
19.1.2012 17:20 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
a co tahle situace: utocnik si zkopiruje tvuh hdd (zasifrovany) a upravi boot aby mu po zadani hesla to heslo posal. Ty zadas heslo, system nastartuje a detekuje ze se neco zmenilo. Utocnik ale uz ma data i heslo...

Kazdopadne je pravda ze s fyzickym pristupem muze udelat i dalsi veci, ktery by nebylo tak snadny detekovat.

Navic kdyz rozsifruje root tak by se jeste nemel dostat k uzitecnym datum, pokud je mas na dalsim oddilu s jinym heslem.
19.1.2012 17:26 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
a co tahle situace: utocnik si zkopiruje tvuh hdd (zasifrovany) a upravi boot aby mu po zadani hesla to heslo posal. Ty zadas heslo, system nastartuje a detekuje ze se neco zmenilo. Utocnik ale uz ma data i heslo...
Data má, heslo nemá, síť se spouští (a kabel připojuji/vypínám RF kill) až po kontrole :)
Kazdopadne je pravda ze s fyzickym pristupem muze udelat i dalsi veci, ktery by nebylo tak snadny detekovat.
Jo. Nehlídaný fyzický přístup = konečná. Ono teda vzato do důsledků, člověk by neměl věřit ani prodejci, že od něj dostává čistý HW. Na nějakou práci s extra citlivými daty bych si pořídil asi RapsberryPi, BeagleBoard, Pandaboard, kde člověk může zkontrolovat každý čip (ale zase, ten čip může být napíchnutý aby ukládal hesla/poskytnul backdoor atd. už z výroby). Akorát tam pořád jsou nějaké closed source části.
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
20.1.2012 16:26 piCZa
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Odpovědět | Sbalit | Link | Blokovat | Admin
Jesteze neni realne dostat takovou podporu do beznych distribuci. Vse totiz resi pocitac pod zamkem, bez site a s odepsanym bootem. :-)
20.1.2012 16:33 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Tak ono když člověk potřebuje něco dělat online, tak bez sítě není řešení. Když potřebuje cestovat, pod zámkem není řešení.
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
23.1.2012 11:59 Lol Phirae | skóre: 23
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Odpovědět | Sbalit | Link | Blokovat | Admin
Asi mi něco uniklo nebo jsem nedostatečně paranoidní, ale proboha proč tak příšerně složitě?! Tohle funguje na první našlápnutí: Setting up an encrypted Debian system. Tím myslím konkrétně tu metodu s použitím /lib/cryptsetup/scripts/decrypt_derived jako keyscript pro šifrovaný swap. Při zapnutí po hibernaci se to zeptá na heslo pro šifrovaný root a je vyřízeno.
msk avatar 23.1.2012 12:08 msk | skóre: 27 | blog: msk
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
A zahodi to pri suspend-e kluce z pamati?
23.1.2012 15:43 Lol Phirae | skóre: 23
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Ne, ptá se to při resume na ten klíč jen tak z plezíru... :-D
msk avatar 23.1.2012 15:56 msk | skóre: 27 | blog: msk
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Pri resume z RAM? Prevadzkoval som Debian nad sifrovanym LVM, ale suspendoval som len na disk, takze si nie som isty ...
23.1.2012 16:40 Lol Phirae | skóre: 23
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Z RAM samozřejmě ne, proč by to asi tak dělal? Proboha lidi, jestli se 25 hodin denně pohybujete v prostředí nepřátelských agentů, tak nenechávejte zapnutý počítač, když u něj nejste. (Ano, STR je zapnutý počítač, u notebooku to během pár dnů komplet vyžere baterku.)
23.1.2012 17:46 SPM | skóre: 28
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Protože celý blog byl o tom jak to udělat při suspendu do RAM? A protože tu i padlo, že suspend na disk je prakticky už skoro k ničemu :)
23.1.2012 18:06 Lol Phirae | skóre: 23
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Jo tak, k ničemu. No tak nic. To by mě zajímalo, kolik z těch paranoidních šílenců tady má třeba povolený FireWire (přes který jde u spousty HW dumpnout komplet celá RAM.) Při suspendu do RAM to kromě v článku zmíněné příšernosti (která dřív nebo později skončí likvidací filesystému) nejde, protože to je padlé na hlavu. A co tak šíleně tajného máte na /, že vám nestačí při suspendu zlikvidovat klíč k /home.

23.1.2012 18:18 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
pri sifrovani / nejde o to aby utocnik nevidel obsah, ale aby ho nemohl nepozorovane zmenit.
23.1.2012 18:34 Lol Phirae | skóre: 23
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Jistě, bude ho nepozorovaně měnit tím, že nepozorovaně ponoří RAMky do tekutého dusíku, zatímco majitel počítače se šel vychcat. Protože to je rozhodně nejjednodušší možnost, jak to udělat - nějaké bugy, kdo by se s tím zabýval. Prostě vezmu konev od mléka plnou tekutého dusíku a o polední pauze tam kolegovi nenápadně podstrčím backdoor. :-D
23.1.2012 19:38 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
konecne se u tebe zacina projevovat ten spravnej frame of mind. Jeste chvili a budes paranoik jako my... :-D
23.1.2012 22:43 Lol Phirae | skóre: 23
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
No jistě, přece jsem ten dual boot W7 šifrovanejch BitLockerem s Linuxem (kryptovanej / s btrfs na LUKS) nedělal zbytečně. :-) :-D
23.1.2012 19:37 SPM | skóre: 28
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Tak uspání je delší, než počítač vypnout, probouzení bude asi tak nastejno; u mě navíc část systému zůstala ve swapu, takže několik prvních minut byl systém strašně líný... oproti suspendu do RAM, kde uspávám/probouzím v řádu jednotek sekund. Jinak je otázka, na kolik to při šifrování jenom /home bude lepší - pokud se neodpojí, tak stejnak bude problém s tím, že je třeba zahodit klíč až po freeznutí procesů a podobně... ale já až takový šílenec nejsem; hdd mám šifrovaný kvůli tomu, když mi nějaký sběrač kovů ten notebook ukradne, tak aby se nedostal k datům v něm. Nepředpokládám, že by heslo v screensaveru řešil jinak, než že to vypne.
25.1.2012 01:02 adam
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Odpovědět | Sbalit | Link | Blokovat | Admin
kup si ssd a na suspend2ram sa mozes z vysoka vysrat...
25.1.2012 08:13 SPM | skóre: 28
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Jo, takže SSD zajistí po zapnutí funkční systém v řádu sekund, kde najdu spuštěné a rozmístěné aplikace přesně tak jak byly? :)
msk avatar 25.1.2012 10:34 msk | skóre: 27 | blog: msk
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Ked to suspendnes na disk ... Ale nebude to do par sekund, skor desiatok. Co je furt v porovnani s mojim pracovnym pc ( 10 min po zapnuti nepouzitelne ) parada :-)
25.1.2012 11:14 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
pouzivat SSD jako swap, to myslim vzhedem k omezenymu poctu zapisu neni nejlepsi napad...
msk avatar 25.1.2012 12:26 msk | skóre: 27 | blog: msk
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Vzdy je mozne spravit swapon pred uspatim a swapoff po uspati. Mne je to ale jedno, ja PC prakticky neuspavam, zaprve som to este nevidel fungovat a zadruhe ked odchadzam od pc na dlhsiu dobu vypinam komplet zostavu, monitory a vsetko okolo na prepatovke.
25.1.2012 13:06 SPM | skóre: 28
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
To je otázka... SSD imho vede v tom, když ty data čtu z různejch oblastí - narozdíl od disku nemusí přenastavovat hlavu a podobně... ale ve chvíli kdy na disk chci v kuse nalít 16GB dat, tak to IMHO rychlostně o tolik lepší nebude (a stejně to bude trvat strašně dlouho)
6.4.2015 15:43 Pali
Rozbalit Rozbalit vše Re: Suspend to RAM, šifrovaný disk a coldboot útok
Odpovědět | Sbalit | Link | Blokovat | Admin
Problem s freeze_processes, luksSuspend a sync sa snazim teraz chytit za tu spravnu stranu... Konkretne zavolat luksSuspend az po freeze_processes a to naviac automaticky z kernelu (kedze v case po freeze_processes uz userspace nebezi).

Patche co to implementuju som uz poslal na LKML: https://lkml.org/lkml/2015/4/5/120

Spomenul som si na tento blogovy zapis, je sice starsi ale snad sa to niekomu bude hodit...

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.