19.16. Schijfpartities versleutelen

Bijgedragen door Lucky Green.

FreeBSD biedt uitstekende on-line bescherming tegen onbevoegde gegevenstoegang. Bestandsrechten en Mandatory Access Control (MAC) (zie Hoofdstuk 17) 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.

19.16.1. Schijven versleutelen met gbde

  1. Word root

    Het instellen van gbde vereist beheerdersrechten.

    % su -
    Password:
    
  2. 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.

    Start op met de nieuwe kernel.

  3. Een alternatief voor het hercompileren van de kernel is door gebruik te maken van kldload(8) om gbde(4) te laden:

    # kldload geom_bde
    

19.16.1.1. Versleutelde harde schijf voorbereiden

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.

  1. Voeg een nieuwe harde schijf toe

    Voeg de nieuwe harde schijf toe zoals beschreven in Paragraaf 19.3. 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
    
  2. 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.

  3. 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. [1]

    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.

    Let opgbde 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.

  4. 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
    
  5. 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
    

    Opmerking: Voer newfs(8) uit op een aangekoppelde gbde-partitie die geïndificeerd wordt door de uitbreiding *.bde op de apparaatnaam.

  6. Mount de versleutelde partitie

    Maak een koppelpunt voor het versleutelde bestandssysteem aan:

    # mkdir /private
    

    Mount het versleutelde bestandssysteem:

    # mount /dev/ad4s1c.bde /private
    
  7. 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
    

19.16.1.2. Bestaande versleutelde bestandssystemen aankoppelen

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.

  1. 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.

  2. 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
    
  3. Mount het versleutelde bestandssysteem

    # mount /dev/ad4s1c.bde /private
    

    Het versleutelde bestandssysteem is nu klaar voor gebruik.

19.16.1.2.1. Versleutelde partities automatisch aankoppelen

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.

19.16.1.3. Door gbde gebruikte cryptografische beschermingen

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).

19.16.1.4. Compatibiliteitspunten

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

gbde kan niet met vinum volumes gebruikt worden, omdat vinum(4) geen gebruik maakt van het subsysteem geom(4).

19.16.2. Schijfversleuteling met geli

Bijgedragen door Daniel Gerzo.

Een alternatieve cryptografische GEOM klassie is beschikbaar - geli. Deze wordt op het moment ontwikkeld door Pawel Jakub Dawidek . 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:

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.

  1. 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 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.

  2. 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
    
  3. 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
    
  4. 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
    
  5. 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.

19.16.2.1. Gebruik maken van het geli rc.d script.

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.

Noten

[1]

Tips met betrekking tot het kiezen van veilige wachtwoordzinnen die gemakkelijk te onthouden zijn staan op de website Diceware Passphrase.