Administracja systemami komputerowymi
Bezpieczeństwo systemów
Opracował:
Tałanda Jarosław
SPIS TREŚCI
1. Wstęp
2 Podstawowe pojęcia z zakresu ochrony danych
2.1 Atak na bezpieczeństwo danych
2.2 Usługi ochrony danych - zapewniają uzyskanie pewnych gwarancji w zakresie wiarygodności systemu komputerowego
2.3 Mechanizmy zabezpieczające
2.4 Typy możliwych ataków
3. Sposoby włamywania się do systemów
3.1.Przechwytywanie hasła
3.1.1.Przechwytywanie hasła w nieszyfrowanych protokołach
3.1.2.Przechwytywanie hasła z wykorzystaniem "koni trojańskich"
3.2.Suid, sgid
3.3.Buffer overrun
3.4 Backdoor
3.5.IP spoofing
3.6.IP source routing
3.7.Przykład włamania do systemu
4.Potencjalne "dziury" w zabezpieczeniach systemu - przykładowa lista niebezpiecznych usług.
4.1.R-commands
4.2.Sendmail
4.3 Telnet
4.4 FTP
4.4.1.Przejęcie połączenia pasywnego (PASV) na porcie serwera
4.4.2.Przejęcie połączenia na porcie klienta (PORT)
4.4.3 Kontrolowanie połączeń:
4.5.Finger
5.Stosowane zabezpieczenia
5.1.IPSEC
5.2.Firewall
5.2.1.Zakres działalności
5.2.2 Własności
5.2.3Typy firewall'i
5.2.4 Strategie konfiguracji
5.2.5.Dostępne rozwiązania firewall'i
5.2.6 Podsumowanie
5.3.Protokoły szyfrowane
5.3.1.SSH - Secure SHell (program do zdalnego logowania)
5.3.2.OpenSSH
5.3.3 SCP - Secure CoPy (program zdalnego kopiowania plików)
5.3.4.SSL - Secure Socket Layer (protokół bezpiecznej komunikacji)
5.4.Tunelowanie
5.4.1.Bezpieczeństwo
5.4.2 VPN - Virtual Private Network (wirtualna sieć prywatna)
5.4.3.Odbiór poczty
5.5 Monitorowanie (przeglądanie logów)
1. Wstęp.
Pojęcie bezpieczeństwa systemów komputerowych dotyczy zarówno bezpieczeństwa pojedynczego systemu jak i całej sieci, czyli ochrony informacji krążących pomiędzy węzłami sieci, oraz danych zgromadzonych w bazach dostępnych za jej pośrednictwem. Szerokie zastosowanie technik internetowych wprowadza nie znane wcześniej zagrożenia bezpieczeństwa systemów informatycznych: włamania do systemów, wirusy, spamming, blokowanie działania itd. Wzrasta więc znaczenie ochrony danych i uwierzytelniania obiektów krążących w sieci. Włamania do systemów informatycznych przynoszą znaczne straty finansowe i utratę zaufania do instytucji, której powierzono poufne informacje. Środki ochrony, zmniejszające ryzyko uzyskania dostępu do danych przez osoby nieupoważnione, można ogólnie podzielić na dwie kategorie:
ograniczenie dostępu do zasobów systemu zgodnie z ustaloną polityką ochrony organizacji
kodowanie informacji (utajnianie) za pomocą metod kryptograficznych.
2. Podstawowe pojęcia z zakresu ochrony danych.
2.1 Atak na bezpieczeństwo danych.
ataki aktywne, dążące do modyfikacji strumienia informacji lub tworzenia fałszywych informacji. W działaniach tych mieszczą się: podszywanie się pod osobę uprawnioną i blokowanie działania (denial of service)
ataki pasywne, polegające na podsłuchiwaniu i monitorowaniu przesyłanych informacji. Celem ataku pasywnego maże być dążenie do ujawnienia treści wiadomości lub uzyskanie informacji o samym ruchu informacji
2.2 Usługi ochrony danych - zapewniają uzyskanie pewnych gwarancji
w zakresie wiarygodności systemu komputerowego.
poufność - ochrona przed atakiem pasywnym
uwierzytelnianie - zapewnienie autentyczności informacji i osób: zagwarantowanie, że informacja pochodzi z takiego źródła, które jest przy niej wymienione lub też osoba jest tą, za którą się podaje
nienaruszalność - zapewnienie integralności komunikacji, tzn. tego, że informacja jest odbierana w takiej postaci, w jakiej została wysłana
niezaprzeczalność - niemożliwość zaprzeczenia faktowi wysłania lub odebrania informacji
kontrola dostępu - możliwość kontrolowania dostępu do informacji (systemów) drogą identyfikacji i uwierzytelniania
dyspozycyjność - ograniczenie skutków ataku w sferze dostępności informacji
2.3 Mechanizmy zabezpieczające.
szyfrowanie wiadomości
uwierzytelnianie informacji (podpisy cyfrowe)
ochrona antywirusowa
identyfikacja i uwierzytelniane osób uprawnionych
2.4 Typy możliwych ataków.
przerwanie (ang. interruption) - uniemożliwienie korzystania z zasobów sieci
modyfikacja (ang. modification) - wprowadzenie zmian przez osoby nieuprawnione
przychwycenie (ang. interception) - uzyskanie dostępu do zasobów przez osoby nieuprawnione
podrobienie (ang. fabrication) - wprowadzenie fałszywych danych do systemu komputerowego
3. Sposoby włamywania się do systemów.
Istnieje wiele metod pozwalających potencjalnemu "hackerowi" na włamanie się do systemu. Bazują one zwykle na błędach w oprogramowaniu systemowym, złej konfiguracji systemu, używaniu niebezpiecznych protokołów oraz bardzo często na tak zwanym czynniku ludzkim, czyli naiwności użytkowników systemu. Poniższy rozdział prezentuje przegląd najbardziej typowych metod włamywania stosowanych przez "hackerów".
3.1.Przechwytywanie hasła
Najprostszą metodą włamania się do systemu jest przechwycenie hasła jego użytkowników lub nawet administratora. Istnieją dwie metody przechwytywania haseł: wykorzystanie nieszyfrowanych protokołów oraz używanie tak zwanych "koni trojańskich".
3.1.1.Przechwytywanie hasła w nieszyfrowanych protokołach
Nawet obecnie bardzo wiele protokołów komunikacji, szczególnie starych, nie wykorzystuje żadnych technik szyfrowania danych, a mechanizm autoryzacji dostępu do zasobów systemu opiera się głównie o hasło przesyłane w sposób jawny najczęściej na samym początku połączenia. Do takich protokołów należą między innymi bardzo popularne i szeroko stosowane protokoły takie jak:
telnet
ftp
rsh
pop3 oraz imap
http
We wszystkich wymienionych protokołach klient łączy się ze zdalnego komputera
z serwerem używając do tego zwykłych socketów, a transmisja danych przebiega poprzez wiele routerów oraz segmentów sieci i ponieważ nie jest w żaden sposób szyfrowana (wyjątek stanowią odpowiednie modyfikacje tych protokołów wykorzystujące SSL - Secure Socket Layer) może zostać bardzo łatwo "podsłuchana". Wykorzystywane są w tym celu specjalne narzędzia, zwane potocznie "snifferami", które mogą zostać umieszczone bezpośrednio na routerze (routerem bywa czasem komputer, na przykład zwykły PC pracujący pod kontrolą systemu Linux, wyposażony w kilka interfejsów sieciowych), lub w segmencie sieci, przez który przechodzą pakiety interesującej włamywacza transmisji. Sniffer ma za zadanie śledzić połączenia na konkretny port serwera (np. telnet) wyłapując pakiety przeznaczone dla serwera (przykładowo w pojedynczym segmencie sieci ethernet pakiety docierają do wszystkich komputerów i dzięki odpowiedniej konfiguracji interfejsu sieciowego można odbierać pakiety o dowolnym adresie docelowym) i zapisywać te bajty z transmisji, które zawierają wpisywane przez użytkownika login oraz hasło. W przypadku protokołu telnet wystarczy zapisać kilkanaście pierwszych bajtów wysyłanych przez klienta, podczas gdy w protokole POP3 nazwa użytkownika przekazywana jest bezpośrednio po komendzie USER, a hasło po komendzie PASS. Dzięki sprytnie napisanemu snifferowi hacker może uzyskać tą metodą hasło konkretnego użytkownika. Metoda ta wymaga jednak umieszczenia sniffera (sniffer do poprawnego działania wymaga odpowiednio wysokich uprawnień) na drodze prowadzącej do serwera lub najlepiej bezpośrednio w segmencie sieci, w którym znajduje się serwer.
3.1.2.Przechwytywanie hasła z wykorzystaniem "koni trojańskich"
Najprostszą metodą przechwycenia czyjegoś hasła jest umieszczenie na komputerze,
z którego ta osoba się loguje do systemu programu "udającego" standardowy program logowania (np. login). Może to wyglądać w sposób następujący: Załóżmy, że podczas logowania na komputerze baranek wyświetlany jest następujący komunikat:
Welcome to BARANEK.
Please enter your login and password.
login:
Hacker loguje się na komputerze i pisze program, który wykonuje następujące czynności:
wyświetla identyczny komunikat (należy uważać przy tym na wszelkie zmiany standardowego komunikatu, które mogą ułatwić wykrycie konia trojańskiego)
oczekuje na wprowadzenie nazwy użytkownika oraz hasła (hasło oczywiście nie może pojawiać się na ekranie)
wypisuje na ekranie komunikat login incorrect aby użytkownik pomyślał, że wpisał niepoprawne hasło
zapisuje login oraz hasło do pliku
kończy działanie oraz wylogowuje użytkownika, co powoduje wyświetlenie prawdziwego już komunikatu logowania
Tego typu konie trojańskie mogą być oczywiście znacznie bardziej wyrafinowane -
w skrajnym przypadku mogą to być odpowiednio zmodyfikowane programy klientów login, telnet, ftp lub ssh.
3.2.Suid, sgid
Częstą metodą wykorzystywaną do włamywania się do systemów komputerowych są programy typu suid lub sgid. Są to programy, które mają ustawiony w atrybutach odpowiedni bit, dzięki czemu wykonują się na uprawnieniach swojego właściciela lub grupy. Jest to bardzo szybka i łatwa droga do uzyskania uprawnień konkretnego użytkownika lub nawet administratora. Hackerzy wykorzystują w tym celu błędy w samych programach, które z racji spełnianych funkcji muszą być typu suid, lub błędy w konfiguracji systemu (np. demona ftp, nfs...) dzięki którym możliwe staje się utworzenie pliku wykonywalnego z ustawionym bitem suid, dla którego właścicielem jest ktoś inny (np. administrator).
Aby uchronić się przed włamaniami z wykorzystaniem suid'ów należy przede wszystkim kontrolować to, które programy mają ustawiony ten bit oraz czy jest to sensowne i konieczne. Należy unikać nadawania takich uprawnień programom pochodzącym z niepewnych źródeł,
a także programom takim jak: skrypty shellowe (istnieje możliwość przerwania działania takiego skryptu i uzyskania shell'a wykonywanego na uprawnieniach administratora), skrypty cgi (możliwość ich wykonywania nawet bez posiadania konta na danym komputerze).
Dodatkowo należy zwrócić uwagę na to jakie programy lub polecenia wywoływane są przez program z ustawionym bitem suid - w szczególności czy program ten nie korzysta przy wywoływaniu poleceń ze zmiennych środowiskowych (mogą one zostać zmienione przez hackera) ani ścieżek względnych.
3.3.Buffer overrun
Podczas włamań do systemów bardzo często wykorzystywane są błędy w programach wykonywanych na uprawnieniach administratora polegające na braku odpowiedniej kontroli ilości danych wprowadzanych do buforów wejściowych. Przykładem może być tutaj program login, który jest odpowiedzialny za logowanie użytkowników. Celowe przepełnienie bufora wejściowego, na przykład w funkcji oczekującej na hasło użytkownika, może powodować nieprzewidziane (lub wręcz zamierzone ale zupełnie nieprawidłowe) zachowanie programu. Spowodowane jest to tym, że bufory wejściowe są najczęściej tablicami lokalnymi, które są alokowane na stosie podczas wykonywania konkretnej funkcji i ich przepełnienie powoduje nadpisanie innych zmiennych.
W typowych systemach struktura stosu podczas wywoływania funkcji jest następująca:
. . . |
Bufor |
inne zmienne lokalne |
|
adres powrotu |
|
. . . |
Przepełnienie bufora może być wykorzystane przez hackera na kilka sposobów:
Program w wyniku nadpisania zmiennych lokalnych lub adresu powrotu zakończy się z błędem (segmentation fault). Jeżeli był to program taki jak np. login (dotyczy to raczej jego starszych wersji) to na dysku zostanie zapisany plik core, który może zawierać rozkodowane hasło użytkownika lub inne informacje pomocne w dalszym włamywaniu się do systemu.
Dzięki znajomości struktury ramki stosu w konkretnej funkcji wejściowej danego programu suid, hacker może zmodyfikować jego działanie w ten sposób, że przepełniając bufor nadpisze adres powrotu z funkcji tak, aby wskazywał na jego kod i dzięki temu uzyska możliwość wykonywania swoich poleceń na uprawnieniach administratora.
Aby ustrzec się przed tego typu atakami należy przede wszystkim:
Używać najnowszych wersji kluczowych dla systemu programów.
Wyłączyć zrzucanie pliku core dla programów wykonywanych na uprawnieniach administratora.
3.4 Backdoor.
Angielskim terminem backdoor określa się pozostawione przez hackera po włamaniu "tylne furtki", czyli programy suid'owe (najczęściej jest to kopia shell'a), które umożliwiają mu ponowne wejście do systemu nawet w przypadku zmiany hasła przez administratora
i wprowadzeniu dodatkowych zabezpieczeń. Taki backdoor bardzo łatwo jest utworzyć wykonując, już po uzyskaniu uprawnień administratora, kilku prostych poleceń. Przykładowo może być to:
$ cp /bin/sh /tmp/cde.tmp
$ chmod 4755 /tmp/cde.tmp
W wyniku wykonania powyższych poleceń wykonanie polecenia "/tmp/cde.tmp" po ponownym zalogowaniu do systemu spowoduje natychmiastowe uzyskanie uprawnień administratora.
Oczywiście backdoor może być znacznie bardziej wyrafinowanym programem niż tylko kopia shell'a. Może to być na przykład odpowiednia modyfikacja któregoś z demonów systemowych umożliwiająca wejście do systemu przez określony port TCP.
W przypadku gdy administrator zauważy włamanie do systemu powinien poszukać pozostawionych przez włamywacza backdoor'ów. Należy w tym celu przeszukać cały system plików pod kątem programów suid. Można to zrobić poleceniem:
find / -perm +4000 -print
Dostaniemy w ten sposób listę wszystkich programów suid w systemie. Wszelkie podejrzane mogą być pozostawionymi przez hackera "tylnymi furtkami".
3.5. IP spoofing.
Niektóre protokoły jako jednej z metod autoryzacji dostępu używają adresu źródłowego IP pakietów. Przykładem jest protokół RSH oraz wszystkie tak zwane
R-polecenia. Użytkownik tworzy w swoim katalogu domowym plik o nazwie .rhosts,
w którym umieszcza nazwy, bądź adresy IP komputerów, z których możliwy jest dostęp bez podawania hasła. Może to zostać wykorzystane przez włamywacza w ten sposób, że zmodyfikuje on wysyłane przez swój komputer pakiety tak, aby w polu adresu źródłowego zawierały adres IP "zaufanego" komputera. Takie "podszywanie" się pod adres IP innego komputera jest możliwe wtedy, gdy komputer hackera znajduje się w tej samej podsieci IP co "zaufany" komputer. Aby się przed tym ustrzec można kontrolować oprócz adresów IP również adresy MAC interfejsów sieciowych. Służą do tego narzędzia takie jak np. arpwatch. Niestety współczesne karty sieciowe umożliwiają, po przestawieniu ich w specjalny tryb pracy, wysyłanie pakietów właściwie z dowolnym adresem MAC. Jest to jednak zawsze pewnym utrudnieniem dla potencjalnego włamywacza. Ze względu jednak na łatwość włamania tą metodą nie należy stosować obecnie autoryzacji dostępu bazującej na numerze IP.
3.6.IP source routing
IP source routing to mechanizm wbudowany w protokół TCP/IP umożliwiający komputerowi wysyłającemu pakiety IP określenie trasy, którą musi dany pakiet przejść poprzez wyspecyfikowanie adresów IP kolejnych routerów na drodze do komputera docelowego.
Z drugiej strony w zabezpieczeniach systemu komputerowego często stosuje się techniki takie jak firewall albo podział na interfejsy zaufane (trusted) oraz publiczne. Tymczasem IP source routing daje hackerowi możliwość skierowania swoich pakietów taką trasą, aby dotarły one do serwera interfejsem zaufanym mimo, że domyślna trasa pakietów pochodzących "z zewnątrz" prowadzi przez interfejs zaufany. Czasami metoda taka pozwala nawet na ominięcie firewall'a.
3.7.Przykład włamania do systemu
Aby włamać się do systemu komputerowego hacker musi zazwyczaj wykorzystać kilka różnych metod. Poniższy przykład włamania dotyczy rzeczywistego włamania jakie miało miejsce w jednej z krakowskich amatorskich sieci osiedlowych.
Celem włamania był komputer o nazwie gruchot pełniący w sieci funkcję serwera IRC, serwera Quake oraz Quake2, DHCP, zapasowego DNS, oraz będący równocześnie bramką (bridge) pomiędzy segmentami sieci. Był to system o następujących parametrach:
Procesor: Pentium 75
Pamięć: 24MB RAM, 2GB HDD
System operacyjny: Red Hat Linux 6.2
Jądro: 2.2.17 z wkompilowaną funkcją bridge
Standardowe oprogramowanie systemu
Dwa interfejsy sieciowe Ethernet: eth0, eth1, tworzące interfejs wirtualny brg0, który miał przydzielony globalny adres IP
Włamywacz zalogował się na komputer przez konto jednego z użytkowników, który wybrał sobie zbyt proste i łatwe do odgadnięcia hasło. Ponieważ nie znał on dokładnie konfiguracji systemu próbował początkowo różnych metod takich jak uruchamianie gotowych programów, tzw. Exploits, które są łatwo dostępne na stronach o tematyce hackerskiej. Ostatecznie włamał się do systemu za pomocą bardzo prostej metody.
W katalogu /tmp utworzył skrypt shell'owy o nazwie cool, którego zadaniem było tworzenie shell'a suid'owego wykonującego się na uprawnieniach administratora. Jednak aby skrypt zadziałał poprawnie hacker musiał wykonać na uprawnieniach administratora. Posłużył się
w tym celu programem dump - narzędziem występującym w systemie RedHat Linux
i służącym do tworzenia kopii systemu plików na inny nośnik, lub poprzez sieć. Program ten został zainstalowany w trakcie automatycznej instalacji wielu pakietów jaka ma miejsce podczas instalacji systemu Red Hat Linux i przez niedopatrzenie administratora nie został ani zablokowany ani odinstalowany. Program ten był tzw. suid'em i dodatkowo napisany był wyjątkowo nierozważnie. Miał on bowiem możliwość zdalnej komunikacji z innym komputerem poprzez protokół RSH, przy czym do uruchamiania komendy rsh wykorzystywał on zmienną środowiskową RSH_PATH. Hacker zmodyfikował więc zmienną RSH_PATH tak, aby wskazywała na skrypt /tmp/cool i uruchomił z program dump z odpowiednim parametrem, który z kolei wywołał na uprawnieniach administratora skrypt hackera, a ten utworzył w katalogu /tmp kopię interpretera poleceń bash z ustawionym bitem suid. Dzięki temu prostemu zabiegowi włamywacz uzyskał uprawnienia administratora.
Po tym włamaniu hacker uruchomił inny skrypt, który miał za zadanie wymazać z plików log informacji o jego działaniach, uniemożliwiając tym samym jego wyśledzenie. Na szczęście dzięki przezorności administratora sieci osiedlowej wszystkie połączenia przychodzące
z zewnątrz były monitorowane na głównym serwerze sieci, a ten jako już znacznie lepiej zabezpieczony nie stał się ofiarą ataku. Administrator miał więc do dyspozycji pełny log
z komunikacji pomiędzy komputerem hacker'a a komputerem gruchot, który został przesłany do administratora sieci, z której pochodził włamywacz i wobec hackera zostały wyciągnięte konsekwencje. Tymczasem dla komputera gruchot został zablokowany dostęp z zewnątrz
i obecnie komputer ten udostępnia jedynie usługi lokalne.
4.Potencjalne "dziury" w zabezpieczeniach systemu - przykładowa lista niebezpiecznych usług.
4.1.R-commands
Do klasycznych unix'owych r-commands zaliczamy rsh, rlogin, rcp, rexec. Komendy te zostały stworzone, aby pozwolić użytkownikowi logować się na zdalnych maszynach bez transmisji hasła przez sieć w celu jego autentykacji. Zaprojektowano je w ten sposób, aby unikać przechwytywania haseł, tymczasem są one bardzo niebezpieczne właśnie ze względu na to, że autentykacja przy pomocy hasła nie dokonuje się wcale.
Komputery, z których można zalogować się bez podawania hasła nazywane są hostami zaufanymi. Aby móc zalogować się na zdalnym komputerze z zaufanego hosta należy spełnić 3 warunki autentykacji :
klient musi korzystać z uprzywilejowanych portów TCP (poniżej 1024) - tylko root może korzystać z uprzywilejowanych portów (jednak aktualnie każdy może być root-em np. na swoim komputerze),
host i komputer klienta muszą być wymienione w pliku /etc/host.equiv albo
w katalogu domowym użytkownika w pliku /.rhosts (umieszczenie "+"
w /etc/hosts.equiv powoduje otwarcie dostępu całemu światu),
nazwa hosta musi odpowiadać jego adresowi IP (złamanie tej bariery jest proste, jeżeli weźmiemy pod uwagę stan dzisiejszej techniki).
W momencie, gdy komputer stanie się hostem zaufanym, pojawia się niebezpieczeństwo, że napastnik "podszyje się" za niego lub za jakiegoś zaufanego użytkownika.
Jeżeli atakujący poda się za zaufanego użytkownika ma on stosunkowo małe możliwości, wcielając się w rolę superusera, będzie w stanie podać się za każdego zwykłego użytkownika. Najlepszym zabezpieczeniem przed podszywaniem się za zaufanych użytkowników jest dobry administrator systemu hosta zaufanego.
Wcielenie się w zaufanego hosta może nastąpić w przypadku, gdy dwa komputery będą posiadały 2 takie same adresy IP swoje i swojej podsieci, co jest łatwe do wykrycia - sama sieć zaczyna się dziwnie zachowywać.
Używanie r-commands jest niebezpieczne kiedy zaufany klient ma włączoną opcję "source routing". Wtedy wszystkie routery, aplikacje serwerów na drodze klienta mają możliwość przechwycenia informacji o drodze klienta, można go zatem łatwo wyśledzić i podszyć się za niego. Dlatego należy wyłączać zaufanym hostom tę opcję.
Łatwo jest dokonać wcielenia w hosta, który w danym momencie jest wyłączony (dotyczy to zwłaszcza komputerów osobistych, często wyłączanych na noc). Przejęcie przez napastnika adresu IP hosta wyłączonego jest trudne do wykrycia. Serwer r-commands powinien monitorować stan sieci i hostów zaufanych (w sposób bardziej skomplikowany niż zwykły ping) i w razie braku odpowiedzi od któregoś z nich, zablokować możliwość zdalnego logowania. Po powrocie zaufanego hosta do sieci, powinien on sam "zgłosić się" do serwera, zidentyfikować się i poddać autentykacji. Dopiero wtedy odblokowana zostałaby możliwość wykonywania r-commands.
R- commands nie powinny być wypuszczane na zewnątrz przez firewall, w sieciach lokalnych ich niedoskonałości nie stwarzają takiego zagrożenia i są możliwe do zaakceptowania.
Poniżej widnieją dwa błędy w r-commands, które stwarzają krytyczne zagrożenie dla bezpieczeństwa systemu:
w AIX v.3 po komendzie: rlogin AIX.cel_ataku.com -l -froot otrzymywało się prawa root-a
niektóre platformy są wrażliwe na następujący atak:
$export RESOLV_HOST_CONF=/etc/shadow
$rlogin /etc/shadow
R-commands to usługi niebezpieczne ponieważ mają słabą autentykację, komunikacja odbywa się w sposób jawny, założenia dotyczące klienta nie są weryfikowane.
4.2.Sendmail
Program Sendmail służy do rozsyłania automatycznie wiadomości do grupy użytkowników systemu. Za jego pomocą naruszono bezpieczeństwo wielu serwerów i sieci komputerowych. Program ten jest dosyć skomplikowany, działa z uprawnieniami roota, odpowiada na połączenia z dowolnego komputera z Internetu i ma rozbudowany język poleceń. Podczas instalacji sendmaila jesteśmy zmuszeni na ustawienie SUID'a na jego demonie, dlatego właśnie jest on chyba najczęstszym celem ataków i w sumie najbardziej podatną częścią systemu na wykorzystanie dziur i niedociągnięć. Jego rozbudowana forma
i mnogość różnych konfiguracji sprawia, że oko czujnego administratora powinno nieustannie śledzić doniesienia o nowo wykrytych błędach.
Bardzo ciekawą alternatywą dla sendmaila jest qmail. Jest to system pocztowy, który zamiast jednego demona obsługującego wszystkie zadania mamy kilka niewielkich, wyspecjalizowanych, współpracujących ze sobą programów. Tylko jeden z nich - dostarczający przesyłki lokalne - wymaga uruchomienia z prawami roota. Pozostałe pracują
z innych kont przewidzianych specjalnie dla nich. To znacznie podnosi bezpieczeństwo systemu ze strony systemu pocztowego. Autor programu zrezygnował ze standardowych funkcji bibliotecznych jezyka C, które niekiedy zbyt liberalnie traktują takie operacje jak alokacja buforów, co jest wykorzystywane w exploitach typu "overflow". Dodatkową zaletą Qmaila jest dowolność w miejscu gromadzenia poczty. Skrzynka pocztowa może być umieszczona w dowolnie wskazanym miejscu przez użytkownika. To powoduje decentralizację składowanej poczty, a co za tym idzie podnosi bezpieczeństwo przechowywanych w niej danych. Zalety Qmaila czyniące go bezpieczniejszym systemem pocztowym niż powszechnie używany Sendmail:
możliwość ograniczenia funkcji przekaźnika poczty elektronicznej,
możliwość ograniczenia dostępu (tcpd, tcpcontrol),
niezawodny system kolejkowania,
automatyczne zapobieganie powstawaniu 'pętli' (przy aliasach),
obsługa POP3,
możliwość równoległej pracy z innymi systemami pocztowymi (również
z sendmailem),
automatyczna adaptacja do konkretnej wersji UNIX-a podczas kompilacji.
4.3 Telnet.
Jedną z najbardziej rozpowszechnionych usług sieciowych jest telnet. Został on zaprojektowany, aby umożliwić użytkownikom logowanie się i pracę na zdalnych maszynach. Kiedyś telnet był uważany za bezpieczną usługę. Dzisiaj największą jego wadą jest to, że komunikacja odbywa się w formie jawnej. Zatem ktoś zainteresowany nieautoryzowanym dostępem do konta użytkownika korzystającego z telnetu może przejąć jego hasło (np. przy pomocy sniffer'ów).
Z jawnością przesyłanych danych wiąże się następujący problem: w wielu rodzajach sieci, jak Ethernet, pakiety przesyłane między komputerami są dostarczane do każdego komputera, który jest do sieci podłączony; zazwyczaj komputery interesują się jedynie pakietami kierowanymi do nich, są jednak programy które akceptują wszystkie połączenia i pobierają
z nich np. 100 pierwszych znaków (czyli hasło i login), co oczywiście może zostać wykorzystane przez hakerów.
Kolejnym problemem, na jaki możemy się natknąć korzystając z telnetu, jest możliwość porwania sesji (session hijacking). Wówczas napastnik przejmuje kontrolę nad połączeniem użytkownika który zalogował się poprawnie.
Przy pomocy telnetu możemy również przeprowadzać ataki na inne zdalne komputery. Warunkiem koniecznym do tego jest akceptowanie przez nie połączenia telnetu na port 6000. W ten prosty sposób można przeprowadzić atak typu DoS, w wyniku którego system graficzny maszyny docelowej zostanie zablokowany.
Rozwiązanie problemu niskiego bezpieczeństwa usługi telnet jest dwojakie:
edukacja użytkowników sieci (np. dobra rada, aby posiadali oni rożne hasła na różnych kontach, dzięki czemu złamanie jednego z nich nie pociągnie za sobą dalszych konsekwencji),
zastosowanie do zdalnych połączeń bezpieczniejszego, a zarazem bardziej skomplikowanego programu SSH, który uniemożliwia manipulację pakietami poprzez podszywanie się pod cudze IP.
4.4 FTP.
Jednym z najpopularniejszych mechanizmów służących do przesyłania plików w sieci jest usługa FTP. Niestety nie jest ona zbyt bezpieczna, nawet jeżeli stosowana jest w połączeniu z mechanizmami bezpieczeństwa jakie oferuje TCP (IPSEC). Korzystając z FTP przesyłamy siecią informacje w formie jawnej (podobnie jak w przypadku usługi telnet), co grozi między innymi przejęciem hasła przez napastnika.
Inne niebezpieczeństwa usługi FTP to:
4.4.1.Przejęcie połączenia pasywnego (PASV) na porcie serwera.
Połączeniem tym przesyłane są dane. Przejęcie polega na tym, iż atakujący podłącza się do portu TCP serwera dla połączenia dla danych zanim zdąży zrobić to klient. Zagrożenie zależy od tego co zrobi klient:
jeżeli klient chce pobrać plik z serwera (RETR) to atakujący przejmie ten plik, tymczasem klient otrzyma informacje, że transfer odbył się pomyślnie, aczkolwiek otrzyma pusty plik;
jeżeli klient chce wylistować zawartość katalogu na serwerze (LIST) to scenariusz będzie podobny jak dla poprzedniego przypadku (RETR);
jeżeli klient chce wysłać plik do serwera (STORE) to atakujący może np. zmienić jego zawartość tymczasem klient nie wykryje żadnych błędów ponieważ w jego buforze TCP będzie przechowywał odpowiednie dane, otrzyma informacje od serwera,
iż transfer zakończył się pomyślnie.
Serwer może w różny sposób bronić się przed przejęciem połączenia PASV:
ochrona PASV IP: odrzucenie połączenia, jeżeli adres IP połączenia PASV nie odpowiada adresowi IP klienta - to jednak nie powstrzyma ataku, w przypadku gdy klient i napastnik korzystają z hosta lub serwera proxy wieloużytkownikowego;
ochrona PASV SYN: polega na takim skonfigurowaniu systemu operacyjnego, aby odrzucał wszystkie pakiety SYN (nawiązanie połączenia) z wyjątkiem pierwszego. Uniemożliwi to atak - klient nie wyśle żądania o transfer danych, jeżeli próba nawiązania połączenia dla danych została odrzucona, jednakże większość systemów operacyjnych nie obsługuje tego.
ochrona PASV ACK: odrzucenie połączenia dla danych, jeżeli w czasie wysłania przez klienta żądania o transfer danych istnieją dwa połączenia dla danych - metoda nie poskutkuje, gdy np. połączenie dla danych klienta zostało wcześniej zagubione.
Większość serwerów nie posiada jednak żadnej ochrony z opisanych powyżej.
4.4.2.Przejęcie połączenia na porcie klienta (PORT)
Polecenie PORT dotyczy utworzenia połączenia TCP przez serwer na porcie podanym przez klienta. Przejęcie polega na tym, iż napastnik podłącza się do portu klienta zanim zdąży zrobić to serwer. Podobnie jak w przypadku przejęcia połączenia PASV zagrożenie zależy od tego, jak zachowa się klient - jest to sytuacja odwrotna, czyli w przypadku wydania przez klienta komend RETR i LIST atakujący może zmienić dane przychodzące do klienta,
a w przypadku komendy STORE atakujący przechwyci wysłany przez klienta plik.
Ochrona przed tym atakiem jest trudniejsza:
atak PORT nie zależy od implementacji TCP klienta akceptującej więcej niż jedno połączenie, w czasie gdy serwer próbuje się połączyć, klient już czyta lub wysyła dane.
atakujący może stworzyć swoje własne połączenie FTP do tego samego serwera
i zmusić serwer do utworzenia połączenia na porcie docelowym klienta; dla właściwego klienta nie możliwe jest do rozróżnienia którym połączeniem wysyła on dane.
4.4.3 Kontrolowanie połączeń.
Napastnik może zażądać od serwera FTP stworzenia połączenia na jakimkolwiek numerze portu i adresie IP a także zmusić go do wysłania własnego pliku. To jest bardzo niebezpieczne ze względu na to, iż serwer może mieć autoryzację do łączenia się z pewnymi adresami. Atakujący może wykorzystać tę "dziurę", aby np. przedostać się za firewall, unikać sprawdzania jego adresu IP. Ponadto może również przejąć połączenia przechodzące przez wiele serwerów FTP, nawet jeśli żaden z nich nie ma specjalnych autoryzacji, wtedy bardzo trudno jest go wyśledzić. Aby uniknąć tego problemu wymaga się (RFC 959), aby serwery FTP tworzyły połączenia na lokalnym porcie 20 - połączenia na niskich numerach mają specjalne przywileje; jednak wiele serwerów umyślnie nie stosuje się do tego wymagania. Wszystkie serwery powinny odrzucać żądanie PORT z adresów innych niż IP klienta, oraz te które żądają połączenia na porcie wyższym od 1024.
4.5. Finger.
Każdy system bezpieczeństwa opiera się na przechowywaniu informacji i ich ochronie. Za pomocą haseł, kluczy szyfrujących itp. utrudnia się dostęp osób nieupoważnionych do zgromadzonych danych. Usługa finger obniża bezpieczeństwo systemu poprzez umożliwienie przeglądania wielu cennych z punktu widzenia potencjalnego atakującego informacji (np. nazwy użytkowników).
Polecenie finger @host.com oznacza odwołanie się do wszystkich użytkowników zalogowanych w danej chwili na zdalnym komputerze. Po tym wywołaniu możemy zdobyć loginy wszystkich użytkowników, którzy będą zalogowani na zdalnej maszynie.
Użycie polecenia finger -l login@host.com wyświetli nam informacje o konkretnym użytkowniku (stanowisko, numer telefonu, adres e-mail itp.) zapisane w pliku passwd. Dysponując listą użytkowników, ich adresami e-mail oraz zajmowanymi przez nich stanowiskami zdecydowanie łatwiej atakującemu podszyć się pod osobę która stała się celem ataku. Jeśli napastnik zna e-mail użytkownika może korzystając z www.altavista.com lub www.worldpages.com dowiedzieć się na przykład jakie jest imię i nazwisko potencjalnej ofiary - w chwili obecnej jest to zagrożenie głównie dla mieszkańców USA. W ten sposób atakujący pozna praktycznie wszystkie dane anonimowej do niedawna osoby.
Innym sposobem zdobycia informacji o użytkowniku (o ile oczywiście są one zapisane
w pliku passwd) jest posłużenie się jednym z poleceń : finger login lub grep login /etc/passwd.
Jeśli nie chcemy aby nasze dane zostały udostępnione innym możemy je zmienić za pomocą polecenia: chfn (jeżeli administrator go nie zablokował).
Jak widać usługa finger ma wpływ na bezpieczeństwo systemu. Powoduje ona w pewnych okolicznościach jego osłabienie, oraz naruszenie prywatności użytkowników. Prostym aczkolwiek skutecznym sposobem na zapobieganie wyżej wymienionym praktykom jest ograniczenie zdalnego dostępu do usługi finger.
5.Stosowane zabezpieczenia.
Oto najbardziej znane i najczęściej stosowane metody podnoszące bezpieczeństwo danych przesyłanych siecią:
5.1. IPSEC.
IPSEC jest częścią protokołu IPv6. Pracuje na poziomie IP i zabezpiecza wszystko, co korzysta z UDP lub TCP. Protokół IPSEC jest stosowany obecnie ponieważ:
wspiera model bezpieczeństwa obwodowego na firewallu lub routerze
znajduje się poniżej warstwy transportu dlatego jest niewidoczny dla aplikacji.
IPSEC został zaprojektowany przez Internet Engineering Task Force (IETF) z myślą
o zabezpieczaniu dowolnego systemu korzystającego z IP. Dokument RFC1825 opisuje mechanizmy bezpieczeństwa i usługi zapewniane przez ten protokół. Wewnątrz IPSEC używane są dwa nagłówki:
nagłówek autentyfikacyjny (AH - Authentification Header) - przeznaczony do zapewniania autentyfikacji źródła i integralności datagramu IP
dodatek enkapsulacji bezpieczeństwa (ESP - Encapsulating Security Payload) - stosowany do zapewnienia poufności.
Para komunikujących się komputerów dzieli wspólne zasoby bezpieczeństwa np. klucze kryptograficzne, algorytmy i związane z tym informacje, do których odwołuje się indeks parametrów bezpieczeństwa (SPI - Security Parameter's Index). Dane autentyfikacyjne są obliczane przy użyciu bezpiecznego algorytmu skrótu (MD5 lub SHA-1). Dzięki tym właściwościom napastnik nie ma obliczeniowych możliwości sfałszowania datagramu IP.
5.2. Firewall.
Jeżeli w systemie są przechowywane dane, których zniszczenie bądź ujawnienie wiązałoby się z poważnymi konsekwencjami, to taka podsieć powinna być izolowana i nie mieć fizycznego połączenia z siecią globalną. Gdy jednak jest to niemożliwe, należy zdecydować się na jeden z profesjonalnych systemów firewall.
Firewall (ang. "ściana ogniowa", ale właściwsze określenie to "zapora sieciowa") jest jednym ze sposobów na zabezpieczenie dostępu do jednej sieci z innej (niezaufanej). Firewall'e są instalowane między sieciami - na ogół na pomostach pomiędzy sieciami lokalnymi (LAN)
i rozległymi (WAN) - w celu wymuszenia kontroli dostępu między nimi. Niektóre nawet mogą całkowicie blokować ruch pakietów z zewnątrz - dopuszczając ewentualnie pakiety poczty elektronicznej - zezwalając jednakże na swobodne komunikowanie się użytkowników sieci ze światem zewnętrznym. Inną pożyteczną cechą firewall'i jest możliwość wykorzystania ich do rejestrowania i śledzenia wszelkich przychodzących pakietów (auditing). Stacje umieszczane w pierwszej linii obrony, określane również jako bastion host, są punktami, przez które przechodzą wszystkie informacje kierowane do sieci lokalnej i na zewnątrz. Dzięki takiemu scentralizowaniu dróg dostępu do sieci w jednym komputerze można łatwo zarządzać systemem ochrony.
Firewall to nie tylko oprogramowanie. Jest to dedykowany system komputerowy, którego architektura zależy od potrzeb i specyfiki chronionej sieci komputerowej. Nie musi to być odrębny komputer, lub router wyposażony w odpowiednie oprogramowanie, jednak rolę firewall'a pełni z reguły komputer przeznaczony wyłącznie do tego celu.
Rys. Sposób działania firewalla
5.2.1.Zakres działalności
Zadanie ochrony lokalnych sieci komputerowych wchodzących w skład rozległej sieci korporacyjnej spoczywa na grupie oprogramowania firewall. Służy ona do zabezpieczania lokalnej sieci prywatnej przed nielegalną działalnością użytkowników sieci publicznej oraz do ochrony przesyłanych w sieci publicznej informacji.
Podstawowy zakres działalności Firewall obejmuje:
filtracja (selekcja) pakietów;
aplikacja pośrednicząca (ang. application proxy) (identyfikacja, potwierdzenie tożsamości i kontrola uprawnień użytkowników, ...);
diagnostyka antywirusowa plików przesyłanych przez FTP;
nadzorowanie serwisu FTP, WWW i SMTP, kontrola apletów JAVA;
równoważenie obciążenia serwerów sieciowych (ang. load balancing);
ochrona przesyłanych informacji (tworzenie wirtualnych sieci prywatnych VPN);
monitorowanie działalności użytkowników i administratorów oraz rejestrowanie ważnych ze względów bezpieczeństwa zdarzeń.
5.2.2 Własności.
Systemy firewall chronią naszą sieć na kilku poziomach, a także umożliwiają wdrożenie zupełnie nowych własności:
Użytkownicy wewnętrzni mogą mieć dostęp do wszystkich (lub wybranych) usług Internet, natomiast użytkownicy zewnętrzni nie będą mieli dostępu do jakiegokolwiek zasobu naszej sieci lokalnej.
Usługi takie jak e-mail, ftp, WWW mogą być dozwolone dla ruchu zewnętrznego tylko w odniesieniu do specyficznego komputera. Daje to nam otwartość na świat jednocześnie chroniąc i ukrywając inne zasoby sieciowe.
Zaawansowane systemy identyfikacji i kontroli tożsamości są skuteczną metodą zabezpieczenia określonych zasobów przed nieupoważnionym dostępem zarówno w odniesieniu do użytkownika jak i aplikacji.
Wszystkie wydarzenia są szczegółowo monitorowane i rejestrowane, a niektóre z nich generują natychmiastowe alarmy.
Pakiety mogą podlegać badaniu przed ich pojawieniem się w systemie operacyjnym. Jeżeli nie spełniają zasad polityki bezpieczeństwa są natychmiast odrzucane.
5.2.3 Typy firewall'i.
Ze względu na warstwową architekturę stosu protokołów TCP/IP wyróżnia się trzy główne typy firewall'i: aplikacyjne, połączeniowe i filtrujące.
Firewall aplikacyjny (ang. application gateway) - umożliwia kontrolowany dostęp do określonych usług takich jak ftp, telnet, www wewnątrz chronionej podsieci poprzez odpowiedni program pośredniczący. Pozostały ruch jest zwykle blokowany.
Firewall połączeniowy (ang. circuit gateway) - zestawia w ściśle określony sposób połączenia TCP pomiędzy komputerami wewnątrz chronionej podsieci a resztą Internetu, nie kontrolując zawartości pakietów.
Firewall filtrujący (and. packet filtering gateway) - segreguje pakiety IP, TCP, ICMP, itp., przechodzące przez host według określonych reguł.
5.2.4 Strategie konfiguracji.
Planując zastosowanie firewall'a do odseparowania swojej podsieci należy zdefiniować politykę działania zapory. Istnieją dwie zasadnicze strategie definiowania sposobu działania firewall'a:
domyślne przepuszczanie,
domyślne blokowanie.
Domyślne przepuszczanie jest strategią polegającą na takim zdefiniowaniu warunków, aby spowodować blokowanie danych. Jeśli przychodzący pakiet nie będzie spełniał tych warunków zostanie on przepuszczony. Zaletą takiego podejścia do konfiguracji jest łatwość jej utworzenia, wadą natomiast jest to, że sieć pozostaje otwarta na większość usług i hostów (na ruch sieciowy, którego nie zablokowano). Dokładnie odwrotnie działa druga z wymienionych strategii działania firewall'a. Każdy przychodzący pakiet będzie blokowany, dopóki nie spełni warunków, które pozwolą mu przejść przez zaporę. Jest to o wiele trudniejszy sposób konfiguracji, ponieważ wymaga dokładnej wiedzy o sposobie działania protokołu TCP/IP. Obie te strategie będą działały dokładnie w ten sam sposób jeśli przewidzimy i wprowadzimy reguły dotyczące wszystkich rodzajów pakietów spotykanych
w sieci.
5.2.5.Dostępne rozwiązania firewall'i.
Istnieje szereg zarówno komercyjnych, jak i darmowych rozwiązań firewall'i. Chyba najłatwiej dostępnym jest firewall standardowo dołączany do jądra Linuxa. Wiele firm produkujących oprzyrządowanie sieciowe umożliwia skonfigurowanie swoich routerów jako firewall. Najprostszym firewall'em będzie zwykły komputer klasy PC wyposażony
w przynajmniej dwie karty sieciowe z zainstalowanym odpowiednim oprogramowaniem. Dwie karty sieciowe są niezbędne, aby móc fizycznie rozdzielić sieć zewnętrzną od wewnętrznej. Oznacza to że do jednej karty podłączamy sieć zewnętrzną (Internet) a do drugiej sieć wewnętrzną, którą chcemy chronić.
Z powszechnie dostępnych rozwiązań programowych firewall'i da się wyróżnić kilka popularniejszych rozwiązań:.
Sinus Firewall - oprogramowanie dla systemów Unix'owych (Linux),
TIS Firewall Toolkit - oprogramowanie dla platform BSD,
Gauntlet 5.5 for Windows NT - firewall dla Windows NT.
5.2.6 Podsumowanie.
Bardzo często zdarza się, że zainstalowanie zapory sieciowej obniża poziom bezpieczeństwa w sieci. Przyczyną takiego zjawiska jest najczęściej źle skonfigurowany firewall. Świadomość jego posiadania "zwalnia" jego użytkowników od czujności i cała sieć staje się bardziej zagrożona niż przed jego zainstalowaniem. W takich sytuacjach najczęściej dochodzi do włamań i innych naruszeń bezpieczeństwa sieciowego.
Planując politykę zabezpieczeń w firmie, zapory sieciowej nie można traktować jako leku na wszystkie problemy związane z bezpieczeństwem. Zaporę sieciową należy traktować jedynie jako uzupełnienie prowadzonej polityki bezpieczeństwa.
5.3.Protokoły szyfrowane.
5.3.1.SSH - Secure SHell (program do zdalnego logowania).
Pakiet SSH oferuje możliwość połączenia się z komputerami podłączonymi do sieci komputerowej, wykonania na nich zdalnie poleceń i kopiowania plików pomiędzy nimi. Co najważniejsze pakiet oferuje silną autoryzację komputerów i użytkowników dokonujących powyższych działań oraz zapewnia bezpieczną komunikację w sieci Internet, która ze swej definicji zbyt bezpieczna nie jest. Dodatkowo pakiet oferuje bezpieczne połączenia oparte na protokole X-Windows. Pakietem możemy zastąpić standardowe polecenia systemu operacyjnego: rlogin, rsh i rcp (poprzez polecenia ssh i scp).
SSH pozwala na kodowaną zdalną pracę na odległym hoście jak i kompresję przesyłanych danych co dodatkowo utrudnia ewentualną próbę rozkodowania np. hasła. Ponad to ssh pozwala na tunelowanie innych połączeń co pozwala na bezpieczną transmisję praktycznie dowolnych danych. Bardzo mocną stroną SSH jest autoryzacja, której podlega zarówno serwer jak i klient. SSH dostarcza nam trzy sposoby autoryzacji:
przez podanie użytkownika i jego hasła,
przez plik .rhosts (podobnie jak rsh),
przez publiczny klucz RSA (ta metoda jest najwygodniejsza i najbezpieczniejsza).
SSH kontra Telnet.
Jedną z usług dostępnych głównie w systemach UNIX-owych jest telnet. Usługa ta umożliwia pracę na serwerze w trybie tekstowym za pośrednictwem połączenia sieciowego.
Sposób realizacji tej usługi wyjaśnia powyższy rysunek. W przypadku połączenia tego typu każdy znak wpisywany z klawiatury terminala sieciowego przesyłany jest do serwera, serwer przyjmuje i przetwarza taki znak i wysyła go na ekran terminala sieciowego. W przypadku takiego połączenia znaki przesyłane są w sposób niekodowany, więc transmisja nie jest odporna na podsłuch.
Dużo bezpieczniejszą usługą jest SSH. Jest to usługa zbliżona do telnetu, z tym, że każdy znak wpisywany z klawiatury przed wysłaniem go do serwera jest kodowany. W serwerze jest maszyna dekodująca, znak jest odkodowywany, analizowany i wynik takiej operacji jest wysyłany na ekran terminala.
Rys. Przykład działania SSH
Połączenie to może być podsłuchane w takim samym stopniu, jak telnet, jednak w sieci transmisja jest kodowana, czyli osoba podsłuchująca nie będzie w stanie wykorzystać danych, które podsłucha.
F-Secure SSH.
Produkty z rodziny "F-Secure" wykorzystują protokół SSH, który zapewnia mechanizm kodowania danych w warstwie transportowej protokołu sieciowego. Protokół zapewnia autoryzację pomiędzy dwoma komputerami w sieci, autoryzację pomiędzy użytkownikami, wraz z ochroną prywatności i integralności ich danych.
Program F-Secure SSH UNIX Server zapewnia ochronę dla zdalnych połączeń dokonywanymi pomiędzy komputerami. Oprogramowanie dla serwera pracującego pod Unix'em zawiera narzędzia do administracji systemu, które dostarczono do ochrony przesyłania plików i backup'ów wykorzystując kodowanie przy pomocy klucza publicznego. Program F-Secure SSH Server pod Unix'a zapewnia bezpieczny proces logowania, transfer plików, pracę pod X11, połączenia w protokole TCP/IP poprzez niepewne sieci. Serwer czuwa nad autentycznością danych, automatycznie dokonuje kodowania sesji i integruje ochronę dla wszystkich przesyłanych danych. Do tego celu wykorzystuje się protokół RSA, służący do wymiany kluczy i sprawdzania autentyczności oraz symetryczne algorytmy, Blowfish lub 3DES do kodowania transferu danych.
Program F-Secure SSH client zapewnia bezpieczny proces logowania w niepewnej sieci. Program ssh w pełni zastępuje protokół telnet dodatkowo realizując sprawdzanie autentyczności, automatyczne kodowanie sesji i integrację metod ochrony zdefiniowanych
w protokole SSH. F-Secure SSH client dostarcza również technologię "TCP/IP port forwarding technology" przekierowywania niechronionych połączeń poprzez chroniony kanał. Wiele zdalnych usług, które wykorzystują protokół TCP/IP może być chronionych, między innymi: aplikacje użytkowników client-server, systemy baz danych, i usługi takie jak HTTP, TELNET, POP, SMTP. F-Secure SSH zapewnia automatyczne przesyłanie danych
w X11 Windowing System, głównie używanych na maszynach Unix'owych.
Zasada działania.
Każdy z komputerów na których jest zainstalowany pakiet SSH posiada parę kluczy - klucz prywatny, możliwy do odczytania jedynie przez administratora danego komputera oraz przez demona sshd, obsługującego usługę SSH i klucz publiczny dostępny dla wszystkich użytkowników sieci. Połączenie jest realizowane po stronie klienta przez program ssh
(F-Secure SSH client) , a po stronie serwera przez demona sshd (F-Secure SSH Server). Kiedy klient łączy się z demonem (serwerem) jako pierwsze dane otrzymuje klucz publiczny serwera. Klient porównuje ten klucz z zachowanym w wewnętrznej bazie danych,
z poprzednich połączeń (o ile wcześniej łączył się z tym serwerem, jeżeli nie to go tylko zapamiętuje w bazie danych). W przypadku stwierdzenia niezgodności kluczy połączenie jest zamykane. W przeciwnym przypadku klient generuje losową liczbę 256 bitową. Liczbę tę szyfruje przy pomocy swojego klucza prywatnego oraz klucza publicznego serwera i tak zakodowaną przesyła do serwera. Serwer przy pomocy swojego klucza prywatnego i klucza publicznego klienta rozkodowuje przesyłkę, czyli wygenerowaną przez klienta losowo liczbę. Liczba ta stanowi klucz używany do kodowania podczas dalszej komunikacji.
Po dokonaniu autoryzacji komputerów następuje autoryzacja użytkownika. Najpierw sprawdza się istnienie klucza publicznego klienta w globalnej bazie danych kluczy publicznych innych serwerów (plik /etc/ssh_known_hosts) lub w indywidualnej bazie danego użytkownika (plik ~/.ssh/known_hosts). W przypadku znalezienia tego klucza, demon zezwala na dokonanie autoryzacji na podstawie plików /etc/hosts.equiv, /etc/shosts.equiv, ~/.rhosts lub ~/.shosts. Pliki /etc/shosts.equiv i ~/.shosts stanowią odpowiedniki plików /etc/hosts.equiv oraz ~/.rhosts ale wyłącznie dla usługi ssh, a więc stanowią znacznie lepszą metodę autoryzacji. W przypadku niepowodzenia autoryzacji, sprawdzana jest obecność pliku ~/.ssh/authorized_keys zawierającego klucze publiczne danego użytkownika wygenerowane na innych stacjach. Plik ten może sobie stworzyć każdy użytkownik indywidualnie przy pomocy polecenia ssh-keygen na stacji klienta i poprzez przesłanie go na serwer. Następnie serwer próbuje dokonać autoryzacji użytkownika w sposób analogiczny do przeprowadzonej wcześniej autoryzacji komputerów, tzn. wymiany z klientem zakodowanej informacji przy pomocy pary kluczy: klucz publiczny użytkownika, klucz prywatny serwera i klucz prywatny użytkownika, klucz publiczny serwera. W przypadku niepowodzenia tej metody, demon pyta się użytkownika o jego hasło. Ponieważ transmisja jest kodowana, nie ma obawy
o podsłuchanie go przez niepowołaną osobę.
Opcje konfiguracji.
SSH to program umożliwiający zdalny dostęp do serwera, jednak w przeciwieństwie do zwykłego telneta, wyposażony jest w mechanizmy silnego uwierzytelniania oraz szyfrowania sesji wykorzystując bezpieczny klucz. Istnieją dwie wersje protokołu ssh oznaczone jako ssh1 oraz ssh2.
Kilka wartych uwagi opcji:
Port - numer poru wykorzystywanego przez ssh (domyślnie jest to 22),
ListenAdress - parametr ten określa adres IP interfejsu, który ssh będzie obsługiwać,
PermitRootLogin - określa, czy ssh umożliwia logowanie na konto administratora (wskazane wpisanie wartości "no" i używanie komendy su -l),
AllowHosts - określa hosty, z których można się logować (można używać listy stosując znaki wieloznaczne * i ?),
DenyHost - hosty, z których nie można się zalogować.
Istnieje jeszcze wiele ciekawych opcji a sam program jest czymś znacznie większym, niż tylko "bezpiecznym telnetem". Umożliwia również korzystanie z bezpiecznego ftp (sftp) oraz kopiowania plików (scp).
Warto wspomnieć także, iż komunikacja przy pomocy ssh może odbywać się bez podawania hasła. W tym celu należy utworzyć klucze szyfrowania: publiczny i prywatny, korzystając z programów ssh-keygen lub ssh-keygen2 w zależności od wersji ssh. Klucz publiczny należy umieścić na serwerze, z którym chcemy się łączyć. Jednak nieco bezpieczniej jest używać hasła, szczególnie, gdy nie zapominamy o jego zmianie raz na jakiś czas.
5.3.2. OpenSSH.
Pakiet OpenSSH realizuje szyfrowane połączenie pomiędzy dwoma komputerami, zapewniając bezpieczeństwo przesyłania danych, autoryzację połączeń i autentykacje. Jest napisany na następujące systemy operacyjne: Linux, Solaris, AIX, HPUX, NetBSD, Irix
i jeżeli istnieją odpowiednie łaty (patches) na inne Unix'y.
Główna różnica pomiędzy pakietem SSH, a pakietem OpenSSH jest następująca: OpenSSH jest darmowy, jego używanie nie jest ograniczonone restrykcyjnymi prawami patentowymi
i licencjami, przez co może z niego korzystać każdy.
OpenSSH jest rozwijany w oparciu o ostatnią nielicencjonowaną wersję SSH Tatu Ylonen'a. Wszystkie opatentowane algorytmy zawarte w pakiecie, zostały przeniesione do zewnętrznych bibliotek, wszystkie znane dziury w bezpieczeństwie zostały naprawione, rozbudowano pakiet o nowe cechy i dokonano wielu usprawnień oprogramowania.
OpenSSH zawiera w sobie między innymi następujące programy:
ssh - zastępuje rsh, rlogin i telnet, umożliwia zdalne kopiowanie plików - scp, które zastępuje rcp i ftp,
sshd - serwer usługi ssh (port 22),
ssh-add, dodaje informacje identyfikacyjne dla ssh-agent,
ssh-agent, służy do trzymania prywatnych kluczy autentykacyjnych,
ssh-keygen, generuje i zarządza kluczami autentykacyjnymi programu ssh.
5.3.3 SCP - Secure CoPy (program zdalnego kopiowania plików).
SCP kopiuje pliki pomiędzy hostami w sieci. Do transferu danych używa SSH
i wykorzystuje tą samą autoryzację oraz daje taki sam stopień bezpieczeństwa jak F-Secure SSH. W odróżnieniu od RCP, SCP prosi w razie potrzeby o podanie hasła uwierzytelniającego. Wszelkie nazwy pliku mogą zawierać specyfikacje hosta i użytkownika, określające, że plik jest kopiowany do/z tego hosta.
Użycie scp jest najłatwiejszym sposobem na skopiowanie pliku na odległy host. Komenda pozwalająca na skopiowanie pliku "filename" z katalogu lokalnego do katalogu "remote_dir" umieszczonego na hoście "host1":
scp local_dir/filename myname@host1:remote_dir
Kopiowanie w drugą stronę (z "remote_dir" do katalogu lokalnego) umożliwi komenda:
scp myname@host1:remote_dir/filename
Dozwolone jest również kopiowanie między dwoma zdalnymi hostami:
scp myname@host1:remote_dir/filename myname@host2:another_dir
Używanie scp wymaga znajomości dokładnego drzewa katalogów na odległej maszynie. Jest to niewątpliwie niedogodność, która wpływa na to, że w praktyce częściej wykorzystuje się sftp. Sftp używa ssh2 aby zapewnić możliwie bezpieczny transport plików. Są dwie zasadnicze cechy, dla których warto używać sftp zamiast ftp. Po pierwsze, hasła nie są przekazywane czystym tekstem, a po drugie dane są kodowane na czas transferu.
5.3.4.SSL - Secure Socket Layer (protokół bezpiecznej komunikacji)
SSL jest protokołem sieciowym używanym do bezpiecznej komunikacji między klientem a serwerem, stworzonym przez Netscape. SSL w założeniu jest podkładką pod istniejące protokoły, takie jak http, ftp, smtp, nntp i telnet. SSL zapewnia bezpieczne połączenie, które ma trzy podstawowe właściwości:
prywatność - połączenie jest szyfrowane,
autoryzację - klient i serwer określa swoją tożsamość,
integralność przesyłanych danych - przez sumy kontrolne.
Podstawowym celem protokołu SSL jest zapewnienie prywatności i wiarygodności pomiędzy dwoma aplikacjami komunikującymi się między sobą. Protokół składa się z dwóch warstw. Na najniższym poziomie, w górnej warstwie protokołu komunikacyjnego (np.: TCP), jest SSL Record Protocol. Służy on do upakowania (enkapsulacja) protokołów na wyższym poziomie. Dla przykładu jednym z upakowywujących protokołów jest SSL Handshake Protocol, pozwalający serwerowi i klientowi na wzajemną autentykację i negocjację algorytmu kodującego i kluczy kryptograficznych zanim protokół aplikacji wyśle lub odbierze pierwszy bajt lub daną. Ważną cechą protokołu SSL jest niezależność od protokołu aplikacji. Dla protokołów z wyższej warstwy SSL jest przeźroczysty.
Zastosowanie SSL w transakcjach finansowych
Protokół SSL jest jedną z metod zapewniających bezpieczeństwo w transakcjach finansowych.
Szyfrowanie
Ważną sprawą dla bezpieczeństwa zaszyfrowanych informacji jest długość używanych kluczy (np. 128 bitów). Im klucze są dłuższe, tym trudniej jest informacje odszyfrować. Powszechnie się uważa, że dla kluczy asymetrycznych: 512 - zbyt mało, 768 - stosunkowo bezpiecznie, 1024 - silne bezpieczeństwo, natomiast dla kluczy symetrycznych: 40 - zbyt mało, 56 - stosunkowo bezpiecznie, 128 - silne bezpieczeństwo.
Łamanie kluczy metodą brute force to sprawdzanie po kolei możliwych kluczy. Złamanie klucza 40 bitowego zajęło 3 godziny sieci komputerów. Złamanie klucza 56 bitowego (w algorytmie RC5) zajęło 250 dni w ramach jednego z projektów distributed.net. Eksperyment został przeprowadzony przez sieć komputerów, których moc obliczeniowa była równoważna 26 tysiącom komputerów klasy Pentium 200. Złamanie klucza 128 bitowego zajęłoby 1 bilion x 1 bilion lat (za pomocą pojedynczego superkomputera).
Powszechnie używa się takich skrótów dla szyfrowanych transmisji danych:
- SSL 128 bitów - szyfrowanie z użyciem klucza symetrycznego o długości 128 bitów,
- SSL 40 bitów - szyfrowanie z użyciem klucza symetrycznego o długości 40 bitów.
Certyfkat SSL
W pierwszej fazie nawiązywania połączenia SSL serwer i przeglądarka wymieniają tzw. certyfikaty. Certyfikat jest odpowiednikiem dokumentu tożsamości dla serwera WWW oraz dla klienta banku. Certyfikat zawiera następujące składniki:
nazwę właściciela certyfikatu,
nazwę wydawcy certyfikatu,
publiczny klucz właściciela dla algorytm asymetrycznego,
cyfrowy podpis wystawcy certyfikatu (np. Verisign),
okres ważności,
numer seryjny (tzw. fingerprint).
Certyfikaty są wydawane przez niezależne i zaufane urzędy - Certification Authorities (CA). Wydanie certyfikatu jest poprzedzone sprawdzeniem autentyczności danego wnioskodawcy. Certyfikaty SSL serwera zapewniają uwierzytelnienie serwera bankowego. Certfyfikaty SSL dla klientów zastosowano w Fortis Banku, certyfikaty te bank wydaje samodzielnie.
Polskie banki (np. Pekao, BPH, Fortis) w większości posiadają certyfikaty SSL/SGC 128 bitów, co oznacza że do korzystania z ich usług wystarczy standardowa zalecana przez bank przeglądarka. Certfyfikaty SSL 128 bitów posiada wiele sklepów poza Polską, jak również polski onet (np. adres https://ssl.onet.pl/login/login), co oznacza że do korzystania z tych serwisów bardzo zalecane jest posiadanie rozszerzonej przeglądarki z pełnym SSL 128.
Zastosowanie SSL do przesyłania poczty
Nowe możliwości gwarantują bezpieczeństwo i tajność korespondencji przesyłanej na nasz serwer i ściąganej z naszego serwera. Bezpieczne połączenie szyfrowane SSL, daje możliwość odbierania i wysyłania poczty w taki sposób, aby dane zawarte w poczcie nie mogły zostać przechwycone przez osoby niepowołane. Podczas wysyłania i odbierania poczty pomiędzy serwerem a komputerem użytkownika ustanawiane jest połączenie szyfrowane, którym dane są przesyłane.
5.4.Tunelowanie
5.4.1.Bezpieczeństwo
Protokoły TCP oraz IP nie posiadają żadnych mechanizmów ochrony danych ani autoryzacji połączeń. Ponieważ istnieją metody, aby podsłuchać transmisję realizowaną właśnie poprzez TCP/IP lub podszyć się pod dany serwer, należy zastosować takie rozwiązania, aby wyeliminować zagrożenia z tym związane lub chociaż w możliwie największym stopniu poprawić bezpieczeństwo i ochronę przesyłanych danych.
Jedną z ciekawych propozycji rozwiązania problemu zagrożenia podsłuchem (sniffing) jest zastosowanie tunelu (ang. tunelling) wykorzystując program SSH. Jest to dość proste,
a zarazem skuteczne rozwiązanie. Cała operacja polega na utworzeniu szyfrowanego połączenia tam, gdzie sieć jest najbardziej narażona na atak, czyli wtedy, gdy dane są przesyłane poprzez sieć, której nie możemy kontrolować (Internet). Samo łączenie odbywa się pomiędzy portami. Każdej z usług odpowiada inny port tak więc wystarczy np. do portu serwera, odpowiadającego usłudze pop3 (port 110) podłączyć tunel, do własnego. Ten proces nazywa się z angielska "port forwarding".
Ściślej całą operację tunelowania można opisać tak:
Dany program, zamiast połączyć się ze zdalnym serwerem, łączy się z lokalnym komputerem wykorzystując port, na którym czuwa ssh. Na tym odcinku połączenia dane są przesyłane w sposób jawny, lecz nie może być tutaj mowy o podsłuchiwaniu.
Program ssh, po przechwyceniu połączenia, przekazuje dane do demona ssh zainstalowanego i skonfigurowanego na odległym komputerze. Na tym odcinku dane są szyfrowane, a możliwość połączenia poddana autoryzacji, jaką oferuje ssh.
Ssh na serwerze, z którym jesteśmy połączeni, przekazuje dane do właściwego portu na tym właśnie serwerze (może je również przekazywać do innej maszyny, jeśli tak zostanie ustawiony tunel). Na tym odcinku dane nie są kodowane, lecz korzystanie z danej usługi poprzez tunel z wykorzystaniem ssh, zapewnia bezpieczeństwo.
5.4.2 VPN - Virtual Private Network (wirtualna sieć prywatna).
Wirtualna sieć prywatna to sieć kanałów dwukierunkowej transmisji danych, tworzonych na bazie sieci publicznej, otwieranych na czas transferu danych pomiędzy stacjami sieci prywatnych, poprzez które odbywa się przesyłanie informacji w formie zaszyfrowanej.
Wiele systemów ma możliwość konstrukcji VPN, opartych na metodach szyfrowania transmisji danych. Oznacza to, że można utworzyć swoją sieć prywatną na bazie publicznych mediów takich jak Internet. Pozwala to łatwo połączyć odległe oddziały firmy w jedną bezpieczną sieć. Niekiedy istnieje możliwość kodowania tylko niektórych typów usług (jak np. telnet) pozostawiając inne w normalnej postaci, co pozwala utrzymać efektywność całego systemu. Sieci lokalne korzystają jednak często z innych protokołów sieciowych niż sieci rozległe. Pojawia się więc problem z połączeniem sieci lokalnych w sieć wirtualną. Wtedy to wykorzystuje się tunelowanie. Jest to kolejny sposób użycia tunelowania poza podstawowym zastosowaniem jakim jest zapewnienie bezpieczeństwa.
Tunelowanie polega na wykorzystaniu istniejącej publicznej infrastruktury sieciowej do przesyłania danych z jednej prywatnej sieci do drugiej. Na tunelowanie składa się kilka procesów. Są to: enkapsulacja, transmisja oraz proces odwrotny do enkapsulacji. Ogólnie mówiąc, proces enkapsulacji polega na dopisaniu odpowiednich nagłówków do oryginalnych pakietów. Logiczna droga, jaką pokonują enkapsulowane pakiety, zwana jest tunelem. Po dotarciu do punktu przeznaczenia oryginalne ramki są "oczyszczane" z dodatkowego nagłówka i przekazywane do miejsca przeznaczenia.
Generalnie można stwierdzić, iż tunelowanie umożliwia przesyłanie pewnych usług sieciowych za pośrednictwem innych, często odmiennych usług sieci, pracujących w różnych standardach.
5.4.3.Odbiór poczty
Standardowo klient POP3 łączy się z przydzielonym dla tej usługi portem 110 serwera. Tunelując utworzymy szyfrowane połączenie między portem TCP na lokalnej maszynie
a portem serwera. W rezultacie zapis i odczyt z lokalnego portu będzie wykonywany na serwerze a wszystkie przesyłane dane zostaną zabezpieczone. W tym przypadku bezpieczne połączenie otrzymujemy tworząc tunel z portu lokalnego 110 do portu na serwerze:
# ssh -f -L 110:mailsvr:110 -C -c rc4 mailserv
a następnie wskazując klientowi POP3 nasz system jako serwer:
popmail localhost radzio
Argumenty podawane programowi ssh mają następujące znaczenie:
-f po autoryzacji ssh usunie się w tło,
-L pl:serwer:ps tworzy tunel z portu lokalnego pl do portu ps na serwerze serwer,
-C włącza kompresję,
-c szyfr wybór szyfru, rc4 jest najsłabszym za to najszybszym.
5.5 Monitorowanie (przeglądanie logów).
Czytanie logów systemowych nie należy do najprzyjemniejszych czynności, więc wygodnie jest utworzyć skrypty "wyłuskujące" interesujące informacje z konkretnych plików z katalogu /var/log/ lub korzystać z innych programów, które zajmują się analizą logów. Dzięki informacjom, które system zapisuje w /var/log/secure można się o dowiedzieć o tym, kto penetrował system lub zidentyfikować włamywacza. Oczywiste jest, że po skończeniu swojej roboty postara się on skasować zawartość wspomnianego pliku, dlatego też należy zadbać o to, by dane w nim zapisane były automatycznie przekazywane do innego pliku lub urządzenia.
Normalną aktywność systemu możemy sprawdzać korzystając z podstawowych poleceń systemu:
last - podaje informacje o tym, kiedy użytkownicy logowali się do systemu. Na tej podstawie możemy określić aktywność poszczególnych użytkowników,
who - podaje informacje o aktualnie zalogowanych w systemie użytkownikach,
ps - polecenie ps z argumentem -ax wyświetla pełną listę uruchomionych procesów działających w systemie.
W sieci dostępnych jest kilka programów, które wspomagają monitorowanie, poprawiają bezpieczeństwo lub otaczają system opieką. Warto skorzystać z takich narzędzi, jak np. pakiet Tripwire, którego działanie polega na odwzorowaniu systemu plików i przypisaniu do nich cyfrowych sygnatur, których później można użyć do wykrycia, czy nie zostały zamienione jakieś ważne pliki.
5