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