NFsec Logo

Mały bootloader LILO

28/04/2010 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 253, ilość słów: 963)

P

odczas startu komputera wszystkie urządzenia są testowane przez BIOS w celu nawiązania z nimi połączenia i wykrycia usterek w ich działaniu. Fazę tę określamy mianem POST (Power-On-Self-Test). Następnie w pamięci CMOS przy niezainicjonowanych przerwaniach odczytywane są dane na podstawie, których odbywa się inicjalizacja urządzeń I/O (Input / Output) obsługiwanych przez BIOS. Później zaczyna działać procedura BIOS-u zwana bootstrap loaderem, sprawdzając kolejno wszystkie urządzenia i napędy w poszukiwaniu sektora startowego, z którego da się uruchomić system operacyjny. Proces wyszukiwania urządzenia zdolnego do uruchomienia OS-u uzależniony jest od ustawień BIOS-u.

Standardowo jest to pierwszy sektor dyskietki, dysku twardego lub płyty CD. Gdy urządzenie zdolne do uruchomienia systemu zostanie zlokalizowane bootstrap odnajduje pierwszy sektor na dysku (MBR – Master Boot Record), wykonując jednocześnie zawarty w nim kod programu, którego zadaniami są identyfikacja aktywnej partycji, załadowanie z jej pierwszego sektoru, tzw. rekordu ładującego, umieszczonego tam kodu oraz przekazanie mu sterowania. W systemie Slackware Linux najczęściej wykorzystywanym programem ładującym (bootloaderem) jest LILO (Li-nuks Lo-ader).

Jedną z metod uzyskania dostępu do konta root omijając proces autoryzacji jest podanie podczas procedury botowania dodatkowych parametrów np. linux single, initrd=/dev/fd0, init=/bin/bash. Po wydaniu tego ostatniego możemy uzyskać bezpośredni dostęp do linii poleceń w trybie administratora, następnie zamontować system plików w trybie read-write (mount -o remount,rw /) oraz dokonać edycji plików /etc/shadow i /etc/passwd w celu usunięcia hasła oraz otrzymania bezproblemowego dostępu do uprawnień administratora systemu. Zabezpieczeniem się przed takimi opcjami jest ustawienie hasła na wykonywanie poleceń ładowania z dodatkowymi parametrami przez naszego loadera.

     Przy końcu instalacji system Slackware pyta się, czy ma zainstalować bootloadera i w jaki sposób? Instalacja bootloadera może odbyć się poprzez dwa sposoby: 1) własne ustawienie opcji botowania; 2) pozwolenie Linuksowi na automatyczne przekazanie parametrów do bootloadera i poproszenie użytkownika o ich zweryfikowanie. Każda z tych metod jest dobra i zależy od naszej znajomości opcji botowania systemu. Jeśli czujemy się na siłach, możemy sami skonfigurować loadera, lub pozwolić, aby ta czynność została wykonana przez system i przy weryfikacji wprowadzić własne poprawki. LILO wczytuję opcje ładowania z wcześniej załadowanego i skonfigurowanego przez użytkownika pliku konfiguracyjnego z tego powodu, że w MBR posiada tylko 512 bajtów długości – pierwsze 446 bajtów zajmuje program bootstrap (IPL) dalszą część MBR-a to tablica partycji zawierająca 4 struktury (każda po 16 bajtów), opisujące poszczególne partycje podstawowe. MBR kończą 2 bajty o wartości 0x55AA zapisanej szesnastkowo. W sumie mamy zatem 466 + (4×16) + 2 = 512. Jeśli używamy LILO w celu ustawienia hasła musimy edytować jego plik konfiguracyjny (/etc/lilo.conf) i dodać do niego w sekcji odwołującej się do załadowania aktualnego jądra systemu takie zmienne jak “password” i “restricted“. Oto przykładowy plik lilo.conf po dokonaniu zmian:

# LILO configuration file
# generated by 'liloconfig'
append="vt.default_utf8=1"
boot = /dev/sda
lba32
compact
  bitmap = /boot/slack.bmp
  bmp-colors = 255,0,255,0,255,0
  bmp-table = 60,6,1,16
  bmp-timer = 65,27,0,255
prompt
timeout = 20
change-rules
  reset
vga = 791
# Linux bootable partition config begins
image = /boot/vmlinuz
  root = /dev/sda2
  label = Slackware
  read-only
  password = singleroot
  restricted
# Linux bootable partition config ends

Po wprowadzeniu zmian wczytujemy nowe ustawienia poleceniem: lilo -v. Funkcja “restricted” pod zmienną “password” spowoduje, że podanie hasła wymagane będzie tylko wtedy, gdy użytkownik zamierza podać dodatkowe parametry ładowania systemu. Jest ona wymagana, gdyż w przypadku restartowania serwera zdalnie – wymagane by było podawanie każdorazowo hasła umożliwiającego dalsze ładowanie się systemu. Jeśli posiadamy więcej niż jedno jądro, wyżej wymienione zmienne umieszczamy pod każdą sekcją odwołującą się do danego jądra. Następnie zabezpieczamy plik lilo.conf przed poznaniem hasła przez innych użytkowników komendą: chmod 600 /etc/lilo.conf.

Innym sposobem ochrony systemu przed trybem pojedynczego użytkownika jest uniemożliwienie wszystkim użytkownikom wprowadzenia jakichkolwiek poleceń z klawiatury podczas uruchamiania LILO, poprzez ustawienie czasu oczekiwania na zero. Takie ustawienie można wymusić wprowadzając podane tu polecenie na początku pliku /etc/lilo.conf (jest to wymagane zgodnie z zabezpieczeniami C2, opisanymi w odpowiedniej specyfikacji Orange Book):

timeout = 0

Wyłączenie automatycznego uruchamiania jest możliwe poprzez dodanie wiersza: prompt w pliku /etc/lilo.conf (przed fragmentami dotyczącymi ustawień dla każdego z obrazów). Z tego powodu, jeżeli włamywacz w pewien sposób odkryje, jak zdalnie zmienić główny sektor rozruchowy dysku, zainstaluje nowe jądro lub w inny sposób spowoduje zniszczenia, nie będzie mógł wczytać nowej konfiguracji systemu. Oczywiście, po każdej awarii powinny zostać podjęte czynności sprawdzające, w celu wykluczenia prawdopodobieństwa, że została ona spowodowana przez potencjalnego włamywacza.

Wszystkie wpisy w pliku /etc/lilo.conf, które będą mogły zostać wybrane podczas startu systemu, to znaczy wpisy określające systemy, które można wczytać, powinny reprezentować ostrożnie skonfigurowane jądra, jak chociażby jądra systemu Linux lub innego podobnego systemu. Mówiąc prościej, żadne z nich nie powinno udostępniać trybu pojedynczego użytkownika lub systemu plików bez potwierdzenia przez żądającego posiadania odpowiednich praw dostępu. Żaden z systemów, który można uruchomić, nie powinien być systemem niezabezpieczonym (szczególnie podatnym na lokalne ataki, które pozwolą na rozszerzenie praw).Bouns:     Wybierając miejsce, w którym będzie zainstalowane LILO musimy mieć na uwadze czy posiadamy jeden system i jest nim Linux czy oprócz niego posiadamy jeszcze inne systemy np. Windows, DOS. Jeżeli posiadamy tylko jeden system na naszym komputerze, to instalacja LILO powinna odbyć się w MBR: Master Boot Record. Jednak jeśli posiadamy inne systemy i nasza partycja z Linuksem jest oznaczona jako botowalana (w tym przypadku powinna to być pierwsza partycja na dysku) to powinniśmy wybrać opcję Root superblok na naszej partycji Linuksowej. Może się także zdarzyć że po instalacji Linuksa nasze LILO, zamiast się uruchomić wyświetla tylko dwie pierwsze litery “LI”. Oznacza to, że system (dokładnie katalog /boot z obrazem jądra) został zainstalowany powyżej 1024 cylindra dysku. Aby rozwiązać ten problem należy podczas instalacji partycje – Linux Native zainstalować poniżej 1024 cylindra, lub stworzyć niewielką, dodatkową partycje na początku dysku, i przydzielić jej katalog /boot. Poza tym LILO posiada bardzo ciekawą funkcję, która daje możliwość skopiowania go na dyskietkę, dzięki temu będziemy mogli uruchomić system nawet wtedy, gdy przypadkowo uszkodzimy dysk.

Więcej informacji: man lilo.conf, Lilo HowTo, LILO

Kategorie K a t e g o r i e : Bezpieczeństwo

Tagi T a g i : , , , , , ,

Komentowanie tego wpisu jest zablokowane.