User Tools

Site Tools


kako:varnost

This is an old revision of the document!


Table of Contents

Šifriranje nosilcev podatkov v okolju Linux in Windows

Avtor: Matej Kovačič

Cryptography is a data-protection technology just as gloves are a hand-protection technology. Cryptography protects data from hackers, corporate spies and con artists, whereas gloves protect hands from cuts, scrapes, heat, cold and infection. The former can frustrate FBI wiretapping, and the latter can thwart FBI fingerprint analysis. Cryptography and gloves are both dirt-cheap and widely available. In fact, you can download good cryptographic software from the Internet for less than the price of a good pair of gloves.

–Ronald L. Rivest (1998), The Case Against Regulating Encryption Technology


Opozorilo: Uporaba spodaj opisanih postopkov lahko privede do resne izgube podatkov ali do okvare sistema. V nekaterih nedemokratičnih državah je osebna uporaba močnega šifriranja nezakonita. Uporaba na lastno odgovornost.

Ena izmed možnosti napada na računalniške sisteme je tudi tim. offline napad, torej napad, ko napadalec pridobi fizični dostop do računalnika medtem, ko je le-ta ugasnjen. Možnosti napadov na računalnike je v tem primeru več (npr. podtikanje različnih strojnih “dodatkov” ali nalaganje spremenjenega firmwarea na strojno opremo), največjo nevarnost pa verjetno predstavlja dostop do trdega diska in podatkov na njem. In to ne samo podatkov, ki so na disku zapisani, pač pa tudi podatkov, ki so bili iz diska izbrisani, ne pa tudi prepisani. V primeru USB diskov in prenosnih računalnikov pa nevarnost predstavlja tudi izguba oz. kraja. Napadalci si v tem primeru lahko pomagajo z tim. živimi CD-ji (ang. live CD) ter s forenzičnimi orodji kot so Testdisk, PhotoRec, Get Data Back, Autopsy Forensic Browser in drugimi.

Kako se boriti proti takšnim napadom? Rešitev je razmeroma enostavna - z uporabo šifriranja. Šifrirati je mogoče celoten sistem oziroma trdi disk iz katerega se zažene operacijski sistem (razen majhnega zagonskega razdelka), kar je v večini operacijskih sistemov nekoliko bolj zapleteno opravilo (velja tako za večino Windows kot tudi večino Linux distribucij). V tokratnem članku pa si bomo ogledali kako je mogoče v Ubuntu Linuxu uporabljati šifrirane razdelke (particije) in prenosne USB diske.

Šifriranje nosilcev podatkov ima določene prednosti, pa tudi določene pomankljivosti. Glavna pomankljivost je v tem, da s šifriranjem izgubimo prenosljivost. Šifrirni programi namreč niso nameščeni na vsakem računalniku in zato šifriranih nosilcev podatkov ne moremo uporabiti kjerkoli, poleg tega za zagon šifrirnega programa praviloma potrebujemo administratorski dostop. Ena izmed možnih rešitev je, da si na prenosnem USB disku naredimo dodatni manjši FAT32 razdelek, kjer shranimo šifrirni program, s katerim bomo na ciljnem računalniku lahko priklopili šifrirani nosilec podatkov. Problem prenosljivosti pa odpade, kadar šifrirane USB diske uporabljamo na omejenem številu računalnikov (npr. za prenos datotek od doma v službo), ali kadar prenosni disk uporabljamo za izdelavo varnostnih kopij. V primeru kraje ali izgube prenosnega diska namreč varnost podatkov ne bo ogrožena. Izdelamo pa si lahko tudi šifrirane virtualne razdelke, ki jih shranimo na CD, DVD ali podobne nosilce podatkov.

Prednosti šifriranja pomnilniških medijev je na precej zabaven način opisal eden izmed razvijalcev operacijskega sistema Debian, Uwe Hermann:

After unmounting, nobody will be able to see your data without knowing the correct passphrase. Drive is stolen? No problem. Drive is broken, and you want to send it in for repair without the guys there poking in your data? No problem. You leave the USB drive at home and some jerk breaks into your house, steals your drive, rapes your wife, and kills your kids? No problem. Well, sort of, but you get the idea ;-)

Š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. Podatki naj se nikoli ne nahajajo samo na enem (šifriranem) nosilcu. Prav tako je pri uporabi spodaj opisanih postopkov potrebno nekaj previdnosti, predvsem pri izbiri ciljnega razdelka in formatiranju diska. Če gre za občutljive podatke pa je potrebno razmisliti ali ni smiselno, da so prav vse kopije podatkov šifrirane. Opisane metode je mogoče uporabiti za vse vrste pomnilniških nosilcev, ne samo USB diske.

Opisani postopki so bili preiskušeni v Linuxu Ubuntu 7.04 Feisty Fawn in Windows 2000 ter Windows Xp. Za uporabo v ostalih Linux/Windows distribucijah jih je potrebno smiselno prilagoditi.

Načini šifriranja podatkovnih nosilcev

Pri šifriranju podatkovnih nosilcev sta na voljo dva koncepta. Lahko:

  • šifriramo razdelek (ki ga kasneje priklopimo kot običajen razdelek), ali pa
  • šifriramo posebno datoteko, ki jo kasneje priklopimo kot virtualni razdelek.

Šifriranje celotnega razdelka

V tem primeru izbire tega načina šifriranja, med fizični nosilec in datotečni sistem “vrinemo” še dodaten “nivo”, ki skrbi za šifriranje. Tipično to izgleda takole: najprej imamo nek fizični razdelek, recimo /dev/sdc3, ki ga priključimo na virtualni šifrirani razdelek, npr. /dev/mapper/crypto_sdc3, le-tega pa potem priključimo v sistem, recimo na /media/USB-crypt. Ta razdelek nato formatiramo s poljubnim datotečnim sistemom in nanj zapisujemo datoteke.

Ko torej zapišemo neko datoteko na /media/USB-crypt, se datoteka najprej zapiše na “virtualni” nosilec, sledi šifriranje na /dev/mapper/crypto_sdc3 in na koncu fizično shranjevanje šifriranih podatkov na /dev/sdc3.

Šifriranje datoteke, ki jo priklopimo kot virtualni razdelek

Drugi koncept pa je uporaba šifrirane datoteke, ki jo priklopimo kot virtualni razdelek. V tem primeru imamo nekje na disku šifrirano datoteko, ki jo priklopimo kot poseben, nov virtualni razdelek na katerega potem zapisujemo podatke.

Podatki se v tem primeru zapisujejo namesto na razdelek v datoteko (oz. virtualni razdelek), torej imamo približno tako strukturo: “virtualni” razdelek - šifriranje - shranjevanje v datoteko, ki je priključena kot virtualni razdelek - datoteka se nahaja na poljubnem fizičnem nosilcu.

Ostale možnosti šifriranja

Za šifiranje lahko uporabimo geslo (password, passphrase) in/ali tim “datoteko s ključem” (key file), datoteko, katere vsebina predstavlja šifrirni ključ za dostop do šifriranega razdelka. Uporabimo lahko tekstovne, glasbene ali kakšne druge datoteke. Seveda pa v primeru uporabe datoteke s ključem njene vsebine kasneje ne smemo več spreminjati, saj v nasprotnem primeru do šifriranih podatkov ne bomo mogli več dostopati. Na izbiro imamo tudi različne šifrirne metode (algoritme), večinoma pa je najbolj enostavno uporabiti privzete (navadno je to AES).

Pri tem pa sodobni šifrirni programi uporabljajo zelo koristen trik. Geslo, ki ga vnesemo v šifrirni program namreč ne predstavlja tudi šifrirnega ključa. Podatki se namreč šifrirajo z nekim statičnim šifrirnim ključem (to je npr. nek naključen niz znakov), ki je shranjen nekje v šifriranem razdelku (navadno kje na začetku) ter zašifriran z našim geslom, ki v tem primeru predstavlja ločeni šifrirni ključ. Dešifriranje torej poteka takole: najprej vnesemo geslo (ali podamo datoteko-ključ), s katerim “odklenemo” statični šifrirni ključ do naših podatkov. S tem ključem potem dešifriramo naše podatke.

Zakaj je to koristno? Zato, ker nam to omogoča enostavno spreminjanje gesel. Če bi namreč želeli spremeniti oz. zamenjati statični šifrirni ključ, bi morali ob vsaki spremembi le-tega celotni šifrirani razdelek na novo prekodirati. To pa je precej zamudno opravilo. Če pa želimo to storiti v primeru uporabe ločenega šifrinega ključa (npr. gesla), se ob spremembi gesla prekodira samo kriptogram statičnega šifrirnega ključa, kar je bistveno hitreje kot prekodiranje vseh podatkov.

Po drugi strani pa ima ta pristop tudi neko nevarnost. Recimo, da šifrirani razdelek uporablja več uporabnikov. Uporabnik, ki ima ustrezno geslo, si lahko prekopira tisti del datoteke, ki vsebuje statični šifrirni ključ (zašifriran z njegovim trenutnim geslom). Ko izgubi dostop do šifriranih podatkov (mu na primer spremenimo geslo), lahko tak uporabnik na novo prekodirani statični šifrirni ključ prepiše s staro kopijo (za katero pa ima geslo) in s tem kasneje pridobi dostop do podatkov. Napadalec z ustreznim dostopom lahko statični šifrirni ključ prekopira tudi ko je šifrirani razdelek aktiven (priklopljen).

V nadaljevanju so bomo ogledali dve rešitvi, ki ju je mogoče uporabiti tako v okolju Linux, kot v okolju Windows. Prva rešitev, orodje cryptsetup, je v osnovi razvito za Linux, kasneje pa je bil razvit tudi program, ki omogoča uporabo šifriranih razdelkov v okolju Windows. Drugi program, TrueCrypt, pa je bil v osnovi razvit za okolje Windows, kasneje pa prenešen v okolje Linux.

Ogledali si bomo kako uporabiti oba programa za šifriranje običajnih in virtualnih razdelkov z geslom. Mimogrede: TrueCrpyt omogoča razmeroma enostavno izdelavo varnostne kopije statičnega šifrirnega ključa (Backup Volume Header / Restore Volume Header), to pa je mogoče tudi s cryptsetupom (gre za izvoz tim. vzglavja diskovnega razdelka (ang. partition header) oz. metapodatkov (ang. metadata). Ker izvoz statičnega šifrirnega ključa na nezaščiten medij lahko privede do izgube nadzora nad šifrirnim ključem, tega sicer razmeroma enostavnega postopka podrobneje ne bomo opisovali.

Izbira ustreznega razdelka

Najprej je seveda potrebno previdno izbrati razdelek, ki ga želimo prepisati oz. ga šifrirati. V primeru napake so podatki na napačno izbranem razdelku za vedno izgubljeni! Zato vedno dvakrat preverimo s katerim razdelkom bomo delali. Pred prepisovanjem oziroma nameščanjem šifrirne sheme tudi naredimo varnostno kopijo podatkov!

V okolju Linux izbiro ustreznega razdelka na USB ključu opravimo tako, da najprej priklopimo (USB) disk na katerega bomo namestili šifrirno shemo in pogledamo njegovo lokacijo (kam je priklopljen) z ukazom:

mount

Dobimo na primer naslednji izpis:

/dev/sdc3 on /media/USB type reiserfs (rw,noexec,nosuid,nodev)

Iz izpisa sledi, da je tretji razdelek USB diska z imenom USB, ki je priključen na mesto /media/USB, fizično gledano naprava na /dev/sdc3. Ker smo se odločili, da bomo šifrirno shemo namestili na tretji razdelek USB diska, bomo torej v nadaljevanju delali z napravo /dev/sdc3.

Katere razdelke (tudi nepriključene) imamo na voljo v sistemu lahko preverimo tudi z ukazom:

sudo sfdisk -l

V okolju Windows si seznam priključenih diskovnih razdelkov pogledamo s klikom na ikono Moj računalnik/My Computer oz. z desnim klikom na to ikono, izbiro možnosti Upravljaj/Manage ter pod Shramba/Storage izberemo Upravljanje diskov/Logical Drives.

Prepis diska ali razdelkov z naključnimi podatki

Preden se lotimo šifriranja podatkovnih nosilcev 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.

Razlogov za to je več. Prvi je, da je stare podatke z nekaterimi programsko forenzičnimi tehnikami mogoče obnoviti. Drugi razlog je, da znajo sodobni trdi diski slabe sektorje zamenjati z rezervnimi dobrimi sektorji, kar pomeni, da podatki ostanejo “skriti” na tim. slabih sektorjih od koder jih je mogoče obnoviti. Prepisovanje diska z naključnimi podatki pa je koristno tudi zato, ker na tako prepisanem disku ni mogoče (oz. je to izredno težko) ugotoviti koliko pravih šifriranih podatkov je na disku in koliko je praznega prostora.

Slaba stran postopka pa je, da je prepisovanje z naključnimi podatki precej dolgotrajno. Na računalniku s procesorjem Pentium 4 je prepisovanje 500 Gb razdelka preko USB 2.0 s pomočjo psevdonaključnega generatorja števil trajalo dobrih 29 ur, prepisovanje 320 Gb diska pa dobrih 19 ur. Za prepisovanje diska ali razdelka z naključnimi podatki imamo sicer na voljo več metod. V nadaljevanju si jih bomo nekaj ogledali, priporočljivo je uporabiti orodje dd s psevdonaključnim generatorjem ali orodje DBAN.

Prepisovanje podatkov v okolju Windows

V okolju Windows lahko za prepisovanje oz. brisanje podatkov uporabimo formatiranje (vendar ne tim. “hitro formatiranje”), ki pa ni preveč zanesljivo. Uporabimo lahko tudi kakšno namensko orodje, npr. Clean Disk Security ali SDelete. Žal je v okolju Windows varno oz. zanesljivo brisanje NTFS razdelkov nekoliko težavno, zato se je potrebno zavedati, da uporaba teh orodij ni vedno optimalna.

Primerjavo namenskih orodij za brisanje podatkov v okolju Windows si lahko ogledate na spletni strani Sarah Dean (sicer tudi avtoritce programa FreeOTFE, ki bo opisan v nadaljevanju).

Uporaba orodja za preverjanje slabih sektorjev na disku v Linuxu

Precej hitrejša metoda je uporaba orodja za preverjanje slabih sektorjev na disku v Linuxu - badblocks. Predpostavimo, da je diskovni razdelek na USB disku, ki ga želimo šifrirati /dev/sdc3. USB disk najprej programsko odklopimo - z desnim klikom na disk izberemo možnost Izvrzi oz. Odklopi ali vnesemo ukaz:

sudo umount /media/USB/

Disk naj ostane fizično priključen. Sledi ukaz:

badblocks -c 10240 -s -w -t random -v /dev/sdc3

in počakamo nekaj ur. Med tem se nam izpisuje približno takle izpis:

Checking for bad blocks in read-write mode
From block 0 to 97530615
Testing with random pattern:           30720/       97530614

Uporaba orodja dd (disk dump) v Linuxu

Verjetno najbolj optimalna metoda glede na razmerje med varnostjo in hitrostjo je uporaba orodja dd (disk dump). Mimogrede, orodje je del vsakega standardnega živega CDja (live CD). V našem primeru je torej diskovni razdelek, ki ga želimo šifrirati /dev/sdc3. USB disk najprej programsko odklopimo - z desnim klikom na disk izberemo možnost Izvrzi oz. Odklopi ali vnesemo ukaz:

sudo umount /media/USB/

Disk naj ostane fizično priključen. Sedaj izvedemo ukaz:

dd if=/dev/urandom of=/dev/sdc3 bs=16M

Ukaz dd (disk dump), bo razdelek /dev/sdc3 (ki je v našem primeru tim “izhodna datoteka” output file (odtod v ukazu of=…=) prepisal s podatki, ki jih dobi na tim. “vhodni datoteki” (input file, oziroma if=…). Kot “vhodna datoteka” je nastavljen psevdonaključni generator števil /dev/urandom.

Če želimo doseči večjo stopnjo varnosti lahko namesto psevdonaključnega generatorja števil /dev/urandom uporabimo naključni generator števil /dev/random in celo večkratno prepisovanje. V primerjavi uporabe naključnega generatorja števil pa je dobro imeti dober vir entropije, kar lahko dosežemo z naključnim “tipkanjem” po tipkovnici ali z vklopom mikrofona, ki ga postavimo nekam na prosto. Se pa čas prepisovanja v primeru naključnega generatorja števil še podaljša.

Prepišemo lahko tudi celoten disk (v tem primeru uporabimo napravo /dev/sdc - brez številke), vendar bo v tem primeru potrebno na povsem izbrisanem disku kasneje ustvariti nov razdelek.

Parameter blocksize (bs=16M) pri ukazu je precej pomemben, saj zelo pohitri prepisovanje diska. Po vnosu ukaza počakajmo nekaj časa (precej časa, npr. prepisovanje 500 Gb diska na USB 2.0 in z Intel Pentium 4 procesorjem je trajalo dobrih 29 ur, prepisovanje 320 Gb diska pa dobrih 19 ur), da se disk v celoti prepiše z naključnimi podatki.

Ker je prepisovanje z dd dolgotrajno, dd pa ne izpiše napredka, lahko napredek pogledamo z naslednjim ukazom, ki procesu dd pošlje USR1 signal. Ukaz povzroči izpis statusa delovanja programa, izvajanja procesa pa ne prekine:

sudo killall -USR1 dd

Dobimo približno takle izpis, ki v našem primeru kaže, da smo prepisali že 1,9 Gb podatkov:

116+1 zapisov na vhodu
116+0 zapisov na izhodu
1946157056 bytes (1,9 GB) copied, 426,526 sekunde, 4,6 MB/s

Uporaba orodja DBAN

Lahko pa uporabimo tudi orodje DBAN, s katerim stare podatke na disku učinkovito uničimo z večkratnim prepisovanjem, na izbiro pa imamo več metod. DBAN je potrebno najprej zapisati na disketo od koder računalnik tudi zaženemo in nato izberemo razdelek ali disk, ki naj ga program izbriše. Uporaba tega orodja je najbolj zanesljiva, vendar pa tudi najbolj dolgotrajna, če izberemo najbolj varno metodo brisanja.

Namestitev in uporaba šifrirnega programa cryptsetup

V nadaljevanju je najprej potrebno namestiti programski paket cryptsetup z LUKS podporo. LUKS oz. Linux Unified Key Setup podpora omogoča uporabo več gesel, ki jih je mogoče tudi spreminjati, predvsem pa zagotavlja standardni vmesnik za delo s šifriranimi nosilci podatkov. Cryptsetup z LUKS podporo uporablja tudi nekatere mehanizme s katerimi otežuje napade z grobo silo (tim. brute force attacks) v primeru uporabe šibkih gesel. Zelo priporočljivo je imeti nameščeno različico Linux jedra 2.6.16 ali novejšo, saj so starejše različice jedra vsebovale resno varnostno ranljivost v modulu dm-crypt. Ubuntu 7.04 sicer uporablja jedro 2.6.20, tako da glede tega ni težav.

Če programski paket že imamo nameščen najprej preverimo če imamo dovolj novo različico, in sicer tisto z LUKS (Linux Unified Key Setup) podporo. Najlažje to storimo tako, da v konzolo vpišemo:

cryptsetup --help

Če se na zaslonu pokaže izpis, ki omenja luksFormat, imamo pravo različico, sicer pa jo je potrebno namestiti, kar lahko storimo preko grafičnega namestilnika ali iz konzole:

sudo apt-get install cryptsetup

Ob tem velja pripomniti, da Ubuntu 7.04 v svojih skladiščih programskih paketov že vsebuje novejšo različico cryptsetupa (in sicer 1.0.5). Če uporabljamo Ubuntu brez povezave v internet ali živi namestitveni CD (tim. live CD), pa lahko uporabimo namestitveni deb paket, ki ga dobimo v Ubuntujevih skladiščih programskih paketov. Namestitveni paket zaženemo z dvoklikom nanj ali iz konzole z ukazom:

sudo dpkg -i cryptsetup_1.0.4+svn26-1ubuntu2_i386.deb

Namestitev šifriranja

Najprej naložimo ustrezne jedrne module:

sudo modprobe dm-crypt
sudo modprobe dm-mod
sudo modprobe aes
sudo modprobe sha256 

Dobro je tudi določiti, da se ob ponovnem zagonu sistema moduli samodejno naložijo. To storimo z vpisom teh modulov v datoteko /etc/modules. Iz konzole to lahko elegantno storimo z naslednjimi ukazi, lahko pa seveda uporabimo poljuben urejevalnik tekstovnih datotek v administratorskem načinu in module dodamo na koncu datoteke:

sudo su
echo dm-crypt >> /etc/modules
echo dm-mod >> /etc/modules
echo aes >> /etc/modules
echo sha256 >> /etc/modules
exit

S tem je naš računalnik prpravljen na uporabo šifriranja.

Uporaba razdelka za šifriranje

Če želimo šifriranje namestiti na poljubni razdelek, ga formatiramo s posebnim programom, ki namesti tudi šifrirno shemo. V našem primeru bomo formatirali z datotečnim sistemom ReiserFS (lahko bi izbrali tudi drug datotečni sistem, recimo ext3, FAT32 ali NTFS). Pri tem uporabimo ukaz luksformat:

sudo luksformat -t reiserfs /dev/sdc3

Dobimo izpis, ki nas opozori, da bomo v nadaljevanju izgubili vse podatke na izbranem razdelku. Za nadaljevanje je potrebno izraziti strinjanje, kar storimo tako, da z velikimi črkami vpišemo “YES”. Nato pa vpišemo še geslo za dostop do šifriranega razdelka (LUKS passphrase).

S tem geslom bomo kasneje dostopali do našega šifriranega razdelka, zato je treba biti pri izbiri previden in izbrati geslo, ki so ga bomo lahko zapomnili, a ga ne bo mogoče lahko uganiti. V primeru formatiranja z datotečnim sistemom reiserfs je potrebno le-to potrditi s pritiskom na “y”. Primer izpisa:

Creating encrypted device on /dev/sdc3...

WARNING!
========
This will overwrite data on /dev/sdc3 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: 
Verify passphrase: 
Command successful.
Please enter your passphrase again to verify it
Enter LUKS passphrase: 

UUID: 118a8e0a-b902-4757-8061-f1563edc9773
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
        ALL DATA WILL BE LOST ON '/dev/mapper/luksformat1'!
Continue (y/n):

ReiserFS is successfully created on /dev/mapper/luksformat1.

Uporaba celotnega diska za šifriranje

Namesto posameznega razdelka lahko uporabimo tudi celoten disk. V tem primeru je potrebno najprej pobrisati celoten disk (v primeru /dev/sdc):

dd if=/dev/urandom of=/dev/sdc bs=16M

Nato na njem ustvarimo nov razdelek z ukazom fdisk ali pa uporabimo grafični program GParted.

OPOZORILO: če na disku ne bomo ustvarili novega razdelka, bo sicer na disk še vedno mogoče namestiti šifrirno shemo s cryptsetup, vendar se nov šifrirani disk po vnosu gesla ne bo samodejno priklopil v sistem. Ob vklopu bomo sicer dobili poziv za vnos gesla, vendar bo potem napravo iz /dev/mapper/… potrebno ročno priklopiti v sistem (z ukazom mount).

S programom fdisk razdelek ustvarimo po naslednjem postopku:

sudo fdisk /dev/sdc

Najprej kot ukaz vnesemo n (dodaj nov razdelek):

Disk /dev/sdc: 38913 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an MSDOS signature
 /dev/sdc: unrecognised partition table type
No partitions found

Command (m for help): n

Nato določimo, da je razdelek primarni (p) in prvi (1):

Command action
   e   extended
   p   primary partition (1-4)

p
Partition number (1-4): 1
First steza (1-38913, default 1):
Using default value 1
Last steza or +size or +sizeM or +sizeK (1-38913, default 38913):
Using default value 38913

Na koncu spremembe zapišemo na disk z ukazom w (zapiši tabelo razdelkov in končaj):

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Razdelek je sedaj pripravljen na nadaljne delo oz. namestitev šifrirne sheme (opisana zgoraj).

Enako operacijo lahko naredimo tudi z grafičnim programom GParted, ki ga je potrebno zagnati z administratorskimi pravicami (v danem primeru smo uporabili napravo /dev/sde):

Formatiranje šifriranega razdelka z drugimi datotečnimi sistemi

Šifrirani razdelek lahko formatiramo tudi z drugimi datotečnimi sistemi. Z datotečnim sistemom FAT32 formatiramo z ukazom:

sudo luksformat -t vfat /dev/sdc3

Z datotečnim sistemom ext3 formatiramo z ukazom (enako velja za ext2, le da spremenimo ustrezni parameter):

sudo luksformat -t ext3 /dev/sdc3

Za formatiranje z NTFS pa je najprej potrebno namestiti programski paket ntfsprogs, za enostavnejšo podporo pisanju na NTFS pa morda tudi ntfs-config:

sudo apt-get install ntfsprogs ntfs-config

Sledi ukaz:

sudo luksformat -t ntfs /dev/sdc3

Seveda se v primeru izbire drugega datotečnega sistema izpis luksformata (progrma, ki namesti šifrirno shemo in šifrirani razdelek formatira) konča drugače, v primeru formatiranja z NTFS približno takole:

Cluster size has been automatically set to 512 bytes.
Initializing device with zeroes: 100% - Done.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.

Šifriranje virtualnih razdelkov

S cryptsetupom lahko šifriramo tudi virtualne razdelke, ki so fizično gledano posebne datoteke s sliko (ang. image) virtualnega razdelka. Edina zahteva je, da so datoteke večje od 1 Mb. Postopek je sledeč. Najprej ustvarimo posebno datoteko, ki bo postala virtualni razdelek, npr. mojtest.img:

touch mojtest.img

Sedaj datoteko pobrišemo in “raztegnemo” na velikost npr. 100 Mb. Pri tem lahko uporabimo ukaz shred, ki pobriše vsebino datoteke (uporabimo parameter -s, parameter -n1 pove kolikokrat bomo datoteko prepisali), ali pa prepišemo z dd (za 100 Mb veliko datoteko uporabimo bs=100 Mb, count=1, lahko pa bi uporabili tudi bs=50 Mb, count=2):

shred -n1 -s100M mojtest.img

ali:

dd if=/dev/urandom of=mojtest.img bs=100MB count=1

Nato najprej pogledamo katera je prva neuporabljena zankovna naprava (ang. loop device):

sudo losetup -f

Dobimo približno takle izpis, iz katerega sledi, da je prva neuporabljena zankovna naprava /dev/loop0:

/dev/loop0

Sedaj datoteko mojtest.img priklopimo na to napravo kot virtualni razdelek

sudo losetup /dev/loop0 mojtest.img

Sledi namestitev šifrirne sheme in formatiranje (v danem primeru z datotečnim sistemom ReiserFS - dobimo podobna vprašanja in izpis kot zgoraj)…

sudo luksformat -t reiserfs /dev/loop0

…nato v sistem priklopimo virtualni šifrirani razdelek…

sudo cryptsetup luksOpen /dev/loop0 mojcryptodisk

…na tem mestu je potrebno vnesti ustrezno geslo (dobimo približno takle izpis):

Enter LUKS passphrase: 
key slot 0 unlocked.
Command successful.

…na koncu pa le-tega kot virtualni končni razdelek na /mnt na katerega bomo lahko zapisovali podatke:

sudo mount /dev/mapper/mojcryptodisk /mnt

V danem primeru smo virtualni šifrirani razdelek priklopili na /mnt, lahko pa bi naredili tudi poseben podimenik (npr. /home/matej/mojcryptodisk) in ga priklopili tja.

Še odklop. Najprej odklopimo končni razdelek, nato šifrirani razdelek, na koncu pa še zankovno napravo (loop device):

sudo umount /mnt/
sudo cryptsetup luksClose mojcryptodisk
sudo losetup -d /dev/loop0

Uporaba večjega ključa

Privzeto cryptsetup v Ubuntu Linuxu uporablja 128 bitne ključe. Za posamezni šifrirani razdelek lahko pogledamo podatke o dolžini ključa in uporabljenem šifrirnem algoritmu tako, da najprej pogledamo kateri razdelki so priključeni v sistem z ukazom:

ls -l /dev/mapper/

Dobimo približno takle izpis:

crw-rw---- 1 root root  10, 63 2007-06-15 14:25 control
brw-rw---- 1 root disk 254,  1 2007-06-27 08:05 crypto-test
brw-rw---- 1 root disk 254,  0 2007-06-27 08:00 temporary-cryptsetup-18222

V sistemu je v vsakem prmeru prisotna datoteka control, ostale datoteke pa so šifrirani razdelki (v našem primeru imamo torej priključena razdelka crypto-test ter temporary-cryptsetup-18222). Za posamezezen razdelek sedaj pogledamo podatke o šifriranju:

sudo cryptsetup status crypto-test
/dev/.static/dev/mapper/crypto-test is active:
  cipher:  aes-cbc-essiv:sha256
  keysize: 128 bits
  device:  /dev/sdc1
  offset:  2056 sectors
  size:    495896 sectors
  mode:    read/write

Iz izpisa sledi, da na razdelku crypto-test uporabljamo 128-bitni ključ. Z ukazom:

cat /proc/crypto

si lahko ogledamo katere šifrirne module imamo prisotne v sistemu in kakšna je največja dolžina ključa, ki ga lahko uporabimo. Iz izpisa sledi, da je največja dolžina ključa za šifrirni algoritem AES 256 bitov (32 zlogov * 8 bitov = 256 bitov)

min keysize  : 16
max keysize  : 32

Če želimo uporabiti tak ključ, je potrebno uporabiti naslednji ukaz (v primeru nameščanja šifrirne sheme na razdelek /dev/sdc3):

sudo cryptsetup --key-size 256 luksFormat /dev/sdc3

Nato razdelek priključimo…

sudo cryptsetup luksOpen /dev/sdc1 crypto-test

…in ga formatiramo:

sudo mkfs.ext3 /dev/mapper/crypto-test

Namesto ukaza mkfs.ext3 lahko uporabimo mkfs.ext2, mkfs.ntfs, mkfs.vfat, mkfs.reiserfs, ali kaj drugega.

(Prvi) priklop šifriranega razdelka v sistem

Če smo uporabili razdelek na USB disku, ga fizično odklopimo in ga ponovno priključimo nazaj. Prikaže se okno za vnos gesla:

Vnesemo ustrezno geslo in razdelek je že ustrezno priključen v sistem. Naprava /dev/sdc3 je sedaj priključena na /dev/mapper/ (ki skrbi za šifriranje podatkov), le ta pa na /media/disk-1. V nadaljevanju je smiselno šifrirani razdelek preimenovati, kar nam delo z njim še nekoliko olajša. Šifrirani razdelek odklopimo z desnim klikom nanj in ukazom Izvrzi oz. Odklopi.

Mimogrede, šifrirani razdelek lahko priključimo tudi ročno iz konzole:

sudo cryptsetup luksOpen /dev/sdc3 mojdisk

Ukaz šifrirani razdelek /dev/sdc3 priključi na virtualno napravo /dev/mapper/mojdisk. Ubuntu novo napravo takoj priključi na /media (v našem primeru na /media/disk, kar vidimo s pomočjo ukaza mount). To sicer lahko storimo tudi ročno, npr. z ukazom:

sudo mount /dev/mapper/mojdisk /mnt

Napravo lahko tudi ročno odklopimo. Najprej jo odklopimo iz “nivoja datotečnega sistema”:

sudo umount /media/disk/

Nato pa še iz “nivoja šifriranja”:

sudo cryptsetup luksClose mojdisk

Sedaj USB disk lahko fizično odklopimo iz računalnika.

Sprememba imena razdelka (ang. volume label)

Najprej pogledamo kje je razdelek priklopljen:

mount

Dobimo približno takle izpis iz katerega sledi, da je ime razdelka (v našem primeru) disk-1:

/dev/mapper/luks_crypto_6671949e-937d-4387-9f7a-f317166d8bae on /media/disk-1 type reiserfs (rw,noexec,nosuid,nodev)

Iz izpisa sledi, da je razdelek priklopljen na /media/disk-1. Sedaj najprej programsko odklopimo šifrirani razdelek iz sistema (ne pa tudi iz nivoja šifriranja):

sudo umount /media/disk-1

Sprememba imena razdelka z datotečnim sistemom ReiserFS

V opisanem primeru bomo šifrirani razdelek poimenovali USB-crypt. Vnesemo ukaz:

sudo reiserfstune /dev/mapper/luks_crypto_6671949e-937d-4387-9f7a-f317166d8bae -l USB-crypt

Sprememba imena razdelka z datotečnim sistemom FAT32

Sprememba imena razdelka z datotečnim sistemom FAT32 pod Linuxom s pomočjo orodja mtools oz. mlabel na šifriranih razdelkih žal ne deluje, zato je verjetno najbolj enostavno spremembo opraviti v okolju Windows.

Sprememba imena razdelka z datotečnim sistemom NTFS

Uporabimo ukaz ntfslabel (nameščen moramo imeti paket ntfsprogs):

sudo ntfslabel /dev/mapper/luks_crypto_6671949e-937d-4387-9f7a-f317166d8bae USB-crypt

Sprememba imena razdelka z datotečnim sistemom ext3

Uporabimo ukaz e2label (isti ukaz lahko uporabimo na datotečnem sistemu ext2):

sudo e2label /dev/mapper/luks_crypto_6671949e-937d-4387-9f7a-f317166d8bae USB-crypt

Razdelek lahko sedaj ponovno priklopimo in njegovo ime bo sedaj USB-crypt, priklopljen pa bo na /media/USB-crypt.

Nastavljanje ustreznih pravic za pisanje na šifrirani razdelek z datotečnim sistemom ReiserFS, ext3 in ext2

Privzeto ima lastniške pravice za pisanje na šifrirani razdelek z datotečnim sistemom ReiserFS, ext3 in ext2 korenski uporabnik (tim. root) oz. administrator sistema. Tega problema pri FAT32 in NTFS razdelkih ni, saj jih Ubuntu samodejno priključi v polnem bralno-pisalnem načinu.

Rešitev problema je, da ustvarimo poseben imenik, ki ga dodelimo trenutnemu uporabniku…

sudo mkdir /media/USB-crypt/matej
sudo chown -R matej.matej /media/USB-crypt/*

…ali pa trenutnemu upoarbniku dodelimo celoten disk:

sudo chown -R matej.matej /media/USB-crypt/

Sedaj ima uporabnik matej možnost pisanja v podimenik /matej oziroma na celoten disk brez dodatnih administratorskih pravic.

Dodajanje in odvzemanje gesel za dostop do šifriranega razdelka

Če želimo, lahko dodajamo ali odstranjujemo gesla za dostop do šifriranega razdelka. To lahko storimo pri priključeni ali programsko odklopljenem šifriranem razdelku. Gesla se shranjujejo na posebna mesta (ang. slot) v šifriranem razdelku, ki se štejejo od nič dalje. Prvo geslo se torej nahaja na mestu 0, drugo na mestu 1, itd. Če želimo, lahko najprej pogledamo koliko prostih mest imamo še na voljo:

cryptsetup luksDump /dev/sdc3

Dodajanje gesla je sedaj mogoče z naslednjim ukazom (kot parameter ukazu podamo razdelek, torej /dev/sdc3):

sudo cryptsetup luksAddKey /dev/sdc3

Najprej je treba vnesti enega izmed obstoječih gesel, nato pa novo geslo, ki ga še potrdimo. Izpis je približno takle:

Enter any LUKS passphrase: 
key slot 0 unlocked.
Enter new passphrase for key slot: 
Verify passphrase: 
Command successful.

Brisanje gesla iz mesta 1 (kot parameter ukazu podamo razdelek, torej /dev/sdc3 in številko mesta, torej 1.

sudo cryptsetup luksDelKey /dev/sdc3 1

Najprej je potrebno vnesti enega izmed obstoječih gesel (vendar pa ne tistega, ki ga želimo odstraniti). Še opozorilo: če odstranimo vsa gesla, je dostop do šifriranega razdelka za vedno onemogočen. Izpis je približno takle:

Enter any remaining LUKS passphrase: 
key slot 0 unlocked.
Command successful.

Sprememba gesla je mogoča tako, da najprej dodamo novo geslo, nato pa izbrišemo starega.

Uporaba LUKS šifriranih razdelkov v okolju Windows

Uporaba LUKS šifriranja (ki ga podpira program cryptsetup) ima še eno prednost. LUKS šifrirane razdelke je namreč mogoče uporabiti tudi v okolju Windows ter celo v PDA napravah. Pri tem si pomagamo s programom FreeOTFE, ki teče v okoljih MS Windows 2000/XP/Vista ter Windows Mobile 2003/2005 za PDA naprave. Uporaba programa je precej enostavna. Iz spleta prenesemo kompresirano ZIP datoteko, jo odpremo in zaženemo FreeOTFE.exe. Program nas vpraša, če ga želimo zagnati v tim. “mobilnem načinu” (portable mode), pri katerem ni potrebna namestitev. A pozor: za zagon programa potrebujemo administratorske privilegije. Med nastavitvami lahko kasneje nastavimo, da se program vedno in samodejno zažene v mobilnem načinu.

Priklop šifriranega razdelka je enostaven. V meniju File izberemo možnost Linux volume in nato Mount partition:

Nato vnesemo geslo:

Pritisnemo OK

…in razdelek je priključen:

Žal pri uporabi naprednejših datotečnih sistemov kot npr. ext3 ali ReiserFS v okolju Windows naletimo na težave, saj operacijski sistem po priklopu šifriranega razdelka na USB ključu sicer zazna nov nosilec, ne pa tudi datotečnega sistema na njem in zato želi novo napravo formatirati. Težavo lahko rešimo tako, da šifrirani razdelek v Linuxu formatiramo z datotečnim sistemom FAT32 oziroma z NTFS, ali pa v okolju Windows namestimo gonilnike za alternativne datotečne sisteme. Teh težav v Linuxu ni, saj zna Linux brati in zapisovati na vse datotečne sisteme, ki jih uporabljajo Windowsi.

V tem primeru je šifrirani razdelkek v okolju Windows takoj po uspešnem priklopu povsem normalno viden:

Uporaba datotek s ključem: uporaba LUKS šifriranih razdelkov v organizacijskem okolju

Ker cryptsetup omogoča uporabo več gesel, je mogoče šifrirane razdelke uporabljati tudi v večuporabniških okoljih, pri čemer imajo različni uporabniki lahko različna gesla. V primeru uporabe šifriranja v večjih organizacijah pa pogosto prihaja do problema, da uporabniki pozabljajo gesla. Težavo je mogoče rešiti tako, da vsakemu šifriranemu razdelku dodelimo posebno rezervno geslo, ki je shranjeno pri administratorju oz. upravljalcu šifrirnih ključev. V primeru, da uporabnik pozabi geslo, ga upravljalec šifrirnih ključev s svojim ključem lahko enostavno obnovi. Seveda je v tem primeru pomembno zaupanje: zaupanje, da uporabnik rezervnega gesla ne bo odstranil ter zaupanje, da bo upravljalec šifrirnih ključev z rezevnim ključem ravnal skrbno in odgovorno. To vključuje tudi varno shrambo rezervnega šifrirnega ključa.

Možnost zlorabe je mogoče nekoliko zmanjšati z uporabo datotek s ključem, ki jih lahko shranimo v sefu. Upravljalec šifrirnih ključev namreč bistveno lažje namerno ali pomotoma komu pove navadno rezervno šifrirno geslo, kot pa iz ustrezno varovanega sefa odnese datoteko s ključem, ki vsebuje niz naključnih znakov. V nadaljevanju so bomo ogledali kako je na šifrirana mesta v šifriranem razdelku mogoče dodati datoteko s ključem, ki vsebuje naključen niz znakov.

Ustvarjanje datoteke s ključem

Najprej ustvarimo datoteko s ključem, ki vsebuje 2048-bitni ključ (256 znakov x 8 bitov = 2048 bitni ključ). Datoteko s ključem poimenujmo keyfile:

dd if=/dev/random of=keyfile bs=1 count=256

V tem primeru je smiselno uporabiti pravi in ne psevdonaključni generator, saj je datoteka s ključem razmeroma majhna. Ker je potrebno zbrati nekaj entropije po vnosu ukaza lahko premikamo miško ali pritiskamo tipke na tipkovnici.

Dodajanje datoteke s ključem na šifrirno mesto

Nato v novo šifrirno mesto dodamo datoteko s ključem. Predpostavimo, da uporabljamo šifrirani razdelek, ki se nahaja na /dev/sdc3:

sudo cryptsetup luksAddKey /dev/sdc3 keyfile

Vnesemo obstoječe geslo in postopek je končan:

Enter any LUKS passphrase: 
key slot 0 unlocked.
Command successful.

Datoteko s ključem je sedaj potrebno varno shraniti. Potrebno je tudi zagotoviti, da se pri npr. zapisovanju na CD ne shrani v kakšen začasni imenik. Če želimo, lahko preverimo, da je datoteka s ključem zares shranjena na šifrirnem mestu 1:

sudo cryptsetup luksDump /dev/sdc3
LUKS header information for /dev/sdd1

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      87 5b b3 23 07 a7 0b 27 0f 67 f5 00 6c 42 ff 92 47 87 8b cb 
MK salt:        ed f4 ac 6c df d9 ea 61 2c 41 0c 52 84 aa 3e 24 
                35 d7 ec ce 3a a8 87 83 b1 a8 ab 30 8b e6 c2 32 
MK iterations:  10
UUID:           221e9736-353e-4814-8553-1e055d9f635c

Key Slot 0: ENABLED
        Iterations:             81401
        Salt:                   c1 f4 39 a9 ef bf 37 f5 4a 0e a4 6f ac 82 e5 e2 
                                d8 fa d4 44 62 55 d0 06 c2 e6 24 66 97 dc de 75 
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             60694
        Salt:                   d3 89 65 63 be 61 b6 52 58 9b d4 ac 35 d9 c6 e3 
                                88 f0 a8 91 d3 c6 c4 31 80 96 ad d7 14 aa fa 0f 
        Key material offset:    136
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Datoteko s ključem iz mesta 1 lahko odstranimo z istim ukazom, kot odstranjujemo običajna gesla.

Priklop šifriranega razdelka s pomočjo datoteke s ključem

V primeru izgube šifrirnega gesla, lahko šifrirani razdelek priklopimo z rezervno datoteko s ključem z ukazom (uporabimo datoteko s ključem /home/matej/keyfile, priklopimo pa razdelek /dev/sdc3 kot cryptorazdelek):

sudo cryptsetup -d /home/matej/keyfile luksOpen /dev/sdc3 cryptorazdelek

Šifrirani razdelek se sedaj nahaja na /dev/mapper/cryptorazdelek in če se ne priklopi sam, ga lahko priklopimo ročno na npr. /mnt z ukazom mount.

Dodajanje novega gesla s pomočjo datoteke s ključem

Če želimo, lahko sedaj s pomočjo datoteke s ključem dodamo novo geslo na novo šifrirno mesto. Uporabimo ukaz:

sudo cryptsetup -d keyfile luksAddKey /dev/sdc1

…in dobimo približno takle izpis, kjer vnesemo novo geslo, ki se v našem primeru doda na šifrirno mesto 1:

key slot 1 unlocked.
Enter new passphrase for key slot: 
Verify passphrase: 
Command successful.

Staro geslo (na šifrirnem mestu 0) odstranimo z ukazom:

sudo cryptsetup luksDelKey /dev/sdc1 0 keyfile 

Uporaba šifrirnega programa TrueCrypt

Za konec si bomo ogledali še uporabo šifrirnega programa TrueCrypt pod Linuxom. TrueCrypt je namenjen šifriranju diskovnih razdelkov, je odprtokoden in brezplačen, četrta različica pa je poleg različice za okolje Windows prinesla tudi različico za Linux, kar pomeni, da lahko program uporabljamo tako v okolju Linux, kot v okolju Windows.

TrueCrypt ima številne uporabne funkcije, med drugim lahko znotraj šifriranega razdelka ustvari še skriti razdelek. Vsak je seveda dostopen s svojim geslom. V primeru, da smo prisiljeni razkriti svoje šifrirne ključe, lahko razkrijemo samo ključ navadnega razdelka, z običajno kriptoanalizo pa ni mogoče ugotoviti, da se znotraj te skriva še eden s podatki, ki jih zares želimo skriti (tim. plausible deniability). Različica 4 prinaša še novost, saj lahko z vpisom posebnega gesla priklopimo navadni razdelek, vendar tako, da podatki, ki jih zapisujemo nanjo ne prepišejo podatkov na skritem razdelku (torej priključimo oba razdelka hkrati). Uporabno za vse, ki živijo v nedemokratičnih državah.

TrueCrypt je mogoče zagnati tudi v tim. potovalnem načinu (ang. traveller mode), kar pomeni, da razdelek lahko prenašamo na npr. USB ključu in ga prikopimo tudi na računalnikih, kjer TrueCrypt ni nameščen, vendar za zagon potrebujemo administratorske privilegije. Nova različica tudi ničesar ne zapisuje v Windows register, pač pa v posebne XML datoteke, kar povečuje anonimnost uporabe programa. Program podpira možnost lokalizacije in uporabo datotek s ključem (ang. keyfiles) - gre za datoteko, ki šele skupaj z geslom omogoča priklop šifriranega razdelka. Datoteka je lahko kakršnakoli, recimo GIF slika ali MP3, v primeru da datoteka ni prisotna, pa priklop šifriranega razdelka samo z geslom sploh ni mogoč.

Grafični vmesnik v okolju Windows omogoča enostavno ustvarjanje in delo s šifriranimi TrueCrypt razdelki, ki jih je mogoče uporabljati tako v okolju Windows, kot v okolju Linux. TrueCrypt omogoča uporabo pravih ali virtualnih šifriranih razdelkov.

Namestitev programa TrueCrypt

Program najprej prenesemo iz uradne spletne strani. Na voljo sta tudi različici za Ubuntu 6.10 in Ubuntu 7.04, ki ju lahko shranimo na disk, razširimo tar.gz datoteko in namestimo deb paket tako, da nanj dvakrat kliknemo:

Ročna namestitev programa TrueCrypt

Če uporabljamo kakšno drugo Linux distribucijo lahko prenesemo datoteko z izvorno kodo in jo razširimo:

tar xvfz truecrypt-4.3a-source-code.tar.gz
cd truecrypt-4.3a-source-code/Linux/

Pred namestitvijo moramo namestiti še izvorno kodo Linux jedra. Najprej pogledamo različico našega trenutnega Linux jedra:

uname -r

Dobimo približno naslednji izpis:

2.6.20-15-generic

Iz izpisa sledi, da uporabljamo jedro 2.6.20, torej bomo potrebovali programski paket linux-source-2.6.20:

sudo apt-get install linux-source-2.6.20
cd /usr/src/
sudo tar xvjf linux-source-2.6.20.tar.bz2

Ustvarimo še simbolno povezavo do izvorne kode Linux jedra…

sudo ln -s linux-source-2.6.12 linux

…ter namestimo orodja potrebna za prevajanje:

sudo apt-get install build-essential

Sedaj poženemo namestitveno skripto (na vsa vprašanja odgovorimo s privzetimi odgovori, torej pritisnemo tipko enter):

cd
cd truecrypt-4.3a-source-code/Linux/
sudo ./build.sh
sudo ./install.sh

Postopek namestitve je s tem končan.

Ustvarjanje novega šifriranega TrueCrypt virtualnega razdelka

V Linuxu nov TrueCrypt razdelek ustvarimo s pomočjo parametra -c, ki mu podamo lokacijo TrueCrypt datoteke ali razdelka, ki bo šifriran (npr. /dev/sdc3). Predpostavimo, da bomo TruCrypt razdelek poimenovali mojtest.tc:

sudo truecrypt -c mojtest.tc

V nadaljevanju najprej določimo tip nosilca: običajen (normal) ali skriti (hidden):

Volume type:
 1) Normal
 2) Hidden
Select [1]: 

Izberemo še datotečni sistem (pravzaprav je na voljo le FAT):

Filesystem:
 1) FAT
 2) None
Select [1]:

Vnesemo velikost TrueCrypt razdelka (npr. 2M za 2 Mb):

Enter volume size (bytes - size/sizeK/sizeM/sizeG):

Izberemo zgostitveni in šifrirni algoritem (npr. RIPEMD-160 ter AES):

Hash algorithm:
 1) RIPEMD-160
 2) SHA-1
 3) Whirlpool
Select [1]: 
Encryption algorithm:
 1) AES
 2) Blowfish
 3) CAST5
 4) Serpent
 5) Triple DES
 6) Twofish
 7) AES-Twofish
 8) AES-Twofish-Serpent
 9) Serpent-AES
10) Serpent-Twofish-AES
11) Twofish-Serpent
Select [1]: 

Na koncu vnesemo geslo za dostop oziroma lokacijo datoteke s ključem (njena vsebina predstavlja šifrirni ključ zato je pomembno, da je kasneje ne spreminjamo):

Enter password for new volume 'mojtest.tc': 
Re-enter password: 

Enter keyfile path [none]: 

Na koncu moramo zbrati še nekaj entropije s pomočjo premikanja miške:

Is your mouse connected directly to computer where TrueCrypt is running? [Y/n]: 
Please move the mouse randomly until the required amount of data is captured...
Mouse data captured: 12% 

In TrueCrypt datoteka je izgotovljena:

Done: 2.00 MB  Speed: 1.74 MB/s  Left: 0:00:00  
Volume created.

Ker smo datoteko ustvarili kot uporabnik z administratorskimi pravicami ji na koncu še popravimo lastništvo:

sudo chown matej.matej mojtest.tc

S tem je postopek končan. V okolju Windows je postopek podoben, le da ga izvedemo preko grafičnega vmesnika. Iz menija Volumes izberemo Create New Volume in sledimo preprostim navodilom.

Priklop šifriranega TrueCrypt razdelka

V okolju Windows TrueCrypt razdelke priklapljamo s pomočjo grafičnega vmesnika: najprej izberemo datoteko, nato pa črko nosilca (npr. X:) in pritisnemo Mount. Grafičnega vmesnika za TrueCrypt v okolju Linux sicer še ni, zato je potrebno ukaze vnašati preko konzole. Predpostavimo, da želimo priključiti virtualni šifrirani razdelek, ki se nahaja v obliki šifrirane datoteke na USB disku. USB disk je priključen na lokacijo /media/MATEJ/, virtualni šifrirani razdelek pa bomo priključili na /mnt. Uporabimo naslednji ukaz:

sudo truecrypt /media/MATEJ/TrueCrypt/mobile.tc /mnt/

Vnesemo TrueCrypt geslo…

Enter password for '/media/MATEJ/TrueCrypt/mobile.tc':

…in razdelek je priključen na /mnt.

Izpis priključenih TrueCrypt razdelkov

sudo truecrypt -vl

Dobimo približno tak izpis:

/dev/mapper/truecrypt0:
Volume: /media/MATEJ/TrueCrypt/mobile.tc
Type: Normal
Size: 15728128 bytes
Encryption algorithm: AES
Mode of operation: LRW
Read-only: No
Hidden volume protected: No

Odklop TrueCrypt razdelkov

TrueCrypt razdelke lahko odklopimo s parametrom -d, ki mu dodamo lokacijo TrueCrypt razdelka (npr. /media/MATEJ/TrueCrypt/mobile.tc):

sudo truecrypt -d /media/MATEJ/TrueCrypt/mobile.tc

Ukaz:

sudo truecrypt -d

pa odklopi vse priključene TrueCrypt razdelke.

Zaključek

Kot smo torej videli, je uporaba šifriranja nosilcev podatkov razmeroma enostavna in precej dobro integrirana v Ubuntu Linux, šifriranje pa je mogoče uporabiti na različnih platformah, kar mu pravzaprav daje veliko stopnjo uporabnosti. Uporabniki, ki cenijo svoje podatke in svojo zasebnost, imajo torej na voljo dovolj alternativ, da se učinkovito zaščitijo. V Linuxu je to najbolj enostavno s tremi preprostimi koraki:

  1. namestimo programski paket cryptsetup in naložimo ustrezne jedrne module
  2. izbrani razdelek na nosilcu podatkov prepišemo z naključnimi znaki (opcijsko)
  3. razdelek formatiramo s programom luksformat, kjer določimo geslo za dostop do njega.

Oziroma:

  1. namestimo šifrirni program TrueCrypt
  2. ustvarimo šifriran virtualni razdelek (kjer določimo velikost, geslo in ostale nastavitve).

Od tu naprej s šifriranim razdelkom delamo kot z običajnimi razdelki, le s to razliko, da so podatki na njem varni pred nepooblaščenimi zasegi. Podobno enostavna je uporaba šifriranja v okolju Windows, le da namesto programa cryptsetup uporabimo FreeOTFE oziroma različico TrueCrypta za Windows.

Forenzična analiza šifriranega razdelka ni našla iskanega niza.

Forenzični program PhotoRec na šifriranem razdelku ni našel nobene datoteke.

Mimogrede, v skladu s pravnim načelom, ki prepoveduje samoobtožbo (ang. self-incrimination) osebi v kazenskem postopku ni potrebno razkriti šifrirnih ključev ali gesel. Pravna podlaga za to v ZDA je 5. amandma ameriške ustave, v Evropi je to pravico že večkrat priznalo Evropsko sodišče za človekove pravice na podlagi 6. člena Evropske konvencije o človekovih pravicah ki govori o pravici do poštenega sojenja, pravno podlago za to pa daje tudi 14. (3) (g) člen Mednarodnega pakta o državljanskih in političnih pravicah.

V Sloveniji je prepoved samoobtožbe ustavna kategorija, saj 29. člen Ustave določa, da obdolženec kaznivega dejanja ni dolžan izpovedati zoper sebe ali svoje bližnje, ali priznati krivde, podobno določbo pa ima tudi 5. člen Zakona o kazenskem postopku.

Prisilna dejanja za razkritje gesel ali ključev so torej v pravni državi za osumljenca ali obtoženca nezakonita, mogoče pa jih je uporabiti zgolj za priče v postopku.

Čisto za konec pa še namig za uporabnike Linuxa, glede rednega shranjevanja varnostnih kopij. Uporabite lahko orodje rsync, ki ustvari varnostne kopije podatkov. Orodje ob prvem prenosu ustvari varnostno kopijo, kasneje pa zna prenesti samo spremembe datotek. Ukaz, s katerim si iz npr. /home/matej ustvarimo varnostno kopijo podatkov na /media/USB-crypt/matej/ in pri tem ohranimo čas nastanka, lastništvo in dovoljenja nad datotekami je sledeč:

sudo rsync --verbose --progress --stats --compress --rsh=/usr/bin/ssh --recursive --times --perms --acls --links --owner --group --executability --delete /home/matej/ /media/USB-crypt/matej/

Dodatno branje

Vzpostavitev v celoti šifriranega sistema - Ubuntu Feisty

Avtorja: Matej Kovačič, Jožko Škrablin

Priporočamo, da si najprej preberete članek z naslovom: Šifriranje nosilcev podatkov v okolju Linux in Windows.

Opozorilo: Uporaba spodaj opisanih postopkov lahko privede do resne izgube podatkov ali do okvare sistema. V nekaterih nedemokratičnih državah je osebna uporaba močnega šifriranja nezakonita. Uporaba na lastno odgovornost.


15. junija 2004 je italijanska policija vstopila v prostore ponudnika internetnih storitev in spletnega gostovanja Aruba, kjer so se nahajali strežniki aktivističnih organizacij Autistici in Inventati. Organizaciji sta različnim nevladnim organizacijam in političnim aktivistom ponujali brezplačno spletno gostovanje, elektronsko pošto ter poštne sezname. Preiskovalci so od ponudnika internetnih storitev zahtevali, da strežnik ugasnejo. Nato so trdi disk iz strežnika priključili na svoj računalnik ter iz njega prekopirali šifrirne ključe za dostop do elektronske pošte. Strežnik so nato ponovno zagnali. Predstavnik organizacij Autistici in Inventati je seveda opazil, da strežnik nekaj časa ni deloval, zato je poklical ponudnika spletnega gostovanja kaj je narobe. Dobil je odgovor, da je šlo za krajši izpad elektrike. Administratorji sistema so incident odkrili šele čez leto dni - ves ta čas pa je policija imela nešifriran dostop do elektronske pošte vseh njihovih uporabnikov.

12. marca 2007 sta dva odvisnika vlomila v stanovanje članu ter administratorju spletne strani Gibanja za pravičnost in razvoj in ukradla prenosni računalnik. V računalniku so bili shranjeni različni dokumenti, med drugim tudi seznam članov gibanja z njihovimi osebnimi podatki. V kasnejši policijski preiskavi so računalnik našli, ugotovili pa so tudi, da naj podatki iz njega ne bi bili prekopirani drugam.

Konec avgusta 2006 je CNN poročal, da so sudanske varnostne sile na letališčih pričele zasegati in pregledovati prenosne računalnike, s katerimi potniki vstopajo v to državo. Lastniki računalnike po približno enodnevnem pregledu sicer dobijo nazaj, uradno pa računalnike pregledujejo zato, da kakšen tujec v državo ne bi vnesel pornografije. Neuradno pa sudanske oblasti verjetno zanimajo povsem druge stvari. Poleg velikega števila osebnih podatkov in gesel za dostop do elektronske pošte ter on-line storitev (tudi bančnih računov), se oblasti verjetno najbolj zanimajo za informacije poslovnih uporabnikov, mirovnih aktivistov in humanitarnih organizacij, ki so objavljale poročila o množičnih kršitvah človekovih pravic v tej državi. Zasegov in pregledovanja prenosnih računalnikov na mejah ne izvaja samo nedemokratični Sudan, pač pa tudi najbolj ZDA. Ameriški mejni organi so januarja 2004 zasegli in preiskali prenosni računalnik nekega potnika. Računalnik so forenzično obdelali in v izbrisanem brskalnikovem medpomnilniku našli slike z otroško pornografijo. Po pritožbi pa je Zvezno prizivno sodišče 24. julija letos presodilo, da so naključni zasegi prenosnih računalnikov in pregledovanja s pomočjo forenzičnih programov v ZDA zakoniti. (Slo-Tech, 16. 9. 2006)


Pri varnosti potrebno odločati med udobjem in varnostjo. Treba se je pač odločiti ali nam več pomeni varnost naših podatkov, ali pa udobje brezbrižnosti. 8-) Šifriranje diskov nekoliko upočasni delovanje sistema (čeprav je to pri običajni rabi na običajnem računalniku povsem neopazno). Uporaba šifriranja pa lahko v primeru napake oziroma okvare trdega diska privede do resne izgube podatkov. V primeru uporabe šifriranja zato poskrbite za ustrezne varnostne kopije. Podatki naj se nikoli ne nahajajo samo na enem (šifriranem) nosilcu.

Zakaj?

Ena izmed možnosti napada na računalniške sisteme je tudi tim. offline napad, torej napad, ko napadalec pridobi fizični dostop do računalnika medtem, ko je le-ta ugasnjen. V primeru fizičnega dostopa do (ugasnjenega) računalnika - lahko gre tudi za izgubo, krajo ali pa lastnik računalnik nese na servis - napadalec lahko dostopa do trdega diska in podatkov na njem.

Nevarnost obstaja tudi, če imamo nekatere kritične podatke šifrirane. Nešifrirani lahko ostanejo podatki v medpomnilniku (tim. cache in swap), v raznih začasnih datotekah (tmp) ali v raznih datotekah beleženja aktivnosti (tim. log datoteke). Izbrisane podatke je mogoče tudi rekonstruirati s pomočjo različnih forenzičnih tehnik. Šifriranje samo nekaterih datotek ali samo nekaterih particij zato včasih ni dovolj. Rešitev proti takšnim napadom je šifriranje celotnega sistema. Izraz pravzaprav ni povsem natančen, saj ne šifriramo čisto vsega (npr. RAM pomnilnika), pač pa “samo” podatke na trdem disku. Ker moramo sistem vseeno nekako zagnati, mora ostati vsaj delček sistema (zagonski razdelek) nešifriran.

V nadaljevanju si bomo ogledali kako vzpostaviti šifriranje celotnega operacijskega sistema Ubuntu Linux (različica 7.04 Feisty Fawn). Nešifriran ostane samo zagonski razdelek (/boot), korenski imenik (tim. root), domači imenik (/home) in izmenljivi prostor (tim. swap), pa so šifrirani z uporabo LUKS modula programskega paketa cryptsetup. LUKS oz. Linux Unified Key Setup podpora omogoča uporabo več gesel, ki jih je mogoče tudi spreminjati, predvsem pa zagotavlja standardni vmesnik za delo s šifriranimi nosilci podatkov. Cryptsetup z LUKS podporo uporablja tudi nekatere mehanizme s katerimi otežuje napade z grobo silo (tim. brute force attacks) v primeru uporabe šibkih gesel.

Tako postavljen sistem bo mogoče zagnati (oz. dostopati do diskov) samo s pomočjo gesla, ki ga vnesemo ob zagonu sistema, sicer pa tako postavljen sistem deluje povsem običajno.

Šifriranje diskov: Debian way

Eden prvih, če ne povsem prvi operacijski sistem, ki je v namestitveni proces uvedel šifriranje trdih diskov je Debian Linux, ki ima podporo za šifrirane diske od različice Echt dalje.

Debianov namestilnik namreč uporabnikom omogoča, da ustvarjajo šifrirane razdelke že med samim namestitvenim procesom:

Pri Debianu je uporaba šifriranih razdelkov dobro integrirana v sam sistem, težava je le v tem, da je Debian Linux uporabniško precej neprijazen in večinoma namenjen strežnikom. Po drugi strani pa na Debianu temeljijo številne druge distribucije Linuxa, med drugim tudi Ubuntu, poleg tega je Debian pogosto postavljal standarde razvoja Linuxa, zato lahko pričakujemo, da bo vgrajena podpora za šifrirane razdelke počasi postala sestavni del ostalih Linux distribucij.

Prenos in namestitev strežniške različice Ubuntu 7.04

Po drugi strani pa z nekoliko več dela lahko šifriran sistem vzpostavimo tudi pod Ubuntu Linuxom, ki velja za enega bolj uporabniško prijaznih. Za razliko od Debiana, ki pri vzpostavitvi šifriranega sistema uporablja osnovni cryptsetup, pa lahko pri v nadaljevanju opisanem postopku uporabimo cryptsetup z LUKS podporo, kar nam omogoča enostavno menjavanje šifrirnih gesel in ključev.

Ker podpora za šifriranje sistema žal v Ubuntu še ni privzeto vgrajena, se je potrebno poslužiti nekaterih trikov. Tako na računalnik najprej namestimo strežniško različico Ubuntu Linuxa, vzpostavimo šifrirane razdelke, nato pa nanje namestimo namizno različico Ubuntu Linuxa in strežniško odstranimo.

Iz interneta si najprej prenesemo strežniško različico Ubuntu Linuxa - Ubuntu 7.04 Server Edition (ubuntu-7.04-server-i386.iso) in jo zapečemo na CD. Računalnik zaženemo iz CD-ja in pričnemo z namestitvenim postopkom.

Prepis diska z naključnimi podatki

Preden se lotimo šifriranja podatkovnih nosilcev 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.

Stare podatke je namreč z nekaterimi programsko forenzičnimi tehnikami (npr. z orodji kot so Autopsy Forensic Browser, Testdisk, Photo Rec, in drugi) mogoče precej enostavno obnoviti, poleg tega pa je prepisovanje diska z naključnimi podatki koristno tudi zato, ker na tako prepisanem disku ni mogoče (oz. je to izredno težko) ugotoviti koliko pravih šifriranih podatkov je na disku in koliko je praznega prostora.

Po drugi strani pa je prepisovanje diska z naključnimi podatki precej dolgotrajen postopek. Več o prepisovanju diska z naklljučnimi podatki si preberite v članku o šifriranju nosilcev podatkov v okolju Linux in Windows, poglavje "Prepis diska ali razdelkov z naključnimi podatki", najbolj optimalno pa je če iz live CDja uporabimo ukaz dd. V primeru prepisovanja trdega diska hda, to izgleda takole:

dd if=/dev/urandom of=/dev/hda bs=16M

Postopek namestitve Ubuntu strežnika

OPOZORILO: zaradi napake v jedru operacijskega sistema Feisty strežniške različice, le-te ni mogoče namestiti v nekatere virtualne stroje (npr. Vmware in VirtualBox), oziroma je namestitev potrebno kasneje ročno popravljati.

Če nameščamo na obstoječi disk, je potrebno razmisliti ali ni smiselno disk prepisati z naključnimi podatki. Ko je disk pripravljen, pričnemo z namestitvijo. Najprej izberemo Install to the hard disk.

V naslednjem koraku izberemo slovenski jezik.

Na vprašanje “Detect keyboard layout?” odgovorimo Ne.

Zaradi napake v Ubuntujevem namestilniku izberemo tip tipkovnice U.S. English. POZOR: ker imamo vključeno angleško tipkovnico je treba biti pri vpisovanju gesel pozoren na to, da so črke na slovenski in angleški tipkovnici drugače razporejene!

Če imamo DHCP, bo namestilnik sam zaznal omrežne nastavitve, sicer je potrebno IP naslov vpisati ročno.

Določimo ime računalnika (npr. cryptobox).

Pri razdeljevanju diska izberemo Priročnik.

Razdeljevanje diska

Predpostavka je, da imamo trdi disk /hda. Disk razdelimo na štiri razdelke:

  • razdelek /boot, velikosti 100 Mb - /hda1
  • razdelek / (začasni korenski imenik) (bodoči cswap), velikosti 2 Gb - /hda2
  • neuporabljeni razdelek (bodoči korenski imenik croot), velikosti 10 Gb - /hda3
  • neuporabljeni razdelek (bodoči domači imenik chome), izberemo vso velikost, ki ostane - /hda4

Še priporočilo: če se lotimo nameščanja šifrianja na sistem z več operacijskimi sistemi, si pred začetkom postopka naredimo načrt diska - izpišimo si seznam vseh razdelkov (v Linuxu uporabimo ukaz sudo sfdisk -l) in si za vsakega označimo kateremu delu sistema (/home, /, in ostali razdelki) bo namenjen. Previdnost pri delu nikakor ni odveč, saj z izbiro napačnega razdelka uničimo podatke na njem.

Ko bo namestitev končana, bomo imeli na disku štiri razdelke: /boot, /dev/mapper/cswap (šifrirani izmenljivi prostor (tim. swap)), /dev/mapper/croot (šifrirani korenski razdelek) in /dev/mapper/chome (šifrirani domači razdelek).

Najprej izberemo prazen prostor in na njem ustvarimo nov razdelek.

Določimo njegovo velikost (npr. 100 MB, 2 GB, itd.), vrsto ter mesto.

Določimo priklopno točko (pri prvem /boot, pri zadnjih dveh Ne priklopi) ter datotečni sistem (npr. ext3).

Ko končamo ustvarjanje prvega razdelka se lotimo naslednjega, ki ga ustvarimo na preostalem praznem prostoru, dokler ne končamo z zadnjim razdelkom. Nato izberemo Končaj razdeljevanje in zapiši spremembe na disk.

Namestilnik bo zaznal, da tretjemu in četrtemu razdelku ni dodeljena priklopna točna in nas vpraša, ali se želimo vrniti nazaj na razdeljevanje. Odgovorimo Ne.

Prav tako nas opozori, da nismo namenili razdelka izmenljivemu prostoru (swap) in nas vpraša, če se želimo vrniti nazaj. Odgovorimo Ne.

Izberemo, da se spremembe zapišejo na disk in namestitev se nadaljuje…

Dokončanje namestitve

Nastavimo uro (ali je sistemski čas nastavljen na UTC).

Izberemo polno ime za novega uporabnika.

Izberemo uporabniško ime…

…in geslo (vpišemo ga dvakrat).

Sledi nameščanje osnovnega sistema.

Nameščanja DNS in LAMP strežnika ne izberemo.

V nekaterih primerih se lahko zgodi, da namestitev obstane oz. namestitveni program “zamrzne”. Navadno se to zgodi na 85% namestitve pri nameščanju paketa update-manager-core. Gre še za eno precej nepotrebno napako, ki je na srečo rešljiva povsem enostavno. Če nameč pritisnemo Ctrl-Alt-F4 in si ogledamo zapis o postopku namestitve (tim. installation log), se namreč izkaže, da se je obesil programski paket apt, ki skrbi za prenos in nameščanje programskih paketov. Rešitev je razmeroma enostavna. Najprej odpremo drugo konzolo s pritiskom na Ctrl-Alt-F2, nato pa pogledamo ID številko procesa programskega paketa apt (tim. process ID ali PID):

ps | grep -i apt

PID številka je številka v prvem stolpcu v vrstici, kjer se pojavi niz apt-get update. Proces sedaj ubijemo z ukazom (namesto PID vnesemo to številko):

kill PID

Namestitev se potem brez težav nadaljuje naprej. Čez nekaj časa se namestitev zaključi in sledi prvi zagon sistema.

Namestitev šifriranja

Po prvem zagonu sistema bo računalnik najprej našel napak v datotečnem sistemu in pognal program fsck ter napake samodejno odpravil. Računalnik se nato ponovno zažene brez težav. To se žal ponovi tudi kasneje, ob prvem zagonu sistema iz šifriranega razdelka. Napaka se kasneje ne pojavlja več, edina težava je, da se ob prvem zagonu sistema računalnik dvakrat zažene. Ko se torej računalnik zbudi, se prijavimo vanj ter vstopimo v administratorski način:

sudo su

Naložimo potrebne module:

modprobe dm-crypt
modprobe dm-mod
modprobe aes
modprobe sha256

Dodamo module v datoteko /etc/modules, da se ob ponovnem zagonu sistema samodejno naložijo:

echo dm-crypt >> /etc/modules
echo dm-mod >> /etc/modules
echo aes >> /etc/modules
echo sha256 >> /etc/modules

Namestimo program cryptsetup:

apt-get install cryptsetup

Priprava šifriranega korenskega razdelka

Sedaj formatiramo tretji razdelek (v danem primeru z datotečnim sistemom ext3) - bodoči šifrirani korenski imenik (naprej vpišemo YES, s čimer se strinjamo s formatiranjem, nato pa dvakrat vpišemo LUKS geslo):

luksformat -t ext3 /dev/hda3

Če želimo uporabiti večji šifrirni ključ (256-bitno AES šifriranje) uporabimo ukaz (tako ustvarjen razdelek bomo morali kasneje ročno formatirati z ukazom sudo mkfs.ext3):

cryptsetup --key-size 256 luksFormat /dev/hda3

Dobimo približno takle izpis:

Creating encrypted device on /dev/hda3...

WARNING!
========
This will overwrite data on /dev/hda3 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: 
Verify passphrase: 
Command successful.
Please enter your passphrase again to verify it
Enter LUKS passphrase: 
key slot 0 unlocked.
Command successful.
mke2fs 1.40-WIP (14-Nov-2006)
...
...
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Formatirani razdelek priklopimo kot croot:

cryptsetup luksOpen /dev/hda3 croot

Vnesemo geslo in razdelek je priključen:

Enter LUKS passphrase: 
key slot 0 unlocked.
Command successful.

Če ga nismo formatirali z luksformatom, to storimo sedaj:

mkfs.ext3 /dev/mapper/croot

Razdelek priklopimo na /mnt:

mount /dev/mapper/croot /mnt

Nanj prekopiramo datoteke iz korenskega razdelka (to traja nekaj časa, med parametri lahko dodamo -v (verbose), da dobimo natančen izpis kaj se trenutno kopira):

cd /mnt
cp -xa / .

Priprava zagonskih skript in okolja šifriranega korenskega imenika

Z ukazom chroot zamenjamo korenski imenik v bodoči šifrirani korenski imenik (POZOR: potrebno je paziti na poti!):

cd /
mount --bind proc mnt/proc
mount --bind sys mnt/sys
mount --bind dev mnt/dev
chroot /mnt

Priklopimo zagonski (/boot) razdelek:

mount /dev/hda1 boot

Popravimo datoteko /etc/crypttab (zadnji vnos zaenkrat še zakomentiramo!):

nano etc/crypttab
# <target name>   <source device>      <key file>           <options>
croot             /dev/hda3            none                 luks
# cswap             /dev/hda2            /dev/urandom         swap
# chome             /dev/hda4            /etc/keys/home.key   luks

Popravimo datoteko /etc/fstab (vnosa za cswap in chome zaenkrat še zakomentiramo!):

nano /etc/fstab

Zakomentiramo trenutni korenski imenik (pomembno, tega ne smemo pozabiti) in dodamo vnos za croot, cswap in chome razdelke (slednja dva sta zaenkrat še zakomentirana):

/dev/mapper/croot       /       ext3    defaults,errors=remount-ro      0      1
# /dev/mapper/cswap       none    swap    sw      0       0
# /dev/mapper/chome       /home   ext3    defaults        0       2

Datoteka /etc/fstab sedaj izgleda približno takole (UUID-ji so simbolični):

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# /dev/hda2
#UUID=e8363198-819b-44e0-bba5-7b4dd58eef4e /               ext3    defaults,errors=remount-ro 0       1
/dev/mapper/croot       /       ext3    defaults,errors=remount-ro      0      1
# /dev/mapper/cswap       none    swap    sw      0       0
# /dev/mapper/chome       /home   ext3    defaults        0       2
# /dev/hda1
UUID=2fca8417-07de-4a7b-a8cb-4cfeddc89c7d /boot           ext3    defaults        0       2
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Naredimo ključ za bodoči chome:

cd etc/keys
dd if=/dev/urandom of=home.key bs=1k count=1

Šifrirni ključ za chome se bo nahajal na korenskem razdelku, zato sistem med zagonom izpiše opozorilo, da to ni najbolj varno (izpiše se: INSECURE MODE FOR /etc/home/key - zagon sicer poteka povsem normalno in možno je, da nepozorni opazovalci opozorila sploh ne bodo opazili). To sicer drži, vendar se ključ nahaja na šifriranem razdelku. Če želimo, pa lahko za razdelek /home določimo priklop z geslom (in to vnesemo v crypttab), vendar bomo potem ob zagonu morali vpisati dve gesli.

Naredimo novo zagonsko skripto initrd:

cd /boot
update-initramfs -u

Popravimo Grub vnos (v vrstico kernel dodamo /dev/mapper/croot):

nano /boot/grub/menu.lst
title           Ubuntu, kernel 2.6.20-15-server
root            (hd0,0)
kernel          /vmlinuz-2.6.20-15-server root=/dev/mapper/croot ro quiet nosplash
initrd          /initrd.img-2.6.20-15-server
quiet
savedefault

Žal je potrebno omenjeni Grub vnos ročno popravljati ob vsaki menjavi jedra operacijskega sistema. Problem lahko delno rešimo tako, da v datoteki /boot/grub/menu.lst poiščemo vrstico, ki vsebuje niz # kopt=root=. Vrstica se nahaja bolj na začetku datoteke in sicer v oddelku:

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options

Izgleda približno takole (UUID je simboličen):

# kopt=root=UUID=56161a45-6963-463f-b2a6-b2a47f48bac7 ro

Vrstico spremenimo takole (pozor, vrstica naj ostane enojno zakomentirana (#)!):

# kopt=root=/dev/mapper/croot ro

Ob vsaki nadgradnji ali menjavi jedra oziroma vsakič, ko bomo z administratorskimi privilegiji ročno pognali ukaz update-grub, se bo kernel vrstica v Grub vnosu spremenila v:

kernel          /vmlinuz-2.6.20-15-server root=/dev/mapper/croot ro quiet splash

S tem smo rešili težavo pri določanju korenskega imenika, žal pa se v Grub vnosu še vedno pojavi predstavitveno okno (splash screen), ki ne omogoča vnosa LUKS gesla in bo zato potrebno pri omenjeni vrstici splash ročno spremeniti v nosplash!

Zapustimo spremenjeni korenski imenik (croot):

  • pritisnemo Ctrl-D

Sledi ponoven zagon sistema:

reboot

Priprava šifriranega izmenjalnega prostora (swap) in domačega razdelka (/home)

Sedaj se zbudimo v šifriranem sistemu (zaenkrat je šifriran samo korenski imenik). Na začetku (preden se sistem naloži), nas le-ta vpraša za LUKS geslo, brez katerega ni mogoče zagnati sistema:

Starting up ...
Loading, please wait...
Setting up cryptographic volume croot (based on /dev/hda3)
Enter LUKS passphrase: 

Ko se sistem naloži, ponovno vstopimo v administratorski način:

sudo su

Če želimo, lahko prepišemo stari korenski imenik z naključnimi podatki:

dd if=/dev/urandom of=/dev/hda2 bs=16M

Če tega ne storimo pa je potrebno formatirati razdelek, kjer bo v bodoče šifrirani izmenjalni prostor (tim. swap - aktiven bo postal ob naslednjem zagonu sistema), sicer se naprava /dev/mapper/cswap ob zagonu noče priklopiti:

mkswap /dev/hda2 

Dobimo približno takle izpis:

Setting up swapspace version 1, size = 1998737 kB
no label, UUID=59a4dbb5-913c-4d9f-9a06-76dc232cd5af

Naredimo podimenik na /dev (rešitev za napako št. 105266):

mkdir /dev/.static/dev/mapper

Formatiramo bodoči domači (/home) razdelek (trenutno nastavimo navadno geslo, kasneje pa bomo dodali datoteko s ključem). Tudi v tem primeru lahko uporabimo večji ključ, na podoben način kot zgoraj:

luksformat -t ext3 /dev/hda4

Priključimo šifrirani domači razdelek (vnesti je potrebno njegovo LUKS geslo) in ga priklopimo na /mnt:

cryptsetup luksOpen /dev/hda4 chome
mount /dev/mapper/chome /mnt

Na bodočem šifriranem domačem razdelku ustvarimo uporabniški imenik za trenutnega uporabnika (npr. za uporabnika matej)

cd /mnt
mkdir matej
chown matej.matej matej

Sedaj razdelku chome dodamo datoteko s ključem (razdelek bo sedaj dostopen z geslom in datoteko s ključem, ki se nahaja na /etc/keys/home.key):

cryptsetup luksAddKey /dev/hda4 /etc/keys/home.key

Vnesemo trenutno LUKS geslo:

Enter any LUKS passphrase: 
key slot 0 unlocked.
Command successful.

Če želimo, lahko LUKS geslo sedaj odstranimo (razdelek pa ostane dostopen samo z datoteko s ključem).

Odkomentiramo cswap in chome vnos v /etc/crypttab:

nano /etc/crypttab

Odkomentiramo cswap in chome vnos v /etc/fstab.

nano /etc/fstab

Ponovno zaženemo sistem:

reboot

Vstop v šifrirani sistem in namestitev namiznega okolja

Po ponovnem zagonu preverimo, če so šifrirani razdelki priključeni:

ls /dev/mapper

Dobimo približno takle izpis, iz katerega sledi, da so priključeni vsi trije šifrirani razdelki:

chome  control  croot  cswap

Preverimo tudi, če je izmenjalni prostor (swap) aktiven na cswap razdelku:

cat /proc/swaps

Dobimo približno takle izpis:

Filename                                Type            Size    Used    Priority
/dev/mapper/cswap                       partition       1951888 0       -1

Sedaj je trdi disk od koder se sistem zažene v celoti (razen /boot razdelka) šifriran. Sledi namestitev namiznega okolja Ubuntu Desktop. Najprej je potrebno v seznamu skladišč programskih paketov zakomentirati vnos, ki kot enega izmed skladišč uporablja namestitveni CD-ROM:

sudo nano /etc/apt/sources.list

Zakomentiramo vrstico:

# deb cdrom:[Ubuntu-Server 7.04 _Feisty Fawn_ - Release i386 (20070415)]/ feisty main restricted

Sledi osvežtev seznama programskih paketov in namestitev paketa ubuntu-desktop:

sudo apt-get update
sudo apt-get install ubuntu-desktop

Namesto klasičnega Ubuntujevskega namizja Gnome (ubuntu-desktop) lahko namestimo KDE (kubuntu-desktop) ali Xfce (xubntu-desktop), slednji je primeren predvsem za počasnejše računalnike in računalnike z manj pomnilnika RAM.

Namestitev namiznega okolja je lahko precej dolgotrajna, saj sistem iz skladišč programskih paketov na internetu na naš računalnik prenese več kot 450 Mb programskih paketov. Pritisnemo enter in prenos ter nameščanje se prične:

Potrebno je dobiti 470MB/484MB arhivov.
Po odpakiranju bo uporabljenega 1649MB dodatnega prostora na disku.
Ali želite nadaljevati [Y/n]?

Proti koncu namestitve je bo potrebno še ročno označiti katere resolucije zaslona naj podpira grafični strežnik (praviloma so pravilne resolucije že označene in se s tipko tab samo pomaknemo na gumb “V redu” ter pritisnemo enter ali preslednico):

Nastavitve grafičnega strežnika lahko kasneje ročno spremenimo z ukazom, kjer izberemo gonilnik grafične kartice, monitor, resolucijo in ostale podatke potrebne za delovanje grafičnega strežnika:

sudo dpkg-reconfigure xserver-xorg

Namestitev namiznega jedra operacijskega sistema ter odstranjevanje strežniškega jedra

Nato namestimo namizno različico jedra operacijskega sistema (to sicer ni nujno potrebno, saj sistem deluje tudi s strežniško različico jedra, namestitev generične različice sicer iz interneta prenese okrog 24 Mb programskih paketov) :

sudo apt-get install linux-image-generic

Pred ponovnim zagonom sistema moramo ročno popraviti Grub menu: v vrstico kernel namesto splash napišemo nosplash (vnos določa, da sistem zaženemo brez tim. predstavitvenega okna (ang. splash screen), saj z njim vnos LUKS gesla ne deluje), kot korenski imenik nastavimo /dev/mapper/croot Torej:

sudo nano /boot/grub/menu.lst

Poiščemo Grub vnos (UUID je simboličen oziroma ga ni, če smo predhodno nastavili kopt=root parameter):

title           Ubuntu, kernel 2.6.20-16-generic
root            (hd0,0)
kernel          /vmlinuz-2.6.20-16-generic root=UUID=a7985e8a-de2d-40fa-83ea-c8e30994b0b1 ro quiet splash
initrd          /initrd.img-2.6.20-16-generic
quiet
savedefault

In popravimo:

kernel          /vmlinuz-2.6.20-16-generic root=/dev/mapper/croot ro quiet nosplash

Sistem ponovno zaženemo:

sudo reboot

Sistem se bo sedaj zbudil v grafičnem načinu.

Ko se ponovno prijavimo v sistem preverimo v katero jedro operacijskega sistema je aktivno:

uname -a

Dobimo približno takle izpis, pri izpisu je pomembno, da dobimo -generic in ne -server:

Linux cryptobox 2.6.20-16-generic #2 SMP Thu Jun 7 20:19:32 UTC 2007 i686 GNU/Linux

Sedaj pogledamo katere strežniške različice jedra imamo nameščene…

sudo dpkg --get-selections | grep linux-

…ter jih odstranimo:

sudo apt-get remove --purge linux-image-2.6.20-15-server linux-image-server linux-server

Še enkrat popravimo še Grub menu (namesto splash vpišemo nosplash)…

sudo nano /boot/grub/menu.lst
kernel          /vmlinuz-2.6.20-16-generic root=/dev/mapper/croot ro quiet nosplash

Popraviti je potrebno Ubuntu, kernel 2.6.20-16-generic vnos, lahko pa tudi tudi Ubuntu, kernel 2.6.20-16-generic (recovery mode) vnos, če nismo nastavili kopt=root parametra.

Uporaba sistema in priprava za nadaljne delo

Postopek namestitve je s tem končan. Iz menija System - Administracija - Language Support lahko vključimo še podporo za slovenski jezik in sistem prenese najnovejše jezikovne pakete za slovenščino. Ne pozabimo tudi namestiti požarnega zidu. Če želimo, si lahko namestimo tudi programski paket ubuntu-restricted-extras, ki poskrbi za namestitev dodatnih pisav, Jave, predvajalnika Flash in Gstreamer priključne module ter dodatne kodeke, ki se nahajajo na skladišču programskih paketov Medibuntu:

echo "deb http://packages.medibuntu.org/ feisty free non-free" | sudo tee -a /etc/apt/sources.list
wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - && sudo apt-get update
sudo apt-get install ubuntu-restricted-extras libxine-extracodecs gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-pitfdll
sudo apt-get install w32codecs
sudo apt-get install libdvdnav4 libdvdplay0 libdvdread3 libdvdcss2
sudo /usr/share/doc/libdvdread3/install-css.sh

Več o nameščanju uporabnih paketov si lahko preberete v članku Nameščanje uporabne programske opreme na Ubuntu Feisty.

Ob vsakem zagonu sistema bo sedaj potrebno vpisati LUKS geslo:

Starting up ...
Loading, please wait...
Setting up cryptographic volume croot (based on /dev/hda3)
Enter LUKS passphrase: 

V primeru napačnega gesla, dobimo obvestilo:

Command failed.
cryptsetup: cryptsetup failed, bad password or options?

Po treh vnosih napačnega gesla pa dobimo obvestilo:

cryptsetup: maximum number of tries exceeded 

Tako postavljen sistem deluje povsem normalno, težava nastopi le ob namestitvi popravkov jedra ali namestitvi novega jedra operacijskega sistema. Takrat je namreč potrebno ročno popraviti Grub menu. Na srečo do popravkov ne prihaja pogosto.

Dodajanje in spreminjanje LUKS gesel

LUKS šifriranim razdelkom lahko enostavno dodajamo ali spreminjamo gesla. OPOZORILO: ker je ob zagonu sistema aktivna angleška tipkovnica, ki ima drugačno razporeditev znakov, je treba pri vpisovanju gesel to upoštevati!

V našem primeru za izmenjalni prostor uporabljamo naključen ključ, za domači razdelek pa je ključ shranjen v datoteki s ključem /etc/keys/home.key. Ker ob zagonu vpisujemo le LUKS geslo za dostop do korenskega razdelka, je smiselna le menjava tega gesla. Le-ta je mogoča tudi pri priključenem oz. aktivnem razdelku. Gesla se shranjujejo na posebna mesta (ang. slot) v šifriranem razdelku, ki se štejejo od nič dalje. Prvo geslo se torej nahaja na mestu 0, drugo na mestu 1, itd. Če želimo, lahko najprej pogledamo koliko prostih mest imamo še na voljo:

cryptsetup luksDump /dev/hda3

Dodajanje gesla je sedaj mogoče z naslednjim ukazom (kot parameter ukazu podamo razdelek, torej /dev/sdc3):

sudo cryptsetup luksAddKey /dev/hda3

Najprej je treba vnesti enega izmed obstoječih gesel, nato pa novo geslo, ki ga še potrdimo. Izpis je približno takle:

Enter any LUKS passphrase: 
key slot 0 unlocked.
Enter new passphrase for key slot: 
Verify passphrase: 
Command successful.

Brisanje gesla iz mesta 1 (kot parameter ukazu podamo razdelek, torej /dev/hda3 in številko mesta, torej 1.

sudo cryptsetup luksDelKey /dev/hda3 1

Najprej je potrebno vnesti enega izmed obstoječih gesel (vendar pa ne tistega, ki ga želimo odstraniti). Še opozorilo: če odstranimo vsa gesla, je dostop do šifriranega razdelka za vedno onemogočen. Izpis je približno takle:

Enter any remaining LUKS passphrase: 
key slot 0 unlocked.
Command successful.

Sprememba gesla je mogoča tako, da najprej dodamo novo geslo, nato pa izbrišemo starega.

Ali deluje...?

V nadaljevanju si poglejmo nekaj preiskusov delovanja v celoti šifriranega sistema.

Hibernacija ter odloženi izklop

Preiskus pokaže, da izbiri Zaspi (Hibernate) ter Odložen izklop (Suspend) normalno delujeta. Ko računalnik ponovno zaženemo, se normalno zbudi.

Priklapljanje dodatnih šifriranih nosilcev podatkov

Prav tako v tak sistem lahko normalno priklapljamo dodatne šifrirane nosilce podatkov. Smiselno je, da redno ustvarjamo varnostne kopije in to na zunanje šifrirane nosilce podatkov.

Nameščanje novega jedra ali popravkov obstoječega jedra operacijskega sistema

Žal nameščanje nameščanje novega jedra ali popravkov obstoječega jedra operacijskega sistema ne deluje brez težav. Ob namestitvi jedra se sicer samodejno zažene posodabljanje initrd skript, žal pa sistem napačno popravi vnose v Grub meniju. Pri vnosu kernel je potrebno namesto splash dodati nosplash.

Če Grub vnos pozabimo popraviti, se ob ponovnem zagonu sistem enw bo več zagnal, na srečo pa je napako tudi v tem primeru mogoče odpraviti brez večjih težav. Grub vnos namreč lahko začasno popravimo med zagonom sistema. Ob zagonu sistema pritisnemo Esc, da vstopimo v Grub menu, izberemo željeni vnos, nato pa pritisnemo e (edir - uredi). Izberemo željeno vrstico vnosa (npr. vrstico kernel) in ponovno pritisnemo e (edit - uredi) in popravimo vnos. Ko je vnos popravljen, pritisnemo tipko enter nato pa b (boot - zaženi). Ker se spremembe ne shranijo, moramo po zagonu sistema spremembe ponovno vnesti in shraniti v /boot/grub/menu.lst.

Nadgradnja sistema

Nadgradnja sistema še ni bila preiskušena, predvideva pa se da ob nadgradnji na Gutsy (naslednja različica Ubuntuja, ki izide predvidoma oktobra 2007) ne bo težav, razen tistih, ki so povezane z nadgradnjo jedra operacijskega sistema in so opisane zgoraj.

Forenzična analiza sistema

Forenzična analiza diska na v celoti šifriranem sistemu pokaže, da je mogoče do zagonskega razdelka normalno dostopati, korenski in domači razdelek pa sta šifrirana:

root@ubuntu:/home/ubuntu# mount /dev/hda3 /mnt/
mount: unknown filesystem type 'crypto_LUKS'

root@ubuntu:/home/ubuntu# mount /dev/hda4 /mnt/
mount: unknown filesystem type 'crypto_LUKS'

Prabv tako ni mogoče priključiti razdelka z izmenjalnim prostorom:

root@ubuntu:/home/ubuntu# mount /dev/hda2 /mnt/
mount: you must specify the filesystem type

Forenzična analiza z orodjem Autopsy Forensic Browser pokaže, da razen iz zagonskega razdelka od ostalih razdelkov ni mogoče dobiti nikakršnih uporabnih podatkov.

Kaj pa hitrost?

Za primerjavo hitrosti šifriranega in nešifriranega sistema smo uporabili test Bonnie++, ki meri hitrost pisanja na trdi disk in branja iz njega. Uporablja več metod. Primerjava je bila opravljena na dveh računalnikih. Hitra analiza pokaže, da je padec hitrosti zaradi uporabe šifriranja precej odvisen od hitrosti računalnika. Pri hitrejšem iz s pomnilnikom RAM bolj založenim računalniku (Pentium 4, 3 GHz, 1 Mb RAM) se pri nekaterih operacijah padec hitrosti praktično ne pozna, pri počasnejšem računalniku (Pentioum 3, 733 MHz 378 Mb RAM) pa je lahko precej občuten. Pri vsakdanjem delu na povprečnem, ne preveč starem računalniku padca hitrosti povprečen uporabnik praktično ne bi smel opaziti:

Kljub vsemu je potrebno povedati, da je testiranje zgolj osnovno, saj dela testov zaradi premalo natančnih meritev ni bilo mogoče izvesti. Za bolj relevantno testiranje bo potrebno metodologijo testiranja še dodelati in testiranje izvesti v bolj kontroliranih okoliščinah.

Končno varna Okna

Na v celoti šifrirani sistemu lahko sedaj namestimo požarni zid temelječ na iptables, nato pa virtualizacijski program Vmware ali VirtualBox, znotraj katerega naložimo operacijski sistem Windows, dostop do omrežja pa je preko NAT vmesnika.

VirtualBox je na voljo v odprtokodni ali “osebni” različici (pod licenco VirtualBox Personal Use and Evaluation License), omogoča pa tudi izdelavo posnetkov sistema (tim. snapshots). Če želimo, si lahko naredimo rezervno kopijo Kopijo sveže naloženega Windows sistema, ki jo po potrebi obnovimo.

Če imamo dva monitorja, lahko virtualni stroj teče v drugem zaslonu. Poganjanje operacijskega sistema MS Windows znotraj šifriranega Linux računalnika z dovolj pomnilnika RAM (1,5 - 2 Gb ali več) deluje brez težav in opaznejših zakasnitev.

Napad na popolnoma šifrirani sistem

Kot rečeno, opisano šifriranje varuje samo pred tim. offline napadom. Sistem, ki je priključen, je na druge vrste napadov še vedno ranljiv, zato je potrebno uporabljati ustrezne zaščitne mehanizme (predvsem požarni zid, ustrezna gesla, redne nadgradnje z varnostnimi popravki, itd.).

Napadalec, ki uspe vstopiti v aktiven sistem lahko v primeru pridobitve administratorskega dostopa do računalnika dostopa vseh podatkov. Lahko pa napadalec namesti tudi strojni prestreznik tipkanja. Programsko pa je možen tudi napad na nešifrirani zagonski razdelek. Nanj lahko napadalec namesti programsko opremo, ki prestreže vnos LUKS gesla ob zagonu.

Ena izmed rešitev v tem primeru je preverjanje integritete zagonskega razdelka s kakšnim od programskih orodij za preverjanje integritete, npr. orodjem Tripwire. Kljub temu, da orodje Tripwire velja za eno boljših orodij za preverjanje integritete sistema, pa bi izurjeni napadalec lahko zagonski rezdelek računalnika popravil tako, da bi najprej prestregel geslo, ga preko interneta odposlal na oddaljeni strežnik, nato pa zagonski sektor popravil v prvotno stanje. V tem primeru preverjanje integritete sistema ne bi zaznalo napada.

Rešitev?

Rešitev v tem primeru je obnova zagonskega razdelka pred vsakim zagonom računalnika oziroma zagon računalnika iz CD-ROM enote ali USB ključa. Opisani postopki so za pogosto uporabo (npr. vsakodnevni zagon računalnika) precej nepriročni, smiselni pa so za zagon kakšnega strežnika ali podobnega računalnika, kjer je potrebno poskrbeti za visoko stopnjo varnosti, zagoni sistema pa niso prav pogosti. Seveda je potrebno tudi paziti, da kopije zagonskega razdelka ne izgubimo, ali da nam je “pomotoma” ne ukradejo.

Ustvarjanje rezervne kopije zagonskega razdelka

Najprej preverimo če je zagonski razdelek ustrezno pripravljen (popravljen Grub menu, itd. - torej, da se sistem normalno zažene). Nato v konzoli vnesemo ukaz:

sudo dd if=/dev/hda1 of=zagonski_razdelek.img bs=16M

Če želimo, lahko kopijo zagonskega razdelka stisnemo s programom gzip (podamo mu parameter -9, za najvišjo stopnjo kompresije):

sudo dd if=/dev/hda1 bs=16M | gzip –9 > zagonski_razdelek.img

Dobimo približno takle izpis:

6+1 zapisov na vhodu
6+1 zapisov na izhodu
106896384 bytes (107 MB) copied, 2,57393 sekunde, 41,5 MB/s

S tem smo naredili natančno kopijo zagonskega razdelka v datoteko z imenom zagonski_razdelek.img. To datoteko sedaj shranimo na USB ključ ali zapišemo na CD (nestisnjena bo velika toliko kot zagonski razdelek, torej okrog 100 Mb, stisnjena pa približno pol manjša).

Mimogrede, ne pozabimo narediti zagonske kopije ob vsaki nadgradnji jedra operacijskega sistema oziroma ob vsakem generiranju novih zagonskih (initrd) skript!

Če želimo, lahko naredimo tudi kopijo zagonskega sektorja (tim. MBR - Master Boot Record), ki ga tudi shranimo na USB ključ ali zapečemo na CD nosilec:

sudo dd if=/dev/hda bs=512 count=1 | cat - > MBR.img

Obnavljanje rezervne kopije zagonskega razdelka

Če želimo obnoviti zagonski razdelek, moramo računalnik najprej zagnati s pomočjo živega CDja, npr. namestitvenega CDja namizne različice Ubuntuja. Nato priključimo USB ključ s kopijo zagonskega razdelka (npr. na mesto /media/USBbackup) in vnesemo ukaz - v primeru, da smo ustvarili nestisnjeno kopijo zagonskega razdelka:

sudo dd if=/media/USBbackup/zagonski_razdelek.img of=/dev/hda1 bs=16M

V primeru, da smo ustvarili stisnjeno kopijo zagonskega razdelka, pa vnesemo ukaz:

sudo su
gunzip –c /media/USBbackup/zagonski_razdelek.img | dd of=/dev/hda1 bs=16M

Pa še obnavljanje zagonskega (MBR) sektorja:

sudo su
cat /media/USBbackup/MBR.img | dd of=/dev/hda

"High-tech" napadi

S temi postopki smo varnost našega sistema občutno izboljšali, žal pa to niso edini možni napadi na sistem. Napadalec namreč lahko izvede tudi napad na strojno opremo, kjer na njo namesti svojo (“popravljeno”) različico strojne programske opreme (tim. firmwarea). Tak napad je sicer razmeroma težko izvedljiv in malo verjeten, kot zanimivost pa je na voljo nekaj člankov na to tematiko:

Napad je mogoče izvesti tudi če ima napadalec dostop do pomnilnika sistema (npr. kot prijavljeni uporabnik sistema, ki lahko shrani vsebino pomnilnika v datoteko). Več o tem v predavanju Torbjörna Petterssona na CCC 2007:

Težave in njihovo reševanje

Ob zagonu sistema (ko je treba vpisati LUKS geslo) imamo vključeno angleško tipkovnico. Pri vpisovanju gesel je treba biti pozoren na to, da so črke na slovenski in angleški tipkovnici drugače razporejene!

Če smo pozabili popraviti Grub meni, ga lahko ob zagonu sistema popravimo ročno. Pomembno je da nastavimo ustrezen korenski imenik (/dev/mapper/croot) in izključimo predstavitveno okno (nosplash).

V primeru, da se nam zaradi napake na datotečnem sistemu samodejno požene orodje fsck (npr. če imamo ob ponovnem zagonu v računalnik priključen zunanji USB disk brez razdelkov), se v nekaterih primerih chome razdelek ne bo priključil, pač pa se bo ustvaril navidezni domači /home podimenik, ki bo prazen. Sistem bo potrebno ponovno zagnati in ko se chome razdelek priključi sistem normalno deluje kot prej.

Šifrirane razdelke lahko priključimo tudi s pomočjo živega CD-ja, pri čemer je potrebno najprej naložiti ustrezne module ter namestiti cryptsetup (shranimo in namestimo ga lahko tudi iz USB ključa, če nimamo dostopa do interneta), nato pa šifrirane razdelke priključimo z ukazom iz konzole ter vnosom LUKS gesla. Šifrirane razdelke lahko priklopimo tudi v okolju Windows, in sicer s pomočjo programa FreeOTFE, kar je podrobneje opisano v članku o šifriranju nosilcev podatkov v okolju Linux in Windows, poglavje "Uporaba LUKS šifriranih razdelkov v okolju Windows".

Ob nadgradnji jedra operacijskega sistema se lahko zgodi, da bo HAL (Hardware Abstraction Layer) zamenjal poimenovanja diskov iz hda v sda. V tem primeru je potrebno popraviti datoteko /etc/crypttab, do katere lahko dostopamo preko zagona starega jedra ali živega CDja.

Zaključek

Čeprav uporaba šifriranja celotnega operacijskega sistema še ni dovolj uporabniško prijazno integrirana v sistem, se premiki kažejo tudi na tem področju. Z nekaj truda je že danes mogoče vzpostaviti delujoč šifriran sistem. Izbira distribucije Ubuntu Linux (ki velja za eno najbolj uporabniško prijaznih) v kombinaciji z LUKS šifriranjem, daje takemu sistemu visoko stopnjo uporabnosti tudi pri vsakdanji namizni uporabi.

Ker ima uporaba šifriranja celotnega sistema zaradi čedalje pogostejše uporabe prenosnih računalnikov v poslovnih okoljih, pa tudi drugod, velik tržni potencial, lahko v prihodnosti pričakujemo razvoj tudi na tem področju. Tehnologija je že razvita, sledi le še razvoj na področju uporabniške prijaznosti.

kako/varnost.1190644171.txt.gz · Last modified: by matthai