Pozor, hekerji (2)
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):
Prehodi na ravni tokokroga (circuit-level gateways):
Prehodi na ravni programov (application-level gateways):
Večslojni preiskovalni požarni zidovi s stanjem (stateful, multi-layer inspection):
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:
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:
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:
Pravila z vzorci (signatures) za nove napade so navadno na voljo v samo nekaj urah.
Arhitektura
Poglavitni deli Snorta so:
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:
Zapisovanje pa lahko tudi izključimo.
Alarmiranje je izvedeno s pošiljanjem opozoril:
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:
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.