Správa linuxového serveru: Šifrování s dm-crypt/LUKS
Pomocí dm-crypt/LUKS lze šifrovat jakékoliv blokové zařízení, tzn. diskový oddíl, celý pevný disk, diskové pole (RAID), logický svazek v rámci LVM, atd.
Připomínám, že i když se to na první pohled možná nezdá, šifrování jako takové nelze považovat za spolehlivý nástroj pro zajištění bezpečnosti dat před případným útočníkem s fyzickým přístupem k serveru. Nemůže tedy nahradit strážného, který hlídá přístup do serverovny. Důvody jsem popsal již dříve. Může nicméně pomoci ochránit data při likvidaci nebo reklamaci pevných disků, může pomoci zabránit úniku SSH klíčů nebo jiných citlivých údajů ze zcizených laptopů administrátorů, apod.
Jelikož se v současné době začínají masivně rozrůstat možnosti virtualizace, je nutné uvažovat o bezpečnosti takových řešení, a naprosté zbytečnosti šifrování jako ochrany před poskytovatelem virtuálního serveru, jelikož šifrovací klíče jsou uloženy v paměti, a do paměti má obvykle správce virtuálního serveru přístup.
Budete-li tedy uvažovat o nasazení šifrování, uvažte pečlivě, jaká data chcete chránit a před kým. Následně zauvažujte, zda-li má šifrování v daném scénáři smysl, a pokud ano, tak jak velký. Jelikož má šifrování negativní dopad na výkon i na případnou záchranu dat z poškozeného pole nebo disku, je třeba pečlivě zvážit, zda-li šifrování nasadíte a kam.
Aby mělo použití šifrování smysl, je třeba zajistit, aby na discích nezůstalo nic z chráněných dat v nešifrované podobě. Proto je každopádně třeba začít se šifrováním swapu. Dále je třeba kromě samotných úložišť citlivých dat zabezpečit i všechna místa, kam by se data mohla dostat. Typicky je to adresář /tmp
, pro který bývá dobré využívat buď tmpfs
nebo samostatný šifrovaný oddíl. V některých specifických případech to může být kromě obvyklého /home
i adresář /var
, /srv
či jiné umístění.
Šifrovat lze samozřejmě jak selektivně (tj. jen to důležité), tak téměř úplně všechno včetně celého systému s výjimkou zavaděče, obrazu jádra a initrd. V prvním případě je nutné dát si pozor na "prosakování" chráněných dat mimo šifrované svazky, ve druhém případě obvykle vznikne problém se zaváděním systému, během kterého bude třeba nějakým způsobem zadat heslo, což třeba u serveru, který je umístěn v nějakém datacentru, a ke kterému přistupujete vzdáleně, působí jistý problém. Ten je možné řešit pomocí malého ssh démona v initrd (třeba dropbear), který se spustí a umožní správci přihlásit se a zadat heslo vzdáleně.
Návod pro toto řešení v rámci distribuce Debian naleznete v článku na debian-administration.org.
Před samotným nasazením šifrování je třeba připomenout problematiku šifrovacích algoritmů a šifrovacích módů. V zásadě, šifrovací algoritmus byste měli vybírat nejlépe z finalistů AES. Starším šifrám jako DES či Blowfish se doporučuji vyhnout. Se samotným výběrem vám neporadím, jen podotknu, že nejrychlejší implementací je samotný AES/Rijndael, v závěsu za ním pak Serpent a Twofish. Jejich bezpečnost by měla být velmi podobná.
Pro diskové šifrování je klíčový výběr vhodného šifrovacího módu. Je totiž nutné šifrovat ohromné kvantum dat, která mají ovšem předvídatelnou strukturu (souborový systém, superblok, atd.), což může případnému útočníkovi usnadnit kryptoanalýzu, i když je samotný šifrovací algoritmus bezpečný. Pro diskové šifrování dnes přichází v úvahu především mód XTS. LRW je vzhledem k jeho objevené zranitelnosti nutné zavrhnout. Pro systémy se staršími jádry, které ještě nemají podporu pro mód XTS, je vhodné použít mód cbc-essiv (nikoliv však samotné cbc!).
Řada distribucí nabízí v rámci instalátoru možnost postavit šifrovaný systém. Bohužel, tato možnost obvykle neumožňuje precizní nastavení šifrovacího algoritmu a šifrovacího módu, a mnohde bývají výchozí hodnoty nastavené patrně ve snaze zachovat kompatibilitu příliš konzervativně (což je i případ Debianu), tudíž není zvolen výchozí mód XTS, ale třeba cbc-essiv. V takových případech je tedy vhodnější postavit šifrovaný systém ručně, neboť šifrovací mód na existujícím šifrovaném svazku měnit nelze.
Pro diskové šifrování v GNU/Linuxu je ideální používat dm-crypt/LUKS, nicméně v oblasti šifrování to není jediný prostředek, který mají uživatelé k dispozici. Představím vám několik alternativ, ať už pro diskové šifrování, tak pro šifrování obecně.
Asi nejjednodušší alternativou dm-crypt/LUKS je dm-crypt jako takový. Jeho asi jedinou výhodou (chcete-li se na to tak dívat) oproti jeho kombinaci s LUKSem je absence hlavičky, která dané blokové zařízení nezaměnitelně označí jako šifrované. Oproti LUKS nadstavbě má však řadu citelných nevýhod, počínaje nutností celý oddíl přešifrovat při změně hesla přes nemožnost použít více než jedno heslo až po absenci posílení hesla metodou PBKDF2.
Nejvíce zmiňovanou alternativou pro dm-crypt/LUKS je Truecrypt, zejména kvůli přenositelnosti šifrovaných kontejnerů mezi GNU/Linuxem a MS Windows. V dnešní době je Truecrypt schopen využívat přímo linuxové CryptoAPI a vytváří přímo blokové zařízení prostřednictvím Device Mapperu, což jej řadí blízko k dm-cryptu a LUKS. Samotný Truecrypt nabízí uživatelům pěkné grafické rozhraní, stejně jako možnost jej ovládat přes příkazový řádek.
Jeho výhodou oproti dm-crypt/LUKS jsou skryté svazky uvnitř šifrovaného svazku a s tím související "plausible deniability" aneb možnost "hodnověrného popření" - skryté svazky využívají steganografii, měly by tudíž být neviditelné, pokud připojíte pouze samotný šifrovaný svazek (a nikoliv skrytý svazek v něm ukrytý). V Truecryptu pro GNU/Linux je tato funkcionalita podporována, ale pouze s použitím souborového systému FAT, což může být o něco "nápadnější" než v případě MS Windows. Obzvláště pak, když Truecrypt jinak bez problémů umožňuje vytvářet kontejnery s Ext2/Ext3.
Je nutné dodat, že licence Truecryptu je mnohými distribucemi (Debian, Fedora a další) považována za nesvobodnou a mj. pro distributory potenciálně problematickou. Proto třeba nenajdete Truecrypt v oficiálních repositářích Debianu.
Další alternativou je encfs
(web projektu) využívající FUSE. Jeho výhodou i nevýhodou zároveň (záleží na úhlu pohledu) je funkce "nad" existujícím souborovým systémem, nikoliv "pod" ním jako v případě ostatních zmíněných řešení. Šifrují se tedy přímo vlastní data, včetně názvů souborů a adresářů. Potenciálním problémem je zachování metadat (velikost souboru, datum vytvoření a poslední modifikace, atd.) pro případného útočníka. To sice nemá přímý bezpečnostní dopad ve smyslu usnadnění kryptoanalýzy, ale může to v některém případě odhalit jisté informace, které by nebyly k dispozici, kdyby byl zašifrovaný celý souborový systém.
Encfs se však výborně hodí pro různé síťové disky a podobné online služby, kde příslušná data nemáte pod kontrolou a nevíte, kdo má k nim přístup. Jistě, je možné použít šifrovaný kontejner, ale to nemusí být zcela efektivní z hlediska využitého prostoru, který je v rámci daných služeb obvykle velmi omezený.
GnuPG je běžnou součástí distribucí a umožňuje jak šifrování souborů asymetrickým klíčem, tak šifrování běžnou, blokovou šifrou. Pomocí GnuPG lze tedy snadno zašifrovat nějaký soubor buď k přenosu přes nezabezpečenou síť nebo pro uložení na nějaké médium či síťový disk.
GnuPG využívá, kupříkladu, zálohovací nástroj Duplicity, který umožňuje vytvářet na místním či vzdáleném úložišti šifrované zálohy.
Na závěr tohoto dílu navážu na předchozí tři díly, které se věnovaly LVM. Pokud se podíváme na možnosti uložení, zabezpečení a organizace dat, máme bloková zařízení (pevné disky), z těch můžeme vytvářet disková pole, z disků i diskových polí pak můžeme vytvářet skupiny svazků a logické svazky, přičemž šifrovat můžeme v podstatě kdekoliv.
Základ v každém případě tvoří pevné disky nebo disková pole. U serverů je velmi vhodné použít diskové pole s redundancí k zajištění jisté odolnosti vůči výpadku. V případě většího množství disků, kde je velmi vhodné použít různé disky od různých výrobců, je možné použít RAID 10 (RAID 0 na jednotlivých párech zrcadlených disků). RAID 10 nebo 01 dosahuje optimálního kompromisu mezi výkonem a redundancí, ale potřebuje minimálně 4 disky.
LVM je velmi vhodné provozovat z hlediska bezpečnosti dat nad diskovým polem s redundancí a používat jej spíše jen k rozdělení dostupného prostoru do logických svazků, snapshotům, apod.
dm-crypt/LUKS je ideální umístit buď mezi diskové pole a LVM nebo nad LVM (šifrovat logický svazek). Přidáním dalšího disku nebo disků lze pak postupně krok za krokem dostupný prostor rozšířit (dm-crypt/LUKS podporuje operaci resize
a u LVM to zvládne pvresize
).
Šifrovat lze samozřejmě i pod softwarovým RAIDem, což bývá i doporučeno, jsou-li pevné disky příliš velké (příliš mnoho dat šifrovaných jedním postupem usnadňuje případnou kryptoanalýzu). Nutnost "odemknout" více zařízení může vyřešit malý šifrovaný oddíl na jednom z disků, který obsahuje klíče k "odemčení" zbylých disků v poli.
Co se týče ostatních kombinací, provozovat softwarový RAID nad LVM je sice možné, ale naprosto nesmyslné a potenciálně problémové, a provozovat LVM bez RAIDu na více discích je nevhodné - stoupá pravděpodobnost selhání jednoho z disků a selhání kteréhokoliv z disků znamená ztrátu dat. Pokud byste používali zrcadlení v rámci LVM, je podle mého lepší využít rovnou softwarový nebo hardwarový RAID.
Tím bych tento díl ukončil. Příště už proberu dm-crypt/LUKS z ryze praktického hlediska.