Zabezpieczenia portów i protokołów

Zabezpieczenia portów i protokołów

Autor: Michał Brożyna

Opublikowano: 3/22/2007, 12:00 AM

Liczba odsłon: 36227

Na początek poznamy rolę portów i protokołów, pokażemy jak ustalać które porty są otwarte i jakie aplikacje z nich korzystają. Potem opowiemy sobie o usługach, czyli wyspecjalizowanych programach wspomagających inne aplikacje lub inne usługi. Powody, dla których warto poznać usługi i sposoby zarządzania nimi, są dwa: Po pierwsze - usługi mniej lub bardziej kontrolują dostęp do swoich portów. Po drugie - najczęściej pracują jako uprzywilejowany użytkownik - System lub Usługa Lokalna.

Porty i protokoły a dostęp do komputera.

Zanim dwa komputery połączą się ze sobą przez sieć opartą na protokole TCP/IP muszą uzgodnić między sobą numer portu, na którym odbywać się będzie transmisja danych. W sieciach port nie jest fizycznym gniazdem, jak złącze USB, lecz odgórnie ustalonym numerem używanym przez oba komputery służącym do zdefiniowania "kanału", na którym odbywa się wymiana danych. Nawiązanie połączenia odbywa się następująco: Komputer inicjujący wysyła żądanie na określony numer IP i port. Jednostka docelowa natomiast nasłuchuje na tym porcie i na podstawie numeru IP komputera źródłowego oraz informacji zawartych w wiadomości inicjującej decyduje czy odrzucić, czy zaakceptować połączenie. W globalnej pajęczynie używa się głównie dwóch protokołów (należących do TCP/IP) do komunikacji między komputerami. Są to TCP (Transmission Control Protocol) i UDP (User Datagram Protocol). W przypadku korzystania z TCP komputery nawiązują stałe połączenie między sobą i komputer odbierający potwierdza przybycie każdego pakietu. Jeżeli jednostka nadająca nie otrzyma potwierdzenia odebrania pakietu, wysyła go ponownie. Zapewnia to niezawodną transmisję danych od źródła do celu, ale generuje spore obciążenie sieci, gdyż poza właściwym strumieniem danych przesyłane są jeszcze pakiety kontrolne. W protokole UDP sprawa ma się inaczej. Komputer źródłowy wysyła do sieci całą informację w postaci pakietów UDP i nie sprawdza, czy dotarła ona w całości do celu. Może się to wydawać beznadziejnym rozwiązaniem, ale jest tak tylko na pozór. Protokół UDP doskonale sprawdza się przy przesyłaniu strumieni audio lub wideo, gdzie utrata paru bajtów czy nawet jednego pakietu jest dla użytkownika praktycznie niezauważalna, a sieć jest mniej obciążana ze względu na brak pakietów kontrolnych.

Przypisanie portów do protokołów

W większości rozwiązań sieciowych panuje zasada: jedna aplikacja - jeden port (lub zakres portów). Dlatego port jest ściśle związany z protokołem, którego używa nasłuchujący na nim program. TCP i UDP są tzw. protokołami warstwy transportowej, czyli są odpowiedzialne za fizyczne przesyłanie danych w formie pakietów. Zadaniem protokołów warstwy aplikacji jest interpretacja pakietów na użytek danego narzędzia. Aby połączyć się z programem trzeba wiedzieć na którym porcie nasłuchuje i jakiego protokołu używa. Przedstawmy prosty przykład: gdy łączymy się z serwerem WWW, nasza przeglądarka łączy się z serwerem na porcie osiemdziesiątym i używa protokołu HTTP. Prawie każdy widział źródłowy kod HTML. To właśnie on jest przesyłany przez TCP, a protokół HTML na podstawie źródła buduje stronę WWW, a przeglądarka wyświetla ją na monitorze.

Port Protokół Uwagi
21 FTP Protokół transmisji plików.
22 SSH Bezpieczne logowanie do powłoki systemów Unix/Linux
23 Telnet Protokół prosty terminal znakowego.
25 SMTP Protokół pocztowy (wysyłający)
80 HTTP Protokół przesyłania dokumentów WWW.
110 POP3 Protokół pocztowy (odbierający)
137-139 NETBIOS Network Basic Input/Output System
443 HTTPS Bezpieczna sesja HTTP

Numery portów i odpowiadających im protokołów są ujednolicone (patrz tabela). To znaczy, że serwer WWW prawie zawsze odpowie na żądanie na porcie 80 lub 443, Serwer pocztowy zawsze będzie się komunikował z programem pocztowym na portach 25 i 110. Bardzo ułatwia to ruch w sieci, bo nie musimy za każdym razem dowiadywać się o konfigurację portów serwera, z usług którego zamierzamy skorzystać. Oczywiście można skonfigurować serwer WWW (czy jakikolwiek inny), aby jego zawartość była dostępna na innym porcie. Czasami znajduje to zastosowanie. Wtedy adres w przeglądarce napiszemy tak: http://www.jakisserwer.pl:1234/.

Zestawianie połączenia z portem

Aplikacja w komputerze-kliencie chcąc podłączyć się do jakiejś usługi lub innej aplikacji na komputerze-serwerze tworzy połączenie sieciowe i wysyła pakiet zawierający swój IP i numer portu, z którym chce się połączyć, np. 80 dla protokołu HTTP.

Załóżmy, że używamy TCP. W tym wypadku połączenie istnieje między portem 80 serwera a dynamicznym portem (czyli losowym wolnym portem z zakresu 1024-16383) klienta. Teraz możemy wymieniać z serwerem wiele pakietów, przesyłać i odbierać kilobajty różnych informacji, sprawdzając przy okazji poprawność transmisji, aż zakończymy połączenie (lub zrobi to serwer).

Przy użyciu UDP cały proces jest prostszy: Wysyłamy do serwera (a właściwie tylko "w kierunku" serwera - adresujemy i puszczamy w świat) pakiet UDP z jakąś informacją. Tu nie mamy pewności czy serwer otrzyma pakiet, ze względu na brak mechanizmów kontroli transmisji w tym protokole.

Jeżeli serwer, do którego wysyłamy dane nie nasłuchuje na porcie, z którym próbujemy się połączyć - nasze pakiety są odrzucane. Jest tak zarówno dla TCP jak i UDP. Łatwo stąd wysnuć wniosek - im mniej otwartych portów, na których nasłuchuje nasz komputer - tym trudniej o włamanie.

Ustalamy aktywne porty

Nie można ograniczyć ilości otwartych portów bez wiedzy, które porty są aktywne i jakie programy z nich korzystają - możemy tylko całkowicie wyłączyć dostęp z zewnątrz i przez to uniemożliwić sobie komunikację z zasobami Internetu czy sieci lokalnej. Chociaż nie ma jednego narzędzia podającego wszystkie potrzebne informacje - posłużymy się kilkoma programami pomocniczymi. Po pierwsze - Menedżer zadań. Ukazuje on wszystkie uruchomione procesy, wyświetla ich PID (identyfikator) i właściciela procesu. Aby uruchomić Menedżera zadań wciśnij [Shift+Ctrl+Esc].

Standardowo Menedżer nie wyświetla PIDów. Aby to zmienić przejdź do zakładki Procesy, kliknij menu Widok i Wybierz kolumny..., zaznacz pole PID i kliknij OK. Drugim narzędziem, którym będziemy się posługiwać jest tasklist, uruchamiany z wiersza poleceń, szczególnie z przełącznikiem /SVC, ukazującym uruchomione usługi dla każdego z procesów. Dodatkowo posłużymy się programem netstat, również uruchamianym z wiersza polecenia. dodając przełącznik /O, dzięki któremu dowiesz się, jaki jest PID programu, który otworzył każde z aktywnych połączeń:

Teraz już łatwo się domyślić, że wystarczy sprawdzić PID w Menedżerze zadań i od razu wiemy, który program używa danego portu oraz z jakim adresem się łączy. Porównajmy PID 332 z okna netstat i Menedżera zadań. Już wiesz jaką stronę oglądamy i w jakiej przeglądarce? Proste.

Jeżeli w systemie nie ma żadnych aktywnych połączeń, nie zobaczymy żadnych rezultatów po wykonaniu netstat /O. Aby wyświetlić wszystkie porty, nawet nieaktywne, ale nasłuchujące wywołaj z wiersza polecenia netstat /A. Aby dodatkowo wyświetlić PIDy właścicieli portów i numery portów zamiast ich nazw - uruchomimy netstat /ANO. Przykładowe wywołanie poniżej.

Widzimy wiele portów nasłuchujących zarówno TCP i UDP i dwa aktywne TCP. Teraz łatwo ustalić, które programy prowadzą nasłuch na tych portach. Na stronie organizacji IANA, zajmującej się rejestracją portów i powiązanych z nimi usług (http://www.iana.org/assignments/port-numbers) sprawdźmy usługę na porcie 139 uruchomiony na naszym komputerze przez proces o identyfikatorze 4. Jest to NetBIOS session service. Według Menedżera zadań usługę tę uruchomiono jako użytkownik System. Port 1465 został przypisany dynamicznie dla przeglądarki internetowej. Port 1900 na protokole UDP jest używany przez svchost.exe. Tasklist /SVC pokazuje, że proces ten uruchamia ponad 20 usług i nie da się przy użyciu tych narzędzi stwierdzić, która usługa go używa. W tym wypadku znowu zaglądamy na listę IANA i widzimy, że ten port odpowiedzialny jest za obsługę uPnP.

W ten sposób możesz uzyskać informacje o każdym aktywnym lub nasłuchującym porcie w twoim komputerze.

Ograniczanie dostępu do portów

Podstawowym celem naszego działania będzie ograniczenie ilości portów dostępnych z zewnątrz. Możemy zrealizować to na trzy sposoby:

  • Zapora połączenia internetowego. To łatwe w konfiguracji narzędzie pozwala zablokować cały ruch przychodzący z wyjątkiem odpowiedzi na połączenia inicjowane z naszego komputera. Blokuje dostęp z zewnątrz do nasłuchujących portów.
  • Filtrowanie TCP/IP. Pozwalają odrzucić lub zaakceptować przychodzące połączenie na podstawie adresu źródłowego, numeru portu lub protokołu komputera wywołującego.
  • Filtrowanie IPSec. Mechanizm przypomina filtry TCP/IP, ale pozwalają na dodatkową ochronę przez szyfrowanie lub uwierzytelnianie przychodzącego połączenia.

Szczegółowe informacje na temat konfiguracji i używania Zapory Windows znajdziesz w innym artykule, dlatego nie będziemy poruszali tego zagadnienia.

Filtrowanie TCP/IP

W Windows XP opcja ta jest bardzo ograniczona, ponieważ filtrować można tylko pakiety przychodzące i tylko na podstawie numeru portu i nazwy protokołu. Aby włączyć filtr TCP/IP wykonajmy poniższe kroki: Otwórz Panel sterowania, a w nim Połączenia sieciowe, prawym przyciskiem myszy kliknij połączenie z Internetem i wybierz Właściwości. W zakładce Ogólne zaznacz Protokół internetowy (TCP/IP) i kliknij przycisk Właściwości. W kolejnym kroku w zakładce Ogólne okna Właściwości kliknij przycisk Zaawansowane i wybierz zakładkę Opcje. Następnie w polu Ustawienia opcjonalne zaznacz Filtrowanie TCP/IP i kliknij przycisk Właściwości. W ostatnim kroku zaznacz pole wyboru Włącz filtrowanie i wprowadź kryteria filtrowania.

Nasuwa się tylko jeden logiczny powód, dla którego opcje filtrowania TCP/IP są tak ukryte w systemie. W gruncie rzeczy ta usługa jest bezużyteczna. Bez możliwości filtrowania adresów IP jej przydatność jest znikoma i ogranicza się w praktyce do zablokowania wszystkich portów z podanymi wyjątkami. Filtr protokołów również jest nic nie warty, ponieważ praktycznie cały ruch sieciowy odbywa się po protokołach TCP, UDP i ICMP. Jeśli je zablokujesz - sam nie będziesz mógł korzystać z Internetu. Zamiast filtrowania TCP/IP bezpieczniej jest użyć wbudowanej Zapory połączenia internetowego.

IP Security (IPSec)

IPSec stanowi dobry mechanizm bezpieczeństwa. Potrafi kontrolować ruch przychodzący i wychodzący, a na podstawie modelu filtrowania konkretne połączenie może zostać zablokowane, przepuszczone, uwierzytelnione, zaszyfrowane lub uwierzytelnione i zaszyfrowane jednocześnie. W odróżnieniu od kontroli TCP/IP, w której podaje się tylko dozwolone lub blokowane adresy IP, IPSec negocjuje bezpieczne połączenie między komputerami. Konsola zabezpieczeń lokalnych, w której można zainstalować przystawkę IPSec jest dostępna wyłącznie w systemie Windows XP Professional i uruchamia się ją z wiersza polecenia (mmc). IPSec najlepiej sprawdza się w dużych sieciach o wielkiej ilości ważnych danych, np. w systemach korporacyjnych i bankowych, dlatego nie skupimy się na instalacji i konfiguracji tego narzędzia.

Wyłączanie zbędnych usług

W Windows XP domyślnie uruchomionych jest mnóstwo usług. Większość uruchamia się automatycznie wraz z systemem. Zamykając niepotrzebne usługi możemy zwiększyć nie tylko bezpieczeństwo, ale także wydajność komputera. Konsola zarządzania usługami dostępna jest z Panelu sterowania. Wybierz Narzędzia administracyjne (kategoria Wydajność i konserwacja) i kliknij ikonę Usługi.

Uruchomione usługi poznamy po kolumnie Stan. Kolumna Typ uruchomienia określa sposób, w jaki włączane będą usługi. Automatyczny - wraz z systemem, Ręczny - tylko wtedy gdy wymagać jej będzie jakiś program, Wyłączony - usługa nie zostanie uruchomiona nawet, gdy będzie wymagana przez program. Większość usług można dowolnie włączać i wyłączać.
Ale! Zanim w dzikim szale rzucisz się do wyłączania każdej usługi po kolei pamiętaj - wyłączenie usługi niezbędnej dla systemu spowoduje niemożność jego uruchomienia.

Usługi, które bezpiecznie możesz wyłączyć, to:

  • ClipBook - jeżeli nie posiadasz aplikacji ClipBook Viewer
  • Usługa raportowania błędów - jeżeli nie chcesz, by Windows wysyłał do Microsoftu informacji i awariach systemu i aplikacji, wyłącz ją następująco: wejdź w Panel Sterowania, System, Zaawansowane, Raportowanie błędów i przełącz opcję na Wyłącz raportowanie błędów.
  • Publikowanie za pomocą usługi FTP - dla bezpieczeństwa wyłącz tę usługę, chyba, że naprawdę jej potrzebujesz.
  • NetMeeting Remote Desktop Sharing - Udostępnia pulpit w programie NetMeeting. Jeżeli go nie używasz lub nie chcesz udostępniać w nim pulpitu - wyłącz.
  • DSDM DDE sieci
  • Menedżer autopołączenia zdalnego dostępu - wyłącz, jeżeli nie używasz modemu.
  • Menedżer sesji pomocy pulpitu zdalnego - wyłącz, jeżeli nie korzystasz z pomocy zdalnej.
  • Rejestr Zdalny - dla większego bezpieczeństwa wyłącz tę usługę.
  • Magazyn wymienny - praktycznie nieużywana usługa.
  • Routing i dostęp zdalny
  • Simple Mail Transfer Protocol - wyłącz, jeżeli nie posiadasz na komputerze serwera pocztowego
  • Telnet

Inne usługi warto pozostawić w ich domyślnym ustawieniu. Dobrym zwyczajem jest uprzednie przełączenie usługi na tryb ręczny, popracowanie na komputerze parę dni i wyłączenie usługi dopiero, gdy nie stwierdziło się nienormalnego zachowania systemu.