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

Podobne dokumenty