A FreeBSD kitűnő futásközbeni védelmet ajánl fel az adatok illetéktelen hozzáférése ellen. Az állományok engedélyei és a kötelező hozzáférés-vezérlés (Mandatory Access Control, MAC, lásd 16. fejezet - Kötelező hozzáférés-vezérlés (MAC)) segítenek megvédeni érzékeny adatainkat az illéktelenek ellen az operációs rendszer futása és a számítógép működése során. Azonban az operációs rendszerben kezelt engedélyek teljesen hatástalanok abban az esetben, ha a támadó fizikailag is képes hozzáférni a számítógépünkhöz, eltávolítani a merevlemezt és egy másik operációs rendszer segítségével kielemezni a rajta található fontos adatainkat.
Függetlenül attól, hogy a
támadó valójában miként is
férkőzött hozzá a
merevlemezünkhöz, vagy miként kapcsolta le a
számítógépünket, a FreeBSD
megtalálható GEOM alapú
lemeztitkosítás (gbde) és a
geli
titkosítási alrendszer
egyaránt képes védelmet nyújtani a
számítógépen található
állományrendszerek számára az
értékes adatok után kutató igen
motivált betörők ellen. A csupán egyes
állományokra kiterjedő körmönfont
titkosítási módszerekkel szemben a
gbde
és a geli
az
egész állományrendszert
észrevétlen módon titkosítja.
Titkosítatlan adat nem is kerül a merevlemezre.
Váljunk root
felhasználóvá
A gbde beállításához rendszeradminisztrátori jogosultságokra lesz szükségünk.
%
su -
Password:Adjuk hozzá a gbde(4) támogatását a rendszermag konfigurációs állományához
Tegyük a következő sort a rendszermag beállításait tartalmazó állományba:
options GEOM_BDE
Fordítsuk újra a rendszermagot a 8. fejezet - A FreeBSD rendszermag testreszabásaben leírtak szerint.
Indítsuk el a számítógépet az új rendszermaggal.
A rendszermag újrafordítása helyett
a kldload
paranccsal is
betölthetjük a gbde(4)
modulját:
#
kldload geom_bde
A következő példa azt feltételezi,
hogy a rendszerünkhöz egy új merevlemezt adunk
hozzá, amin egyetlen titkosított
partíció foglal helyet. Ezt a
partíciót a /private
könyvtárba fogjuk csatlakoztatni. A
gbde használható a
/home
és a
/var/mail
titkosítására is, de ennek
megvalósítása olyan bonyolult
utasításokat igényel, amelyek
meghaladják ennek a bevezetésnek a
kereteit.
Az új merevlemez hozzáadása
A 18.3. szakasz - Lemezek hozzáadásaban bemutatottak szerint
adjuk hozzá a rendszerünkhöz az új
merevlemezt. A példában az új lemez
partícióját a
/dev/ad4s1c
néven fogjuk
tudni elérni. A
/dev/ad0s1
eszközök a példában szereplő
FreeBSD rendszer szabványos partícióit
jelölik.*
#
ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1
/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c
/dev/ad0s1a /dev/ad0s1d /dev/ad4Hozzunk létre egy könyvtárat a gbde zárolásainak tárolásához
#
mkdir /etc/gbde
A gbdenek azért van szüksége a zárolásokat rögzítő állományokra, hogy hozzá tudjon férni a titkosított partíciókhoz. Amennyiben ezt nem tudja megtenni, a gbde anélkül nem lesz képes visszafejteni a titkosított partíciókon tárolt adatokat, hogy az ezeket elérni akaró szoftvereknek ne kelljen jelentősebb mértékben manuálisan beavatkoznia. Mindegyik titkosított partíció külön zároló állományt használ.
A gbde partíció inicializálása
A gbde által használt partíciókat használatuk előtt inicializálni kell. Ezt a műveletet azonban csak egyszer kell elvégezni:
#
gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock
A gbde(8) ekkor elindít egy szövegszerkesztőt és benne egy sablon segítségével be tudjuk állítani a különböző konfigurációs értékeket. Az UFS1 vagy UFS2 használata esetén állítsuk a szektorméretet 2048-ra:
A megjegyzés fordítása:
A gbde(8) kétszer is rá fog kérdeni az adatok titkosítására használt jelmondatra. A jelmondatnak természetesen mind a kétszer ugyanannak kell lennie. A gbde védelmének hatékonysága teljesen mértékben az általunk választott jelmondat minőségétől függ [10].
A gbde init
parancs létrehoz
egy zároló állományt a
gbde partícióhoz,
amely ebben a példában az
/etc/gbde/ad4s1c.lock
néven
keletkezett. A gbde
zároló állományainak
„.lock” névre kell
végződniük, mivel az
/etc/rc.d/gbde
indítószkript csak ebben az esetben
észleli rendesen.
A gbde zároló állományait a titkosított partíciók tartalmával együtt kell lementeni. Miközben a zároló állomány törlése nem tudja megakadályozni, hogy az elszánt támadó visszafejtse a gbde által titkosított partíciót, addig a zároló állomány nélkül a jogos tulajdonos órási mennyiségű munka befektetése nélkül képtelen lesz hozzáférni a rajta levő adatokhoz. Ez utóbbitól egyébként a gbde(8) és a rendszer tervezője is totálisan elhatárolja magát.
A titkosított partíció illesztése a rendszermaghoz
#
gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
Ekkor a titkosított partíció
illesztéséhez a rendszer kérni fogja az
inicializálás során választott
jelmondatot. Ezután az új titkosított
eszköz megjelenik a /dev
könyvtárban
/dev/
néven:eszköznév
.bde
#
ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1
/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c
/dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bdeÁllományrendszer kialakítása egy titkosított eszközön
Ahogy sikerült a titkosított eszközt
illeszteni a rendszermaghoz, létre is tudunk hozni
egy állományrendszert rajta. Erre a
célra a newfs(8) remekül
használható. Mivel egy új UFS2
állományrendszerek
inicializálása sokkal gyorsabb a régi
UFS1 állományrendszerek
inicializálásánál, ezért
a newfs(8) használata esetén az
-O2
beállítás
megadása ajánlott.
#
newfs -U -O2 /dev/ad4s1c.bde
A newfs(8) parancsot egy illesztett
gbde partíción
kell végrehajtani, amit onnan ismerhetünk meg,
hogy az eszköz nevében szerepel a
kiterjesztés.*
.bde
A titkosított partíció csatlakoztatása
Hozzunk létre egy csatlakozási pontot a titkosított állományrendszer számára.
#
mkdir /privát
Csatlakoztassuk a titkosított állományrendszert.
#
mount /dev/ad4s1c.bde /privát
Ellenőrizzük a titkosított állományrendszer működőképességét
A titkosított állományrendszert most már látja a df(1) program és készen áll a használatra.
%
df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 1037M 72M 883M 8% /
/devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1f 8.1G 55K 7.5G 0% /home
/dev/ad0s1e 1037M 1.1M 953M 0% /tmp
/dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr
/dev/ad4s1c.bde 150G 4.1K 138G 0% /privateA rendszer minden egyes indítása után
az összes titkosított
állományrendszert tényleges
használata előtt újra illeszteni kell a
rendszermaghoz, ellenőrizni az épségét
és csatlakoztatni. Az ehhez szükséges
parancsokat root
felhasználóként kell kiadni.
A gbde partíció illesztése a rendszermaghoz
#
gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
A gbde partíció inicializálása során megadott jelmondatot kell megadnunk a művelet elvégzéséhez.
Az állományrendszer épségének ellenőrzése
Mivel a titkosított
állományrendszerek az automatikus
csatlakoztatáshoz még nem
szerepeltethetőek az /etc/fstab
állományban, ezért az ilyen
állományrendszereket csatlakoztatásuk
előtt manuálisan ellenőriztetni kell a
fsck(8) lefuttatásával.
#
fsck -p -t ffs /dev/ad4s1c.bde
A titkosított állományrendszer csatlakoztatása
#
mount /dev/ad4s1c.bde /privát
A titkosított állományrendszer most már készen áll a használatra.
Lehet írni olyan szkriptet, amely a titkosított partíciókat magától illeszti, ellenőrzi és csatlakoztatja, de biztonsági megfontolásokból semmi esetben sem szabad tartalmaznia a gbde(8) jelszavát. Ehelyett azt javasoljuk, hogy az ilyen szkripteknek külön meg kelljen adni a jelszót konzolon vagy az ssh(1) használatán keresztül.
De használhatjuk a mellékelt
rc.d
szkriptet is. A szkript
paramétereit az rc.conf(5)
állományon keresztül adhatjuk meg,
például:
Ilyenkor a gbde által használt jelmondatot a rendszer indításakor kell megadni. Miután begépeltük a megfelelő jelmondatot, a titkosított gbde partíció magától csatlakoztatásra kerül. Ez akkor lehet hasznos, ha a gbde megoldását hordozható számítógépeken alkalmazzuk.
A gbde(8) a szektorok tartalmát 128 bites AES használatával CBC módban titkosítja. A lemezen található minden egyes szektort eltérő AES kulccsal kódolja. A gbde kriptográfiai felépítését, valamint mindazt, hogy az egyes szektorok kulcsai miként származtathatóak a felhasználó által megadott jelmondatból, a gbde(4) man oldalán olvashatjuk.
A sysinstall(8) nem kompatibilis a
gbde által
titkosított eszközökkel. A
sysinstall(8) indítása előtt minden
eszközt ki kell iktatni a rendszermagból,
különben az eszközök keresése
során össze fog omlani. A
példánkban használt titkosított
eszközt a következő paranccsal kell
lekapcsolni:*
.bde
#
gbde detach /dev/ad4s1c
Továbbá megjegyezzük azt is, hogy a vinum(4) nem használja a geom(4) alrendszert, ezért a gbde alkalmazása során nem használhatunk Vinum-köteteket.
A FreeBSD 6.0 változatától kezdve egy
új kriptográfiai GEOM osztály is a
rendelkezésünkre áll, melyet pillanatnyilag
Pawel Jakub Dawidek <pjd@FreeBSD.org>
fejleszt. A geli
segédprogram
némileg különböző a
gbde
megoldásától
— más lehetőségeket kínál
fel és a titkosítást is egy
eltérő séma mentén
valósítja meg.
A geli(8) legfontosabb jellemzői a következők:
A crypto(9) keretrendszerét használja
— tehát ha rendelkezünk
kriptográfiai hardverrel, akkor a
geli
automatikusan használni
fogja.
Több kriptográfiai algoritmust is ismer (melyek jelenleg az AES, Blowfish és a 3DES).
Segítségével a rendszerindításhoz használt (gyökér) partíció is titkosítható. Ilyenkor a szükséges jelmondatot a rendszer indításakor kell megadni.
Két független kulcsot (például egy „kulcsot” és egy „céges kulcsot”) is használhatunk vele.
A geli
gyors — egyszerűen
csak szektorról szektorra titkosít.
Lehetővé teszi a mesterkulcsok mentését is visszaállítását. Ha a felhasználó véletlenül megsemmisítené a kulcsát, akkor a biztonsági mentésből helyreállított kulcsok segítségével vissza tudjuk szerezni az adatainkat is.
Segítségével a lemezeket véletlenszerű, egyszeri jelszavakkal is illeszthetjük — ez különösen fontos lapozóterületek és ideiglenes állományrendszerek esetében.
A geli
által
felkínált lehetőségekről a
geli(8) man oldalán találhatunk
többet.
A következő lépések
bemutatják, hogyan lehet a FreeBSD rendszermagjában
engedélyezni a geli
támogatását, és hogyan lehet
létrehozni és használni egy
geli
titkosítással
rendelkező adathordozót.
A geli
alkalmazásához
legalább a FreeBSD 6.0-RELEASE vagy későbbi
változatára van szükségünk.
Mivel a rendszermagot is módosítanunk kell,
ezért rendszeradminisztrátori jogosultságok
kellenek a műveletek
elvégzéséhez.
A geli
támogatásának hozzáadása
a rendszermaghoz
Vegyük hozzá a következő sorokat a rendszermag beállításait tartalmazó állományhoz:
Fordítsuk újra a rendszermagot a 8. fejezet - A FreeBSD rendszermag testreszabásaben leírtak szerint.
Betölthetjük a geli
modulját is a rendszer indításakor.
Ehhez a következő sort kell betenni a
/boot/loader.conf
állományba:
A geli(8) most már használható a rendszermagban.
A mesterkulcs legenerálása
A most következő példában egy
kulcsot tartalmazó állomány
létrehozását illusztráljuk, amit
a
könyvtárba csatlakoztatott titkosított
adathordozó mesterkulcsához fogunk
használni. A kulcs állomány a
mesterkulcs titkosításához
felhasznált véletlenszerű adatot fogja
tartalmazni, valamint rajta kívül még a
mesterkulcsot egy jelmondattal is védjük. Az
adathordozó szektormérete 4 kilobyte-os
lesz. Emellett még bemutatjuk, hogyan kell
illeszteni egy /privát
geli
-adathordozót,
állományrendszert létrehozni rajta,
csatlakoztatni, dolgozni vele és lekapcsolni.
A nagyobb teljesítmény érdekében javasolt nagyobb szektorméretet választani (mint például 4 kilobyte).
A mesterkulcsot egy jelmondattal fogjuk védeni
és a kulcsok készítéséhez
használt adatforrás a
/dev/random
lesz. A
/dev/da2.eli
, amelyet mit csak
adathordozónak fogunk csak hívni, szektorainak
mérete 4 kilobyte lesz.
#
dd if=/dev/random of=/root/da2.key bs=64 count=1
#
geli init -s 4096 -K /root/da2.key /dev/da2
Enter new passphrase:
Reenter new passphrase:Nem kötelező egyszerre használni a jelmondatot és a kulcs állományt. A mesterkulcs elzárásának bebiztosítására bármelyik módszer alkalmas.
Ha a kulcs állomány a „-” paraméterrel adjuk meg, akkor a szabványos bemenetről olvassa be a program. Ez a példa több kulcs használatát mutatja be.
#
cat kulcs1 kulcs2 kulcs3
| geli init -K - /dev/da2
Az adathordozó illesztése a generált kulccsal
#
geli attach -k /root/da2.key /dev/da2
Enter passphrase:Az új titkosítatlan eszköz neve
/dev/
lesz.da2
.eli
#
ls /dev/da2*
/dev/da2 /dev/da2.eliAz új állományrendszer kialakítása
#
dd if=/dev/random of=/dev/da2.eli bs=1m
#
newfs /dev/da2.eli
#
mount /dev/da2.eli /privát
A titkosított állományrendszer most már df(1) számára is látszik és használható:
#
df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 248M 89M 139M 38% /
/devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr
/dev/ad0s1d 989M 1.5M 909M 0% /tmp
/dev/ad0s1e 3.9G 1.3G 2.3G 35% /var
/dev/da2.eli 150G 4.1K 138G 0% /privateAz adathordozó leválasztása és lekapcsolása
Miután befejeztük a munkát a
titkosított partíción, és a
partícióra már nincs tovább
szükségünk, érdemes
leválasztanunk és kiiktatnunk a
/privát
geli
titkosítású
partíciót a rendszermagból.
#
umount /privát
#
geli detach da2.eli
A geli(8) használatáról bővebben a saját man oldalán tájékozódhatunk.
A geli
mellett találhatunk egy
saját rc.d
szkriptet, amely
jelentősen leegyszerűsíti a
geli
használatát. A
geli
például így
paraméterezhető az rc.conf(5)
állományon keresztül:
Ennek segítségével a
/dev/da2
eszközt
geli
adathordozóként
állítjuk be a /root/da2.key
állományban található mesterkulcs
felhasználásával, de az
illesztéskor a geli
nem kér
jelmondatot (ezt csak akkor fogja tenni, ha a geli
init
parancs kiadásához
hozzátesszük a -P
beállítást). A rendszer
leállítása előtt pedig a
geli
adathordozó így
automatikusan leválasztásra kerül.
Az rc.d
beállításával kapcsolatos
tudnivalókat a kézikönyv rc.d szkriptekről
szóló szakaszában ismerhetjük
meg.
[10] A könnyen megjegyezhető ám mégis biztonságos jelmondatok megválasztásához a Diceware Passphrase honlapján találunk egy kis segítséget (angolul).
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.