FreeBSD biedt uitstekende on-line bescherming tegen onbevoegde gegevenstoegang. Bestandsrechten en Mandatory Access Control (MAC) (zie Hoofdstuk 17, Verplichte Toegangscontrole (MAC)) helpen voorkomen dat onbevoegde derde partijen toegang tot de gegevens krijgen als het besturingssysteem actief is en de computer aanstaat. De door het besturingssysteem afgedwongen rechten zijn echter niet relevant als een aanvaller fysieke toegang tot een computer heeft en deze de harde schijf van de computer in een ander systeem kan plaatsen om de gevoelige gegevens te kopiëren en te analyseren.
Afgezien van hoe een aanvaller in het bezit van een harde schijf of een uitgezette computer gekomen is, kan GEOM Based Disk Encryption (gbde) de gegevens op het bestandssysteem van de computer zelfs tegen hooggemotiveerde aanvallers met aanzienlijke middelen beschermen. In tegenstelling tot lastige versleutelmethoden die alleen losse bestanden versleutelen, versleutelt gbde gehele bestandssystemen op een transparante manier. De harde schijf komt nooit in aanraking met klare tekst.
Los van hoe een aanvaller in het bezit van een harde schijf
of een uitgezette computer gekomen is, kunnen de cryptografische
subsystemen GEOM Based Disk Encryption
(gbde) en geli
in FreeBSD
gegevens op bestandssystemen van een computer beschermen tegen
zelfs de meer gemotiveerde belagers die ook nog eens adequate
middelen hebben. Anders dan met lastige versleutelingsmethoden
die alleen individuele bestanden versleutelen, versleutelen
gbde
en geli
transparant
complete bestandssystemen. Er komt nooit platte tekst op een
harde schijf.
Word root
Het instellen van gbde vereist beheerdersrechten.
%
su -
Password:
Voeg ondersteuning voor gbde(4) aan het kernelinstellingenbestand toe
Voeg de volgende regel toe aan het kernelinstellingenbestand:
options GEOM_BDE
Herbouw de kernel opnieuw zoals beschreven in Hoofdstuk 9, De FreeBSD-kernel instellen.
Start op met de nieuwe kernel.
Een alternatief voor het hercompileren van de kernel is door gebruik te maken van kldload(8) om gbde(4) te laden:
#
kldload geom_bde
In het volgende voorbeeld wordt aangenomen dat er een
nieuwe harde schijf aan het systeem wordt toegevoegd die een
enkele versleutelde partitie zal bevatten. Deze partitie
wordt aangekoppeld als /private
.
gbde kan ook gebruikt worden om
/home
en /var/mail
te versleutelen, maar daarvoor zijn complexere instructies
nodig die buiten het bereik van deze inleiding vallen.
Voeg een nieuwe harde schijf toe
Voeg de nieuwe harde schijf toe zoals beschreven in
Paragraaf 19.3, “Schijven toevoegen”. In dit voorbeeld is een
nieuwe harde schijfpartitie toegevoegd als
/dev/ad4s1c
. De apparaten
/dev/ad0s1*
stellen bestaande standaard FreeBSD partities van het
voorbeeldsysteem voor.
#
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
Maak een map aan voor gbde lockbestanden
#
mkdir /etc/gbde
Het lockbestand voor gbde bevat informatie die gbde nodig heeft om toegang te krijgen tot versleutelde partities. Zonder toegang tot de lockbestand is gbde niet in staat om de gegevens die op de versleutelde partitie staan te ontsleutelen zonder aanzienlijke handmatige tussenkomst die niet door de software ondersteund wordt. Elke versleutelde partitie gebruikt een ander lockbestand.
Initialiseer de gbde-partitie
Een gbde-partitie dient geïnitialiseerd te worden voordat deze kan worden gebruikt. Deze initialisatie dient slechts eenmalig uitgevoerd te worden:
#
gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock
gbde(8) opent een tekstverwerker om verschillende instellingen in een sjabloon te kunnen instellen. Stel de sector_size in op 2048 als UFS of UFS2 wordt gebruikt:
# $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...]
gbde(8) vraagt twee keer om de wachtwoordzin voor het beveiligen van de gegevens. De wachtwoordzin dient beide keren hetzelfde te zijn. De mogelijkheid van gbde om de gegevens te beveiligen is geheel afhankelijk de gekozen wachtwoordzin. [10]
Het commando gbde init
maakt een
lockbestand aan voor de
gbde-partitie die in dit
voorbeeld is opgeslagen als
/etc/gbde/ad4s1c.lock
.
gdbde slotbestanden moeten
eindigen op “.lock” om correct door het
opstartscript /etc/rc.d/gbde
gedetecteerd te worden.
gbde lockbestanden moeten samen met de inhoud van versleutelde partities geback-upped worden. Hoewel het verwijderen van een lockbestand op zich een gedreven aanvaller er niet van weerhoudt een gbde partitie te ontsleutelen, is de wettige eigenaar zonder het lockbestand niet in staat om de gegevens op de versleutelde partitie te benaderen zonder een aanzienlijke hoeveelheid werk die in het geheel niet ondersteund wordt door gbde(8) of de ontwerper ervan.
Koppel de versleutelde partitie aan de kernel
#
gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
Er wordt om de wachtwoordzin gevraagd die gekozen is
tijdens de initialisatie van de versleutelde partitie. Het
nieuwe versleutelde apparaat verschijnt in
/dev
als
/dev/apparaatnaam.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
Maak een bestandssysteem op het versleutelde apparaat
Nu het versleutelde apparaat aan de kernel gekoppeld
is, kan een bestandssysteem op het apparaat aangemaakt
worden. Met newfs(8) kan een bestandssysteem op het
versleutelde apparaat aangemaakt wordne. Aangezien het
veel sneller is om een nieuw UFS2 bestandssysteem te
initialiseren dan om een oud UFS1 bestandssysteem te
initialiseren, is het aan te raden om newfs(8) met de
optie -O2
te gebruiken.
#
newfs -U -O2 /dev/ad4s1c.bde
Voer newfs(8) uit op een aangekoppelde
gbde-partitie die
geïndificeerd wordt door de uitbreiding
*.bde
op
de apparaatnaam.
Mount de versleutelde partitie
Maak een koppelpunt voor het versleutelde bestandssysteem aan:
#
mkdir /private
Mount het versleutelde bestandssysteem:
#
mount /dev/ad4s1c.bde /private
Controleer of het versleutelde bestandssysteem beschikbaar is
Het versleutelde bestandssysteem is nu zichtbaar met df(1) en gebruiksklaar:
%
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% /private
Elke keer nadat het systeem is opgestart dient elk
versleuteld bestandssysteem opnieuw aan de kernel gekoppeld
te worden, op fouten gecontroleerd te worden, en aangekoppeld
te worden voordat de bestandssystemen gebruikt kunnen worden.
De benodigde commando's dienen als de gebruiker
root
uitgevoerd te worden.
Koppel de gbde-partitie aan de kernel
#
gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
Er wordt om de wachtwoordzin gevraagd die gekozen is tijdens de initialisatie van de versleutelde gbde-partitie.
Controleer het bestandssysteem op fouten
Aangezien het nog niet mogelijk is om versleutelde
bestandssystemen op te nemen in
/etc/fstab
voor automatische controle,
dienen de bestandssystemen voordat ze aangekoppeld worden
handmatig op fouten gecontroleerd te worden door
fsck(8) uit te voeren:
#
fsck -p -t ffs /dev/ad4s1c.bde
Mount het versleutelde bestandssysteem
#
mount /dev/ad4s1c.bde /private
Het versleutelde bestandssysteem is nu klaar voor gebruik.
Het is mogelijk om een script aan te maken om automatisch een versleutelde partitie aan te koppelen, op fouten te controleren en aan te koppelen, maar vanwege veiligheidsredenen dient het script niet het wachtwoord voor gbde(8) te bevatten. In plaats hiervan wordt het aangeraden om zulke scripts handmatig uit te voeren en het wachtwoord via de console of ssh(1) te geven.
Als alternatief, wordt er een rc.d
script bijgeleverd. De argumenten kunnen via rc.conf(5)
doorgegeven worden. Bijvoorbeeld:
gbde_autoattach_all="YES" gbde_devices="ad4s1c" gbde_lockdir="/etc/gbde"
Hierdoor is het noodzakelijk dat de wachtwoordzin voor gbde bij het starten wordt ingegeven. Na het invoeren van de juiste wachtwoordzin wordt de met gbde versleutelde partitie automatisch aangekoppeld. Dit kan erg handig zijn bij het gebruik van gbde op notebooks.
gbde(8) versleutelt de sectorlading door gebruik te maken van 128-bit AES in CBC-modus. Elke sector op de schijf wordt met een andere AES-sleutel versleuteld. Meer informatie over het cryptografische ontwerp van gbde, inclusief de methode die gebruikt wordt om de sectorsleutels van de door de gebruiker gegeven wachtwoordzin af te leiden, staan in gbde(4).
sysinstall(8) is niet compatibel met apparaten die
met gbde versleuteld zijn. Alle
*.bde
apparaten moeten van de kernel ontkoppeld worden voordat
sysinstall(8) gebruikt wordt om te voorkomen dat het
crasht tijdens het initiële zoeken naar apparaten. Om
het versleutelde apparaat dat in dit voorbeeld gebruikt wordt
te ontkoppelen:
#
gbde detach /dev/ad4s1c
Een alternatieve cryptografische GEOM klassie is beschikbaar
- geli
. Deze wordt
op het moment ontwikkeld door Pawel Jakub Dawidek <pjd@FreeBSD.org>
. geli
verschilt van gbde
in de mogelijkheden en in
het gebruik van een andere methode voor het
versleutelen.
De meest belangrijke mogelijkheden van geli(8) zijn:
Gebruikt het crypto(9) framework; als
cryptografische hardware aanwezig is, gebruikt
geli
die automatisch;
Ondersteunt meedere cryptografische algoritmen. Op dit moment AES, Blowfish en 3DES;
Staat toe dat de root-partitie wordt versleuteld. De wachtwoordzin die wordt gebruikt om de root-partitie te versleutelen wordt opgevraagd tijdens het starten van een systeem;
Staat het gebruik van twee onafhankelijke sleutels toe, bijvoorbeeld een “sleutel” en een “bedrijfssleutel”);
geli
is snel; het werkt met
sector-naar-sector versleuteling;
Ondersteunt back-up en restore van Master Keys. Als een gebruiker sleutels moet vernietigen, is het mogelijk weer toegang te krijgen tot de gegevens door sleutels uit een back-up te halen;
Ondersteunt het koppelen van een schijf met een willekeurige, eenmalige sleutel. Handig voor swap-partities en tijdelijke bestandssystemen.
Meer mogelijkheden van geli
staan
beschreven in de handleiding van geli(8).
De volgende stappen beschrijven hoe ondersteuning voor
geli
in de FreeBSD-kernel ingeschakeld kan
worden en hoe een nieuwe geli
versleutelingsvoorziening gemaakt kan worden.
Het is noodzakelijk super-user rechten te hebben omdat de kernel wordt aangepast.
Toevoegen van geli
-ondersteuning
Voeg de volgende regels toe aan het bestand met kernelinstellingen:
options GEOM_ELI device crypto
Herbouw de kernel zoals beschreven is in Hoofdstuk 9, De FreeBSD-kernel instellen.
De geli
-module kan ook bij het
opstarten geladen worden. Voeg de volgende regel toe aan
/boot/loader.conf
:
geom_eli_load="YES"
Nu hoort geli(8) door de kernel ondersteund te worden.
Een Master Key genereren
Het volgende voorbeeld beschrijft hoe een
sleutelbestand te maken, dat wordt gebruikt als onderdeel
van de Master Key voor de versleutelde dienst die wordt
aangekoppeld onder /private
. Het sleutelbestand
zorgt voor wat willekeurige gegevens die worden gebruikt
om de Master Key te versleutelen. De Master Key wordt ook
door een wachtwoordzin beschermd. De sectorgrootte van de
dienst wordt 4 kB. Ook wordt beschreven hoe de
geli
-dienst te koppelen, er een
bestandsysteem op te maken, dat aan te koppelen, hoe ermee
te werken en tenslotte hoe te ontkoppelen.
Het wordt aangeraden een grotere sectorgrootte in te stellen (zoals 4 kB) voor betere prestaties.
De Master Key wordt beschermd door een wachtwoordzin en
de gegevensbron voor het sleutelbestand wordt
/dev/random
. De sectorgrootte van
/dev/da2.eli
, die als dienst wordt
aangeduid, wordt 4 kB.
#
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:
Het is niet verplicht om zowel een wachtwoordzijn als een sleutelbestand te gebruiken. De methodes kunnen onafhankelijk van elkaar gebruikt worden.
Als een sleutelbestand wordt opgegeven als “-”, wordt de standaardinvoer gebruikt. In het onderstaande voorbeeld wordt aangegeven hoe meer dan een sleutelbestand kan worden gebruikt.
#
cat sleutelbestand1 sleutelbestand2 sleutelbestand3 | geli init -K - /dev/da2
De dienst koppelen met de gemaakte sleutel
#
geli attach -k /root/da2.key /dev/da2
Enter passphrase:
Het nieuwe platte tekst-apparaat wordt
/dev/da2.eli
genoemd.
#
ls /dev/da2*
/dev/da2 /dev/da2.eli
Het nieuwe bestandssysteem maken
#
dd if=/dev/random of=/dev/da2.eli bs=1m
#
newfs /dev/da2.eli
#
mount /dev/da2.eli /private
Het versleutelde bestandssysteem moet nu zichtbaar zijn voor df(1) en beschikbaar zijn voor gebruik:
#
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% /private
De dienst afkoppelen
Als het werk met de versleutelde partitie is
afgehandeld en de /private
-partitie niet langer
nodig is, dan is het verstandig te overwegen de met
geli
versleutelde partitie af te koppelen
van het bestandssysteem en de kernel.
#
umount /private
#
geli detach da2.eli
Meer informatie over geli(8) staat in de handleiding.
Bij geli
hoort een rc.d
script dat gebruikt kan worden om het gebruik van
geli
te vereenvoudigen. Een voorbeeld van
hoe geli
met rc.conf(5) ingesteld
kan worden volgt:
geli_devices="da2" geli_da2_flags="-p -k /root/da2.key"
Hiermee wordt /dev/da2
ingesteld als
geli
-dienst met Master Key-bestand
/root/da2.key
en geli
gebruikt geen wachtwoordzin als de dienst wordt gekoppeld
(dit kan alleen gebruikt worden als -P
is meegegeven
tijdens de geli init
fase van
geli
). Een systeem ontkoppelt de
geli
-dienst van de kernel voordat het
afsluit.
Meer informatie over het instellen van rc.d staat in het onderdeel over rc.d.
[10] Tips met betrekking tot het kiezen van veilige wachtwoordzinnen die gemakkelijk te onthouden zijn staan op de website Diceware Passphrase.