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.