Tips en Trucs 2016

Harde schijven versleutelen

Gegevensbeveiliging is één van de belangrijkste zorgen van internet gebruikers. Datadiefstallen van websites komen regelmatig in het nieuws, maar niet enkel websites moeten uw data zo goed mogelijk beveiligen, ook wij de eindgebruikers kunnen heel wat doen. Gebruik sterke wachtwoorden, versleutel gegevens en klik niet zomaar op elke koppeling zijn maar een paar voorzorgen die je zelf kunt ondernemen. Het versleutelen van de harde schijf, verhoogt de veiligheid van uw gegevens behoorlijk. Het beschermt niet alleen tegen Trojans die proberen uw gegevens via het internet te verspreiden, maar beschermt ook tegen fysieke aanvallen. Linux beeft voldoende open source mogelijkheden om gegevens te beveiligen met encryptie. Vandaag bekijken we dm-crypt en LUKS.

Dm-crypt

Dm-crypt (device mapper-crypt) is zoals je uit de naam kunt afleiden gebaseerd op device-mapper, een Linux kernel onderdeel waarmee je blokapparaten (block devices) kunt voorstellen als virtuele blokapparaten op een hoger niveau. De device mapper is de basis van verschillende kernel functies zoals dm-cache (voor hybride volumes) en dm-verify (integriteitstest). Voor cryptografische taken wordt dm-crypt gebruikt.

Samengevat is dm-crypt een kernel encryptiesysteem die het mogelijk maakt transparant te versleutelen. Dit betekent dat de bestanden na het koppelen van de schijf direct beschikbaar zijn. Er is dus voor de gebruiker geen merkbare vertraging. Om gegevens met dm-crypt te versleutelen geef je een symmetrische codering (cipher), een coderingsmodus, een sleutel (key) en een methode om de Initialization vector (IV) te genereren op. Daarmee wordt in /dev een nieuw blokapparaat aangemaakt. Alles wat naar dit nieuwe blokapparaat wordt geschreven wordt versleuteld en alles wat gelezen wordt ontcijfert.

LUKS

Hoewel dm-crypt onafhankelijk gegevens kan versleutelen/ontcijferen, heeft deze manier van werken enkele nadelen. Dm-crypt creëert geen metadata op de schijf en dit zorgt voor compatibiliteitsproblemen tussen verschillende Linux distributies. Daarenboven kan je met dm-crypt geen gebruik maken van meerdere sleutels.

Daardoor ontstond LUKS (Linux Unified Key Setup). LUKS is een Linux standaard voor versleutelde harde schijven, en standaarden zorgen voor compatibiliteit tussen distributies onderling. Het ondersteunt meerdere sleutels en het intrekken van wachtwoorden. LUKS voegt een header met alle noodzakelijke informatie toe aan de versleutelde gegevens. Met de in de header aanwezige informatie kan de gebruiker zonder problemen de versleutelde gegevens naar een ander Linux systeem overbrengen. Het dm-crypt project zelf raadt aan om LUKS te gebruiken om harde schijven te versleutelen.

Installatie

De kernel functies die door dm-crypt gebruikt worden zijn in alle Linux distributies aanwezig, enkel de programma's om ze te benaderen moet je installeren. Met cryptsetup kan je dm-crypt, LUKS en zelfs oude TrueCrypt volumes aanmaken. In OpenSUSE Leap 42.1 is cryptsetup standaard geïnstalleerd:

dany@laptop:~> sudo zypper install cryptsetup
root's password:
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
'cryptsetup' is al geïnstalleerd.
Geen kandidaat voor bijwerken van 'cryptsetup-1.6.4-3.3.x86_64'. De hoogst beschikbare versie is al geïnstalleerd.
Pakketafhankelijkheden oplossen...

Geen activiteit.

Een containerbestand aanmaken

Er zijn verschillende manieren om een bestand aan te maken die dienst doet als LUKS container (opslagruimte). Er zijn wel een paar voorwaarden waaraan het bestand moet voldoen:

De dd opdracht kan ons helpen om zo'n bestand aan te maken. Het virtuele apparaat /dev/random zorgt voor de willekeurige data waarmee we het bestand vullen:

dany@laptop:~> dd if=/dev/random of=container bs=1M count=128 iflag=fullblock
128+0 records gelezen
128+0 records geschreven
134217728 bytes (134 MB) gekopieerd, 58,9692 s, 2,3 MB/s

Deze opdracht maakt een 128 MB groot bestand aan met de naam container. Het aanmaken van dit bestand kan lang duren.

LUKS partitie aanmaken

Na het aanmaken van het containerbestand, moet je een LUKS partitie (indeling)) in dit bestand aanmaken. Deze partitie zorgt voor ruimte waarin we later de versleutelde gegevens in opslaan. Daarnaast bevat de LUKS partitie ruimte voor de LUKS header met informatie waardoor je de container op andere Linux systemen kunt gebruiken.

dany@laptop:~> sudo cryptsetup -y luksFormat container
root's password:

WARNING!
========
Dit zal data op container onherroepelijk overschrijven.

Are you sure? (Type uppercase yes): YES
Voer wachtwoord in: 
Voer wachtwoord nogmaals in:

Na de melding en bevestiging dat de gegevens onherroepelijk wordt verwijderd, voer je een wachtzin (wachtwoord) tweemaal in (om tikfouten uit te sluiten), wordt de LUKS partitie aangemaakt. Controleer dit met:

dany@laptop:~> file container
container: LUKS encrypted file, ver 1 [aes, xts-plain64, sha1] UUID: abe130ab-3676-40f9-a9da-b0877abbc420

Het hier opgegeven wachtwoord wordt gebruikt om de gegevens te versleutelen. Het is dus zeer belangrijk dit wachtwoord te onthouden en veilig te houden. Als je het wachtwoord niet meer weet ben je al uw gegevens op de versleutelde partitie onherroepelijk kwijt.

Een bestandssysteem aanmaken en koppelen

De LUKS container is voorlopig een gewoon bestand. Met cryptsetup kan je het containerbestand openen als een apparaat (device). Daarvoor koppelen we het containerbestand aan een apparaatnaam (mapping):

dany@laptop:~> sudo cryptsetup luksOpen container volume1
root's password:
Voer wachtwoord in voor container:

Na het ingeven van het correcte wachtwoord, is de LUKS container toegankelijk als een gewoon apparaat. In technische termen is het LUKS containerbestand nu toegankelijk via een local loopback device. M.a.w. het systeem heeft nu toegang tot het LUKS containerbestand, juist alsof het een klassieke schijf is.

Juist zoals een gewone schijf, moet je deze formatteren en een bestandssysteem aanmaken. Daarbij kan je elk bestandssysteem gebruiken dat door jouw systeem wordt ondersteund. Voor ext4 gebruik je:

dany@laptop:~> sudo mkfs.ext4 -j /dev/mapper/volume1
mke2fs 1.42.11 (09-Jul-2014)
Aanmaken van bestandssysteem met 129024 blokken (van 1K) en 32256 inodes.
Bestandssysteem-UUID: 0deab1cd-7c99-429d-bb72-980731113c0a
Superblokreservekopieën zijn opgeslagen in blokken: 
        8193, 24577, 40961, 57345, 73729

Reserveren van groepstabellen: voltooid                        
Schrijven van inodetabellen: voltooid                        
Aanmaken van journal (4096 blokken): voltooid
Schrijven van superblokken en bestandssysteem-metagegevens: voltooid

Na het formatteren, moet je het apparaat koppelen. Daarvoor creëren we een een map, liefst in de /mnt map.

dany@laptop:~> sudo mkdir /mnt/versleuteld

En uiteindelijk het eigenlijke koppelen:

dany@laptop:~> sudo mount /dev/mapper/volume1 /mnt/versleuteld/

Een overzicht van de gekoppelde apparaten krijg je met:

dany@laptop:~> df -h
Bestandssysteem     Grootte Gebruikt Besch Geb% Aangekoppeld op
devtmpfs               3,9G        0  3,9G   0% /dev
tmpfs                  3,9G     444K  3,9G   1% /dev/shm
tmpfs                  3,9G     2,3M  3,9G   1% /run
tmpfs                  3,9G        0  3,9G   0% /sys/fs/cgroup
/dev/sda4               79G      17G   62G  22% /
/dev/sda2              256M      57M  200M  22% /boot/efi
/dev/mapper/volume1    119M     1,6M  108M   2% /mnt/versleuteld

De laatste regel is de toegang tot het versleutelde apparaat (LUKS containerbestand). Een deel van de totale opslagruimte is reeds in gebruik voor de LUKS header. Nu is het LUKS apparaat met een ext4 bestandssysteem klaar voor gebruik. Alles wat je op het apparaat opslaat wordt versleuteld, alles wat je van het apparaat afhaalt ontcijfert.

De versleutelde schijf gebruiken

Na het opzetten van de versleutelde schijf zullen mensen die niet vertrouwd zijn met de materie waarschijnlijk in de war zijn. We hebben namelijke taken uitgevoerd die maar één keer nodig zijn voor het opzetten van de versleutelde schijf en een aantal taken die we telkens moeten uitvoeren als we toegang tot de versleutelde schijf willen. Bij het afsluiten van uw computer, zal je bij de volgende start geen versleuteld apparaat meer terugvinden. Je moet het versleutelde apparaat voor gebruik namelijk koppelen aan het LUKS containerbestand en voor het afsluiten van de computer terug afkoppelen.

Om toegang te krijgen tot de versleutelde inhoud van het LUKS containerbestand open je het LUKS containerbestand:

dany@laptop:~> sudo cryptsetup luksOpen container volume1
root's password:
Voer wachtwoord in voor container:

Daarna kan je het geopende LUKS container bestand koppelen in de mappenstructuur:

dany@laptop:~> sudo mount /dev/mapper/volume1 /mnt/versleuteld

Je kunt nu gegevens in de LUKS container opslaan en openen. Na het werken, koppel je de geopende LUKS container los van de mappenstructuur:

dany@laptop:~> sudo umount /mnt/versleuteld/

En sluit je het LUKS container bestand:

dany@laptop:~> sudo cryptsetup luksClose volume1

Reservekopie

De meeste gevallen van gegevensverlies in LUKS containers zijn te wijten aan een beschadigde LUKS header of beschadigde sleutels. Het defect raken van de harde schijf zelf is ook een mogelijkheid. Een reservekopie maken is de beste bescherming tegen zulke ongelukken.

Om een reservekopie van de LUKS header te maken, gebruik je:

dany@laptop:~> sudo cryptsetup luksHeaderBackup container --header-backup-file LUKS-header-reservekopie

Om te controleren of de LUKS header in orde is, gebruik je de opdracht:

dany@laptop:~> sudo cryptsetup -v isLuks LUKS-header-reservekopie
Opdracht succesvol.

Naast het maken van een reservekopie van de LUKS header, maak je ook best een back-up van de gegevens. Zo bescherm je je tegen harde schijf problemen:

dany@laptop:~> cat container > container.img

Tips

Om de LUKS headers van een geopende containerbestand weer te geven, gebruik je de luksDump optie (zie afbeelding).

LUKS header

Wil je meerdere sleutels gebruiken, kan je een sleutel als volgt toevoegen:

dany@laptop:~> sudo cryptsetup luksAddKey --key-slot 1 container
Voer een bestaand wachtwoord in: 
Voer een nieuw wachtwoord in voor de sleutelplaats: 
Voer wachtwoord nogmaals in:

Deze opdracht voegt wachtwoord 1 toe aan de container, maar enkel als je het wachtwoord 0 (key 0) kent. Je kunt maximaal acht sleutels gebruiken. Met elk van deze sleutels kan je de container ontcijferen (openen). De sleutels kan je weergeven met de luksDump optie:

dany@laptop:~> sudo cryptsetup luksDump container              
LUKS header information for container

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha1
Payload offset: 4096
MK bits:        256
MK digest:      db 05 9b 03 5c 07 60 6c d0 1c 51 bb e4 51 e1 a8 6f 54 e9 f8 
MK salt:        9d a0 21 44 6c 26 aa ef 6d 9e f4 f0 cd cb c8 86 
                0b 1d 97 85 03 cf 66 d8 23 16 1f fc 20 64 6a 21 
MK iterations:  130000
UUID:           abe130ab-3676-40f9-a9da-b0877abbc420

Key Slot 0: ENABLED
        Iterations:             518217
        Salt:                   8d 3f 96 7b a7 5c 6b e7 56 12 b5 06 42 be d5 69 
                                9a ca 37 42 d3 5d 83 43 e0 b3 96 31 d3 53 42 9e 
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             496124
        Salt:                   d7 4a ef 1f a9 be 4a a9 74 e6 cf 23 d3 e1 5d 57 
                                da 8e 2a 81 0d ca c8 07 ea 57 76 f0 9d e8 ec c2 
        Key material offset:    264
        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

Een sleutel verwijder je met:

dany@laptop:~> sudo cryptsetup luksRemoveKey container
Voer het te verwijderen wachtwoord in:

Verwijder nooit alle wachtwoorden of je gegevens gaan definitief verloren.