This is an old revision of the document!
Table of Contents
Šifriranje nosilcev podatkov v okolju Linux in Windows
OPOMBA: slike (zaslonski posnetki) še niso prenešeni na Wiki…
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:
- namestimo programski paket cryptsetup in naložimo ustrezne jedrne module
- izbrani razdelek na nosilcu podatkov prepišemo z naključnimi znaki (opcijsko)
- razdelek formatiramo s programom luksformat, kjer določimo geslo za dostop do njega.
Oziroma:
- namestimo šifrirni program TrueCrypt
- 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
Več informacij o šifriranju nosilcev podatkov si lahko preberete na:
Vzpostavitev v celoti šifriranega sistema - Ubuntu Feisty
Avtorja: Matej Kovačič, Jožko Škrablin
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. Š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 poglavju “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 poglavju 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 poglavju 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.
Nameščanje uporabne programske opreme na Ubuntu Feisty
Avtor: Matej Kovačič
Podpora za slovenski jezik
Iz menija System - Administracija - Language Support lahko vključimo podporo za slovenski jezik. Na računalnik se prenesejo in namestijo najnovejši jezikovni paketi za slovenščino. Za uveljavitev sprememb se je potrebno v računalnik ponovno prijaviti.
Prilagoditev izgleda okolju Windows
Ubuntu ima v privzetem okolju na vrhu in na dnu zaslona dve “opravilni vrstici” (podobno kot Start opravilna vrstica v okolju Windows). Tej “opravilni vrstici” se v Ubuntu Linuxu reče pult. Če želimo, da bo Ubuntu izgledal podobno kot Okna, lahko zgornji pult odstranimo. Z desnim miškinim gumbom kliknemo na zgornji pult in izberemo Odstrani ta pult.
Nato prilagodimo še spodnji pult. Z desnim miškinim gumbom kliknemo manj in izberemo Dodaj na pult. Odpre se okno iz katerega na pult vlečemo posamezne elemente. Obstoječe elemente lahko odstranimo z desnim klikom in izbiro Odstrani iz pulta. Če želimo, jih lahko premaknemo, vendar jih je potrebno najprej odkleniti (desni klik - odstranimo kljukico iz Prikleni na pult). Predmet premaknemo tako, da z desnim miškinim gumbom kliknemo nanj ter izberemo Premakni. Izbrani element sedaj z miško premikamo levo ali desno in ko nastavimo željeni položaj kliknemo z miškinim levim gumbom in predmet fiksiramo. Če želimo, ga sedaj lahko ponovno priklenemo na izbrano mesto.
Ubuntu ima na voljo številne elemente pulta, ena izmed možnih razporeditev je prikazana na spodnji sliki:
Z desnim klikom na pult in izbiro Lastnosti, lahko določimo še širino in mesto pulta ter nekatere druge lastnosti. Pri nekaterih elementih lahko podobno kot pri pultu izberemo in nastavimo lastnosti.
Sinhronizacija časa
Z desnim gumbom miške kliknemo na uro na menujski vrstici in izberemo Nastavi datum in uro. Pri Nastavitve izberemo Keep synchronized with Internet servers. Po potrebi pod Časovni strežniki izberemo še slovenske časovne strežnike (ntp1.arnes.si, ntp2.arnes.si in/ali goodtime.ijs.si). Preverimo še, če imamo nastavljen ustrezen časovni pas. Sedaj se bo čas na računalniku samodejno sinhroniziral oz. nastavil na točen čas.
Risanje diagramov
Risanje diagramov je mogoče s programom Dia. Program vsebuje veliko število možnih elementov diagrama (sličic), ki jih med seboj lahko enostavno povezujemo z različnimi črtami. Namestimo ga z ukazom:
sudo apt-get install dia
Žal se program ne pojavi v meniju nameščene programske opreme. Lahko ga zaženemo iz konzole z ukazom:
Dia
ali pa ga dodamo v meni. Z desnim klikom kliknemo na meni Programi in izberemo Uredi menije. V prvem stolpcu Meniji: izberemo Pisarna. Kliknemo gumb Nov predmet. Nastavimo parametre: Vrsta: “Program”, Ime: npr. “Risanje diagramov”, Ukaz: “dia”, Komentar: npr. “Program za risanje diagramov”. Kliknemo na izbiro ikone in izberemo dia_gnome_icon.png.
Pritisnemo OK ter Zapri.
Program sedaj najdemo pod Programi - Pisarna - Risanje diagramov.
Multimedija, dodatne pisave in Java
Najprej med seznam skladišč programskih paketov dodamo Medibuntu nato pa namestimo programski paket ubuntu-restricted-extras, ki poskrbi za namestitev dodatnih pisav, Jave, predvajalnika Flash in Gstreamer priključne module ter dodatne kodeke. Sledi še namestitev podpore za predvajanje DVD-jev:
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 gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-plugins-ugly ffmpeg sudo apt-get install w32codecs sudo apt-get install libdvdnav4 libdvdplay0 libdvdread3 libdvdcss2 sudo /usr/share/doc/libdvdread3/install-css.sh
Če želimo lahko dodamo še Fluendov MP3 dekoder, dodatek za ločevanje videa in zvoka na DVDjih (tim. demuxing) ter dodatek za avdio in video konference:
sudo apt-get install gstreamer0.10-fluendo-mp3 gstreamer0.10-fluendo-mpegdemux gstreamer0.10-plugins-farsight
Še nekaj dodatnih pisav:
sudo apt-get install xfonts-intl-arabic sudo apt-get install xfonts-intl-asian sudo apt-get install xfonts-intl-chinese sudo apt-get install xfonts-intl-chinese-big sudo apt-get install xfonts-intl-european sudo apt-get install xfonts-intl-japanese sudo apt-get install xfonts-intl-japanese-big sudo apt-get install xfonts-intl-phonetic sudo apt-get install gsfonts-x11 sudo fc-cache -f -v
Namestitev dodatnih multimedijskih predvajalnikov
Video predvajalnik VLC:
sudo apt-get install vlc mozilla-plugin-vlc vlc-plugin-*
Program najdemo pod Programi - Zvok in video - VLC media player.
Univerzalni predvajalnik Mplayer:
sudo apt-get install mplayer mplayer-fonts
Program najdemo pod Programi - Zvok in video - Mplayer Movie Player.
Univerzalni predvajalnik XMMS:
sudo apt-get install xmms xmms-skins xmms-wma
Program najdemo pod Programi - Zvok in video - XMMS.
Audio predvajalnik Beep Media Player:
sudo apt-get install beep-media-player
Program najdemo pod Programi - Zvok in video - Beep Media Player.
Namestitev orodij za obdelavo digitalnega videa in zvoka
Namestitev orodja za zajem digitalnega videa iz digitalne videokamere preko firewire vmesnika:
sudo apt-get install dvgrab
Dvgrab deluje iz ukazne vrstice, kot grafični vmesnik za zajem pa lahko uporabimo program Kino.
Nato lahko namestimo zbirko orodij za profesionalno delo z multimedijo pod Linuxom (vsebuje programe Cinepaint, Kino, Imagemagick ter nekatere kodeke in multimedijske knjižnice):
sudo apt-get install ubuntustudio-video
Programe najdemo pod Programi - Grafika - CinePaint ter Synfig Studio ter pod Programi - Zvok in video - Kino ter Stopmotion. Program Kino lahko v kombinaciji z dvgrabom uporabimo za zajem videa s pomočjo grafičnega vmesnika.
Namestitev programa za obdelavo zvočnih datotek Audacity:
sudo apt-get install audacity
Za namestitev programa na digitalno montažo videa Cinellera je najprej potrebno omogočiti vsa dodatna skladišča programskih paketov, nato pa v seznam skladišč programskih paketov dodati še eno izmed naslednjih vrstic - glede na naš tip procesorja:
sudo gedit /etc/apt/sources.list
- za procesorje i686 dodamo:
deb http://www.kiberpipa.org/~gandalf/ubuntu/feisty/cinelerra/i686/ ./
- za procesorje AthlonXp dodamo:
deb http://www.kiberpipa.org/~gandalf/ubuntu/feisty/cinelerra/athlonxp/ ./
- za procesorje Pentium 4 dodamo:
deb http://www.kiberpipa.org/~gandalf/ubuntu/feisty/cinelerra/pentium4/ ./
Tip procesorja vidimo, če v ukazno vrstico vpišemo ukaz:
cat /proc/cpuinfo | grep "model name"
Sledi namestitev:
sudo apt-get update sudo apt-get install cinelerra
Program najdemo pod Programi - Zvok in video - Cinellera.
Namestitev Adobe Acrobat PDF bralnika
Ubuntu že vsebuje podporo za prikaz PDF datotek, lahko pa namestimo Adobov bralnik PDF datotek:
sudo apt-get install acroread mozilla-acroread acroread-plugins
Program najdemo pod Programi - Pisarna - Acrobat Reader.
Podpora za RAR kompresirane arhive
sudo apt-get install rar sudo ln -fs /usr/bin/rar /usr/bin/unrar
Emulacija Windows s programom wine
Uvozimo šifrirne ključe ter dodamo skladišče programskih paketov:
wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add - sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/feisty.list -O /etc/apt/sources.list.d/winehq.list sudo apt-get update
Namestitev:
sudo apt-get install wine
Program zaženemo iz konzole ali s klikom na .exe datoteko. Pri zaganjanju Windows programov iz konzole je potrebno upoštevati pravilno uporabo poti. Uporabiti je potrebno tim. “windows poti” in ne pot v Linuxu. Primer za zagon programa CorelDraw:
wine "C:\Corel\DRAW~ICK\programs\coreldrw.exe"
ali:
cd ~/.wine/drive_c/Corel/Draw\ Select/programs/ wine coreldrw.exe
oziroma:
cd ~/.wine/drive_c/Corel/Draw\ Select/programs/ && wine coreldrw.exe
Wine za nameščene programe ustvari tudi menije na Programi - Wine.
Virtualizacija s programom VirtualBox
Programsko orodje VirtualBox ustvari virtualni računalnik, znotraj katerega lahko poganjamo poljuben operacijski sistem. Najprej uvozimo šifrirne ključe:
wget http://www.virtualbox.org/debian/innotek.asc sudo apt-key add innotek.asc rm innotek.asc
V datoteko /etc/apt/sources.list dodamo skladišče programskih paketov:
sudo gedit /etc/apt/sources.list
deb http://www.virtualbox.org/debian feisty non-free
sudo apt-get update
Namestitev programa:
sudo apt-get install virtualbox
Vsakega uporabnika, ki bo želel poganjati virtualne stroje, npr. uporabnika matej, dodamo v skupino vboxusers, uporabnik pa se mora nato ponovno prijaviti:
sudo usermod -G vboxusers -a matej
Še kratka navodila za vzpostavitev dostopa iz virtualnega Windows stroja do Linux računalnika. V Linuxu v ukazno vrstico napišemo ukaz (privzemamo, da je ime virtualnega stroja “Windows 2000”, uporabnik pa matej - virtualno mapo v Windows bomo poimenovali LinuxMapa)L
VBoxManage sharedfolder add "Windows 2000" -name LinuxMapa -hostpath "/home/matej"
V virtualnem stroju odpremo ukazno vrstico in napišemo:
net use E: \\vboxsvr\LinuxMapa
LinuxMapa bo v Windows računalniku sedaj vidna kot disk E:.
Program najdemo pod Programi - Sistemska orodja - innotek VirtualBox.
Progamski paket za upravljanje s šifrirnimi ključi
sudo apt-get install seahorse
Program najdemo pod Programi - Pripomočki - Gesla in šifrirni ključi.
Klepetanje
IRC odjemalec Xchat:
sudo apt-get install xchat
Program najdemo pod Programi - Internet - XChat IRC Client.
Odjemalec za omrežja MSN, Yahoo, AIM, in druge s podporo za šifriranje:
sudo apt-get install gaim gaim-encryption gaim-otr
Program najdemo pod Programi - Internet - Spletni sel Gaim.
Skype
Namestitev:
sudo apt-get install skype
Program najdemo pod Programi - Internet - Skype.
Odjemalec za e-pošto Mozilla Thunderbird
Odjemalec za e-pošto Mozilla Thunderbird s podporo za GPG/PGP šifriranje e-pošte:
sudo apt-get install mozilla-thunderbird mozilla-thunderbird-enigmail
Program najdemo pod Programi - Internet - Thunderbird Mail.
Octoshape predvajalnik (za gledanje rtvslo.si oddaj v živo)
Ogled oddaj na RTV Slovenija v živo je mogoč z dodatkom Octoshape. Najprej si v domači imenik prenesemo datoteko octosetup-linux_i386.bin:
wget http://www.octoshape.com/files/octosetup-linux_i386.bin
Nato namestitveno datoteko poženemo:
chmod +x octosetup-linux_i386.bin ./octosetup-linux_i386.bin cd octoshape
V datoteko setup.cfg (ustvarimo jo sami) vnesemo pot do javanskega okolja:
nano setup.cfg
Vpišemo pot do datoteke libvjm.so (v primeru, da smo namestili Javo 6 s pomočjo ubuntu-restricted-extras paketa):
JavaExec=/usr/lib/jvm/java-6-sun/jre/lib/i386/client/libvjm.so
Nato iz konzole iz imenika octosetup poženemo predvajalnik (pred tem moramo imeti nameščen Mplayer!):
./OctoshapeClient -url:RTVSLO.tvslo1
Gledamo lahko različne oddaje, seznam oddaj si lahko ogledamo na spletni strani Octopusa, -url parameter prepišemo iz stolpca Play (za prvi program RTV SLO vpišemo -url:RTVSLO.tvslo1, za drugi program RTV SLO vpišemo -url:RTVSLO.tvslo2, itd).
Anonimizacijsko omrežje Tor
Najprej uvozimo ustrezne šifrirne ključe s katerimi so digitalno podpisani programski paketi:
gpg --keyserver subkeys.pgp.net --recv 94C09C7F gpg --fingerprint 94C09C7F gpg --export 94C09C7F | sudo apt-key add -
V datoteko /etc/apt/sources.list dodamo skladišče programskih paketov:
sudo gedit /etc/apt/sources.list
deb http://mirror.noreply.org/pub/tor feisty main deb-src http://mirror.noreply.org/pub/tor feisty main
Obnovimo seznam programskih paketov:
sudo apt-get update
Sledi namestitev orodja Tor in Privoxy:
sudo apt-get install tor privoxy
Nato je potrebno odpreti konfiguracijsko datoteko Privoxya:
sudo gedit /etc/privoxy/config
in vanjo na konec poglavja 5 dodati naslednjo vrstico:
" forward-socks4a / localhost:9050 . " (brez narekovajev in s piko na koncu!)
Če uporabljamo brskalnik Firefox, lahko namestimo še dodatek TorButton ter Live IP Address. V obeh primerih je potrebno namestiti XPI datoteko (spletno stran kjer se nahaja TorButton pa je pred tem potrebno dodati na seznam strani iz katerih dovolimo nameščanje dodatkov), nato pa ponovno zagnati Firefox.
TorButton v spodnjem desnem kotu statusne vrstice se izpiše ali je povezava preko Tor-a vključena ali ne. Vključimo/izključimo jo s klikom nanjo. Live IP Address pa v spodnjem desnem kotu izpiše naš trenutni IP naslov, oz. IP naslov izhodne točke v Tor omrežju, če smo vključeni v Tor. Live IP Address naš IP naslov lahko preverja v intervalu od 17 do 1422 minut, lahko pa zahtevamo takojšnje preverjanje in sicer preko menuja Orodja - Live IP Address - Force Update Now.
Na koncu lahko še preverimo ali Tor res deluje.
Podpora za pisanje na NTFS razdelke
Namestimo:
sudo apt-get install ntfsprogs ntfs-config
Podporo za NTFS vključimo v sistemskem meniju: Programi - Sistemska orodja - NTFS Configuration Tool.
Odjemalec za VPN omrežja
V privzetem Network Managerju, ki je prisoten v opravilni vrstici lahko vključimo podporo za VPN povezave z namestitvijo naslednjih dodatkov (v Kubuntu različici je potrebno namestiti še pajket network-manager-gnome):
- PPTP dodatek:
sudo apt-get install network-manager-pptp
- Cisco VPNC dodatek:
sudo apt-get install network-manager-vpnc
- OpenVPN dodatek:
sudo apt-get install network-manager-openvpn
Uporaba omenjenih dodatkov ni bila testirana, lahko pa uporabimo OpenVPN Admin, ki so ga prenesemo prenesemo iz SourceForge. Izberemo paket openvpn-admin in prenesemo .deb paket (npr. openvpn-admin_1.9.4-2_i386.deb). Deb paket namestimo z dvoklikom nanj ali z ukazom dpkg -i ime_paketa iz konzole.
OpenVPN Administrator najdemo v meniju Programi - Sistemska orodja - OpenVPN Administrator. Po zagonu se naseli v sistemsko vrstico (tim. system tray).
Orodja za analizo omrežij
Nmap
Namestitev orodja Nmap, namenjenega pregledovanje IP naslovov (uporabno za preverjanje ali požarni zid na našem računalniku deluje - pozor, pregledovanje IP naslovov v nekaterih omrežjih ni dovoljeno!):
sudo apt-get install nmap
Wireshark
Namestitev orodja za analizo omrežnega prometa Wireshark (pozor, prestrezanje tujega prometa predstavlja kaznivo dejanje):
sudo apt-get install wireshark
Program najdemo pod Programi - Internet - Wireshark in Wireshark (as root).
Kismet
Namestitev orodja Kismet, namenjenega analizi brezžičnih omrežij (pozor, neupravičeno dostopanje do tujih omrežij ali zgolj poiskus le-tega predstavlja kaznivo dejanje):
sudo apt-get install kismet




























































