Identifikacija tujih račualnikov, bred predhodnega poznavanja le-teh


Pasivno odvzemanje prstnih odtisov


Lance Spitzner
Zadnjič spremenjeno: 24.05.2000


Eden največjih izzivov pri ukvarjanju z računalniško varnostjo je spoznavanje nepridipravov. Da bi razumeli nevarnosti in pretnje ter da bi se bolje zaščitili proti njim, Poznajte Svojega Sovražnika. Pasivno odvzemanje prstnih odtisov je metoda, s katero se lahko več naučimo o sovražnikih, ne da bi jih poznali. Natančneje - ugotovite lahko, kakšen operacijski sistem sovražnik uporablja ter še veliko drugih podrobnosti o njem z ničemer drugim kot "vohljanjem" sledi. Čeprav metoda ni 100% zanesljiva, lahko dobite presenetljivo dobre rezultate. Craig Smith je razvil Orodje za pojmovno dokazovanje, ki temelji na konceptih opisanih v tem dokumentu. Prav tako je skupina Subterrain razvila siphon, orodje za pasivno poizvedovanje po odprtih vratih ter operacijskem sistemu na računalnikih.


Odvzemanje prstnih odtisov


Kot je že v navadi, se identifikacija operacijskega sistema vrši s programi kot so queso ali nmap. Ta orodja operirajo na principu, da ima IP stack vsakega operacijskega sistema edinstvene značilnosti. Natančneje, vsak operacijski sistem se drugače odzove na vrsto spačenih paketkov. Vse kar je potrebno narediti je, da zgradimo bazo podatkov, v kateri je zapisano, kako se vsak operacijski sistem odzove na različne paketke. Nato pa če hočemo izvedeti vrsto operacijskega sistema na določenem računalniku, mu samo pošljemo vrsto teh spačenih paketkov, ugotovimo kako se odzove nanje, ter primerjamo rezultate z že prej omenjeno bazo podatkov. Fyodorjev nmap je dobra izbira, če se odločimo za to metodologijo. Prav tako je napisal dokument, ki natančno opisuje delo s tem programom.

Pasivno odvzemanje prstnih odtisov temelji na podobnem konceptu, vendar v malce drugačni izvedbi. Temelji na "vohljaških sledeh" iz oddaljenega računalnika. Namesto da aktivno povprašamo oddaljeni sistem, samo "ujamemo" paketke, ki jih oddaljeni računalnik pošlje nam. Glede na te sledi lahko ugotovimo vrsto operacijskega sistema, ki teče na oddaljenem računalniku. Prav tako kot aktivno odvzemanje prstnih odtisov, pasivno temelji na principu, da ima IP stack vsakega operacijskega sistema svojevrstne značilnosti. Z analizo teh sledi in identifikacijo razlik, lahko ugotovimo vrsto operacijskega sistema na oddaljenem računalniku.


Podpis


Ogledali si bomo 4 področja, glede na katera bomo ugotavljali vrsto operacijskega sistema (lahko so uporabljeni tudi drugi podpisi). Ti podpisi so:



Z analizo teh faktorjev, lahko ugotovite vrsto operacijskega sistema. Ta način ni 100% zanesljiv in deluje z nekaterimi operacijskimi sistemi bolje, z nekaterimi slabše. Z samo enim podpisom ne moremo zanesljivo določiti vrsto operacijskega sistema, z primerjanjem večih podpisov in z združevanjem informacij o njih pa lahko povečamo zanesljivost indentifikacije oddaljenega sistema. Za lažje razumevanje bom navedel primer. Spodaj je vohljačeva sled, ki smo jo ujeli, ko je nek oddaljeni sistem poslal paketek. Ta sistem me je napadel z mountd exploitom, zato bi se rad kaj več naučil o njem. Nočem uporabiti orodja finger ali nmap na tem sistemu, saj bi se tako lahko izdal. Zato raje proučujem informacije pasivno. Ta podpis je bil ujet z uporabo snort-a, mojega najljubšega vohljača.

04/20-21:41:48.129662 129.142.224.3:659 -> 172.16.1.107:604
TCP TTL:45 TOS:0x0 ID:56257
***F**A* Seq: 0x9DD90553 Ack: 0xE3C65D7 Win: 0x7D78

Glede na naše 4 kriterije, lahko ugotovimo naslednje:



Nato te informacije primerjamo s tistimi v bazi podpisov. Najprej pogledamo TTL, ki ga je uporabil oddaljeni računalnik. Iz naše sledi lahko vidimo, da je ima TTL vrednost 45. To najverjetneje pomeni, da je paketek naredil 19 "skokov" (hops) da je prišel do nas, tako da je bil začetni TTL nastavljen na 64. Glede na ta TTL izgleda, da je bil paketek poslan iz Linux ali FreeBSD računalnika (vendar mora biti več podpisov dodanih v bazo podpisov). Ta TTL je potrjen če uporabimo traceroute servis do oddaljenega računalnika. Če vas moti to, da bi potem oddaljeni računalnik opazil, da ste ga "traceroute-ali", lahko TTL ročno nastavite (privzeto je nastavljen na 30 skokov) tako, da bo vrednost za 1 ali 2 manjša od 19. V tej primeru bi torej uporabili paketke, ki bi imeli TTL 18 (ali 17) in bi tako naredili 18 (oz. 17) skokov (traceroute -m 18). To nam da nekaj informacij (vključno s internetnim ponudnikom, na katerega je priklopljen oddaljeni računalnik), brez da bi se v resnici "dotikali" oddaljenega računalnika. Za več informacij o TTL-ju si oglejte raziskavo o privzetih TTL vrednostih.

Naslednji korak je primerjanje velikosti okna (Window Size). Ugotovil sem, da je Window Size eno izmed efektivnih orodij zato, ker lahko vidimo kaksna velikost okna je bila uporabljena in kako pogosto se je spreminjala. V zgornjem podpisu vidimo, da je vrednost 0x7D78 - privzeta Window Size vrednost za Linux sisteme. Linux, FreeBSD in Solaris navadno uporabljajo vedno enak Window Size skozi celo sejo (kot je bila naša). Cisco usmerjevalniki (vsaj moj 2514) in Microsoft Windows/NT velikosti oken pa se konstantno spreminjajo. Ugotovil sem, da je Window Size bolj točen, če ga merimo po začetnem tro-stranskem rokovanju (zaradi počasnega začetka TCP). Za več informacij o Window Size-ju si oglejte Stevens-ovo knjigo "TCP/IP Illustrated, Volume 1", poglavje 20.

Večina sistemov uporablja paketke z nastavljenim DF bitom. Vseeno pa lahko na ta način identificiramo nekaj sistemov, ki DF bita ne uporabljajo (kot sta SCO ali OpenBSD). Po nadaljnjem testiranju, sem spoznal, da je tudi TOS omejene vrednosti. Izgleda, da temelji bolj na posameznih sejah kot na operacijskem sistemu. Z drugimi besedami: TOS-a ne določa operacijski sistem, ampak protokol, ki je uporabljen. TOS gotovo potrebuje še nekaj testiranja. Glede na gornje informacije, lahko predvsem TTL in Window Size primerjate z bazo podpisov in ugotovite operacijski sistem (v našem primeru Linux z jedrom 2.2.x).

Vedite, da prav tako kot aktivno odvzemanje prstnih odtisov ima tudi pasivno določene omejitve. Prvo, aplikacije, ki izgradijo svoje lastne paketke (kot nmap, hunt, teardrop ipd.) ne bodo uporabili enakih podpisov kot operacijski sistem. Drugič, relativno preprosto lahko oddaljeni računalnik po svoje nastavi TTL, Window Size, DF ali TOS vrednost za paketke. Primer spreminjanja TTL vrednosti:

Solaris: ndd -set /dev/ip ip_def_ttl 'number'
Linux: echo 'number' > /proc/sys/net/ipv4/ip_default_ttl
NT: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

S kombiniranjem različnih paketkov ter podpisov, v tem primeru TTL in Window Size, se lahko vsaj približate resnici o oddaljenem operacijskem sistemu.


Drugi podpisi in uporabe


Kot sem že povedal, nismo omejeni samo na 4 podpise. Obstaja še veliko drugih področij, ki jih lahko izsledimo, kot začetne inicializacijske vrednosti, IP identifikacijske številke, TCP ali IP opcije. Na primer, Cisco usmerjevalniki navadno začnejo z IP Identifikacijsko vrednostjo 0 namesto da jih nakjlučno določijo. Prav tako lahko uporabimo ICMP promet. Max Vision opisuje uporabo tipa ICMP prometa ali TCP opcij za identifikacijo oddaljenega računalnika. Na primer, Microsoftov ICMP REQUEST vsebuje abecedo, Solaris-ov ali Linux-ov ICMP REQUEST pa vsebuje števila in simbole. Pri TCP opcijah, je opcija "Selective Acknowledgement" (SackOK) pogosto uporabljena na Windows in Linux sistemih, ampak ne na FreeBSD ali Solaris. Za "Maximum Segment Size" (MSS) večina operacijskih sistemov uporablja vrednost 1460, Novell pa navadno uporablja 1368, nekatere FreeBSD variante pa lahko uporabljajo MSS vrednost 512. Naslednji vir podpisov je "packet state" (kakšen tip paketka je uporabljen). Če citiram Fyodor-a: "Na primer, začetni SYN REQUEST je lahko zlati rudnik (kot tudi odgovor nanj). RST paketki imajo tudi nekaj zanimivih možnosti, ki jih lahko uporabimo za identifikacijo." Ti in drugi podpisi so lahko kombinirani s podpisi naštetimi zgoraj za pomoč pri identifikaciji oddaljenih operacijskih sistemov.

Pasivno odvzemanje prstnih odtisov je lahko uporabljeno za številne druge namene. Lahko ga uporabijo nepridipravi kot "nevidno" odvzemanje prstnih odtisov. Na prmer, da bi ugotovili operacijski sistem "potencialne tarče", kot recimo web strežnik, mora samo nekdo zahtevati web stran od strežnika in analizirati vohjlačeve sledi. Tako obidemo potrebo po uporabi aktivnih orodij, ki so lahko zaznana z uporabi različnih IDS (Intrusion Detection System) sistemov. Prav tako je lahko passivno vzemanje prstnih odtisov uporabljeno za identifikacijo oddaljenih proxy požarnih zidov. Ker proxy požarni zidovi ponovno vzpostavijo povezavo za kliente, lahko identificiramo proxy firewall z uporabo baze podpisov, ki smo jo opisali zgoraj. Organizacije lahko uporabljajo pasivno odvzemanje prstnih odtisov za identifikacijo "sleparskih" sistemov na svojih omrežjih. To so sistemi, ki niso pooblaščeni za uporabo tega omrežja. Na primer Microsoft ali Sun trgovina lahko hitro identificira "sleparske" Linux ali FreeBSD sisteme, ki se skrivnostno pojavijo na njihovem omrežju. Pasivno odvzemanje prstnih odtisov je lahko uporabljeno za hitro inventuro operacijskih sistemov v organizaciji brez dotikanja kateregakoli sistema ali omrežja. Za posameznike, ki ocenjujejo varnost posameznih sistemov, lahko na ta način hitro ugotovijo kritične sisteme na omrežju (kot recimo Unisys Mainframe).


Gradnja baze podatkov


Baza podatkov je bila zgrajena s testiranjem vrste sistemov s telnet, FTP, HTTP in SSH protokolom. Več testiranja je potrebnega z drugimi protokoli, sejami in sistemi. Če imate kakršnekoli podpise, ki bi jih lahko dodali k bazi, jih prosim pošljite na Lance@spitzner.net. Še posebno me zanimajo TCP in IP opcije ali sistemi, ki niso našteti v bazi podatkov.


Povzetek


Pasivno odvzemanje prstnih odtisov omogoča, da se naučimo več o našem sovražniku, ne da bi ga poznali. Čeprav nam nobena informacija ne more točno identificirati operacijskega sistema, lahko s kombiniranjem različnih podpisov naredimo približen opis oddaljenega računalnika.

Najlepša hvala naslednjim ljudem, ki so mi pomagali: Fyodor, Max Vision, Marty Roesch, Edward Skoudis, Dragos Ruiu, Craig Smith, Peter Grundl, Subterrain Siphon Project