Uchovávání důvěrných dat v GNU/Linuxu
Tutoriál doplňuje článek Uchovávání důvěrných dat v GNU/Linuxu (Hakin9 01/2005). Ve zde popisovaných cvičeních se počítá s použitím Hakin9 Live, který je přílohou k časopisu.
Pozor! Nedoporučujeme šifrovat skutečně cenná data v systému Hakin9 Live – je zde nebezpečí jejich ztráty po opětovném spuštění počítače.
Cíl: Po provedení zde popsaných cvičení byste měli umět:
šifrovat symetricky i asymetricky jednotlivé soubory s použitím balíčku GnuPG,
vytvářet a používat šifrované adresáře pomocí nástroje EncFS,
vytvořit a připojit šifrovaný diskový oddíl (skutečný nebo virtuální) pomocí nástroje cryptoloop.
Symetrické šifrování souborů – pakiet GnuPG
V prvním cvičení použijeme balíček GnuPG pro zašifrování samostatného souboru. V našem cvičení to bude soubor HK1204.pdf.
[01] V tutoriálu použijeme algoritmus AES (má nejlepší poměr výkon/kvalita). Začneme tím, že nahrajeme modul jádra zodpovídající za jeho podporu:
$ su -
# modprobe aes
# exit
[02]Vytvoříme adresář /home/haking/encrypted, do kterého budeme ukládat zašifrovaná data:
$ mkdir ~/encrypted
Uložíme do něj soubor HK1204.pdf.
[03] Teď přichází na řadu šifrování. Zadáme následující příkaz:
$ gpg --output ~/encrypted/cyph1 --symmetric --cipher-algo AES192 ~/encrypted/HK2104.pdf
Tímto jsem nařídili symetrické zašifrování souboru HK2104.pdf do cílového souboru ~/encrypted/cyph1 pomocí algoritmu AES s 192-bitovým klíčem.
[04] [04] Při šifrování je nutné zadat heslo. Věnujme tedy chvilku na vymyšlení hesla, které nemá nějaký velký význam, ale je snadné pro zapamatování - například Po večerech u piva si tlupa trpajzliku zpiva a slon je doprovazi za chobot. To je ale hloupost, 666. Tuto větu zadáme jako heslo.
[05] Soubor byl zašifrován. Nyní se musíme bezpečným způsobem zbavit originálu:
$ shred -n 35 -z -u ~/encrypted/HK2104.pdf
[06] Pro rozšifrování souboru a znovuzískání dat použijeme následující příkaz:
$ gpg --output HK2104.pdf --decrypt ~/encrypted/cyph1
Šifrované adresáře – EncFS
[07] Než využijeme možnosti, které nám poskytuje program EncFS, vytvoříme si dva adresáře. Jeden z nich (v našem případě ~/.crypto) bude uchovávat naše data v šifrované podobě (nebudeme jej tedy bezprostředně používat), do druhého adresáře (~/secret) si je pak budeme připojovat a okamžitě dešifrovat při každém požadavku na přístup. Připojení lze samozřejmě provést pouze po zadání správného hesla.
$ mkdir ~/.crypto
$ mkdir ~/secret
[08] Další krok spočívá v aktivaci mechanismu EncFS:
$ su -; insmod fuse; exit
$ encfs ~/.crypto ~/secret
Po stisknutí klávesy [Enter] budeme požádáni, abychom zvolili režim konfigurace. Rozhodneme se pro přednastavený režim pro paranoiky.
Teď je čas zvolit heslo pro náš archiv. Po jeho zadání a potvrzení bude náš virtuální souborový systém připraven k použití.
[09] KNyní do něj zkopírujeme několik souborů(echo, ls, telnet):
$ cp /bin/echo /bin/ls /bin/telnet ~/secret/
Podíváme se, co se nachází v adresářích ~/secret a ~/.crypto:
$ ls ~/secret
$ ls ~/.crypto
V prvním souboru tedy máme přístup ke svým souborům, a ve druhém je uložena jejich šifrovaná verze. Teď by bylo dobré virtuální souborový systém odpojit, aby si nikdo nemohl prohlížet jeho obsah. Použijeme k tomu příkaz:
$fusermount -u ~/crypto
A je to! Naše data jsou v bezpečí.
[10] Nyní si jej připojíme ještě jednou – s dalším zabezpečením, které způsobí automatické odpojení po určeném čase nečinnosti (10 minut):
$ encfs --idle=10 ~/.crypto ~/secret
Nyní opět máme přístup ke svým souborům v adresáři ~/secret. Když počkáme 10 minut, uvidíme, že bude automaticky odpojen.
Šifrovaný souborový systém – cryptoloop
Zbývá si procvičit používání posledního nástroje, který nám pomůže zabezpečit důvěrné soubory. Jde o cryptoloop, který je integrován v jádře.
[11] Předpokládejme, že nemáme k dispozici volný diskový oddíl (s touto situací máme co dělat právě v případě Hakin9 Live), a použijme užitečnou vlastnost zpětného mechanismu loopback, který umožňuje používat obyčejný soubor jako souborový systém. Připravme jej tedy:
$ dd if=/dev/urandom of=~/crypto.raw bs=1k count=10000
Tímto bude vytvořen soubor o velikosti 10 MB obsahující náhodné hodnoty (trash).
[12] Další úkol spočívá v propojení nově vytvořeného souboru s volným zařízením loop a jeho zašifrování námi zvolenou metodou:
$ su -
# losetup -e aes-192 /dev/loop1 /home/haking/crypto.raw
Program nás požádá o zadání hesla s minimální délkou 20 znaků.
[13] Nyní máme připraven prostor. Je ale ještě potřeba v něm zavést menší řád – vytvořit nějaký souborový systém. Například ext2:
# mkfs.ext2 /dev/loop1
[14]Po provedení tohoto úkonu už můžeme odpojit (volba -d) zařízení loop1:
# losetup -d /dev/loop0
# exit
[15] Náš šifrovaný souborový systém je již připraven. Potřebujeme však, aby byl připojen a používán stejně jako kterýkoliv jiný souborový systém. Připojme jej tedy a podívejme se, jak funguje:
$ mkdir ~/encrypted_disk
$ mount -t ext2 ~/crypto.raw ~/encrypted_disk -oencryption=aes-192
Mount po zadání správného hesla sám propojí uvedený soubor s prvním volným zařízením loop.
[16] Nyní zkopírujeme naše soubory do bezpečného úložiště:
$ cp /bin/echo /bin/ls /bin/telnet ~/encrypted_disk
A to je vše – náš nový šifrovaný disk můžeme libovolně připojovat a odpojovat. Nikdo, kdo nezná přístupové heslo, se na něj nedostane.