środa, 19 września 2012

A SECURITY'S TESTING OF NETWORKS VIA A CONNECTION OF VIRTUAL MACHINES

Na moim blogu była już notka o łączeniu ssh maszyn wirtualnych ze sobą, jednakże zniknęła z powodu problemów z Picasów i składowaniem obrazów.


Zabierałam się do napisania tego artykułu od początku wakacji, ale zawsze było coś ciekawszego do roboty, do napisania, do wklepania w shell. Na tę chwilę uważam, że to były tylko moje babskie wymówki, aby usprawiedliwić przed samą sobą personalne lenistwo :) Tak naprawdę to ciężko było mi się zebrać do odbudowania mojej sieci maszyn wirtualnych, którą stworzyłam sobie kiedyś na potrzeby seminarium z Rozległych Sieci Komputerowych. Prawda jest taka, że postawienie serwera na Ubuntu, nawet na stacjach iluzorycznych jest dla mnie, jako osoby fanatycznie podchodzącej do tematu bezpieczeństwa i konserwatystki linuxowej grzechem śmiertelnym i niewybaczalnym. Ubuntu na desktop - jak najbardziej, ale na serwer niestety nie. Dlaczego? Z prostej przyczyny! Jako dogmatyczka systemów unix/linux od ładnych dziewięciu lat wyznaje zasadę: "Są trzy słuszne distro: Slackware, Debian i Gentoo, a Ubuntu znaczy w wolnym tłumaczeniu staro-afrykańskim, nie umiem  skonfigurować Debiana". Tak więc, uznajmy stosując matematyczne porównania, że Ubuntu jest taką pochodną po Debianie, a im pochodna wyższego rzędu tym bardziej limesuje do zera. Odstawiając na bok cały anturaż dowcipów i mojego specyficznego poczucia humoru na system serwerowy wyznaje tylko dystrybucje nietrywialne w swojej konfiguracji i obsłudze, ponieważ sam fakt, iż system wymaga od dysponenta wiedzy sprawia, iż jest to jakiś sposób na ochronę przed nieautoryzowanym dostępem, bynajmniej przed osobami ze zbyt małym poziomem umiejętności, które w swej niekończącej się ambicji mogą narobić problemów. 
Wracając do kompilacji Gentoo, zmobilizował mnie do tego dobry kolega z roku, który to stawia je właśnie na VMWare u siebie (zresztą za moją namową i obietnicą dużego "przelewu", jak mu się uda ;] ). Ostatnio dość często jego problemy i pytania obligują mnie do dodatkowej pracy.


Połączenie sieciowe, które planuje zrobić korzystając z maszyn wirtualnych przy odpowiedniej konfiguracji iptables na pewno implikuje łączeniem ssh, więc myślę, że niektórzy będą zadowoleni.
Zadaniem, jaki sobie postawiłam, była wirtualizacja malutkiej sieci pokazowej na seminarium z Rozległych Sieci Komputerowych. Miałam zaprezentować konfigurację routera opartego o system Linux, a noszenie kilku komputerów ze sobą przy moich gabarytach absolutnie nie wchodziło w rachubę. Pokazywanie na sucho komend, na moim laptopie korzystając z dokumentów PDF też nie było rozwiązaniem, które by mnie zadowalało. Prawda jest taka, że człowiek, jak nie zobaczy na własne oczy to się nie nauczy i nie uwierzy, a cel ewidentnie był edukacyjny. Prawdą i wnioskiem z przeprowadzonego przeze mnie eksperymentu jest fakt, iż takowe połączenia można zdecydowanie wykorzystać w edukacji sieciowej młodego pokolenia, ale o zaletach za chwilę. 

W sieci jest dużo tutoriali o konfiguracji maszyn, ale nie natrafiłam (może to braku odpowiednich zapytać w google, może z faktu, że nikt się tym wcześniej nie interesował) na listę kroków ilustrującą tworzenie takiej sieci, jak przedstawiona jest na niżej zamieszczonym schemacie. 


1. POŁĄCZENIE MASZYN W SIEĆ

Tak więc zbudowana przeze mnie sieć składa się z trzech pokazowych maszyn. Nie są to może nowoczesne systemy, ale ilość pamięci operacyjnej w jaką zaopatrzony jest mój malutki Lenovo T61 nie poraża, więc na OS do testów wybrałam Gentoo Linux, Ubuntu Linux i Windows XP.






Rys. 1. Schemat sieci maszyn wirtualnych 


Sama instalacja systemów na wybranej aplikacji do wirtualizacji jest trywialna. Ogranicza się do zamontowania obrazów ISO i odpowiedniej konfiguracji platformy (na te systemy wystarczą ustawienie defaultowe, dopiero przy OSX lub Windows 7/8 zaczynają się schody, Windows 8 nie ruszyło u mnie na VB). Pominę część dotyczącą przygotowania samych maszyn z uwagi na to, że solucji do instalacji konkretnych systemów w sieci jest multum i stratą czasu byłoby powielanie tego, gdzie ciężko było by to zrobić lepiej (mam to na myśli szczególnie Gentoo do którego handbook moim skromnym zdaniem jest ewenementem).
Ciekawe natomiast jest połączenie ich ze sobą tak, aby imitowały prawdziwą sieć. Chcemy, aby tylko serwer, czyli maszyna z Gentoo łączył się z naszym komputerem tak, jakoby ten był dostawcą ISP. Tylko ta maszyna będzie posiadała kartę pozorną połączoną przez NAT. Każda kolejna z dwóch będzie miała tylko interfejsy bridge'owane wyłącznie do maszyny z Gentoo. To od niej będzie zależało połączenie reszty maszyn z siecią, tak jakby była realnym serwerem.

2. KONFIGURACJA SYSTEMÓW OPERACYJNYCH DO PRACY W WIRTUALNEJ SIECI

Zadanie zatem na początek wydaje się jasno określone. Musimy zaopatrzyć nasze maszyny w bridge i odpowiednio je skonfigurować.
Będą nam do tego potrzebne narzędzia umożliwiające wirtualizację kart sieciowych i tworzenie dodatkowych interfejsów, dzięki którym zepniemy maszyny w sieć.
Na komputerze "matce" musimy zainstalować odpowiednie narzędzia. Robimy korzystając z Centrum Oprogramowania Ubuntu (w moim przypadku) lub poprzez terminal. Teraz mamy już potrzebną nam podwalinę, aby połączyć maszyny ze sobą. Musimy tylko odpowiednio dobrać adresowanie.

$ sudo aptitude install bridge-utils

Korzystać będziemy z udogodnień tunctl i brctl (oczywiście z poziomu konta root)

$ tunctl -t tap0 
$ chmod 666 /dev/net/tun 
$ brctl addbr br0
brctl addif br0 eth0
$ brctl addif br0 tap0
$ ifconfig tap0 NUMER_IP up


Rys. 2. Konfiguracja interfejsów komputera "matki"

Teraz zostaje tylko skonfigurować odpowiednio interfejsy na maszynach i udostępnić połączenie internetowe. 

GENTOO: 10.0.0.1
WINDOWS: 10.0.0.2
UBUNTU: 10.0.0.3
MATKA: 10.0.0.7 (brama dla GENTOO)




Rys. 3. Przygotowane maszyny wirtualne na VirtualBox pod Ubuntu Linux 12.10

3. WYKORZYSTANIE SIECI WIRTUALNEJ DO TESTÓW BEZPIECZEŃSTWA

Tak, jak widać na rys. 1 nasz wirtualny serwer stoi na Gentoo, a wszystkie alokowane połączenia  budują sieć. Do sprawdzenie działania tego rozwiązania przeprowadziłam kilka testów. Można by na pierwszy rzut oka stwierdzić, że sieć ta zbudowana jest tak, że maszyny połączone są równolegle do ISP i dlatego są w stanie generować ruch sieciowy, jednakże nie jest to prawdą. Połączenie ustanowione jest dokładnie tak, jak pokazuje schemat i jesteśmy w stanie łączyć się poprzez SSH, pingować, a także analizować ruch sieciowy, co okazuje się bardzo przydatne. W momencie odpalenia na routerze Gentoo ettercap tudzież dsniffa nawet udało mi się przechwycić ruch idący z maszyny połączonej wirtualnie po LAN z routerem, a każda z maszyn iluzorycznie LANowskich nie jest w stanie uzyskać połączenia ISP, jeżeli maszyna Gentoo nie jest uruchomiona. Dowodzi to jednoznacznie, że sieć działa tak, jak zakładałam i idealnie nadaje się do celów badawczych i edukacyjnych.



Rys. 4. Maszyna Windows bez włączonej maszyny rutujacej Gentoo. Jak widać nie otrzymuje adresu i nie jest w stanie połączyć się z ISP.



Rys. 5. Maszyna Windows i maszyna Gentoo działają równocześnie. Bez problemu otrzymuje adres od serwera DHCP Gentoo i dostaje Internet.

Mając do dyspozycji taką sieć, tak jak wcześniej wspomniałam możemy testować konfiguracje i stricte sieciowe oprogramowanie do analizy ruchu. Udało mi się odpalić na tak postawionym schemacie kilka snifferów po stronie routera Gentoo i okazało się, że ruch sieciowy jest bez problemowo przez tę maszynę przechwytywany. 


Rys. 5. Podsłuch sieci bez ruchu


Wszystko działa dokładnie tak, jak wyglądałoby to, jakbyśmy podłączyli ze sobą trzy komputery, ale z uwagi na wirtualizację ograniczyliśmy miejsce i ilość sprzętu, jaki potrzebujemy do takiego zabiegu. Bez problemu możemy dzięki takiemu rozwiązaniu testować zabezpieczenia sieciowe, przeprowadzać personalne włamania, badać zachowanie oprogramowań i aplikacje sieciowych. 


Rys. 6. Podsłuch sieci w trakcie wysyłania zapytań do strony MSN

Jak możemy zauważyć na screenie powyżej jesteśmy w stanie podglądać ruch sieciowy między maszynami. Możemy tę właściwośc wykorzystać do testowania konfiguracji firewalla, korzystając z udogodnień, jakie daje nam nmap. Jedynym, co nas w tym momencie ogranicza jest ilość pamięci operacyjnej i nasza wyobraźnia.


Rys. 7. Konfiguracja maszyn wirtualnych


Rys.8. Pingi między maszynami z uruchomionym Gentoo

4. WNIOSKI

Myślę, że takie budowanie sieci iluzorycznych jest zagadnieniem niesamowicie wartościowym i wymaga więcej uwagi, choćby ze względu na aspekt rozwoju edukacyjnego, badawczego i testowego jaki za sobą pociąga. Dzięki odpowiedniemu wirtualizowaniu możemy ograniczyć czas, fundusze i miejsce w czasie naszych testów, a także dośc szybko przeprowadzić formę pokazową otrzymanych wyników (tak, jak ja robiłam to w trakcie seminarium na uczelni).
Mam nadzieję, ze notka Wam się podoba. Następnym razem, jak mój sprzęt będzie posiadał już większą ilość pamięci operacyjnej postaram się pokazać Wam obszerniejszy tutorial z konfiguracji takiej sieci (na razie jest to niemożliwe, gdyż przy uruchomieniu trzech, czterech maszyn jednoczenie system nie daje rady i screeny już nie chcą się robić, o filmiku ze zrzutu ekranowego lub nawet nie myślę).



2 komentarze:

  1. A SMALL NETWORK, THAT USes VIRTUAL MACHINES chyba raczej ;)

    OdpowiedzUsuń
    Odpowiedzi
    1. Może, jak napisalam moj angielski jest jaki jest. Karma! :)

      Usuń

Thx a lot :*

REGULAT GUESTS