From 7d2a258119d3c28485108c139d687c1b664a3427 Mon Sep 17 00:00:00 2001 From: xf0r3m Date: Tue, 23 Jul 2024 13:22:09 +0200 Subject: [PATCH] =?utf8?q?Dodanie=20materia=C5=82u:=20linux/zdalne=5Fodblo?= =?utf8?q?kowanie=5Fcryptroot=5Fprzez=5FSSH.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- articles/linux/index.html | 1 + ...alne_odblokowanie_cryptroot_przez_SSH.html | 192 ++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100644 articles/linux/zdalne_odblokowanie_cryptroot_przez_SSH.html diff --git a/articles/linux/index.html b/articles/linux/index.html index 92de661..e445175 100755 --- a/articles/linux/index.html +++ b/articles/linux/index.html @@ -47,6 +47,7 @@
  • Uruchomienie skryptu podczas ładowania systemu - jednostka systemd.html
  • Instalacja własnościowego sterownika graficznego Nvidii na Debian 11
  • Automatyczne odblokowanie istniejących partycji LUKS
  • +
  • Zdalne odblokowanie cryptroot przez SSH
  • diff --git a/articles/linux/zdalne_odblokowanie_cryptroot_przez_SSH.html b/articles/linux/zdalne_odblokowanie_cryptroot_przez_SSH.html new file mode 100644 index 0000000..7d2df21 --- /dev/null +++ b/articles/linux/zdalne_odblokowanie_cryptroot_przez_SSH.html @@ -0,0 +1,192 @@ + + + + + + + + +
    +  _____ _   _ _    _    ___      _
    + / ____| \ | | |  | |  / / |    (_)
    +| |  __|  \| | |  | | / /| |     _ _ __  _   ___  __
    +| | |_ | . ` | |  | |/ / | |    | | '_ \| | | \ \/ /
    +| |__| | |\  | |__| / /  | |____| | | | | |_| |>  <
    + \_____|_| \_|\____/_/   |______|_|_| |_|\__,_/_/\_\
    +
    + +
    +

    Zdalne odblokowanie cryptroot przez SSH

    +

    + Tworząc materiał o automatyczym odblokowaniu partycji LUKS podczas + rozruchu systemu, na jego końcu postawiłem tezę, że rozwiązanie nie + jest idealne, brakuje środka zapobiegającego wyciekowi klucza w + momencie, gdy ktoś nie powołany uzyska fizyczny dostęp do maszyny. + Po zapoznaniu się z materiałem opisującym przekierowanie konsoli + tty0 na port COM, wiemy, że możemy zaszyfrować partycję + z katalogiem głównym i użyć innego serwera do połaczenia szeregowego + i odblokować go przez konsolę. Problem niestety z tym rozwiązaniem + jest taki, że obecne komputery, mogą nie mieć w ogóle portów COM lub + trzeba je wyprowadzić lub trzeba zakupić odpowiedni moduł, którego + nie tyle cena co dostępność może być utrudniona. Tak też było w + moim przypadku. +

    +

    + Rozwiązanie tego problemu istnieje i polega ono na uruchomieniu + serwera SSH na etapie wykonywania czynności przez system w + initramfs. Do tego celu użyjemy inne implementacji + protokołu SSH niż OpenSSH, wykorzystamy oprogramowanie Dropbear - + jest to implemetacja obsługi protokołu SSH przeznaczona dla systemów + wbudowanych. Domyślnie wykorzystywana jest w dystrybucji OpenWRT. + Dla systemów opartych na Debianie w repozytoriach dostępnych jest + pakiet dropbear-initramfs, więc niezbędne oprogramowanie + mamy podane jak na tacy. Pozostaje je tylko skonfigurować. +

    +
    +$ sudo apt install -y dropbear-initramfs
    +
    +

    + Podczas instalacji zostanie nam wyświetlony taki o to komunikat: +

    +
    +dropbear: WARNING: Invalid authorized_keys file, SSH login to initramfs won't work!
    +
    +

    + Ignorujemy go, a naszą konfigurację zaczniemy od właśnie + dodania klucza. Możemy używać swojego dotychczasowego klucza lub + wygenerować nowy klucz dla serwera. Klucz zapisujemy w pliku + /etc/dropbear/initramfs/authorized_keys - oznaczyłem + te ścieżkę nie bez powodu. Otóż różne wersje dropbear, + korzystają z różnych ścieżek, na szczęście jest tylko jedna + alternatywa (/etc/dropbear-initramfs/authorized_keys). + Wersje do Debiana 11 oraz Ubuntu 20.04 LTS, korzystają ze starszej + wersji (dropbear-initramfs/). Tutaj opiszę wersję nowszą, + starsza znajduje się w źródłach (drugi odnośnik). +

    +

    + Po zapisaniu klucza możemy przejść do konfiguracji + Dropbear-a. + W pliku /etc/dropbear/initramfs/dropbear.conf i odnajdujemy + w nim ujętą w komentarz opcję DROPBEAR_OPTIONS usuwamy + symbol komentarza i zapisujemy w nim poniższe opcje: +

    +
    +DROPBEAR_OPTIONS="-p 2222 -s"
    +
    +

    + Za pomocą opcji -p wskazujemy port, + a za pomocą -s wyłączamy możliwość + zalogowania się hasłem. Można różnież dodać opcje -I, która + powoduje rozłączenie sesji po podanym czasie nieaktywności. W ten + sposób dropbear został skonfigurowany. +

    +

    + Teraz musimy uruchomić jeszcze sieć w trybie initramfs, + dokonujemy tego wpisując poniższą konfigurację do pliku + /etc/initramfs-tools/initramfs.conf. +

    +
    +# IP_ADDRESS::GATEWAY:NETMASK:HOSTNAME
    +IP=172.29.141.62::172.29.128.1:255.255.240.0:debian
    +
    +

    + Komentarz w przykładzie pokazuje, jakie pole odpowiada za co. Po + zapisaniu zmian w plikach, możemy przejść do wygenerowania nowego + obrazu initramfs oraz aktualizacji plików konfiguracyjnych + GRUB-a. +

    +
    +xf0r3m@debian:~$ sudo update-initramfs -u
    +update-initramfs: Generating /boot/initrd.img-6.1.0-23-amd64
    +xf0r3m@debian:~$ sudo update-grub
    +Generating grub configuration file ...
    +Found linux image: /boot/vmlinuz-6.1.0-23-amd64
    +Found initrd image: /boot/initrd.img-6.1.0-23-amd64
    +Found linux image: /boot/vmlinuz-6.1.0-18-amd64
    +Found initrd image: /boot/initrd.img-6.1.0-18-amd64
    +Warning: os-prober will not be executed to detect other bootable partitions.
    +Systems on them will not be added to the GRUB boot configuration.
    +Check GRUB_DISABLE_OS_PROBER documentation entry.
    +done
    +
    +

    + Jeśli potrzebujemy konfiguracji sieciowej z IPv6, to informacja o tym + jak to zrobić znajduje się w źródłach (drugi odnośnik). Teraz możemy + restartować nasz serwer i próbować się logować. Serwer będzie gotowy, + do połączenia, kiedy podczas rozruchu pokażą nam się informacje + sieciowe wprowadzone w pliku initramfs.conf. Na serwerze + może to wyglądać to mniej więcej tak: +

    +
    +  Booting `Debian GNU/Linux'
    +
    +Loading Linux 6.1.0-23-amd64 ...
    +Loading initial ramdisk ...
    +[    1.071903] piix4_smbus 0000:00:07.3: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr
    +IP-Config: eth0 hardware address 00:15:5d:0a:11:67 mtu 1500 DHCP RARP
    +IP-Config: eth0 guessed broadcast address 172.29.143.255
    +IP-Config: eth0 complete:
    + address: 172.29.141.62    broadcast: 172.29.143.255   netmask: 255.255.240.0
    +Please unlock disk sda5_crypt:  gateway: 172.29.128.1     dns0     : 0.0.0.0 
    +         dns1   : 0.0.0.0
    + host   : debian
    + rootserver: 0.0.0.0 rootpath:
    + filename  :
    +
    +

    + Teraz serwer jest gotowy do połączenia, na moim komputerze wydaje + poniższe polecenie i serwer powinien mi odpowiedzieć co jest pokazane + na przykładzie. +

    +
    +xf0r3m@immudex:~$ ssh -p 2222 -i ~/.ssh/id_rsa root@172.29.141.62
    +The authenticity of host '[172.29.141.62]:2222 ([172.29.141.62]:2222)' can't be established.
    +ED25519 key fingerprint is SHA256:ZJUHcaM30fDyjshd7kkSOQLFtfFXCDlhpFGlid2g8MY.
    +This key is not known by any other names.
    +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    +Warning: Permanently added '[172.29.141.62]:2222' (ED25519) to the list of known hosts.
    +Enter passphrase for key '/home/xf0r3m/.ssh/id_rsa':
    +To unlock root partition, and maybe others like swap, run `cryptroot-unlock`.
    +
    +
    +BusyBox v1.35.0 (Debian 1:1.35.0-4+b3) built-in shell (ash)
    +Enter 'help' for a list of built-in commands.
    +
    +~ # cryptroot-unlock
    +Please unlock disk sda5_crypt:
    +cryptsetup: sda5_crypt set up successfully
    +~ # Connection to 172.29.141.62 closed by remote host.
    +Connection to 172.29.141.62 closed.
    +
    +

    + Po zalogowaniu się zostanie zestawiona sesja powłoki BusyBox. Od + samego systemu dostajemy podpowiedź: + To unlock root partition, and maybe others + like swap, run `cryptroot-unlock`., wpisujemy podane polecenie + i wówczas zostaniemy zapytani o hasło do odblokowania partycji LUKS. + Po prawidłowym podaniu hasło, połączenie zostanie zakończone a + rozruch systemu serwera ruszy dalej. +

    +

    + Ta metoda jest uniwersalna i może być stosowana nie zależnie od tego + czy mamy port COM czy też nie. +

    +

    + Źródła:
    +

    +

    +

    + ~xf0r3m +

    +
    + + + -- 2.39.5