Zabezpieczenie bootloadera GRUB hasłem

Red Hat 6.x / CentOS 6.x
Bootloader GRUB umożliwia nam zabezpieczenie możliwości zmiany opcji bootowania naszego systemu, czy też niepowołanego jego uruchomienia poprzez hasło.
Możliwość taka wydaje się być przydatna bardziej w przypadku stacji desktopowych czy laptopów i w połączeniu z blokadą biosu oraz zaszyfrowaniem dysków pozwala nam w znaczny sposób zabezpieczyć nasze dane przed niepowołanym dostępem.
Należy jednak pamiętać, że w przypadku uzyskania przez niepowołane osoby dostępu do konsoli zarządczej serwera, istnieje możliwość zalogowania się intruza do naszego systemu w trybie "single mode" czy "recovery mode" z uprawnieniami root, co w oczywisty sposób stanowi zagrożenie dla naszych danych. Jednak odpowiednie "hasłowanie" GRUB-a wymagać będzie od intruza dostępu fizycznego do cdrom-u serwera, co w zasadzie wyklucza ataki tego typu.

Hashowanie hasła dla bootloadera

Hasło bootloadera może być podane jako tekst jawny, ale z oczywistych względów zalecane jest hashowanie takiego hasła. Grub obsługuje trzy typy kodowania, tj.: domyślnego sha-512, sha256 oraz md5. Wyboru typu dokonujemy poprzez dodanie odpowiedniego przełącznika podczas hashowania.

Kodowania hasła dokonamy dedykowanym do tego grub-crypt-em:

[root@centos67 ~]# grub-crypt --md5
Password: [haslo]
Retype password: [haslo]
$1$BxRE6m01$O6rMUIRLFywLjJSD67itc1

Wynikiem komendy będzie hash naszego hasła, który następnie umieścimy w odpowiedniej sekcji naszej konfiguracji.

Zabezpieczenie zmian parametrów startowych systemu

Jedną z dwóch możliwości zabezpieczeń jakie daje nam grub, jest zabezpieczenie przed zmianą parametrów startowych naszego systemu. Daje nam to pewność, że system nie zostanie zbootowany w trybie pozwalającym na przejęcie nad nim pełnej kontroli.

Zabezpieczenie to wdrożymy dodając odpowiedni wpis w pliku /boot/grub/grub.conf:

[root@centos67 ~]# vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_centos-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --encrypted $1$BxRE6m01$O6rMUIRLFywLjJSD67itc1
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
        initrd /initramfs-2.6.32-573.el6.x86_64.img

Ważne, aby wpis znajdował się przed pierwszą definicją pozycji menu gruba, czyli przed pierwszym title.
Po zrestartowaniu systemu, i próbie zmiany parametrów startowych nie uzyskamy dostępu do standardowych opcji bootloadera (edit czy append), a jedynie możliwość przejścia do prompta hasła poprzez opcję "p":

Zabezpieczenie przed nieautoryzowanym bootowaniem systemu

Kolejną możliwością zabezpieczeń oferowaną przez GRUB jest wymuszenie podania hasła podczas standardowego startu systemu.
Opcja ta może okazać się przydatna np. w sytuacji, kiedy skonfigurowaliśmy nasz bootloader, aby umożliwiał wybór kilku wersji systemu.

Konfiguracji dokonujemy tak, jak w poprzednim przypadku, w pliku /boot/grub/grub.conf, lecz hash hasła umieszczamy w sekcji bootowania systemu, który chcemy zabezpieczyć:

[root@centos67 ~]# vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_centos-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
        initrd /initramfs-2.6.32-573.el6.x86_64.img
        password --encrypted $1$BxRE6m01$O6rMUIRLFywLjJSD67itc1

Każda pozycja pojawiająca się w menu GRUB-a rozpoczyna się w pliku grub.conf linią title. Chcąc zabezpieczyć daną pozycję hasłem bootowania, wystarczy umieścić w porządanej sekcji linijkę dotyczącą hasła (password...).

Inne typy kodowania hasła

Tak jak wspomniałem, GRUB obsługuje 3 typy hashowania hasła, oraz hasło w formie jawnej. Zmiana na któryś z typów sha wymaga od nas jedynie podania odpowiednio opcji --sha256 lub --sha-512 przy tworzeniu hasha grub-crypt-em. (brak jakiegokolwiek przełącznika przy wywołaniu polecenia skutkuje użyciem domyślnego sha-512).
Użycie hasła w formie jawnej nie będzie od nas wymagać używania grub-crypta, jak i przełącznika --encrypted w pliku grub.conf.

...
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
        initrd /initramfs-2.6.32-573.el6.x86_64.img
        password moje$trasznieTajn3Hasl0

1 komentarz: