Szyfrowanie pełnego dysku z uwierzytelnianiem dwuskładnikowym w systemie Ubuntu: jak?

9

Informacje podstawowe

Jestem nowicjuszem w Linuksie, który niedawno odłączył system Windows. Obecnie używam Ubuntu 11.04 bez pełnego szyfrowania dysku. Tylko mój katalog domowy jest szyfrowany i przy pomocy eCryptFS. Ostatnio zacząłem zauważać, że szyfrowanie nie jest tak przejrzyste, jak powinno być. Na przykład VMWare czasami ma problemy z maszynami wirtualnymi przechowywanymi w moim zaszyfrowanym katalogu domowym, więc po prostu przeniosłem maszyny wirtualne do niezaszyfrowanej lokalizacji i połączyłem się z nimi z mojego zaszyfrowanego katalogu domowego. Ale to poza tym: zdałem sobie sprawę, że tak naprawdę niezbyt bezpieczne jest pozostawienie systemu niezaszyfrowanego, ponieważ system operacyjny typu open source, taki jak Ubuntu, jest bardzo łatwy do modyfikacji w celu ujawnienia informacji, które powinien zachować w tajemnicy.


Cel

Chciałbym mieć możliwość pełnego szyfrowania dysku w połączeniu z kluczowym urządzeniem i hasłem do uwierzytelniania przed uruchomieniem.


Wymagania / szczegóły

  1. Cały dysk musi być zaszyfrowany. Dysk składa się przynajmniej z pojedynczych partycji, które są zaszyfrowane. Jeśli możliwe jest ukrycie nawet partycji z szyfrowaniem, wybiorę to. Im bardziej przejrzyste jest szyfrowanie, tym lepiej; Nie powinienem używać mojego komputera inaczej ani konfigurować czegokolwiek innego.
  2. Urządzenie używane do odblokowywania i uruchamiania zaszyfrowanej partycji musi być małym zewnętrznym urządzeniem przenośnym. Służy to dwóm celom: moduł ładujący jest znacznie mniej podatny na modyfikację w celu złośliwych celów, ponieważ pozostanie ze mną, gdy nie będzie używany; a pliki kluczy do odszyfrowania dysku nie będą znajdować się nigdzie na zaszyfrowanym dysku w żadnej formie.
  3. Pliki kluczy powinny być szyfrowane hasłem. Jeśli stracę zarówno komputer, jak i urządzenie USB, dane i system operacyjny będą nadal bezpieczne. Jeśli zgubię klucz USB lub zostanie on przejęty, mogę utworzyć kolejny czysty z kopii zapasowej. W obu przypadkach nie ujawniono żadnych informacji. Oczywiście, jeśli stracę komputer, jest to nieistotne.

Tak, patrzyłem na przewodniki z wielu miejsc, ale problem polega na tym, że nie spełniają one wszystkich wymagań (szczególnie numeru 3). Jestem prawie pewien, że moje wymagania są na tyle powszechne, że ktoś już próbował i pomyślnie wdrożył taką konfigurację. Byłbym wdzięczny, gdyby jakikolwiek profesjonalista z Linuksa mógł udostępnić rozwiązanie.

Kevin Li
źródło
2
Re „ponieważ system operacyjny typu open source, taki jak Ubuntu, jest bardzo łatwy do modyfikacji w celu ujawnienia informacji, powinien on zachować w tajemnicy”. - Byłbyś zaskoczony, jak łatwo przekonać systemy operacyjne o zamkniętym źródle, aby zrobiły to samo. Fakt, że program jest oprogramowaniem typu open source, nie znaczy nic o jego bezpieczeństwie lub niepewności przed atakami lokalnymi.
user1686,

Odpowiedzi:

2

Istnieje prosty sposób na pełne szyfrowanie dysku, które wymaga obecności konkretnego napędu USB i hasła do uruchomienia.

Odłącz nagłówek LUKS od w pełni zaszyfrowanego dysku twardego i zapisz go na dysku USB.

Zakładam, że masz już następującą konfigurację:

# /dev/sda1 is the boot partition (100MB)
# /dev/sda2 is the encrypted partition
parted /dev/sda mklabel msdos
parted /dev/sda -- mkpart primary ext2 1M 200M
parted /dev/sda -- mkpart primary ext4 200M -100M
cryptsetup luksFormat /dev/sda2

Utwórz kopię nagłówka Luks i usuń go z urządzenia lokalnego:

mkdir /media/ramdisk && mount -t tmpfs -osize=20m,rw tmpfs /media/ramdisk
cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/ramdisk/header.img
dd if=/dev/urandom of=/dev/sda2 bs=1M count=2

Wykonaj ostatni krok kilka razy, jeśli jesteś celem wysokobudżetowej agencji. Stworzyłem także ramdysk, który tymczasowo przytrzymuje nagłówek, aby nie pozostawał dłużej.

Z urządzeniem USB w / dev / sdb utwórz partycję 2 MB i załaduj na nią nagłówek:

parted /dev/sdb -- mklabel MSDOS
parted /dev/sdb -- mkpart primary 1M 3M
dd if=/media/ramdisk/header.img of=/dev/sdb1

W tej chwili wszystko w / dev / sda2 wygląda jak losowe dane, a ty masz nagłówek w / dev / sdb1. Aby ręcznie uzyskać dostęp do zaszyfrowanego dysku, użyj:

cryptsetup luksOpen --header /dev/sdb1 /dev/sda2 rootfs
mount /dev/mapper/rootfs /target

Następnym krokiem jest poproszenie procesu ładowania o włączenie pendrive'a podczas uruchamiania. Uznałem, że łatwiej jest po prostu założyć, że tam będzie i inaczej się nie powiedzie. Najpierw sprawdź identyfikator urządzenia i identyfikator UUID:

find -L /dev/disk/by-id/ -samefile /dev/sdb1
/dev/disk/by-id/usb-Generic-_Compact_Flash-part1
find -L /dev/disk/by-id/ -samefile /dev/sda2
/dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2

blkid /dev/sdb1
/dev/sdb1: UUID="63347546-2db3-4bc1-9414-1142739a4c9f" TYPE="crypto_LUKS"

Następnie edytuj swój /etc/crypttabwiersz, aby wyglądał tak:

root /dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2 none luks,header=/dev/disk/by-id/usb-Generic-_Compact_Flash-part1

(Możesz potrzebować tej poprawki, aby uzyskać wsparcie dla headeropcji w crypttab)

Na koniec zaktualizuj swój initram:

update-initramfs -u

Możesz pójść o krok dalej i faktycznie załadować całą partycję rozruchową na dysk USB . Autor tego artykułu był na tej samej stronie i kontynuował .

Istnieje wiele różnych metod , które można podjąć , z różnym stopniem bezpieczeństwa i komfortu.

Szczególna uwaga na temat bezpieczeństwa: jeśli hasło zostanie naruszone, każdy, kto ma kopię nagłówka, będzie mógł odszyfrować dane, nawet jeśli później zmienisz hasło.

GnP
źródło
1

Wiem, że TrueCrypt jest dostępny dla systemów OSX, Windows i Linux. Możesz wykonać dwa poziomy szyfrowania dla całego dysku. Użyłem go w Debianie z pełnym szyfrowaniem dysku AES. Wymaga hasła przy rozruchu, aby uzyskać dostęp do danych na dysku twardym.

Kobaltz
źródło
3
Myślałem, że pełne szyfrowanie dysku TrueCrypt działa tylko w systemie Windows.
Kevin Li
two levels of encryption for the whole drive! =two factor auth
GnP