HI Jackin'!" - praca zbiorowa BuraQ tim'u. Michal Wojcik (michalw@irad.kul.lublin.pl) wrote: : Interesuje mnie problem hijackingu, czyli inaczej przejecia sesji : jakiejs maszyny unixowej. Interesuje mnie mechanizm takiego dzialania i : wszystkie szczegoly. Hijacking - ang. porywanie/przechwytywanie moze w tym przypadku miec kilka znaczen. Najbardziej znanym przykladem ``hijackingu'' jest wszystkim nam znany ``hijacking zamolotow''. Chyba wszyscy wiemy na jakiej zasadzie dzialaja porywacze. Przebieraja sie za stare babcie, kobiety w ciazy a takze za dzieci. Ma to za zadanie ukazac brodatych mezczyzn oraz przewaznie barczyste kobiety w innym swietle. Maja zostac nierozpoznani. Dziala to mniej wiecej tak. Niech celnik bedzie obiektem A a porywacz obiektem B. Obiekt A jest po to aby pilnowac samoloty odlatujace z pewnego bliskowschodniego kraju C przed obiektami typu B. (W rzeczywistosci typ A = administrator, a typ B = chaker, podczas, gdy typ C = serwer). Zalozmy ze typ B przebiera sie za staruszke skrzetnie ukrywajac twarz (ahh... ten czarny zarost .. pewnie sie nie poznaja ..), wchodzi do poczekalni gdzie mu ustepuja wszyscy miejsca, obiekt B traci zelazne nerwy, zaczyna popelniac bledy. Nie podpiera sie laska podczas chodzenia, mowi basem itp. itd. Zalozmy ze nasz obiekt typu B szczesliwie (?) doszedl do bramki gdzie oczekuje na niego obiekt typu A. I co sie dzieje? Na pytania typu: ``Dlaczego babcia ma taki duzy zarost'' odpowiada ``Bo od malego lecialam na piguly''(Hi DkA :). Obiekt A zaczyna myslec.. Mysli mysli mysli .. I do czego dochodzi? Ze to jakis fejk. Straszne nie? Tyle przygotowan , tyle strachu... I wszystko na nic .. Obiekt B zostaje zabrany na osobista kontrol. Obiekty typu A dostaja zawau na widok umiesnionej staruszki z zarostem na piersiach. Obietki typu A szaleja na widok przyrodzenia staruszki (ahhh Ci biali inaczej .....). Hijacking sie udal, babcia spokojnie udaje sie w kierunku obiektu C. Tam to sie bedzie dzialo .. ale to juz inna bajka ... =M.a.4.7= / BuraQ Team A teraz kilka slow nt. hijackingu od.. tego, no... jak mu tam.. a! mnie!: Jako hijacking mozemy tez rozumiec TCP Hijacking, czyli metode pozwalajaca na przejecie polaczenia TCP miedzy dwoma maszynami, z ktorych najczesciej przynajmniej jedna polozona jest w tej samej sieci lokalnej, co atakujacy. (dzieki czemu moze on odbierac pakiety adresowane do i wysylane z tejze maszyny). Innymi slowy, jest to przyklad spoofingu polaczonego ze sniffingiem (badz z jakakolwiek inna mozliwoscia ustalenia numerow SYN/ACK, ktore to numery - zawarte w naglowku protokolu TCP - sluza niezawodnej transmisji jak tez potwierdzeniu autentykacji zrodla przychodzacych pakietow). Termin TCP Hijacking nazywany jest generalnie TELNET Hijacking, mimo, ze odnosi sie do dowolnej aplikacji korzystajacej z protokolu TCP. (ten rodzaj spoofingu jest mozliwy takze np. w polaczeniach radiowych z wykorzystaniem protokolu AX25 jako drugiej warstwy modelu ISO OSI). Jesli oznaczymy atakujacego jako A, a maszyny miedzy ktorymi nawiazane jest polaczenie B i C (w tym przykladzie B jest w tej samej podsieci co A), to jesli A ustawi karte sieciowa w promiscuous mode, moze odbierac pakiety adresowane do innych maszyn w swojej podsieci, tym samym takze do B. W ten sposob moze on ustalic numery SYN/ACK polaczenia miedzy B i C, i jesli bedzie wysylal pakiety do maszyny C jako maszyna B korzystajac z tych numerow, maszyna C uzna je za wlasciwe, a wlasciwe polaczenie po chwili zostanie zdesynchronizowane. Atak ten jest bardzo przejzyscie opisany w dokumencie spoofit: http://main.succeed.net/~coder/spoofit/spoofit.html, polecam. Hijacking moze miec takie odniesienie lokalne - jako przyklad ataku sluzacego do przechwycenia konkretnej sesji uzytkownika (TTY Hijacking). W przypadku systemow z rodziny SystemV mozemy skorzystac ze STREAMS (strumieni) - przykladem takiego programu dla systemu SunOS jest TAP - jednak latwo wykrywalny przez program systemowy 'modstat'. W Phracku 50tym jeden z artykolow pokazal, jak cos takiego zrobic za pomoca ladowalnych modulow (na przykladzie Linuxa), natomiast w Phracku 51 opisana byla ciekawa metoda w jaki sposob zrobic to samo korzystajac z dostepu do pamieci za pomoca device'a /dev/kmem, (przy wykorzystaniu praw roota, badz grupy kmem [mem] w niektorych systemach). Korzystajac z tej metody mozliwe jest przechwytywanie deskryptorow plikow, grzebiac bezposrednio w tablicy deskryptorow pamieci kernela. Poza przechwytywaniem mozliwa jest takze ich duplikacja i takie tam ... Jeszcze inne przyklady Hijackingu moga dotyczyc innych protokolow sieciowych (np. w przypadku UDP sama forma ataku zalezna bedzie od zastosowanego rozwiazania w konkretnym programie. Przykladem tego jest NFS Hijacking). Galek Anonymousek / BuraQ team O czym jest ten tekst ? Linux jest wydajnym, w pełni 32 bitowym systemem, znakomicie działającym w sieciach. Zalet wynikających z możliwości korzystania np. z Internetu nie trzeba chyba nikomu tłumaczyć. Nie ma chyba jednak rozwiązań doskonałych, toteż użytkownik (a tym bardziej administrator systemu), powinni zdawać sobie sprawę z pewnych zagrożeń na jakie mogą natknąć się w momencie połączenia się ze światem. Dokument ten ma praktyczne zastosowanie w sieciach TCP/IP powinien więc znakomicie służyć Linuxom pracującym w Internecie. Poruszona tu zostanie większość zagadnień związanych z bezpieczeństwem systemu (na tyle na ile pozwala mi moja obecna wiedza). Możliwe jednak, że niektóre rzeczy wyjaśnię niezbyt precyzyjnie; niektóre sprawy zostaną wręcz tylko zasygnalizowane. Zajrzyj w razie potrzeby do odpowiednich dokumentacji po niezbędne szczegóły. -------------------------------------------------------------------------------- Zależy mi aby tekst ten był '100% bugs free'. Dlatego w przypadku wykrycia jakiegokolwiek błędu lub poważnej nieścisłości proszę o dokładną informację na ten temat. -------------------------------------------------------------------------------- Jakie podstawowe rzeczy muszę wiedzieć ? Nie trzeba wielkiej wiedzy. Przede wszystkim pamiętaj, że pojęcie 'połączen ze światem' oznacza zwykle (w przypadku domyślnie skonfigurowanych, niezabezpieczonych systemów) praktycznie nie kontrolowaną komunikację w obie strony. Tak więc o ile komputer A może połączyć się z dowolnym komputerem na globie, o tyle DOWOLNY komputer ma możliwość połączenia się z komputerem A. Wobec tego szansa, że komuś uda się włamać do komputera A jest bardzo duża. Dobrze jest też wiedzieć, że potencjalnym włamywaczem może być użytkownik, któremu sam założyłeś konto u siebie. Nie okaż się więc zbyt naiwnym adminem. -------------------------------------------------------------------------------- Jakie są rodzaje włamań ? Rodzaje włamań podzieliłem na dwie grupy: 1) poprzez wykorzystanie usług zdalnych udostępnianych przez serwer 2) poprzez przechwycenie hasła i wykorzystanie dziur w systemie od wewnątrz (czyli jako legalny użytkownik systemu). Ogólnie rzecz biorąc w pierwszym przypadku zakładam, że hacker nie posiada konta na serwerze, na który chce się włamać. Jest to dużo trudniejsze zadanie. Dlatego często stosuje się mieszane metody. Wyobraź sobie następującą przykładową sytuację. Załóżmy, że włamano się na komputer A z zewnątrz (np. wykorzystano fakt, że komputer obsługiwany był przez bardzo starą wersję sendmaila pełną błędów). Następnie LEGALNY użytkownik z komputera A loguje się na Twoja maszynę stosuąąc niekodowane połączenie (np. popularnym telnetem lub rloginem). Istnieje możliwość przechwycenia po drodze ciągu znaków, reprezentujących hasło użytkownika na TWOIM (!!!) systemie (hasło jest oczywiście wysyłane z komputera A). Teraz znając hasło tego użytkownika, hacker loguje się bez najmniejszych przeszkód na Twój serwer i... tak tak masz kłopoty jeśli nie zabezpieczyłeś serwera od środka. Zwróć uwagę, że nie ma w tym momencie znaczenia czy udostępniasz światu jakiekolwiek usługi. Zostaje oszukana procedura identyfikująca zaufanego użytkownika. -------------------------------------------------------------------------------- OK. Jak więc zabezpieczyć system ? 1) Na początku określ dokładnie jakie usługi mają być udostępniane z Twojego serwera. Domyślnie Linux udostępnia światu więcej usług niż jest to potrzebne w większości typowych zastosowań. Wszystkie zbędne usługi należy wyłączyć (czyli usunąć, lub zignorować znakiem # w pliku /etc/inetd.conf ). Następnie ponownie uruchom inetd z nową konfiguracją. 2) Programy obsługujące wybrane serwisy (tzw. demony) powinny zostać zaktualizowane. Powinieneś więc zaopatrzyć się w ich najnowsze wersje. Przed instalacją zawsze sprawdzaj sumy kontrolne PGP !!! Słynny jest przypadek podmienienia pakietu ssh na jednym z bardzo popularnych polskich serwerów FTP. Zapoznaj się dokładnie z odpowiednią dokumentacją do każdego serwisu. To umożliwi Ci poprawne skonfigurowanie. 3) Wszędzie gdzie to możliwe stosuj połączenia szyfrowane (SSH, SSL). Dzięki temu zminimalizujesz ryzyko np. przechwycenia haseł snifferem. Staraj się aby hasła Twoich użytkowników były dość skomplikowane oraz żeby często ulegały zmianie. Możliwe, że będziesz musiał to wytłumaczyć każdemu użytkownikowi z osobna na pewno się zyskasz na tym w przyszłości. Swego czasu sporo było włamań polegających na odgadnięciu trywialnego hasła któregoś z użytkowników. Nie są więc zalecane imiona żon, dzieci, ulubionych drużyn. Kombinacje polegające na odwróceniu kolejności liter w identyfikatorze użytkownika (np. root toor) czy też elitarne zastąpienie litery 'O' cyfrą '0' są naprawdę zbyt oklepane, aby łudzić się, że nikt tego nie wymyśli. Znając daną osobę łatwo jest znaleźć kilka(naście) wyrazów które będą kojarzyć się właśnie z nią. Dobre hasła zawierają inne dopuszczalne znaki niż litery i cyfry (np. nawiasy, wykrzyknik, znak dolara, plus, kropka itd.). Hasła powinny mieć odpowiednią długość, a użytkownik powinien mieć pewną wprawę przy ich wpisywaniu bardzo łatwo jest podpatrzeć hasło gdy ktoś jednym palcem wystukuje 'Słoneczko' lub 'Metallica' z szybkością 1 znaku na pół minuty. 4) Zaopatrz się w programy służące do dostarczania dodatkowych informacj o połączeniach z Twoim komputerem. Przydatne tu będą tcp wrappers oraz pakiet iplogger. Odpowiednio skonfigurowane tcp wrappers umożliwią na serwowanie wybranych usług dla wybranych komputerów/sieci (dzięki plikom /etc/hosts.allow i /etc/hosts.deny) zaś programy z pakietu iplogger będą Cię informować o wszelkich próbach połączeń z zewnątrz (pomaga to w wykryciu portscanningu).< 5) Aby wyeliminować denerwujące informacje o próbach połączeń z setkami portów Twojej maszyny, zapoznaj się z programem ipfwadm. Prosty IP-Firewall powinien skutecznie zlikwidować problem zbędnych i/lub niemile widzianych połączeń. Jeśli twój Linux jest bramką na świat dla jakiejś lokalnej sieci na pewno skorzystasz z możliwości jakie daje IP-Masquerading. 6) Z plików w obrębie systemu usuń bity SetUserID (SUID) wszędzie tam gdzie są one zbędne. 99.9 % włamań od srodka' w Linuxie polega na wykorzystaniu takich właśnie plików w połączeniu z metodami wywołania przeładowania bufora lub stosu. 7) Stosuj sumy kontrolne plików systemowych służy do tego kilka programó (np. tripwire). Dzięki temu systematycznie będziesz otrzymywał raporty na temat stanu plików w systemie, zostaniesz także zaalarmowany o każdej zmianie. Wyeliminujesz w ten sposób ryzyko podmienienia jakiegokolwiek pliku. Często jest tak, że hacker po włamaniu stara się zapewnić sobie stały dostęp do wszystkich zasobów systemu. Najłatwiej jest osiągnąć to poprzez zamianę któregoś z programów odpowiedzialnych za komunikację zewnętrzną. Oprócz wykonywania standardowych czynności program taki zawiera ukryte tylne drzwi, um w dowolnej chwili. Inni użytkownicy nie zauważą żadnej zmiany w działaniu maszyny. 8) Uświadom swoich użytkowników, którzy często nie wiedzą co czynią ;) Pożyczanie kont, wymiana haseł itd. nie powinny mieć miejsca. Inaczej idea identyfikacji użytkownika w ten sposób (system haseł) stanie się bezwartościowa. 9) Stosując nietypowe konfiguracje, lub przechowując istotne pliki systemowe w nietypowych miejscach zaskoczysz hackerów-rutyniarzy, którzy próbując włamać się do Twojego systemu potraktują go jako kolejny źle zabezpieczony i niedopilnowany Linuxik, który wygląda jak setki innych. -------------------------------------------------------------------------------- Parę słów na zakończenie Nie jestem guru od bezpieczeństwa sieci, nie ma też 100% pewnej metody na zabezpieczenie serwera (to trochę tak jak z zabezpieczeniem samochodu przed kradzieżą). W związku z tym nie mogę Ci zagwarantować, że po przeczytaniu tego tekstu Twój Linux zamieni się w fortecę nie do zdobycia. Przed prawdziwymi hackerami nie ma chyba skutecznej metody obrony. Oni posiadają jednak swoją etykietę i zwykle nie sprawiają zbyt wielkich kłopotów. Po zastosowaniu się do powyższych rad możesz być pewien, że odpadnie Ci problem pilnowania systemu przed pseudo-hackerami. Są to ludzie, którzy po usłyszeniu o jakiejś nowej (wg nich) metodzie włamania natychmiast próbują wykorzystać ją na Linuxach w całym świecie. Nie wiedzą jakie ślady zostawiają, na czym polega sposób włamania liczy się świetna zabawa czyli utrudnianie pracy innym oraz możliwość powiedzenia znajomym 'jestem the best bo włamałem się na X systemów' (sam znam swoistych rekordzistów w tej dziedzinie). Najgorsze jest to, że czasem uda się takiemu włamać gdzieś i pod pojęciem 'świetnej zabawy' kryje się na przykład skasowanie całego systemu itp. Chodzi tu chyba o popisanie się przed innymi 'chakerami' tego typu - w końcu zrobienie komus 'rm -rf /' to zapewne najbardziej spektakularne widowisko jakie kiedykolwiek widzieli. Chciałbym aby ten tekst przydatny był dla innych administratorów, którzy (mam nadzieję) nie mieli jeszcze takich problemów