r-30mp.doc

(270 KB) Pobierz
Wstęp

757

28

              Bezpieczeństwo i kontrola dostępu do serwera WWW

Rozdział 30.

Bezpieczeństwo serwera WWW i kontrola dostępu

Bezpieczeństwo w Internecie jest bardzo istotnym i szeroko dyskutowanym zagadnieniem. Wielki postrach wzbudzili ludzie zwani hackerami, którzy włamują się do różnych syste­mów za pomocą telefonu i kilku oporników, siejąc spustoszenie w przechowywanych tam plikach. Ponieważ Twój serwer WWW jest uruchomiony w sieci Internet, jest on potencjal­nym obiek­tem takiego ataku i powinieneś w związku z tym zatroszczyć się o jego bezpie­czeństwo.

Przesadny rozgłos, jaki zyskała sobie tematyka włamań do systemów w sieci Internet, jest w dużej mierze zasługą mediów, które muszą przecież mieć o czym pisać. Niebezpieczeń­stwo zniszczenia danych w systemie komputerowym przez kogoś, kto nielegalnie dostanie się do niego przez sieć istnieje i należy brać je pod uwagę, ale nie zdarza się to tak często, jak mog­łoby wynikać z niektórych publikacji. Zagrożenie ze strony hackerów, którzy zech­cą dobrać się do systemu poprzez serwer WWW jest bardzo małe. HTTP to prosty proto­kół, mający jedynie kilka powszechnie znanych luk, pozwalających na dostęp z zew­nątrz. Tak naprawdę to administrator serwera WWW powinien dużo bardziej obawiać się użytkowników, mających bezpośredni dostęp do komputera, na którym serwer jest uru­cho­miony, bowiem zdecydowanie więcej szkody może wyrządzić instalowanie nieznanego oprogramowania lub dopuszczenie do maszyny kogoś nieupoważnionego.


W mojej książce nie ma na tyle miejsca, abym mógła pozwolić sobie na pełny opis zabezpie­czeń stosowanych w sieci Internet, ale sądzę, że osoby zainteresowane bez problemów znaj­dą jakąś pozycję na ten temat, jest ich bowiem dość dużo. Pragnę opisać kilka podstawowych technik zabezpieczania serwera WWW przed zagrożeniami zewnętrzny­mi i wewnętrznymi. Omówię też tematykę kontroli dostępu oraz autoryzację, które stanowią najprostszy mechanizm ochrony stron WWW przed ingerencją niepowoła­nych osób.

Notatka

Jeśli chcesz znaleźć bardziej wyczerpujące informacje dotyczące bezpieczeństwa w Internecie, to poszukaj następujących książek: Maximum Security: A Hacker’s Guide to Protecting Your Internet Site wydanej przez wydawnictwo Sams Publishing, Internet Firewalls and Network Security wydanej przez wydawnictwo New Riders Publishing, Practical UNIX Security autorstwa Garfinkela i Spafforda i wydanej przez wydawnictwo O’Reilly & Associates, bądź Firewalls and Internet Security napisanej przez Cheswicka i Bellaviona i wydanej przez wydawnictwo Addison Wesley.

 

W rozdziale tym poruszone zostaną następujące tematy.

n               Kilka wskazówek na temat tego, jak skutecznie zabezpieczyć serwer przed nieodpowiednimi użytkownikami z zewnątrz (oraz przed nieodpowiedzialnymi ludźmi we własnym gnieździe).

n               Parę sugestii na temat pisania bezpiecznych skryptów CGI (a przynajmniej skryptów bez oczywistych luk).

n               Kontrola dostępu do serwera WWW i autoryzacja użytkowników: co to jest, jak działa i do czego może się przydać.

n               Ustawianie kontroli dostępu i autoryzacji na serwerze WWW.

n               Opcje serwerów NSCA, ograniczające dostęp do niebezpiecznych opcji dla określonych użytkowników i katalogów.

 

 

Posiadam wprawdzie podstawową wiedzę na temat bezpieczeństwa w sieciach komputerowych, jednakże nie mógłabym w żadnym razie nazwać siebie ekspertem w tej dziedzinie. W pracy nad tym rozdziałem pomagał mi Eric Murray, który od lat zajmuje się projektowaniem i programowaniem rozwiązań, zapewniających bezpieczeństwo w Internecie.

 

 

Jak lepiej zabezpieczyć serwer WWW?

Tak więc pragniesz zabezpieczyć swój serwer przed tym, co może go spotkać pod osłoną ciemności? Jeżeli tak, to dobrze trafiłeś, bowiem porady, które za chwilę przeczytasz, po­mogą ochronić system i pliki nie tylko przed intruzami z zewnątrz, ale także przed lo­kalnymi użytkownikami, którzy, celowo lub nie, przygotowując publikację swoich pre­zentacji, mogą wyrządzić naprawdę duże szkody.

Pamiętaj jednak, że im bezpieczniejszy będzie Twój serwer, tym mniej możliwości da się z niego wydobyć. Dwie najpoważniejsze luki, dzięki którym można dobrać się do danych na serwerze WWW to skrypty CGI oraz mechanizm SSI. Umożliwiają one zamieszczanie formularzy oraz stron WWW tworzonych „w locie”. W zależności od przyjętych założeń bezpieczeństwa danych na serwerze i tego, jakie możliwości powinien on udostępniać użyt­kownikom, możesz skorzystać ze wszystkich wskazówek zamieszczonych w tym roz­dziale lub też zastosować je tylko do pewnej grupy użytkowników.


Uruchom serwer jako użytkownik nobody

Standardowo większość UNIX-owych serwerów jest zdefiniowanych tak, aby program HTTPD uruchamiany był przez użytkownika nobody, należącego do grupy nogroup. Nobody i nogroup mają ograniczony dostęp do systemu operacyjnego, mają prawo zapisu tylko w kil­ku katalogach, co oznacza, że nie mogą zmieniać i kasować plików bez uzyskania spe­cjalnych uprawnień.

Uruchamianie serwera WWW przez użytkownika o ograniczonych uprawnieniach jest bar­dzo dobrym pomysłem. W ten sposób nikt z tych, którym uda się uzyskać dostęp do syste­mu za poś­rednictwem serwera, nie będzie mógł wyrządzić żadnych szkód poza wydzielo­nym obsza­rem. Jeżeli natomiast serwer zostanie uruchomiony przez użytkownika root, wła­my­wacz będzie mógł zrobić dokładnie wszystko to, co zechce, tak więc potencjalne straty mogą być ogromne.

Takie rozwiązanie ma oczywiście również swoje wady. Jeżeli zechcesz, aby serwer, mający uprawnienia użytkownika nobody sam zmienił treść skryptu CGI, będziesz musiał udostęp­nić mu ten plik w pełnym zakresie, tak aby cały świat miał do niego prawo zapisu. W ten sposób każdy będzie mógł zmienić jego treść, w tym momencie musisz wybrać, którą metodę zabez­pieczania danych chcesz zastosować.

Istnieją dwa rozwiązania tego problemu. Pierwszy z nich polega na tym, że należy użytkow­nika nobody uczynić właścicielem wszystkich plików przeznaczonych do zapisu, służy do tego polecenie chown (nie będziesz po nim w stanie nic do nich zapisać, tak więc musisz na pewno wiedzieć co robisz). Drugi sposób to utworzenie specjalnej grupy składającej się z ograni­czonej liczby użytkowników, w tym nobody i uruchomienie serwera HTTPD spod tej grupy (grupę można zmienić w plikach konfiguracyjnych). W ten sposób prawo do zapisu plików bę­dą mieli wszyscy członkowie grupy, a serwer również będzie miał do nich odpo­wiedni dostęp.

Ogranicz dostęp do skryptów CGI

Skrypty CGI pozwalają każdemu użytkownikowi sieci WWW na uruchamianie programów, które oparte są o wprowadzone przez niego dane, w systemie operacyjnym serwera. Mecha­nizm ten jest zdecydowanie najbardziej niebezpieczny z punktu widzenia bezpieczeństwa danych, przechowywanych na serwerze WWW. Umożliwiając wykonywanie skryptów CGI, na­rażasz serwer na potencjalne włamanie, uszkodzenie danych lub zwykłe przeciążenie systemu poprzez wywołanie zbyt wielu skryptów jednocześnie.

Najlepszym sposobem zabezpieczenia się przed takim ryzykiem jest wyłączenie mechaniz­mu CGI, a przynajmniej ograniczenie jego wykorzystania do kilku dobrze przetestowanych, bez­piecznych skryptów, które na pewno nie wyrządzą żadnej szkody. Z drugiej jednak strony, CGI oraz SSI dają tak wiele ciekawych możliwości, że trudno jest podjąć decyzję o całkowitym pozbyciu się tych mechanizmów.

Wobec tego najlepiej będzie ograniczyć wykorzystanie skryptów w systemie. Powinny się one znajdować w jednym miejscu, na przykład, w katalogu cgi-bin, i powinny mieć możli­wość jednoczesnego uruchamiania przez wielu użytkowników. Jeżeli pozwalasz twórcom stron na zamieszczanie własnych skryptów, sprawdź uprzednio każdy z nich pod kątem luk w zabezpie­czeniach, które mogą się tam znaleźć, w sposób zamierzony lub nie.

W dalszej części rozdziału „Jak pisać bezpieczne skrypty CGI” znajdziesz więcej infor­macji na temat pisania skryptów, tak aby nie stanowiły one potencjalnego zagrożenia dla bezpieczeń­stwa systemu.

Ogranicz zastosowanie połączeń symbolicznych

Połączenia symboliczne to coś w rodzaju aliasów, kolejnych wystąpień tego samego pliku w in­nym miejscu drzewa katalogów. Jeżeli w systemie operacyjnym połączenie tego typu zostanie utworzone do strony HTML, może ono zostać wykorzystane w adresie URL i ser­wer bez żadnych problemów odczyta taki plik.

Jeżeli wykorzystujesz serwer CERN HTTPD, nic nie stoi na przeszkodzie, aby twórcy pre­zentacji prowadzili połączenia symboliczne ze swoich stron do plików, które mogą znajdo­wać się w dowolnych miejscach drzewa katalogów, przez co są one dostępne praktycznie dla każ­dego użytkownika WWW. W zależności od Twojego podejścia do sprawy udostęp­niania plików na zewnątrz, możesz traktować to jako wadę lub jako kolejną opcję programu.

W serwerze NSCA istnieje możliwość wyłączenia przetwarzania połączeń symbolicznych. Nie oznacza to, że połączenia te zostaną usunięte, będą one dalej istniały, są bowiem zdefinio­wane w systemie operacyjnym, lecz serwer WWW nie będzie ich odczytywał. Aby to zrobić, należy usunąć zapis FollowSymLinks z pliku access.conf (więcej na temat tej opcji dowiesz się z dalszej treści tego rozdziału). Inna opcja, SymLinksOwnerMatch, pozwa­la na przetwarza­nie połączeń symbolicznych tylko wtedy, gdy właścicielem pliku i połącze­nia jest ten sam użyt­kownik. Jest to bezpieczniejsza metoda, która ogranicza wykorzystanie połączeń symbolicz­nych w obrębie drzewa katalogów jednego użytkownika.

Wyłącz SSI

Mechanizm SSI ze względu na swoje możliwości stanowi jedną z największych luk w bez­pieczeństwie serwerów WWW (szczególnie chodzi tu o polecenie exec, pozwalające na uru­chamianie skryptów). W ten sposób bardzo różne dane są przekazywane „w locie” na zew­nątrz przez serwer WWW, a Ty możesz łatwo stracić kontrolę nad tym procesem, nie możesz także przewidzieć, jaki będzie skutek takiej operacji dla systemu.

 

 

Wyłączenie SSI oprócz zwiększenia bezpieczeństwa poprawia także szybkość, z jaką pliki są wysyłane przez serwer, bowiem nie muszą być za każdym razem przez niego przetwarzane.

 

 

Jeżeli jednak zdecydujesz się na korzystanie z SSI, możesz ograniczyć wykorzystanie tego mechanizmu, zabraniając wykonywania polecenia #exec, służy do tego opcja IncludesNoExec. Pozwala to wciąż na wykonywanie prostych poleceń, takich jak #include lub #echo, uniemożliwia jednak uruchamianie skryptów, co wydatnie zwiększa bezpieczeń­stwo, nie ograniczając przy tym zupełnie możliwości SSI.


Wyłącz wyświetlanie zawartości katalogów

Większość serwerów WWW ustawionych jest tak, że po nadejściu żądania URL kończą­cego się katalogiem, a nie plikiem, przyjmują pewną standardową nazwę pliku (z reguły jest to index.html) i dołączają ją do całości adresu. Ale co się stanie, jeżeli we wskazanym ka­talogu nie będzie pliku index.html? Standardową odpowiedzią serwera WWW jest w takim przypadku przesłanie listy plików, znajdujących się w danym katalogu, wyświetlanej w spo­sób przypominający zawartość serwera.

Ale czy stanowi to jakieś zagrożenie? Jeżeli nie przeszkadza Ci, że czytelnicy mogą prze­glądać zawartość katalogów, odpowiedź brzmi: nie. Jeżeli jednak w swoim katalogu prze­chowujesz jakieś prywatne dane lub nie do końca gotowe strony WWW, będzie to stanowi­ło pewien problem, bowiem każdy będzie mógł podejrzeć ich zawartość.

Istnieją dwa sposoby rozwiązania tego problemu.

n               Umieszczaj w każdym katalogu plik index.html. W szczególnym przypadku może być to plik pusty (choć kilka słów wyjaśnienia będzie zawsze mile widziane przez czytelników).

n               W przypadku serwera NSCA HTTPD mechanizm wyświetlania zawartości katalogów jest standardowo wyłączony. Jednakże w przykładowym pliku access.conf znajduje się następująca linia:

Options Indexes FollowSymLinks

Jeżeli zechcesz wykorzystać ten plik, to usunięcie z linii słowa Indexes spowodu­je włączenie omawianego mechanizmu.


Odetnij robotom sieciowym dostęp
do swojego serwera

 

Roboty sieciowe (czasami określane po prostu jako roboty) to programy, które zajmują się automatycznym przeglądaniem zawartości stron WWW. Podążają one zgodnie z kolejnymi połączeniami i zapisują w swoich bazach da­nych nazwy plików, ich adresy URL, a czasami nawet całą zawartość. Utworzone w ten spo­sób zbiory danych służą następnie do wyszukiwania słów kluczowych, dzięki czemu użytkow­nicy mogą szybko odnaleźć strony, zawierające interesujące ich wyrażenia.

 

 

Pomysł wygląda fantastycznie, nieprawdaż? Niestety, prawda jest taka, że sieć rozrasta się zbyt gwałtownie i roboty nie nadążają z indeksowaniem wszystkich nowych stron. Najlepsze z tych programów, funkcjonujące na bardzo szybkich i kosztownych komputerach, potrzebują aż sześciu miesięcy na przejrzenie całej sieci. Jednakże stron w sieci przybywa znacznie szybciej i żaden robot nie jest w stanie dotrzymać kroku temu rozwojowi. Należy stwierdzić, że programy, takie jak WebCrawler (http://www.webcrawler.com/) czy AltaVista (http://www.altavista.com/), obejmują swoim zasięgiem sporą część światowych zasobów WWW i wyszukiwanie za ich pomocą przynosi całkiem przyzwoite efekty.

 

 

Problem z robotami polega na tym, że kiepski program może przeciążyć serwer ciągłymi żądaniami przesyłania kolejnych stron. Może się to też skończyć próbą odczytania z ser­wera takich plików, które nigdy nie powinny być odczytywane. Z tych powodów producenci robo­tów wyszli z inicjatywą wprowadzenia opcji, która uniemożliwiałaby ich programom przeszu­kiwanie całości lub części plików na serwerach WWW.

Aby odciąć roboty sieciowe od plików na swoim serwerze, musisz utworzyć plik o nazwie robots.txt i umieścić go na najwyższym poziomie drzewa katalogów, tak aby jego URL wyglądał następująco: http://nazwa.serwera/robots.txt.

W pliku tym powinna znaleźć się jedna lub kilka linii, które zabraniają lub zezwalają okreś­lonym programom (user-agents) na dostęp do stron na Twoim serwerze oraz jedna lub kil­ka linii opisujących katalogi, do których dostęp ma zostać odcięty (disallowed). Naj­pros­tsza postać pliku robots.txt („żadnych robotów na moim serwerze!”) wygląda następują­co:

User-agent: *Disallow: /

Jeżeli nie chcesz, aby jakikolwiek robot przeglądał pliki znajdujące się w katalogu /data i we wszystkich jego podkatalogach (mogą się tam znajdować pliki, przeznaczone tylko i wy­łącznie do użytku wewnętrznego), plik robots.txt powinien wyglądać tak:

User-agent: *Disallow: /data/

Dodając kolejne linie, rozpoczynające się od wyrażenia User-agent oraz Disallow, możesz dopuszczać przeglądanie stron serwera przez określone programy, co do których działania nie masz żadnych wątpliwości. Poniższy przykład odcina dostęp do plików serwera wszyst...

Zgłoś jeśli naruszono regulamin