Pozor, hekerji (2)

Objavljeno: 25.6.2005 12:09 | Avtor: Ivan Verdonik | Kategorija: Programer | Revija: Junij 2005

V tej številki predstavljamo nekaj varnostnih napotkov in orodij za zaščito pred hekerskimi vdori. Tako bomo na kratko predstavili značilnosti požarnih zidov, detektorjev vdorov in skenerjev ranljivosti. Pri tem si bomo podrobneje ogledali detektor vdorov Snort in iskalec ranljivosti Nessus.

Kot smo pisali že v prejšnji številki, hekerjem otežimo sledenje našim računalniškim sistemom tako, da kar najbolj omejimo objavljanje naših podatkov. Na spletnih straneh na primer ni treba objavljati upraviteljevih podatkov, spletne strani naj bodo brez komentarjev, saj lahko vsak preveri njihovo izvirno kodo. Pri uporabi spleta je potrebna previdnost. Pogosto se dogaja, da inženirji, ki iščejo pomoč v medmrežju, npr. forumih, IRCu..., razgalijo svoje podjetje, podajo prave naslove IP, ime računalnika, problem pa jim potem lahko "rešijo" hekerji. Dogaja se, da v neprevidnosti razkrijejo celo, da jih je požarni zid oviral in da so ga izključili.

Dejstvo je, da bi bili varni že, če bi imeli vse naprave in programe pravilno nastavljene, uporabljali močna gesla, dohodne datoteke preverili s protivirusnim programom in sproti nameščali popravke. Pri tem pa je treba omeniti, da programska podjetja pogosto ne hitijo posebej s popravki razpok v varnosti njihovih programov, vsaj dokler zloraba teh pomanjkljivosti ne doseže velikih razsežnosti. Na spletnem naslovu http://lists.virus.org/vulnwatch-0204/msg00025.html je zgled, kako je inženir, ki je odkril ranljivost storitve Microsoft FTP Service 5.0, v več elektronskih sporočilih dobesedno prosil Microsoftove programerje, naj naredijo popravek - njim pa se ni nikamor mudilo. Če k temu prištejemo še ranljivosti, ki so jih odkrili sami hekerji in obdržali zase, tako da nihče, niti avtorji programov, ne ve zanje, vidimo, da tudi če sproti nameščamo popravke, to še ne pomeni, da smo varni. Tudi zaradi tega k zaščiti sodi vsaj še požarni zid. A tudi požarni zid ne reši vsega, temveč le ublaži nevarnost, ker vseh vrat navadno ne filtrira (denimo 80 - http, splet in 25 - smtp, e-pošta). Tako so ogroženi vsaj programi, ki delujejo na takih vratih. Odveč je omeniti, da je treba vsaj v sistem s požarnim zidom sproti nameščati popravke (vsaj tiste, ki so na voljo). Poleg požarnih zidov so dobra pomožna orodja raznovrstni detektorji vdorov. Z detektorji vdorov je mogoče "zasačiti" hekerja pri vdiranju. Delijo se na statistične detektorje in detektorje na podlagi pravil. Prvi lahko odkrijejo tudi nove, drugače še neznane vrste napadov, vendar so neuspešni pri odkrivanju internih napadov (ki so pogostejši), drugi so boljši za interno varnost in znane napade (za katere so že izdelana ustrezna pravila). Varnost računalnikov, za katere skrbimo, pa lahko tudi preverimo s katerim od iskalcev ranljivosti.

Požarni zidovi

Pri varovanju omrežja in/ali računalnikov v njem, je eden prvih zaščitnih ukrepov namestitev požarnega zida na ustrezno mesto. O požarnih zidovih je bilo že veliko napisanega, pa si kljub temu oglejmo njihovo klasifikacijo in najpomembnejše značilnosti. Požarnemu zidu nastavimo pravila, ki določajo, kateri promet sme noter oziroma ven. Glede na ravni v modelu ISO/OSI so načini njihovega delovanja:

Filtriranje paketov (packet filters):

  • delujejo na tretjem sloju (to je omrežni ravni),
  • vsak paket se primerja s seznamom pravil (izvirni/ponorni IP, izvirna/ponorna vrata, protokol ...),
  • poceni in hitri, vendar najmanj varni,
  • temeljijo na 20 let stari tehnologiji,
  • motijo bolj zapleteni programi,
  • uporabljeni npr. v usmerjevalnikovih seznamih za dovolitev dostopa (ACL - Access Control Lists).
  • Prehodi na ravni tokokroga (circuit-level gateways):

  • delujejo na četrtem sloju (to je transportni ravni),
  • preklapljajo povezave TCP s pomočjo vrat (NAT - Network Address Translation),
  • poceni, a zanesljivejši od filtrirnikov,
  • na splošno je treba prilagoditi programe,
  • uporabljeni v požarnih zidovih SOCKS.
  • Prehodi na ravni programov (application-level gateways):

  • delujejo na petem sloju,
  • programsko specifični,
  • zmerno dragi in počasnejši, vendar varnejši,
  • omogočajo zapisovanje uporabnikove dejavnosti,
  • zahtevajo konfiguriranje uporabnikov, omrežja in/ali programov,
  • zgled: nadomestni spletni strežnik (HTTP proxy).
  • Večslojni preiskovalni požarni zidovi s stanjem (stateful, multi-layer inspection):

  • filtrirajo tretji sloj,
  • preverjajo četrti sloj,
  • preiskujejo peti sloj,
  • dragi in zapleteni, a zelo varni,
  • zgled: CheckPoint Firewall-1.
  • Nastajajo nekatere nove vrste požarnih zidov, ki pa so zgrajeni na podlagi zgoraj opisanih tehnologij. Omogočajo dodatno zaščito sistemov in omrežij. To so na primer osebni oziroma strežniški požarni zidovi (Personal/host firewalls) in omrežni dinamični požarni zidovi (Dynamic Network Firewalling).

    Osebni/strežniški požarni zidovi

    Osebni/strežniški požarni zidovi omogočajo natančne nastavitve sistemskih funkcij in procesov, ki imajo pravico dostopa do omrežja in iz njega. Uporabljajo različne vrste vzorcev (signatures) in pogojev, na podlagi katerih dovolijo ali blokirajo promet. Navadno izdelajo eno ali več naslednjih funkcionalnosti:

  • blokiranje gonilnikov protokolov (protocol-driver blocking), ki programom prepoveduje nalaganje in uporabo "nestandardnih" protokolnih gonilnikov,
  • blokiranje programov (application-level blocking) dovoljuje izvajanje omrežnih akcij in/ali sprejemanje omrežnih povezav le nekaterim programom in knjižnicam,
  • blokiranje specifičnih vzorcev (signature-based blocking) stalno spremlja omrežni promet in blokira vse znane napade, ki ogrožajo sistem.
  • Problem pri osebnih požarnih zidovih je veliko dela, povezanega z nastavljanjem, in nevarnost vdora, če požarni zid slabo nastavimo.

    Detektorji vdorov

    Kot rečeno, detektor vdorov lahko zazna hekerja "na delu". Ločijo se na statistične detektorje in detektorje na podlagi pravil. Pravzaprav je v zadnjem času opaziti zlivanje tehnologij. Tako so pogosto v enem izdelku združeni požarni zid, detektor vdorov na podlagi pravil in statistični detektor. Tak program lahko na primer s svojim požarnim zidom blokira hekerja, ki ga je zaznal kateri od detektorjev, še preden je temu uspelo vdreti.

    Detektor vdorov Snort

    Komercialna orodja za zaznavo vdorov v omrežja pogosto zasedejo veliko prostora na disku in drugih virov, tako pogosto zahtevajo močan strežnik, namenjen samo njim, konfiguracija pa je zahtevna. Poleg tega se njihova cena lahko meri tudi v tisočih dolarjev. Medtem pa Snort ne zahteva veliko virov, enostavno ga je nastavljati, deluje na vseh glavnih platformah in je zastonj. Zato je idealna varnostna rešitev za majhna, ne preveč obremenjena omrežja. Snort je program s tremi glavnimi nameni delovanja:

  • mogoče jo je uporabiti za opazovanje prometa v omrežju (sniffer),
  • tako zbrane podatke zna shraniti v datoteko (packet logger), kar je uporabno npr. za razhroščevanje omrežja, in
  • na podlagi pravil opozarja na vzorce v omrežnem prometu, ki lahko pomenijo poizkus vdora v omrežje.
  • Izhod je mogoče preusmeriti v več zbirk podatkov: MySQL, Postgress, MS-SQL in Oracle. Z njegovo analizo je mogoče zaznati veliko število napadov in preizkušanj (probes), na primer:

  • prepisovanje vmesnikov (buffer overflow),
  • nevidna pregledovanja vrat (stealth port scans),
  • napade CGI (CGI attacks),
  • preizkuse SMB (SMB probes) in številne druge.
  • Pravila z vzorci (signatures) za nove napade so navadno na voljo v samo nekaj urah.

    Arhitektura

    Poglavitni deli Snorta so:

  • dekodiranje paketov (packet decoder),
  • programski stroj, ki na podlagi vzorcev v pravilih zaznava vdore (detection engine), ter
  • podsistem za opozarjanje in zapisovanje (logging and alerting subsystem).
  • Ti podsistemi nadgrajujejo promiskuitetno knjižnico za vohljanje libpcap (promiscuous packet sniffing library). Libpcap je omrežni vohljalnik, ki deluje na številnih platformah, omogoča filtriranje prometa in je podlaga za delovanje Snorta.

    Dekodiranje paketov

    Dekodiranje je organizirano prek vseh slojev protokola TCP/IP, od podatkovne povezave do programske ravni. Postopki pri dekodiranju ustvarijo kazalce na "surov" omrežni promet. Prek njih je mogoče ločiti posamezne sloje omrežnega protokola. Na njihovi podlagi Snort analizira posamezne ravni protokola, tako da začne pri najnižji ravni. Snort omogoča dekodiranje protokolov ethernet, SLIP in PPP. Pri tem je glavni poudarek na hitrosti (zato uporablja kazalce).

    Zaznavni stroj

    Pravila za prepoznavanje napadov Snort hrani v posebnem dvodimenzionalno povezanem seznamu (glej sliko). Ena smer vsebuje glave pravil (Chain Header), druga pa možnosti pravil (Chain Options). Zaradi učinkovitosti sorodna pravila (skupna glava) organiziramo tako, da na začetek postavimo to skupno glavo, nato pa s kazalci povežemo izbire teh pravil in z njimi identificiramo posamezne podvrste napada.

    Logična struktura pravil

    S temi verigami pravil zaznavni stroj preišče vsak paket v omrežju. Pri prvem pravilu, ki se ujema s podatki v paketu, izvede akcijo, določeno v definiciji pravila, in začne analizirati naslednji paket.

    Podsistem za alarmiranje in zapisovanje

    Ta podsistem nastavljamo z ukaznimi stikali (command switches). Trenutno so na voljo tri stikala, ki vplivajo na zapisovanje (logging), in pet opcij za alarmiranje. Pakete lahko zapisujemo v:

  • dekodirani obliki (čitljivi za ljudi),
  • v imeniški strukturi, ki temelji na naslovih IP, ter
  • v binarni obliki, ki omogoča hitro zapisovanje in je tako primerna za bolj obremenjena omrežja.
  • Zapisovanje pa lahko tudi izključimo.

    Alarmiranje je izvedeno s pošiljanjem opozoril:

  • v sistemski dnevnik (log),
  • v datoteko z opozorili, v dveh različnih oblikah, ali
  • s takojšnjimi sporočili WinPopup s pomočjo program smbclient, ki je del programa Samba (Samba omogoča "newindows" operacijskim sistemom neposredno komunikacijo in deljenje datotek z operacijskimi sistemi Windows).
  • Kadar pošiljamo opozorila v tekstovno datoteko, imamo na razpolago dve izbiri: polno (full) in hitro (fast) obliko. Če izberemo polno opozarjanje, se zapišeta sporočilo opozorila in vsebina glave paketa. Če izberemo hitro opozarjanje, se zapiše le stisnjena podmnožica podatkov iz glave paketa, kar omogoča večjo hitrost. Poleg teh izbir imamo še peto možnost, namreč da opozarjanje izključimo.

    Kot smo rekli, Snort analizira omrežni promet na podlagi pravil in sproži alarm, kadar promet ustreza pogoju v pravilu. Zgled pravila, ki zazna prenos zone DNS, je:

    alert tcp $EXTERNAL_NET any -> $HOME_NET 53

    (msg:"DNS zone transfer"; flow:to_server,established;

    content: "|00 00 FC|"; offset:13; reference:cve,CAN-1999-0532;

    reference:arachnids,212; classtype:attempted-recon; sid:255; rev:6;)

    Razlaga pravila je naslednja:

  • rezultat je opozorilo (alert),
  • zahteva protokol TCP,
  • v spremenljivki $EXTERNAL_NET so določeni zunanji naslovi IP (navadno je nastavljena vrednost any - to je vsi), vrata zunanjega naslova IP so lahko poljubna (any),
  • smer (->) je k našemu omrežju,
  • v spremenljivki $HOME_NET je podano naše omrežje (npr. 213.161.12.0/24),
  • številka vrat strežnika v našem omrežju je 53, torej gre za vrata DNS (Domain Name Server),
  • sporočilo (msg) opozorila bo 'DNS zone transfer',
  • pretok (flow) je tak, da je strežnik v našem omrežju (to_server), povezava TCP pa mora biti vzpostavljena (established),
  • tovor (payload) paketa mora vsebovati zaporedje: "|00 00 FC|" (content), ki ga iščemo od 13. znaka naprej (offset) - ta odmik podamo zaradi hitrejšega delovanja,
  • oznaka referenca (reference) pove, kje v medmrežju lahko izvemo več o tej vrsti napada, tip napada (classtype) je poizkus zbiranja informacij (atempted-recon), šifra pravila v okviru Snorta (sid) je 255, in sicer šesta različica (rev).
  • Snort je dostopen na naslovu: http://www.snort.org

    Iskalci ranljivosti

    Iskalci ranljivosti imajo ambivalenten značaj. Po eni strani lahko z njimi upravitelj preveri varnost računalnikov, po drugi strani jih hekerji uporabljajo v isti namen, le da upravitelj po njihovi uporabi zakrpa svoje sisteme, heker pa ranljivosti, ki jih je odkril, izkoristi za vdor. Skener ranljivosti je orodje, ki sistematično preveri vse znane ranljivosti določenega sistema. Tako bo na primer, če z njim preverjamo računalnik z Windows XP, preveril, ali ima kakšne pomanjkljivosti (slabe nastavitve, niso nameščeni vsi popravki...).

    Nessus

    Nessus je verjetno največ rabljeni iskalec ranljivosti, tudi po zaslugi tega, da gre za prosto dostopen program. Izdelek vsebuje poseben skriptni jezik za sestavljanje napadov (NASL - Nessus Attack Scripting Language), s katerim je mogoče preizkus sestaviti hitro in enostavno, uporabiti pa je mogoče tudi programski jezik C. Vsak preizkus varnosti oziroma ranljivosti je napisan kot zunanji vstavek (external plugin).

    Za Nessus je na voljo zbirka podatkov, ki je vsak dan posodobljena z najnovejšimi varnostnimi pomanjkljivostmi, čemur je posvečeno veliko pozornosti. Nessus je izdelan z arhitekturo odjemalec-strežnik. Strežnik izvaja napade, odjemalec pa rabi kot vhodna, izhodna in nadzorna konzola (front-end). Odjemalec in strežnik sta lahko na različnih sistemih, npr. odjemalec je lahko na osebnem računalniku z 32-bitnim operacijskim sistemom Windows, strežnik pa na računalniku mainframe v sistemskem prostoru. Odjemalcev je več vrst: eden za X11, eden za Win32 in eden, ki je napisan v javi.

    Odvisno od zmogljivosti računalnika, na katerem je nameščen Nessusov strežnik, lahko preverjamo enega, deset ali sto strežnikov hkrati. Nessusa ne zmoti razporeditev vrat, ki niso v skladu s priporočili IANA (torej najde tudi spletni strežnik, ki ni na vratih 80 ali 8080). Če imamo npr. dva ali več spletnih strežnikov, ene na vratih 80 in druge na vratih 8080, Nessus preveri oba oziroma vse. Če odkrije varnostne pomanjkljivosti, ne le opozori nanje, temveč tudi svetuje, kako jih odpraviti. Poročila, ki jih izdela, je mogoče izvoziti v obliki tekstovnih datotek, datoteke LaTex in v zapisu HTML. Podpira tudi preverjanje programov, ki pošiljajo in sprejemajo šifrirane podatke SSL (Secure Socket Layer), kot so https, smtps, imaps in druge. Opremiti ga je mogoče s certifikatom, da se lahko vključi v varnostno okolje, ki temelji na javnih ključih. Ima tudi možnost, s katero sam določi, katere teste bo pognal, če testira oddaljene strežnike, glede na programe, ki tečejo na njih (tako ne bo preverjal pomanjkljivosti programa Sendmail, če v sistemu najde poštni strežnik Postfix). Pri iskanju ranljivosti z Nessusom imamo možnost, da izključimo preizkuse, ki bi povzročili sesutje preizkušenega programa.

    Več o iskalcu ranljivosti Nessus si je mogoče ogledati na http://www.nessus.org/.

    Prihodnjič bomo podrobneje opisali pregledovanje sistemov.

    Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!
    Prijava

    ph

    Komentirajo lahko le prijavljeni uporabniki