kako:varnost:cripto2
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| kako:varnost:cripto2 [2007/09/25 10:11] – Dodal kazalec na prvi del. mrcin | kako:varnost:cripto2 [2007/09/25 14:20] (current) – stran zbrišeš, tako da zbrišeš vsebino lynx | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Vzpostavitev v celoti šifriranega sistema - Ubuntu Feisty ====== | ||
| - | |||
| - | |||
| - | //Avtorja: Matej Kovačič, Jožko Škrablin// | ||
| - | |||
| - | To je drugi del serije člankov na temo kriptiranih datotečnih sistemov. V {{kako: | ||
| - | |||
| - | // | ||
| - | |||
| - | ---- | ||
| - | |||
| - | //15. junija 2004 je italijanska policija [[http:// | ||
| - | |||
| - | |||
| - | ... | ||
| - | |||
| - | |||
| - | //12. marca 2007 sta [[http:// | ||
| - | |||
| - | ... | ||
| - | |||
| - | //Konec avgusta 2006 je CNN poročal, da so sudanske varnostne sile na letališčih pričele zasegati in pregledovati prenosne računalnike, | ||
| - | |||
| - | 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, | ||
| - | |||
| - | 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. ([[http:// | ||
| - | |||
| - | ---- | ||
| - | |||
| - | Pri varnosti potrebno odločati med udobjem in varnostjo. Treba se je pač odločiti ali nam več pomeni varnost naših podatkov, ali pa udobje brezbrižnosti. 8-) Šifriranje diskov nekoliko upočasni delovanje sistema (čeprav je to pri običajni rabi na običajnem računalniku povsem neopazno). Uporaba šifriranja pa lahko v primeru napake oziroma okvare trdega diska privede do resne izgube podatkov. V primeru uporabe šifriranja zato poskrbite za ustrezne varnostne kopije. Podatki naj se nikoli ne nahajajo samo na enem (šifriranem) nosilcu. | ||
| - | |||
| - | ===== Zakaj? ===== | ||
| - | |||
| - | Ena izmed možnosti napada na računalniške sisteme je tudi tim. //offline// napad, torej napad, ko napadalec pridobi fizični dostop do računalnika medtem, ko je le-ta ugasnjen. V primeru fizičnega dostopa do (ugasnjenega) računalnika - lahko gre tudi za izgubo, krajo ali pa lastnik računalnik nese na servis - napadalec lahko dostopa do trdega diska in podatkov na njem. | ||
| - | |||
| - | Nevarnost obstaja tudi, če imamo nekatere kritične podatke šifrirane. Nešifrirani lahko ostanejo podatki v medpomnilniku (tim. //cache// in //swap//), v raznih začasnih datotekah (//tmp//) ali v raznih datotekah beleženja aktivnosti (tim. //log datoteke// | ||
| - | |||
| - | 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, | ||
| - | |||
| - | 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, | ||
| - | |||
| - | ===== 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 [[http:// | ||
| - | |||
| - | ==== 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 " | ||
| - | dd if=/ | ||
| - | |||
| - | ==== Postopek namestitve Ubuntu strežnika ==== | ||
| - | |||
| - | **OPOZORILO**: | ||
| - | |||
| - | Če nameščamo na obstoječi disk, je potrebno razmisliti ali ni smiselno disk prepisati z naključnimi podatki. Ko je disk pripravljen, | ||
| - | |||
| - | {{: | ||
| - | |||
| - | {{: | ||
| - | |||
| - | V naslednjem koraku izberemo slovenski jezik. | ||
| - | |||
| - | {{: | ||
| - | |||
| - | Na vprašanje "// | ||
| - | |||
| - | {{: | ||
| - | |||
| - | Zaradi [[https:// | ||
| - | |||
| - | {{: | ||
| - | |||
| - | {{: | ||
| - | |||
| - | Če imamo DHCP, bo namestilnik sam zaznal omrežne nastavitve, sicer je potrebno IP naslov vpisati ročno. | ||
| - | |||
| - | {{: | ||
| - | |||
| - | Določimo ime računalnika (npr. // | ||
| - | |||
| - | {{: | ||
| - | |||
| - | Pri razdeljevanju diska izberemo // | ||
| - | |||
| - | {{: | ||
| - | |||
| - | |||
| - | ==== 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**: | ||
| - | |||
| - | Ko bo namestitev končana, bomo imeli na disku štiri razdelke: /boot, / | ||
| - | |||
| - | 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, | ||
| - | |||
| - | {{: | ||
| - | |||
| - | {{: | ||
| - | |||
| - | {{: | ||
| - | |||
| - | 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 " | ||
| - | 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 / | ||
| - | echo dm-crypt >> / | ||
| - | echo dm-mod >> / | ||
| - | echo aes >> / | ||
| - | echo sha256 >> / | ||
| - | |||
| - | 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, | ||
| - | 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 / | ||
| - | | ||
| - | 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: | ||
| - | | ||
| - | This filesystem will be automatically checked every 39 mounts or | ||
| - | 180 days, whichever comes first. | ||
| - | |||
| - | 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, | ||
| - | mkfs.ext3 / | ||
| - | |||
| - | Razdelek priklopimo na /mnt: | ||
| - | mount / | ||
| - | |||
| - | 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 / | ||
| - | nano etc/ | ||
| - | |||
| - | # <target name> | ||
| - | croot / | ||
| - | # cswap / | ||
| - | # chome / | ||
| - | |||
| - | Popravimo datoteko /etc/fstab (vnosa za cswap in chome zaenkrat še zakomentiramo!): | ||
| - | nano /etc/fstab | ||
| - | |||
| - | Zakomentiramo trenutni korenski imenik (**pomembno, | ||
| - | / | ||
| - | # / | ||
| - | # / | ||
| - | |||
| - | Datoteka /etc/fstab sedaj izgleda približno takole (UUID-ji so simbolični): | ||
| - | # /etc/fstab: static file system information. | ||
| - | # | ||
| - | # <file system> <mount point> | ||
| - | proc /proc | ||
| - | # /dev/hda2 | ||
| - | # | ||
| - | / | ||
| - | # / | ||
| - | # / | ||
| - | # /dev/hda1 | ||
| - | UUID=2fca8417-07de-4a7b-a8cb-4cfeddc89c7d /boot | ||
| - | / | ||
| - | / | ||
| - | |||
| - | Naredimo ključ za bodoči chome: | ||
| - | cd etc/keys | ||
| - | dd if=/ | ||
| - | |||
| - | Š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 / | ||
| - | |||
| - | Naredimo novo zagonsko skripto initrd: | ||
| - | cd /boot | ||
| - | update-initramfs -u | ||
| - | |||
| - | Popravimo Grub vnos (v vrstico //kernel// dodamo / | ||
| - | nano / | ||
| - | |||
| - | title | ||
| - | root (hd0,0) | ||
| - | kernel | ||
| - | initrd | ||
| - | 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 / | ||
| - | 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=/ | ||
| - | |||
| - | Ob vsaki nadgradnji ali menjavi jedra oziroma vsakič, ko bomo z administratorskimi privilegiji ročno pognali ukaz // | ||
| - | kernel | ||
| - | |||
| - | 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=/ | ||
| - | |||
| - | Č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 / | ||
| - | mkswap / | ||
| - | |||
| - | 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 [[https:// | ||
| - | |||
| - | mkdir / | ||
| - | |||
| - | 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 / | ||
| - | |||
| - | 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 / | ||
| - | cryptsetup luksAddKey /dev/hda4 / | ||
| - | |||
| - | 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 / | ||
| - | nano / | ||
| - | |||
| - | 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 | ||
| - | |||
| - | Preverimo tudi, če je izmenjalni prostor (swap) aktiven na cswap razdelku: | ||
| - | cat /proc/swaps | ||
| - | |||
| - | Dobimo približno takle izpis: | ||
| - | Filename | ||
| - | / | ||
| - | |||
| - | 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 / | ||
| - | |||
| - | Zakomentiramo vrstico: | ||
| - | |||
| - | # deb cdrom: | ||
| - | |||
| - | 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), | ||
| - | |||
| - | Namestitev namiznega okolja je lahko precej dolgotrajna, | ||
| - | |||
| - | 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 // | ||
| - | sudo nano / | ||
| - | |||
| - | Poiščemo Grub vnos (UUID je simboličen oziroma ga ni, če smo predhodno nastavili // | ||
| - | title | ||
| - | root (hd0,0) | ||
| - | kernel | ||
| - | initrd | ||
| - | quiet | ||
| - | savedefault | ||
| - | |||
| - | In popravimo: | ||
| - | kernel | ||
| - | |||
| - | 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 // | ||
| - | 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 // | ||
| - | sudo nano / | ||
| - | |||
| - | kernel | ||
| - | |||
| - | Popraviti je potrebno //Ubuntu, kernel 2.6.20-16-generic// | ||
| - | |||
| - | |||
| - | |||
| - | ===== 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 // | ||
| - | echo "deb http:// | ||
| - | wget -q http:// | ||
| - | 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 / | ||
| - | |||
| - | 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**: | ||
| - | |||
| - | V našem primeru za izmenjalni prostor uporabljamo naključen ključ, za domači razdelek pa je ključ shranjen v datoteki s ključem / | ||
| - | cryptsetup luksDump /dev/hda3 | ||
| - | |||
| - | Dodajanje gesla je sedaj mogoče z naslednjim ukazom (kot parameter ukazu podamo razdelek, torej /// | ||
| - | 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 /// | ||
| - | 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// (// | ||
| - | |||
| - | ==== 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 / | ||
| - | |||
| - | |||
| - | ==== Nadgradnja sistema | ||
| - | Nadgradnja sistema še ni bila preiskušena, | ||
| - | |||
| - | ==== 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:/ | ||
| - | mount: unknown filesystem type ' | ||
| - | | ||
| - | root@ubuntu:/ | ||
| - | mount: unknown filesystem type ' | ||
| - | |||
| - | Prabv tako ni mogoče priključiti razdelka z izmenjalnim prostorom: | ||
| - | root@ubuntu:/ | ||
| - | 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, | ||
| - | |||
| - | {{: | ||
| - | |||
| - | 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 " | ||
| - | |||
| - | Č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, | ||
| - | |||
| - | 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, | ||
| - | |||
| - | 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, | ||
| - | |||
| - | ==== 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=/ | ||
| - | |||
| - | Če želimo, lahko kopijo zagonskega razdelka **stisnemo** s programom //gzip// (podamo mu parameter -9, za najvišjo stopnjo kompresije): | ||
| - | sudo dd if=/ | ||
| - | |||
| - | 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 // | ||
| - | |||
| - | Mimogrede, ne pozabimo narediti zagonske kopije ob vsaki nadgradnji jedra operacijskega sistema oziroma ob vsakem generiranju novih zagonskih (// | ||
| - | |||
| - | Č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 / | ||
| - | sudo dd if=/ | ||
| - | |||
| - | V primeru, da smo ustvarili **stisnjeno kopijo** zagonskega razdelka, pa vnesemo ukaz: | ||
| - | sudo su | ||
| - | gunzip –c / | ||
| - | |||
| - | Pa še obnavljanje zagonskega (MBR) sektorja: | ||
| - | sudo su | ||
| - | cat / | ||
| - | |||
| - | |||
| - | ==== " | ||
| - | S temi postopki smo varnost našega sistema občutno izboljšali, | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | |||
| - | 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: | ||
| - | * [[http:// | ||
| - | memory dumps]] | ||
| - | |||
| - | |||
| - | |||
| - | ===== 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 (/ | ||
| - | |||
| - | 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, | ||
| - | |||
| - | Š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 " | ||
| - | |||
| - | 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 / | ||
| - | |||
| - | ===== 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, | ||
| - | |||
| - | Ker ima uporaba šifriranja celotnega sistema zaradi čedalje pogostejše uporabe prenosnih računalnikov v poslovnih okoljih, pa tudi drugod, velik tržni potencial, lahko v prihodnosti pričakujemo razvoj tudi na tem področju. Tehnologija je že razvita, sledi le še razvoj na področju uporabniške prijaznosti. | ||
kako/varnost/cripto2.1190715077.txt.gz · Last modified: by mrcin
