Flash drive hidden under the carpet and connected via a USB extension, holding the decryption keys - threat model is a robber making off with the hard drives and gear, where the data just needs to be useless or inaccessible to others.
There’s a script in the initramfs which looks for the flash drive, and passes the decryption key on it to cryptsetup, which then kicks off the rest of the boot mounting the filesystems underneath the luks
I could technically remove the flash drive after boot as the system is on a UPS, but I like the ability to reboot remotely without too much hassle.
What I’d like to do in future would be to implement something more robust with a hardware device requiring 2FA. I’m not familiar with low level hardware security at all though, so the current setup will do fine for the time being!
I used to run a TFTP server on my router that held the decryption keys. As soon as a machine got far enough in the boot sequence to get network access, it would pull the decryption keys from the router. That way a thief would have to steal the router along with the computer, and have the router running when booting up the computer. It works wirelessly, too!
Flash drive hidden under the carpet and connected via a USB extension, holding the decryption keys - threat model is a robber making off with the hard drives and gear, where the data just needs to be useless or inaccessible to others.
This is a pretty clever solution. Most thieves won’t follow a cable that for all intents looks like a network cable, especially if it disappears into a wall plate or something.
I don’t think most thieves care much about the data on the computer in the first place. Steal hardware, fresh install of Windows on it and straight to the pawn shop.
Agreed. Even just putting a non-Windows/Mac compatible file system on it may have the same effect. They cannot see files when they plug the drive into their PC or Mac, so they probably also just format it.
I’m curious; how would you do it for VMs with an encrypted virtual disk?
Initramfs listening with dropbear to prompt me for my passphrase. I can ssh in if I needed to reboot, or if it’s lost power for longer than my ups can keep it running.
Outside of the classic “type a password” or “have the keys locally”, Network Bound Disk Encryption (NBDE) is what the business world uses for this (but it’s not cheap and/or simple to self host). On one side you have commercial vendors who will sell you a solution, such as Vormetric, and on the other side you have the open source world trying to leverage open code.
Red Hat has a good article to read as an NBDE primer as it outlines the concepts as well as implementing their solution/method using open software: https://access.redhat.com/documentation/en-us/openshift_container_platform/4.10/html/security_and_compliance/network-bound-disk-encryption-nbde
I’m not sure if this is helpful to you or not, because it’s not what you asked. I just don’t mount them on boot though.
I have a script that requires a unique password that decrypts everything that I actually care about. If that hasn’t been run, then the server starts emailing me every 15 minutes until I do.
The server is not setup to reboot unless I manually tell it to or there is a power outage, so logging in to run the script has never really been an issue. At most, I’ve had to SSH in from my phone maybe a handful of times.
TPM stores the encryption key against secure boot. That way, if attacker disables/alters secure boot then TPM won’t unseal the key. I use clevis to decrypt the drive.
Manual password entry. I feel that any other method offers insufficient security.
For my desktops, this means interactive decryption before the OS loads. For my servers, only the data drives are encrypted, and I decrypt them manually over SSH whenever a reboot is needed (kernel updates, etc.).
The boring method, unlock boot drive with password, then the other drives with a keyfile referenced in crypttab. Although now that I think about it, if I were to reboot the machine remotely I wouldn’t be able to do anything on the machine until I have physical access.
Mandos and wireguard inside initramfs.
Wireguard connects to a cloud VPS that acts as the mandos server and then grabs the key from mandos.
All my systems are protected by LUKS aside from /boot which in my case simply holds the wireguard config and what’s required to get the key from mandos. Yes this leaves the wireguard keys exposed but I’m not concerned since in my case they’re only good for this purpose and it’s easy to disable a peer. Plus the VPS has nftables rules that only allow traffic on the wireguard interface to a single port that the mandos server listens on.
In the past I wanted to use auto unlock via TPM, however it seems quite complicated to set up and the Arch wiki advises against it anyway, so I just enter the password during boot.
The one improvement I would like to make here is to have a nicer input (visually) like Fedora but I’m not sure how this is done and how I could replicate that on Arch.
I only encrypt the data using LUKS and I have a password stored in Google Secrets Manager. I have a script that runs as a systemd service, goes fetch the password and unlocks the volume. If the drive is somehow stolen, I just revoke the key and the data is unreadable.
I’ve always used Veracrypt since I discovered its existence.
Nice inconspicuous encrypted loop-files you can mount manually when needed (or automount at boot, but that already makes them a lot less safe) and backup to any cloud safely, as without the password they are useless.
Does a PiKVM to enter the password manually count?