Objavljeno:

Šifriranje operacijskega sistema in podatkov na računalniku (mala šola informacijske varnosti, 3. del)

Če želimo podatke na svojem računalniku dobro zaščititi pred nepooblaščeno zlorabo ali dostopom, morajo biti šifrirani. Napadalec, ki namreč uspe pridobiti fizični dostop do računalnika oziroma nosilcev podatkov na njem, lahko podatke prekopira oziroma s pomočjo forenzične analize (npr, z uporabo programov Testdisk, PhotoRec, Get Data Back, Autopsy Forensic Browser, itd., če naštejemo le nekatere) pridobi celo podatke, ki so bili iz diska izbrisani.

Fizični dostop lahko dobi napadalec tako, da računalnik ukrade, da ga izgubimo (ali pa izgubimo USB ključ s podatki,…), nepooblaščen dostop do podatkov na disku imajo lahko tudi serviserji, itd.

Kot rečeno, se proti takšnim napadom lahko zaščitimo z uporabo šifriranja celotnega sistema. V nadaljevanju si bomo pogledali kako je mogoče šifrirati celoten sistem oziroma celoten trdi disk iz katerega se zažene operacijski sistem (razen majhnega zagonskega razdelka) ter kako še posebej šifriramo uporabniške podatke vsakega uporabnika posebej.

V Linuxu za šifriranje celotnega diska uporabljamo poseben sistem dm-crypt, v okolju Windows pa je šifriranje celotnega sistema mogoče izvesti s pomočjo brezplačnega programa TrueCrypt. TrueCrypt je sicer na voljo tudi za Linux, vendar na Linuxu ne omogoča šifriranja celotnega sistema. Več o TrueCryptu v enem naslednjih prispevkov.

V celoti šifriran sistem je mogoče zagnati samo z vnosom ustreznega gesla ob zagonu. Ko namreč računalnik zaženemo, se iz zagonskega razdelka (v Linuxu je to tim. /boot razdelek) naložijo začetni programi, ki zaznajo šifriran sistemski disk in nas vprašajo za geslo. Šele ko vnesemo pravilno geslo, se diski odklenejo in operacijski sistem se naloži do konca. Na takem sistemu je šifriran celoten operacijski sistem (razen zagonskega /boot razdelka), vse nameščene aplikacije in vsi uporabniški podatki. Šifriran je tudi tim. izmenjalni razdelek (ang. swap partition). Ko računalnik ugasnemo ali odklopimo trdi disk, so vsi ti podatki brez gesla nedostopni.

Uporaba šifriranja sicer nekoliko upočasni branje in zapisovanje podatkov na diske, vendar v praksi razlike niso opazne.

Še opozorilo. Uporaba šifriranja lahko v primeru napake oziroma okvare trdega diska privede do izgube podatkov. V primeru uporabe šifriranja zato poskrbite za ustrezne varnostne kopije, seveda pa je smiselno, da so tudi varnostne kopije šifrirane.

Šifriranje celotnega nosilca podatkov in kriptografski datotečni sistemi

Za začetek pa še malce teorije. V Linuxu (pa tudi na ostalih operacijskih sistemih) načeloma ločimo dve vrsti šifriranja podatkovnih nosilcev.

V prvem primeru šifriramo celoten nosilec podatkov (gre za šifriranje celotne bločne naprave), na to šifrirano plast pa nato naložimo poljuben datotečni sistem. V Linuxu to funkcionalnost ponuja dm-crypt oziroma aplikaciji Cryptsetup ter Cryptmount. Cryptsetup ima implementiran standard šifriranja LUKS (Linux Unified Key Setup), ki omogoča poenoteno obravnavanje in delo s šifriranimi nosilci podatkov na različnih Linux distribucijah ter tudi Windows operacijskem sistemu (na tem sistemu je za LUKS šifriranje na voljo programski paket FreeOTFE). Poleg navedene kompatibilnosti med različnimi sistemi (šifriran nosilec lahko brez težav uporabimo na različnih sistemih) LUKS omogoča tudi uporabo več šifrirnih ključev oziroma gesel ali datotek s ključi (zato lahko šifrirne ključe enostavno spreminjamo), vsi potrebni podatki za de/šifriranje (vključno s shrambami ključev) pa so shranjeni na posebnem LUKS vzglavju kar na samem šifriranem podatkovnem nosilcu.

V drugem primeru pa je šifriranje izvedeno s pomočjo tim. kriptografskega datotečnega sistema. Gre za datotečni sistem, ki teče v uporabniškem prostoru (FUSE). Ubuntu ima vgrajen kriptografski datotečni sistem eCryptfs (Enterprise Cryptographic Filesystem). Gre za datotečni sistem v slojih, ki šifrira vsako datoteko posebej. Več o tem datotečnem sistemu si sicer lahko preberete v intervjuju z Dustinom Kirklandom, glavnim razvijalcem sistemov za šifriranje v Ubuntuju iz leta 2010.

Oba pristopa imata svoje prednosti in slabosti. Prvi sistem omogoča enostavno vzpostavitev v celoti šifriranega nosilca podatkov, vendar šifrirni ključ odklene vse podatke na celotnem nosilcu. Na enouporabniškem sistemu to ni problem, težave pa nastopijo na večuporabniških sistemih, kjer eden uporabnik ne želi, da bi njegove datoteke pregledovali drugi uporabniki, tudi tisti ne, ki imajo skrbniški dostop do sistema.

Prednost drugega pristopa pa je predvsem ta, da je z njim mogoče zelo enostavno za vsakega uporabnika vzpostaviti šifriranje njegovega domačega imenika, ostali uporabniki – tudi tisti s skrbniškimi privilegiji – pa do vsebine šifriranih podatkov drugih uporabnikov nimajo dostopa. Datoteke v uporabniški mapi so tako šifrirane, ob prijavi uporabnika pa se samodejno odklenejo z njegovim geslom.

Zaradi prednosti, ki jih prinašata oba pristopa je priporočljivo uporabljati oba hkrati. Celoten sistem je tako šifriran s Cryptsetupom, posamezne uporabniške mape pa z eCryptfs z gesli vsakega uporabnika posebej. Res je sicer, da s tem izgubimo nekaj hitrosti branja in zapisovanja podatkov, vendar so v praksi te razlike minimalno opazne, zelo veliko pa pridobimo na varnosti.

Naj na tem mestu na kratko omenimo, da v prihodnjo različico Ubuntu Linuxa (12.10) prihaja podpora za šifriranje podatkov v oblaku. Dustin Kirkland, razvijalec eCryptfs, je namreč razvil poseben sistem Overlayroot. (gre za dodatek k posebnemu “združevalnemu” datotečnemu sistemu (ang. union mount)), ki omogoča šifriranje podatkov na Ubuntu sistemih v oblaku. Ubuntu namreč ponuja posebne različice namenjene namestitvi v oblačne sisteme, kot npr. Amazon EC2, Openstack in LXC. Sistem Overlayroot bo skrbel za šifriranje uporabniških podatkov, datotek aktivnosti, konfiguracijskih datotek, začasnih datotek, s strani uporabnika nameščene programske opreme, itd. na Ubuntu namestitvi v oblaku.

Namestitev šifriranega sistema

Preden se lotimo šifriranja podatkovnih nosilcev je podatke na teh nosilcih potrebno prekopirati drugam (napraviti varnostno kopijo), saj šifriranje nosilcev podatkov praviloma uniči vse predhodno zapisane podatke na teh nosilcih (šifriranje je v tem primeru analogno formatiranju). Praviloma uniči poudarjamo zato, ker je včasih predhodne podatke na formatiranih in šifriranih nosilcih podatkov s pomočjo forenzične analize mogoče obnoviti. Seveda pa brez šifrirnih ključev ni mogoče obnavljati podatkov, ki so na nosilce zapisani kasneje, ko so le-ti že šifrirani.

Ko imamo narejene varnostne kopije, je dobro razmisliti o uničenju starih podatkov na njih oziroma prepis nosilcev podatkov z naključnimi podatki. Prepisovanje diska z naključnimi podatki sicer ni nujno potrebno, je pa priporočljivo. S tem po eni strani onemogočimo kasnejšo forenzično analizo oziroma obnavljanje ne povsem prepisanih podatkov, prav tako pa s prepisovanjem z naključnimi podatki preprečimo, da bi napadalec ugotovil koliko (šifriranih) podatkov imamo na disku in koliko je praznega prostora. Trajno brisanje podatkov bo sicer tema enega kasnejših prispevkov, zato ga tukaj ne bomo podrobneje omenjali.

Postopek namestitve popolnoma šifriranega sistema si bomo ogledali na (trenutno aktualni različici Ubuntuja) Ubuntu 12.04. Namestitev je najlažje izvesti s pomočjo tim. alternativnega namestitvenega CD-ja (Alternate Install CD), ki vsebuje tekstovni program za nameščanje. V nadaljevanju si bomo ogledali samo nekaj ključnih korakov, sicer pa je namestilni program razmeroma enostaven za uporabo.

V prvem koraku namestitveni CD vstavimo v računalnik in računalnik zaženemo iz njega (v BIOS-u je potrebno nastaviti zagon iz CD-ROM enote). Sledi izbira jezika namestitvenega programa in jezika končnega operacijskega sistema.

Izbira jezika namestitvenega programa

Izbira jezika namestitvenega programa.

Izbira jezika končnega operacijskega sistema

Izbira jezika končnega operacijskega sistema.

Nato vnesemo ime sistema ter ime prvega uporabnika.

Vnos imena sistema

Vnos imena sistema

Vnos imena prvega uporabnika

Vnos imena prvega uporabnika.

V naslednjem koraku nas namestitveni program vpraša ali želimo vključiti šifriranje naše domače mape. Pozor – tukaj ne govorimo o šifriranju celotnega sistema, pač pa samo o šifriranju domače mape prvega uporabnika s kriptografskim datotečnim sistemom. Kot smo že pojasnili na začetku, je na tem mestu priporočljivo izbrati šifriranje domače mape.

Vklop šifriranja domačega imenika

Vklop šifriranja domačega imenika.

Sledi naslednji ključni korak – razdeljevanje diskov. Najbolj enostavna možnost je, da uporabimo vodeno namestitev, in sicer tako, da nastavimo šifriran LVM (Logical Volume Manager – gre za sistem v Linuxu, ki omogoča združevanje več fizičnih diskov v en (lahko tudi več) logični nosilec podatkov).

Nastavitev šifriranja celotnega diska

Nastavitev šifriranja celotnega diska.

V nadaljevanju je potrebno nastaviti šifrirno geslo, ki mora biti seveda dovolj dolgo in dovolj kompleksno. Naj na tem mestu še enkrat opozorimo na problematiko različnih razporedov tipkovnic. Ob zagonu sistema namreč operacijski sistem še nima nastavljenega privzetega jezika, zato takrat praviloma velja angleška razporeditev tipkovnice. Angleški razpored tipkovnice ne vsebuje slovenskih znakov (“čšž”), nekatere črke pa so zamenjane (npr, “z” in “y”), zato je to treba pri vnosu gesla upoštevati.

Vnos LUKS gesla

Vnos LUKS gesla.

Sledi nameščanje osnovnega sistema in ko je namestitev končana…

Nameščanje programskih paketov

Nameščanje programskih paketov.

Namestitev je končana

Namestitev je končana!

…zagon šifriranega operacijskega sistema. Kot rečeno, je ob zagonu potrebno vpisati šifrirno geslo (še enkrat opozarjamo na problem razporeda tipkovnice), sicer pa se tak sistem obnaša povsem običajno.

Zagon šifriranega operacijskega sistema

Zagon šifriranega operacijskega sistema.

Edina pomembnejša razlika je, da tak sistem ne omogoča tim. spanja oz. hibernacije (lahko pa ga damo v stanje pripravljenosti (ang. suspend)). Rešitev za to sicer obstaja, vendar zahteva nekoliko podrobnejše poznavanje programa Cryptsetup. Le na kratko – izmenjalni prostor (ang. swap), ki je šifriran z naključno generiranim ključem je potrebno šifrirati z geslom, ob zagonu računalnika iz stanja hibernacije, pa je nato potrebno vnesti geslo za odklep izmenjalnega prostora.

Preverjanje delovanja šifriranja

Če želimo, lahko po nalaganju operacijskega sistema preverimo ali so diski zares šifrirani in na kakšen način. Le kratko opozorilo – ti postopki zahtevajo nekoliko več poznavanja delovanja Linuxa.

Če želimo preveriti ali je šifriran izmenjalni prostor (tim. swap) v ukazno vrstico (prikličemo jo s pritiskom na “Ctrl-Alt-t”) vpišemo ukaz:

swapon --summary

Dobiti moramo približno takle izpis:

Filename Type Size Used Priority
 /dev/mapper/cryptswap1 partition 3977212 23528 -1

Osnovne podatke o šifriranem disku oziroma šifriranih razdelkih lahko pridobimo s pomočjo programa Diskovna orodja. Program je že vključen v osnovni Ubuntu sistem in ga zaženemo preko zaganjalnika.

Diskovna orodja

Diskovna orodja.

Program v glavnem oknu izpiše seznam nosilcev podatkov (trdi diski, USB ključi,…). Ko na levi strani izberemo disk, program prikaže podrobnosti o tem disku. Poleg modela, serijske številke, SMART podobnih podatkov, si v oddelku “Nosilci” lahko ogledamo kateri razdelki se nahajajo na disku. Če posamezni razdelek izberemo z miško, se pokažejo dodatne podrobnosti tega razdelka. Iz zgornje slike je razvidno, da se na začetku nahaja manjši zagonski razdelek (naprava sda1), sledi pa razširjeni razdelek (naprava sda2), na katerem se na drugem nivoju nahaja šifriran nosilec podatkov (naprava sda5), na njej pa na tretjem nivoju LVM2 fizični nosilec (naprava dm-0).

Iz slike je razvidno, da je celoten razdelek sda5 šifriran, program Diskovna orodja pa omogoča tudi enostavno spreminjanje gesla.

Podrobnejše informacije o vrsti šifriranja posamezne naprave sicer dobimo z ukazom “cryptsetup status“, najprej pa je smiselno pogledati katere šifrirane naprave se sploh nahajajo v našem sistemu.

To storimo z ukazom za pregled vsebine sistemske mape /dev/mapper:

ls /dev/mapper -lha

Ukaz vrne približno naslednji izpis:

skupno 0
 drwxr-xr-x 2 root root 140 jul 30 19:17 .
 drwxr-xr-x 18 root root 4,2K jul 30 23:02 ..
 crw------- 1 root root 10, 236 jul 30 19:17 control
 lrwxrwxrwx 1 root root 7 jul 30 19:17 doma-root -> ../dm-1
 lrwxrwxrwx 1 root root 7 jul 30 19:17 doma-swap_1 -> ../dm-2
 lrwxrwxrwx 1 root root 7 jul 30 19:17 cryptswap1 -> ../dm-3
 lrwxrwxrwx 1 root root 7 jul 30 19:17 sda5_crypt -> ../dm-0

Iz izpisa je razvidno, da imamo na sistemu šifrirani napravi cryptswap1 in sda5_crypt (ostali dve napravi sta del LVM, več o njiju izvemo z ukazoma “sudo dmsetup ls” ter “sudo lvdisplay“).

Sedaj lahko pogledamo podrobnosti šifriranja izmenjalnega razdelka (cryptswap1) in razdelka sda5_crypt.

sudo cryptsetup status cryptswap1
/dev/mapper/cryptswap1 is active and is in use.
 type: PLAIN
 cipher: aes-cbc-essiv:sha256
 keysize: 256 bits
 device: /dev/mapper/doma-swap_1
 offset: 0 sectors
 size: 7954432 sectors
 mode: read/write
sudo cryptsetup status sda5_crypt
/dev/mapper/sda5_crypt is active and is in use.
 type: LUKS1
 cipher: aes-cbc-essiv:sha256
 keysize: 256 bits
 device: /dev/sda5
 offset: 2056 sectors
 size: 976267256 sectors
 mode: read/write

Iz izpisa je med drugim viden algoritem šifriranja ter uporabljena velikost šifrirnega ključa (AES-256).

Še nekaj več informacij pa lahko pridobimo z ukazom “sudo cryptsetup luksDump“, npr. “sudo cryptsetup luksDump /dev/sda5“. Za več dodatnih možnosti svetujemo ogled navodil za uporabo Cryptsetupa.

Spreminjanje in dodajanje LUKS gesel

LUKS šifriranim razdelkom lahko enostavno dodajamo ali spreminjamo gesla, postopek spreminjanja ali dodajanja gesel pa je mogoče izvajati tudi pri priključenem oz. aktivnem razdelku. Gesla se shranjujejo v posebne shrambe oz. mesta šifrirnih ključev (ang. key slot), ki se nahajajo v glavi samega šifriranega razdelka. Številke mest se štejejo od nič dalje. Prvo geslo se torej nahaja na mestu 0, drugo na mestu 1, itd. Ker je v LUKS razdelkih na voljo 8 prostih mest za šifrirne ključe, lahko uporabimo do 8 gesel.

Z ukazom “sudo cryptsetup luksDump” najprej pogledamo koliko prostih mest še imamo na voljo. Gesla dodajamo z ukazom “sudo cryptsetup luksAddKey“, brišemo pa z ukazom “sudo cryptsetup luksDelKey“. Sprememba gesla iz ukazne vrstice je mogoča tako, da na novo mesto najprej dodamo novo geslo, nato pa iz starega mesta izbrišemo (odstranimo) stari ključ.

Precej bolj enostavno pa je spreminjanje gesla s pomočjo programa Diskovna orodja. Najprej z miško izberemo šifrirani nosilec podatkov, nato pa kliknemo na gumb “Spremeni šifrirno geslo“.

Sprememba gesla s programom Diskovna orodja

Sprememba gesla s programom Diskovna orodja.

Uporaba kriptografskega datotečnega sistema eCryptfs

Kot že rečeno, ima Ubuntu vgrajen kriptografski datotečni sistem eCryptfs, ki omogoča vzpostavitev šifriranih domačih imenikov uporabnikov.

Sistem deluje tako, da se najprej zgenerira naključen 128-bitni ključ, ki ga potem “zavije” z uporabnikovim geslom za prijavo. Podatki so šifrirani s tem naključnim ključem, uporabnikovo geslo pa ob prijavi uporabnika v sistem ta šifrirni ključ samodejno odklene. Zato uporabniku za dostop do šifriranih datotek ni potrebno vnašati nobenega gesla – ko se prijavi v sistem, so njegovi sicer šifrirani podatki zanj normalno dostopni. Prav tako lahko kadarkoli spreminja svoje geslo, ne da bi mu bilo treba datoteke ponovno šifrirati.

Žal je trenutno v Ubuntu sistemih dodajanje uporabnikov s šifriranim domačim imenikom nekoliko bolj zapleteno, saj za to na voljo ni enostavnega grafičnega vmesnika, pač pa je v ukazni vrstici potrebno napisati ukaz “sudo adduser <ime uporabnika> –encrypt-home“. Primer:

sudo adduser matej --encrypt-home
Dodajanje uporabnika `matej' ...
 Dodajanje nove skupine `matej' (1001) ...
 Dodajanje novega uporabnika `matej' (UID 1001) s skupino `matej' ...
 Ustvarjanje domače mape `/home/matej' ...

 Nastavljanje šifriranja ...

************************************************************************
 YOU SHOULD RECORD YOUR MOUNT PASSPHRASE AND STORE IT IN A SAFE LOCATION.
 ecryptfs-unwrap-passphrase ~/.ecryptfs/wrapped-passphrase
 THIS WILL BE REQUIRED IF YOU NEED TO RECOVER YOUR DATA AT A LATER TIME.
 ************************************************************************

Done configuring.
Kopiranje datotek iz `/etc/skel' ...
 Vnesite novo UNIX geslo: <vnesemo geslo>
 Ponovno vpišite novo UNIX geslo: <še enkrat vnesemo geslo>
 passwd: password updated successfully
 Changing the user information for matej
 Enter the new value, or press ENTER for the default
 Full Name []: Matej
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
 So podatki pravilni? [Y/n] y

Uporabnik lahko svoj eCryptfs šifrirni ključ izpiše (in si ga kasneje shrani) z ukazom:

ecryptfs-unwrap-passphrase

Potrebno je vnesti svoje geslo, nato pa se izpiše 32 znakov dolg naključni eCryptfs šifrirni ključ.

Zaključek

Kot smo torej videli, sodobni Linux sistemi omogočajo uporabo zmogljivega šifriranja podatkov na diskih na uporabniku nemoteč oz. neopazen način. Uporaba kriptografskega datotečnega sistema eCryptfs je za uporabnika popolnoma nemoteča in neopazna, uporaba Cryptsetup LUKS šifriranja pa zahteva le vnos začetnega gesla. Nekoliko več dela je le z vzpostavitvijo takšnega sistema, a kot smo videli vzpostavljanje obeh šifrirnih menanizmov ni preveč zapleteno opravilo.

Seveda naj na tem mestu še enkrat poudarimo da je pri uporabi šifriranja obvezno poskrbeti za ustrezne varnostne kopije, seveda pa je smiselno, da so tudi varnostne kopije šifrirane.

Kako v Ubuntu sistemih na enostaven in uporabniku neopazen način uporabljati šifrirane zunanje nosilce podatkov (USB diske,…), kako narediti varnostne kopije podatkov ter kako narediti šifrirane varnostne kopije podatkov (lahko tudi v oblak), pa si boste lahko prebrali v naslednjih prispevkih.

Kategorije: Informacijska tehnologija, Informacijska varnost, Odprta koda, Zasebnost
Ključne besede: kriptografija, Linux, LUKS, mala šola informacijske varnosti