Simovits

Dolda hårddiskvolymer

Flera länder, däribland Storbritannien har implementerat lagar (RIPA) där polisen utan ett domstolsbeslut kan begära att en användare uppger sina krypteringsnycklar för hårddiskkryptering [1]. Detta har lett till att det uppstått ett behov av att dölja själva existensen av krypterade hårddiskvolymer.

Steganografi

Läran om att försöka dölja data eller meddelanden kallas steganografi och har en lång historia med bland annat användandet av osynligt bläck. Idag döljs ofta krypterade hemliga meddelanden inuti andra större filer såsom bild- och videofiler. Eftersom krypterade data inte borde uppvisa mönster blir sådan svår att separera från slumpartat brus. Därmed blir det svårare att påvisa existensen av sådan krypterad data om den omges av slumpartat brus.

VeraCrypt

Ett fri och öppen källkods krypteringsmjukvarupaket VeraCrypt erbjuder sådan form av dolda krypterade hårddiskvolymer där själva existensen av dem inte går att påvisa. [2] Principen bygger på att en krypterad volym som inte har en post i partitionstabellen lagras över fritt utrymme på en yttre volym. [3]

Layouten på en standard VeraCrypt volym ovan och en VeraCrypt volym med en dold volym nedan

Användaren kan ifall den uppmanas att dekryptera volymen ange nyckeln för den yttre volymen medan det finns en annan nyckel till den inre dolda volymen. Det är även möjligt att installera operativsystem på sådana dolda volymer [4] genom att VeraCrypt kan installera en bootloader där en nyckel leder till den yttre volymen medan en annan nyckel leder till den inre dolda volymen.

Tillkortakommanden

Hursomhelst tordes målgruppen inte vara så stor för en sådan lösning och den kommer inte utan risker och tillkortakommanden som jag kommer att gå igenom nedan.

En risk som borde skrämma iväg de flesta användare är att den dolda volymen överlappar den yttre icke-dolda volymen och ifall man skriver data till den icke-dolda volymen kommer man så småningom att skriva över den inre dolda volymen. Detta förhindras visserligen med VeraCrypt då ett generiskt IO-fel blockerar sådan överskrivning och möjligtvis istället orsakar en krasch av programmet eller operativsystemet.

För att inte skapa misstankar eller spår av användningen av ett dolt system behöver man bland annat iaktta följande försiktighetsåtgärder:

En gör-det-själv dold volym

Slutligen kan själva existensen av VeraCrypts bootloader ge viss misstanke om dolda volymer, därför har jag försökt återskapa en liknande dold-volym lösning med LUKS på Ubuntu 18.0.4 LTS utan VeraCrypt.

Läs först!

Jag vill upplysa om att i stegen nedan utförs modifieringar av volymer och partitioner vilket kan misslyckas och resultera i att data skrivs över så den inte går att återskapas. Utför inte dessa på någon fysisk hårddisk som innehåller några filer ni inte skulle vilja bli av med, eller som inte är säkerhetskopierade.

Steg för steg

För att demonstrera min gör-det-själv volym tänkte jag placera en liten dold LUKS-krypterad [5] volym i slutet av /dev/sda1. Detta väljer jag att göra med gparted där jag avmountar /dev/sda1 och sedan krymper volymen för att ge plats åt en ny 512MiB volym.

Gparted före modifieringarna
Gparted efter skapandet av den nya volymen

För att titta på den nya partitionstabellen använder jag fdisk -l där jag observerar att vår nya volym /dev/sda3 börjar på block 450560, dvs. dess offset från starten på /dev/sda är 450560*512 (hårddiskens blockstorlek) = 230686720 bytes. Detta bör skrivas ned.

I följande steg initierar jag LUKS systemet på /dev/sda3 skapar en mapper /dev/mapper/secret för att kunna formatera den inre volymen med ext4 formatering.

cryptsetup luksFormat /dev/sda3
cryptsetup luksOpen /dev/sda3 secret
mkfs.ext4 /dev/mapper/secret

När den dolda volymen är skapad tar jag bort den från partitionstabellen genom att ta bort partitionen i gparted och expanderar /dev/sda1 över den igen.

Gparted efter att den nya volymen har dolts

Nu syns inte partitionen i additionstabellen längre men den kan fortfarande mountas genom att knyta en ledig loop-device /dev/loop0 till korrekt offset 230686720, skapa en mapper /dev/mapper/secret och mounta partitionen på valfri katalog.

losetup /dev/loop0 -o 230686720 /dev/sda
cryptsetup luksOpen /dev/loop0 secret
mkdir mountPoint
mount /dev/mapper/secret mountPoint

Skål! Vi har nu demonstrerat en gör-det-själv dold volym.

Slutord

Denna dolda volym ligger dock på en okrypterad volym och ifall man läser igenom hårddisken block för block lär man hitta LUKS-headern på partitionen. Man borde troligtvis lägga den dolda volymen på en krypterad volym och se till att ledigt utrymme är överskrivet med slumpmässig brus för en riktig lösning.

Referenser

[1] http://news.bbc.co.uk/2/hi/technology/7102180.stm

[2] https://www.veracrypt.fr/en/Plausible%20Deniability.html

[3] https://www.veracrypt.fr/en/Hidden%20Volume.html

[4] https://www.veracrypt.fr/en/Hidden%20Operating%20System.html

[5] https://gitlab.com/cryptsetup/cryptsetup/blob/master/README.md