Pav. 2.1.3 Visų pirma rootkit nukopijuoja sisteminių adresų lentelę ir tik tada ją modifikuoja. Pertraukimų doroklė yra modifikuojama taip, kad sisteminiai kreipiniai būtų imami iš užkrėstos sisteminių kreipinių lentelės.
Adore-NG 0.41
Adore-NG 0.41 – tai perdirbtas Adore rootkit. Šis rootkit naudoja pažangesnius metodus, tačiau dar nėra paplitęs. Kaip ir Adore atveju, taip ir Adore-NG 0.41 neturi nei backdoor programos, nei automatino pasileidimo po sistemos perkrovimo. Šalia įprastinių savybių, Adore-NG automatiškai filtruoja nematomų procesų registravimo pranešimus. Tai labai palengvina naudojimą, ir atakuotojas taip lengvai neišsiduos darydamas nedideles klaidas. Vaikų procesai yra slepiami automatiškai, jei jų tėvas irgi buvo nematomas. Taipogi patobulintas failų ir procesų slėpimas.
Rootkit pakraunamas į sistemą kaip branduolio modulis naudojant operacinės sistemos suteiktą interfeisą. Išjungus modulių palaikymą, toksai rootkit pakrovimas yra negalimas. Adore-NG turi priemonių branduolio modulių ir paties branduolio užkrėtimui. O jei užkrėstas branduolio modulis yra laikomas sveiku, tai atakuotojui net nereikia jo ir slėpti.
Adore-NG visą vykdymo srautą nukreipia į virtualų failų sistemos sluoksnį (VFS) ir nežaidžia su centriniais resursais kaip sisteminių kreipinių lentelė ar IDT. Kadangi UNIX sistemose praktiškai viskas yra apdorojama kaip failas, tai Adore-NG kontroliuodama VFS gali atlikti viską ką atlieką įprastiniai rootkit. Tokio rootkit aptikimas yra sudėtingesnis, kadangi nepakanka stebėti vien pagrindinius resursus.
2.1.4 Bibliotekos
Šie rootkit pasislėpimui naudoja pakeistas bibliotekas. Pvz., t0rn8 naudoja specialią biblioteką (libproc.a), kuri pakeičia standartinę sistemos biblioteką naudojamą proceso informacijos perdavimui iš branduolio į vartotojo lygio įrankius (tokius kaip top, /bin/ps). Tokiu būdu vartotoją pasiekia klaidingi duomenys, tačiau patys įrankiai (top, /bin/ps) lieka neliesti.
2.1.5 Tendencijos
Dabar faktiškai visi nauji rootkit yra branduolio lygio rootkit. Šiuo metu pastebėtos tokios ateities tendencijos:
• Geresnė apsauga prieš HIDS (Host based intrusion detection system). Vis daugiau rootkit turi įrankius padedančius apeiti ar įveikti IDS.
• Rootkit grįsti ne užkraunamais branduolio moduliais (LKM). Yra sekama SucKIT pavyzdžiu.
• Geresnė LKM apsauga nuo aptikimo. Kiekvienai priemonei skirtai aptikti kenkėjiškus LKM, yra sukuriama priemonė, kaip to patikrinimo išvengti. Pvz., KIS rootkit apeina StMichael aptikimo modulį.
• Backdoor slėpimas. Dėl ypatingo slaptumo pasyvūs backdoor tampa vis dažnesni įrankiai rookituose.
• Vis daugiau programų lygio backdoor. Nors kuo daugiau dėmesio skiriama programų saugumui, vis daugiau rootkit lindi pačiose programose.
• Jau dabar rootkit naudojami kenkėjiškų CGI programų (script) patalpinimui.
Rootkit išeities kodai paprastai skelbiami viešai, tai lemia daugybės skirtingų vieno rootkit versijų atsiradimą. Dabartiniu metu dauguma rootkit remiasi sisteminių programų keitimu arba LKM. Ateityje laukiama daugiau rootkit veikiančių atakuojant branduolio atmintį. Rootkit daugiausiai šansų išlikti turės Linux sistemose, nes kitose UNIX šeimos sistemose yra geresnė branduolio apsauga.
2.2 Rootkit aptikimas
2.2.1 Vartotojo lygio rootkit aptikimas
Kontrolinės sumos tikrinimas
Vartotojo lygio rootkit pakeitus dvejetainių failų turinį nauju turiniu, failui paliekama buvusi, originali sukūrimo data, bei dydis, tačiau šio failo kontrolinė suma bus skirtinga kaip ir failo turinys. Tokios programos kaip Tripware ar aide sudaro sisteminių dvejetainių ir konfigūracinių failų kontrolinių sumų duomenų bazę, ir vėliau lygina turimų failų kontrolines sumas su įrašais duomenų bazėje. Tai leidžia administratoriui aptikti pakeistus failus.
Šio metodo trūkumas yra tas, kad kontrolinių sumų sudarymas ir tikrinimas trunka nemažai laiko, taigi šis metodas daugumai sistemos administratorių yra netinkamas. Be to, yra sunku sudaryti tikslų failų sąrašą, kurie turi būti tikrinami, bei reikia apgalvoti, kokius konkrečius parametrus reikia įtraukti į duomenų bazę – failo dydis, sukūrimo data, priėjimo teisės (access), md5, sha1 kontrolinės sumos. Paprastai yra netikrinami katalogai, kuriuose informacija pastoviai kinta - /var, /proc, tačiau tai žinodamas įsilaužėlis kaip tik ir gali patalpinti rootkit šiose netikrinamose direktorijose. Pvz., rootkit Knark, direktorija pagal nutylėjimą ir yra /proc/knark. Įsilaužėlis po rootkit įdiegimo gali paleisti aide, kad ji sukurtų naują duomenų bazę, pagal dabartinę sistemos būsena. Tokiu atveju, kitą kartą tikrinant sistemą, aide lygins sistemą su sistema kurioje jau yra įdiegtas rootkit, taigi nebus rasta jokių pakitimų. Vadinasi, svarbu laikyti duomenų bazę neprieinamą tinklu (offline), arba tik skaitomoje (read only) laikmenoje.
Specialūs rootkit ieškikliai
Tokios programos kaip chkrootkit, Rootkit Hunter ieško joms žinomų rootkit požymių. Paprastai yra ieškoma tam tikrų standartinių direktorijų arba tam tikrų eilučių dvejetainiuose failuose. Pvz., jei egzistuoja direktorija /usr/src/.puta, tai greičiausiai sistemoje yra t0rnkit rootkit. Tačiau šie požymiai nebus rasti, jei įsilaužėlis naudoja labai naują ar šiek tiek pakeistą rootkit. Tam kad išspręsti šia problemą, yra ieškoma ir bendrų rootkit paliekamų požymių. Pvz., tikrinami sisteminiai failai (kaip ir aide atveju), ieškoma įtartinių failų sisteminėse direktorijos, ieškoma LKM, tikrinamas tinklo aktyvumas, atidaryti portai.
Savarankiška paieška
Rootkit galima ieškoti ir nenaudojant papildomų priemonių.
Pvz., direktorijos turinys gali būti patikrinamas keliais būdais (ls, echo).
Naudojant strace įrankį, galima peržiūrėti sisteminius kreipinius. Juose gali matytis visi ls iškviesti sisteminiai kreipiniai. Juose atsispindės tai, kad buvo kreipiamasi į tam tikras direktorijas.
Paieška pagal inode numerius, naudojant komandą ls –li. Sistemos programos, tokios kaip ps, ls ir panašiai, yra įrašomos sistemos instaliavimo metu, todėl programų, esančių vienoje direktorijoje, inode numeriai turėtų rikiuotis iš eilės. Radus failų su paeiliui einančiais inode numeriais, kurie išsiskiria iš kitų numerių, galima įtarti, kad tie failai yra suklastoti, o sistemoje yra įdiegtas rootkit.
Pavyzdžiai pateikiami 2.4 skyriuje - Eksperimentai su rootkit ir jų aptikimo priemonėmis.
2.2.2 Branduolio lygio rootkit aptikimas
Nedideli nesklandumai dažnai sukelia administratoriaus įtarimą, ir jis siekia patikrinti, ar sistemoje nėra instaliuotas rootkit. Neturint tikslios informacijos, serverio atjungimas nuo tinklo nėra geras ir priimtinas administratoriaus sprendimas. Be to, paprastai ilgesniems tyrimams nėra pakankamai laiko. Šie apribojimai labai suvaržo tyrinėjimo galimybes. Žemiau yra pateikiami pagrindiniai branduolio lygio rootkit aptikimo metodai.
Kontrolinės sumos ir specialūs rootkit tikrintojai
Programos generuojančios ir tikrinančios kontrolines sumas jau buvo aprašytos kalbant apie vartotojo lygio rootkit aptikimą. Šios priemonės yra naudingos ir ieškant branduolio lygio rootkit. Šio metodo minusai branduolio lygio rootkit atveju yra tai, kad rootkit gali nukreipti tikrintojus į bet kokius (t.y. originalius) failus. Vis dėlto metodas yra naudotinas, kadangi dauguma atakuotojų nėra labai gerai nusimanantys, o be to, net ir tinkamai naudojamas rootkit niekada nesukurs nepriekaištingos sistemos imitacijos.
Specialūs rootkit ieškikliai, apie kuriuos jau pasakota skyriuje apie vartotojo lygio rootkit ieškiklius, taipogi gali būti naudojami ir branduolio lygio rootkit požymių paieškai, tačiau, tirdami sistemą, jie labai remiasi žinomų rootkit žymėmis.
Svarbios branduolio struktūros
Daug branduolio lygio rootkit galima aptikti lyginant iš anksto pasidarytas sveikos sistemos svarbiausiųjų branduolio struktūrų (critical kernel structure) kopijas su turimomis struktūromis. Šiam darbui Linux sistemose yra skirti tokie įrankiai kaip kern_check, KSTAT, determine. Rootkit aptinkamas nesutapus pvz., sisteminių kreipinių lentelės įrašų adresams, nesutapus pačios lentelės adresams.
Šių programų minusas yra tai, kad, ieškant rootkit reikia turėti patikimų šaltinių, pavyzdžiui – kstat turi būti instaliuojamas švarioje sistemoje, kern_check remiasi System.map failu. Išimtis būtų determine, kuris daugiausia skirtas ieškoti Adore rootkit, taipogi remiasi požymių duomenų baze, tačiau pastaroji yra pateikiama kartu su determine išeities failais.
Sisteminių kreipinių parametrų matavimai
Kad paslėptų atakuotoją daugelis rootkit atlieka sudėtingus veiksmus. Dėl to gali ženkliai skirtis instrukcijų skaičius pakeistame sisteminiame kreipinyje lyginant jį su originaliu. Instrukcijų skaičiaus matavimas kiekvienam sisteminiam kreipiniui yra tinkamas metodas rootkit aptikimui. Šiuo metodu pagrįstas patchfinder programos veikimas. Ši programa vykdo sisteminius kreipinius ir skaičiuoja jų atliekamų instrukcijų skaičių. Tam kad palyginti su originaliais duomenimis, reikia būti atlikus matavimus ir švarioje sistemoje. Kadangi sisteminio kreipinio algoritmas paprastai yra pakankamai sudėtingas, turintis pvz., kelias „if“ atšakas, instrukcijų skaičius tam pačiam kreipiniui gali skirtis, tiesa, paprastai šis skirtumas nebus didesnis nei 10 (ypatingais atvejais gali siekti 200), o rootkit paveiktose sistemose šie skirtumai išauga iki kelių šimtų.
Panašus į jau paminėtą būdą yra sistemino kreipinio trukmės matavimas. Šis metodas yra paprastas, tačiau jis efektyvus tik su lėtesniais procesoriais, kadangi sistemose su galingais procesoriais (virš 1GHz) vykdymo laikai tampa labai trumpi ir neįmanoma tiksliai nustatyti ar sisteminis kreipinys yra originalus, ar ne.
„Teisminė“ (forensic) analizė
Teisminė analizė teoriškai gali rasti ir nagrinėti viską, kas yra įrašyta į diską ar atmintinę. Bet koks rašymas į diską/atmintinę yra nepageidautinas, kadangi tai gali sunaikinti įsilaužėlio ištrintus failus, apsunkinti įsilaužėlio atliktų veiksmų išsiaiškinimą. Kad išvengti rašymo į atmintį/diską reikia pasidaryti disko ir atmininės kopijas (dump). Dėl didelių laiko ir resursų kaštų, ir kadangi sistema bent trumpam turi būti atjungta nuo tinklo, tokia analizė negali būti priskirta, kaip priemonė rootkit aptikimui. Analizė gali būti vykdoma greičiau ir paprasčiau, jei turimos švarios sistemos kontrolinės sumos.
Tinklo kontrolė
Rootkit užkrėsta sistema greičiausiai atlikinės veiksmus, generuojančius interneto srautą. Šį srautą gali aptikti pasyvus tinklo stebėjimas. Atvirų prievadų (port) skanavimas gali aptikti kai kurias backdoor programas. Įsilaužimo aptikimo sistemos (intrusion detection system - IDS) gali pastebėti rootkit atsiradimą arba jo veiklą.
Rankinė paieška
Nėra tobulo rootkit, o ir patys atakuotojai daro klaidas. Rankinė pėdsakų paieška registracijos žurnaluose ir pačioje sistemoje gali visada duoti naudingų įkalčių. Pvz., rootkit SucKIT naudoja pažangias savęs slėpimo technologijas, tačiau jį paprasta aptikti jei tikrinsim /sbin/init failą, kurį rootkit perdirbo tam, kad galėtų pasileisti po sistemos perkrovimo. Šis failas buvo paprasčiausiai pervardintas naudojant mv komandą, kuri naudoja sisteminį kreipinį rename(). Rename() nėra vienas iš tų 24 kreipinių, kuriais manipuliuoja rootkit, taigi jis nėra nukreipiamas į originalų ir pakeistą failą. Dar vienas naudingas metodas yra kruopšti /proc direktorijos peržiūra. Šis metodas dažnai atidengia paslėptus procesus.
Taipogi, naudojant GDB įrankį, rankiniu būdu galima tirti ir sisteminių adresų lentelę, joje esančius sisteminių kreipinių adresus, jų išeities kodą (asm).
Visi pavyzdžiai pateikiami trečiame skyriuje – Eksperimentai su rootkit ir jų aptikimo priemonėmis.