Download: LinuxUser_Tripwire
Transkrypt
Download: LinuxUser_Tripwire
LINUX USER Bezpieczeństwo danych Jednym z najważniejszych aspektów problematyki związanej z bezpieczeństwem systemów komputerowych jest zapewnienie integralno- Tipwire – integralność systemu Tripwire ści danych – zarówno systemu, jak i danych użytkownika. DARIUSZ WALAT N ajogólniej rzecz ujmując, polega to na przedsięwzięciu kroków, które uniemożliwią nieuprawnioną zmianę zawartości tych danych lub ich usunięcie, pozwolą na wykrycie prób takich zmian oraz umożliwią przywrócenie systemu do stanu sprzed ewentualnej zmiany. Jako że w praktyce dane zawarte są w plikach systemu operacyjnego, można pokusić się o stwierdzenie, że dbanie o integralność danych oznacza dbanie o integralność plików w systemie. Jednym z programów wspomagających opisany powyżej problem zapewnienia spójności, a dostępnych dla Linuksa, jest pakiet Tripwire. Powstał on w 1992 roku na Uniwersytecie Purdue za sprawą tamtejszego eksperta ds. bezpieczeństwa – dr Eugene Spafford-a oraz – podówczas studenta – Gene Kim'a. Pierwotnie udostępniony jako ASR (Academic Source Release), został bardzo szybko dostrzeżony oraz, co ważne, wysoko oceniony przez ekspertów od komputerowego bezpieczeństwa. Niejako kontynuacją tego faktu było powstanie w 1997 roku firmy Tripwire Inc. (jednym z jej szefów został Gene Kim), której pierwszym, niestety komercyjnym produktem, był pakiet Tripwire w wersji 2.0. Szczęśliwie jednak dla całego ruchu Open Source, firma Tripwire Inc. postanowiła udostępnić dedykowaną wersję swojego sztandarowego produktu dla systemów linuksowych na licencji GPL. Tak więc od pewnego czasu możemy zupełnie za darmo spoglądać na pliki w systemach spod znaku pingwina niczym orwellowski Wielki Brat i w przypadku nie- Rysunek 1: Przykład pliku /etc/tripwire/twcfg.txt. 96 Kwiecień 2004 www.linux-magazine.pl pożądanej zmiany ich stanu wszcząć odpowiednie kroki. Zadanie to, choć może nie najbardziej skomplikowane pośród zadań administracyjnych, wymaga jednak poczynienia pewnych kroków wstępnych. Zanim jednak przystąpimy do instalacji oprogramowania na swoich serwerach (a może również stacjach roboczych), kilka słów o idei działania Tripwire, a jest ona, jak większość genialnych rozwiązań, bardzo prosta. Sprowadza się do stworzenia bazy danych (określanej w dalszej części artykułu jako baza danych Tripwire), w której zapisane są informacje o stanie plików i katalogów w systemie w momencie jej tworzenia, a następnie okresowego porównywania aktualnego stanu systemu z jej zawartością. Przy czym stan oznacza tutaj dosyć szeroki zakres pojęć i może obejmować oprócz tak podstawowych informacji o plikach i katalogach, jak chociażby prawa dostępu, ID właściciela, także takie, których obejście wymaga ze strony potencjalnego włamywacza większego wysiłku (a w rezultacie jest trudniejsze do stwierdzenia „gołym okiem”), jak sumy kontrolne, czy też wartości haszujące np. algorytmu MD5. Należy jednak od razu wyjaśnić ewentualne niedomówienia. Tripwire nie chroni systemu przed atakiem jako takim. Do tego celu służą inne techniki, począwszy od prostych wrapperów (TCP wrapper), poprzez stosowanie aktywnego wyboru haseł (passwd+, anlpasswd), uświadamianie użytkowników, konfigurację firewalli (ipchains, iptables), Bezpieczeństwo danych a skończywszy na (a może zacząwszy od) bezpieczeństwie fizycznym. Zainteresowanych tą tematyką odsyłam do bardzo ciekawej pozycji wydawnictwa O'Reilly – „Practical Unix and Internet Security 2nd Edition”, wydanej również w Polsce nakładem wydawnictwa RM lub też do pozycji „Linux. Agresja i ochrona” wydanej przez wydawnictwo Robomatic. Powróćmy jednak do bohatera naszego artykułu. Tripwire po odpowiednim skonfigurowaniu sprawia, że jakiekolwiek niechciane zmiany w stanie plików naszego systemu mogą być automatycznie raportowane (najczęściej w postaci raportu przesyłanego za pomocą poczty elektronicznej), dzięki czemu w przypadku podmiany np. programu /bin/login na wrogiego systemowi intruza, możemy natychmiast zareagować przywracając wspomniany program do jego pierwotnej postaci (np. ze spójnej kopii zapasowej lub też wiarygodnego nośnika z dystrybucją). W ten oto sposób osiągana jest spójność systemu, a przynajmniej sprawujący opiekę nad systemem administrator jest o jej naruszeniu natychmiast powiadamiany. czynnością jest podanie wyraTabela 1. Opcje do tworzenia żeń przejściowych (ang. passphreguł Tripwire. rase), czyli po prostu haseł niea znacznik czasowy dostępu zbędnych dla wygenerowania b liczba zaalokowanych bloków plików klucza lokalnego oraz c znacznik czasowy i-węzła (tworzenie/modyfikacja) dla site. Hasła są zabezpieczed ID urządzenia, na którym rezyduje i-węzeł niem przed nieupoważnionym g ID grupy właściciela pliku użyciem tych plików. Pliki klui numer i-węzła czy są później wykorzystywane l wielkość pliku zwiększa się („plik rozszerzający się”) do generowania sygnowanych, m znacznik czasowy modyfikacji binarnych wersji pliku konfigun liczba linków racyjnego (tekstowy plik konfip prawa i bity trybu pliku guracyjny to domyślnie /etc/trir ID urządzenia wskazywanego przez i-węzeł (dla plików urządzeń) s wielkość pliku pwire/twcfg.txt, po podpisaniu t typ pliku kluczem site'owym powstaje dou ID właściciela pliku datkowo /etc/tripwire/tw.cfg), C wartość haszująca CRC-32 pliku z regułami (ang. policy fiH wartość haszująca algorytmu Haval le – tekstowy plik z regułami to M wartość haszująca algorytmu MD5 /etc/tripwire/twpol.txt, zaś werS wartość haszująca algorytmu SHA sja zaszyfrowana kluczem dla site to /etc/tripwire/tw.pol) oraz pliku z bazą opisującą spójny „stan” plików skompresowanego pakietu RPM ściągniętew systemie (domyślnie /var/lib/tripwigo z witryny projektu, to instalujemy ją w nare/$(HOSTNAME).twd – szyfrowany z użystępujący sposób: ciem pliku klucza lokalnego). tar -zxvf tripwire-2.3-U 47.i386.tar.gz rpm -vhi tripwire-2.3-U 47.i386.rpm Instalacja Po tym, nieco może przydługim wstępie, przejdźmy do instalacji oprogramowania. Można je zdobyć np. ze strony domowej projektu, znajdującej się pod adresem [1], gdzie są dostępne binaria w postaci pakietów RPM, a także tzw. tarball, czyli spakowana wersja binarna wraz z odpowiednimi skryptami instalacyjnymi. Tripwire jest również dołączany do wielu nowszych edycji popularnych dystrybucji, jak np. RedHat 7.1. W chwili pisania artykułu, na serwerze projektu Tripwire był dostępny w wersji 2.3-47. Instalacja z archiwum tar-gzip (tarball): tar zxvf tripwire-2.3-U 47.bin.tar.gz cd tripwire-2.3 ./install.sh LINUX USER W tym przypadku nie zostają utworzone zaszyfrowane wersje pliku konfiguracyjnego, ani pliku z regułami, gdyż podczas instalacji nie są tworzone pliki kluczy. Zadanie to może być wykonane w osobnym kroku za pomocą skryptu /etc/tripwire/twinstall.sh lub krok po kroku (co jest zalecane), jak jest to opisane w dalszej części artykułu. Krótki przegląd plików Rysunek 2: Przykładowy plik /etc/tripwire/twpol.txt. Skrypt prosi o przeczytanie oraz zaakceptowanie (accept) licencji programu (GNU GPL), następnie sprawdza dostępność w systemie niezbędnych składników oraz informuje o miejscu instalacji poszczególnych komponentów pakietu. Umiejscowienie tych ostatnich możemy zmienić poprzez wcześniejszą edycję pliku tripwire-2.3/install.cfg. Kolejną Skrypt instalacyjny może być również uruchomiony w trybie nieinteraktywnym: ./install.sh -n -s U passphrase_klucza_site -l U passphrase_klucza_locali, co spowoduje przejście całej instalacji bez potrzeby jakiejkolwiek ingerencji z naszej strony. Jeśli posiadamy wersję w postaci Po pomyślnym przejściu przez proces instalacji, gdy Tripwire jest już w naszym systemie, nadszedł czas na przyjrzenie się plikom, które pozwolą przystosować program do naszych potrzeb. Na pierwszy ogień weźmy /etc/tripwire/twcfg.txt. Jest to plik konfiguracyjny zawierający informacje o umiejscowieniu w systemie Tripwire takich plików, jak (w nawiasach podane są nazwy odpowiednich parametrów): plik reguł (POLFILE), plik bazy danych Tripwire (DBFILE), pliki raportów (REPORTFILE), plik klucza lokalnego (LOCALKEYFILE) oraz dla klucza typu site (SITEKEYFILE), a także dodat- www.linux-magazine.pl Kwiecień 2004 97 LINUX USER Bezpieczeństwo danych kowych ustawień dotyczących np. poziomu raportowania (REPORTLEVEL), sposobu dostarczania e-maili z raportami (MAILMETHOD, SMTPHOST, SMTPPORT) itd. Konfiguracja pliku jest bardzo intuicyjna i nie powinna stanowić problemu. Szczegółowa lista opcji, które można ustawić, jest dostępna w podręczniku elektronicznym (man 4 twconfig), zaś przykładowa zaRysunek 3: Tworzenie bazy programu Tripwire wartość jest umieszczona na Rysunku 1. Oczywiście plik reguł pozwala na dużo Następnie zajmijmy się plikiem, którego bardziej elastyczne ustawianie regułek. Triedycja przy konfiguracji środowiska Tripwire posiada na przykład pewną grupę pwire pożera lwią część czasu. Jest to plik predefiniowanych zmiennych, określająreguł – domyślnie /etc/tripwire/twpol.txt. cych, w jaki sposób będą skanowane pliki Jego zawartość określa, jakie pliki i katalo(np. ReadOnly, która jest odpowiednikiem gi w systemie będą skanowane, oraz jakie reguły +pinugtsdbmCM-rlacSH). Można ich ich właściwości będą zapisane w bazie daużywać zamiast lub w połączeniu z „literonych Tripwire. wymi” regułkami. Podstawowa postać reguł w tym pliku to Z kolei, jeśli skanujemy jakiś katalog nazwa_pliku -> reguła_skanowania, gdzie na(np. /usr), a chcielibyśmy wyłączyć z tej zwa_pliku określa bezwzględną ścieżkę pliku operacji pewien podkatalog (np. /usr/lobądź katalogu, zaś reguła_skanowania opisuje, cal/scripts), to możemy to zrobić za pomojakie jego cechy będą zapisane w bazie, jakie cą tzw. punktów zatrzymania (ang. stop pozaś nie. Jeśli reguła odnosi się do katalogu, to ints). Reguły mogą posiadać również dobędzie on poddawany skanowaniu wraz ze datkowe atrybuty (np. emailto określa, pod swoją zawartością. Reguły są określane za jaki adres wysłać raport o naruszeniu danej pomocą liter, których znaczenie podano reguły), atrybuty mogą być przypisywane w Tabeli 1. Jeśli chcemy jakąś właściwość do grupy reguł, itd.. włączyć, to umieszczamy przed nią znak Przykładowy plik reguł, istniejący w pa„+”, jeśli zaś wyłączyć, to znak „-”, przy kiecie, posiada dobre komentarze i dostosoczym poprawne są „rozsądne” kombinacje. wanie go do potrzeb danego systemu nie jest Przykładowo, wszystkie poniżej przedstawiozadaniem zbyt skomplikowanym. W wątpline warianty reguł są prawidłowe: wych sytuacjach można się odwołać do pomocy (man 4 twpolicy) lub do pliku dokumentacji /usr/doc/tripwire/policyguide.txt. +a+p+i-g +a+p+i +api-g api-g ap Szyfrujemy Mnogość dostępnych reguł pozwala dopasować sprawdzanie plików o różnym znaczeniu w systemie. Inne reguły zastosujemy dla plików logujących, których cechą naturalną jest rozrastanie się, inne do np. pliku /etc/shadow, którego zawartość zmienia się wraz ze zmianą np. hasła przez użytkownika, a jeszcze inne do plików z katalogu /bin, które przecież nie zmieniają swojej zawartości (a przynajmniej nie powinny). 98 Kwiecień 2004 Po ustawieniu reguł skanowania w pliku reguł i odpowiedniej korekcie pliku /etc/tripwire/twcfg.txt, należy utworzyć ich zaszyfrowane wersje. Do tego celu wykorzystywany jest klucz site. Jeśli go jeszcze nie posiadamy, możemy go utworzyć za pomocą narzędzia twadmin (opcje wykorzystywane przy generowaniu kluczy można wyświetlić poleceniem twadmin --help --generate-keys). Na konsoli wpisujemy: twadmin -m G -S U /etc/tripwire/site.key www.linux-magazine.pl Po dwukrotnym podaniu wyrażenia przejściowego, czyli hasła i odczekaniu chwili (lub kilku, w zależności od szybkości maszyny), klucz site jest gotowy. Podpisywanie pliku konfiguracyjnego /etc/tripwire/twcfg.txt, a także pliku reguł kluczem dla site odbywa się również z pomocą polecenia twadmin (zestawy opcji uzyskujemy za pomocą poleceń – odpowiednio twadmin --help -create-cfgfile i twadmin -help --create-polfile). Ponownie korzystamy z konsoli systemowej i za pomocą poniższych komend: twadmin -m F -S U /etc/tripwire/site.key U /etc/tripwire/twcfg.txt twadmin -m P -S U /etc/tripwire/site.key U /etc/tripwire/twpol.txt otrzymujemy zaszyfrowane pliki /etc/tripwire/tw.cfg oraz /etc/tripwire/tw.pol (oczywiście w przypadku ustawień domyślnych). Wersje tekstowe możemy już z powodzeniem usunąć, a do przeglądania zawartości wersji zaszyfrowanych użyć... ponownie niezawodnego narzędzia twadmin, tym razem z opcjami odpowiednio -m f (lub --print-cfgfile) oraz -m p (lub --print-polfile). Serce systemu – baza danych Tripwire Mamy już więc przygotowane reguły skanowania, zaszyfrowane pliki: konfiguracyjny i reguł, wygenerowany klucz site. Czas najwyższy przystąpić do wygenerowania bazy danych Tripwire. Potrzebny jest jednak do tego klucz lokalny, który tworzymy w następujący sposób: twadmin -m G -L /etc/tripwire/U ${HOSTNAME}-local.key Generownie bazy danych Tripwire powinno być dokonane na jak najwcześniejszym etapie życia systemu, w idealnym wypadku tuż po instalacji i konfiguracji, przeprowadzonych w warunkach izolacji od sieci. Pozwala to na zachowanie dużej dozy prawdopodobieństwa, iż baza rzeczywiście zawiera spój- Prenumerata Linux Magazine ny obraz systemu. Zadanie to przeprowadza się przy użyciu programu tripwire. Uruchomienie go z opcją -m i lub --init spowoduje „przeskanowanie” systemu zgodnie z regułami zawartymi w pliku reguł. Szara codzienność Po zbudowaniu bazy danych Tripwire z opisem spójnego stanu systemu, co pewien czas będziemy chcieli sprawdzić, czy aby na pewno rzeczona spójność jest w dalszym ciągu zachowana. Do tego celu możemy posłużyć się znanym już narzędziem tripwire z opcją m c (lub --check), które pozwala generować raporty opisujące naruszenia integralności systemu. Jak widać, w testowym systemie został podmieniony plik /etc/passwd, co zostało bezlitośnie przez raport napiętnowane. Dopiero teraz widać sens naszych dotychczasowych działań – nic co zostało zmienione, a czego oryginalny stan istnieje w bazie, nie Rysunek 4: Przykładowy raport Tripwire umknie już naszej uwadze. Raporty mogą również być po sprawdzeniu systemu przesyłane automatycznie e-mailem pod wskazany adres administratora, co w połączeniu z logiczną w takim wypadku ideą okresowego uruchamiania sprawdzania przez demona crond, daje nam rozwiązanie prawie idealne. Należy pamiętać jednak o przypisaniu atrybutu emailto z właściwym adresem mailowym do odpowiednich reguł (lub grup reguł) w pliku reguł oraz, przy wywołaniu tripwire w trybie sprawdzania spójności (opcja -m c), o dodaniu parametru -email-report. Nie przegap takiej okazji! Co dalej... Na koniec warto wspomnieć o jeszcze dwóch narzędziach dostarczanych przez twórców oprogramowania. Są to twprint oraz siggen. Pierwsze z nich służy do wyciągania informacji z zaszyfrowanego pliku bazy danych Tripwire o oryginalnym, spójnym stanie konkretnego pliku, bądź też wszystkich plików opisanych w tejże bazie. Można również z jego pomocą wyświetlić czytelną wersję archiwalnego (oczywiście też zaszyfrowanego) pliku raportowego. Siggen z kolei pozwala w prosty sposób wygenerować wartości funkcji haszujących dla algorytmów MD5, SHA, CRC-32 oraz HAVAL w odniesieniu do konkretnego pliku w systemie. Informację taką możemy porównać na przykład z wartością zapisaną w bazie danych Tripwire (uzyskaną za pomocą twprint), co pozwala na szybkie sprawdzenie pliku, co do którego mamy podejrzenia. Powyższy opis oczywiście nie wyczerpuje wszystkich możliwości pakietu Tripwire. Nie omówiono na przykład sposobu uaktualniania bazy danych w przypadku, gdy jakiś plik podlegający sprawdzaniu został celowo zmieniony. Artykuł daje jednak wystarczająco wiele informacji potrzebnych do dalszych samodzielnych eksperymentów. Można na przykład skonfigurować środowisko w taki sposób, by praktycznie wszystkie pliki Tripwire (z wyjątkiem generowanych okresowo raportów i plików tymczasowych) umieścić na nośniku tylko do odczytu (np. CD-ROM). Możliwości jest wiele. ■ INFO [1] Strona programu Tripwire: http://www.tripwire.org ■ Zamawiając prenumeratę oszczędzasz! ■ Płacisz jak za 9 numerów, a otrzymujesz 12! ■ Z każdym numerem DVD lub płyta CD-ROM. Najszybszy sposób zamówienia prenumeraty: http://www.linux-magazine.pl Infolinia: 0801 800 105