strucne srovnani nekolika programu pro detekci kernelovych rootkitu
Pokud nektere testovane programy umi odhalit i jine nez kernelove rootkity,
nebudu to pri hodnoceni brat v potaz. Srovnavat budu znamy KSTAT, chkrootkit a muj rdetect. Programy jako rkcheck nebo
kern_check.c ani uvadet nebudu, protoze jsou specializovane na jednu cinnost a nic vic neumi. rkcheck kontroluje
pritomnost rootkitu Adore a Knark a kern_check.c porovnava adresy systemovych volani s adresama v System.map.
| test / feature | KSTAT v1.1 | chkrootkit v0.41 | rdetect v0.5 |
| skryte procesy | A | A | A |
| skryte moduly | A | A | A |
| skryte adresare | N | A | N |
| hooknute syscally | A | N | A |
| integrita sys_call_table | A | N | A |
| integrita int 0x80 | A | N | A |
| integrita handleru v IDT | N | N | A |
| integrita DPL v IDT | N | N | A |
| integrita IDT registru | N | N | A |
| hooknute VFS funkce | A | N | N |
| skryte TCP/UDP spojeni | A | N | N |
| promiscuit mode | A | A | A |
| obnova syscallu | A | N | A |
| obnova sys_call_table | N | N | A |
| obnova int 0x80 | A | N | A |
| odstraneni skrytych LKM | A | N | A |
| upozornovani mejlem | N | N | A |
- skryte procesy/moduly/adresare - nalezeni skrytych procesu/modulu/adresaru, na tom neni co vysvetlovat..
- hooknute syscaly - test adres systemovych volani v sys_call_table
- integrita sys_call_table - kontroluje se, jestli system_call() (handler int 0x80) pouziva spravnou
sys_call_table.
- integrita int 0x80 - porovnava, zda ma handler preruseni 0x80 spravnou adresu
- integrita handleru v IDT - kontroluje adresy handleru ve vsech deskriptorech v IDT
- integrita DPL v IDT - kontroluje uroven opravneni (DPL - descriptor privilege level) vsech deskriptorech v IDT
- integrita IDT registru - rek bych ze asi zbytecny test, ale kdo vi, treba se nekdy bude hodit.. proste porovnava
offset IDT se zalohou.
- hooknute VFS funkce - porovnavani adres funkci pro cteni z jednotlivych filesystemu, v dnesnich rootkitech
se pouzivaji jen funkce pro praci s proc filesystemem, hlavne na skryvani sitovych spojeni a procesu...
- skryte TCP/UDP spojeni - kontrola jestli neni nejake spojeni ve vypisu skryte..
- promiscuit mode - testuje se, zda je nastaven promiscuit mode u sitoveho rozhrani
- obnova syscallu/sys_call_table/int 0x80 - obnoveni adres podle drive ulozene zalohy
- odstraneni skrytych LKM - hmm... co to asi muze byt?
- upozornovani mejlem - pokud program najde priznak rootkitu, posle nalezene nesrovnalosti na urcenou mejlovou adresu
Jeste strucne charakterisitky jednotlivych programu. Predem upozornuju, ze to neni
pokus o objektivni hodnoceni. Spis naopak..
KSTAT v1.1
nevyhody:
- je nutne jej prekompilovat pri kazde rekompilaci kernelu
- potrebuje podporu LKM
- blby algoritmus hledani modulu v /dev/kmem, takze je to zbytecne pomale. Jednak prochazi bajt po bajtu a druhak
nacita celou strukturu module, kdyz stejne checkuje jen size_of_module (teda jeste flagy, ale ty az pak). Kdyby precetl unsigned long
a zkotroloval, jestli by to moh byt modul a pak az nacet strukturu... a vubec, proc neprochazi po strankach,
ale po bajtech?
- dalsi jedna drobna ciste subjektivni nevyhoda - kazdy test se musi delat zvlast, chybi mi moznost
spustit test, program proveri vsechno mozne a pak mi jen da vedet jak to dopadlo, pripadne
udela pekny logfile, ve kterem si prectu co potrebuju. Muze si na to sice kazdy napsat skriptik, ale
i tak mi to tam chybi..
vyhody:
- adresy ruznych funkci a struktur kernelu ma zakompilovane primo v sobe (s tim vsak
souvisi prvni uvedena nevyhoda + jedna nevyhoda popsana v hodnoceni).
- vypisuje podrobne informace
- zadne dalsi konkretni vyhody me sice nenapadaji, ale to neznamena, ze je program spatny.. ne,
naopak si myslim, ze je to kus dobre odvedene prace..
hodnoceni:
Uvedena vyhoda se da brat i jako velka nevyhoda. Pokud program zkompilujete
a nechate nainstalovany na masine, muze se vam stat, ze prijde
nevypocitatelny hacker, nainstali rootkit a kstat vam prekompiluje :) Co se
stane? Systemova volani a vsechny funkce se budou v poradku a po odinstalovani
rootkitu bude system vypadat totalne zkompromitovane ;) Takze ta vyhoda v podstate
odpada, protoze stejne si kstat po zkompilovani musite zalohovat na CD, disketu nebo
proste nekam do bezpeci. Stejne jako u detektoru, ktere si zalohuji adresy do souboru.
Kazdopadne na tomhle programu je videt, ze ho delal clovek, co rozumi svoji praci (ehm.. az na to hledani modulu;).
Skoda jen te nutnosti LKM.. Diky tomu ma vsak snadny pristup k adresam ruznych
funkci (VFS a pod.), ktere by jinak musel vyhledavat v /dev/kmem.
homepage: www.s0ftpj.org
chkrootkit v0.41
nevyhody:
- dost chaba detekce kernelovych rootkitu (viz. tabulka)
- pozna jen rootkity co ma v databazi, navic podle jejich defaultniho nastaveni, takze neni problem to obejit.
- neprehledny vystup, zadny logfile...
- poznava promiscuit mode pomoci ioctl(), coz rootkit hrave obejde (a taky se to bezne dela)
vyhody:
- jako jediny z testovanych detektoru umi objevit skryte adresare (ne soubory), resp. najit kde a kolik jich je, nazev nezjisti..
- dalsi funkce pro odhaleni stop po hackerove radeni.. (smazane logy,
zmenene binarky, ...)
- je psany pro Linux, (O,F,N) BSD a Solaris
- kdyz uz nejaky rootkit najde, napise aspon jaky
zhodnoceni:
Nemuzu si pomoct, ale poznavat pritomnost Knarku podle toho, jestli existuje soubor /proc/knark je
IMHO dost zoufale reseni... Staci zmenit 1 bajt ve zdrojaku knarku
a chkrootkit ho nenajde ;) Podobnym zpusobem detekuje i ostatni rootkity, nekontroluje ani adresy systemovych
volani... Pak je tu ta neucina kontrola promiscuit modu a ona ani ta kontrola smazanych logu neni
zrovna nejlip udelana. Asi mesic nove nainstalovany system, skoro zarucene nezkompromitovany
a hlasi mi asi 40 smazanych zaznamu. Ale je fajn ze mi aspon napise skoro presne v jakem obdobi
byly mazane :o))
4 deletion(s) between Thu Jan 1 02:03:34 1970 and Tue Nov 15 12:35:15 2022
Na vterinu presne ;) neco mezi ctvrtkem a listopadem... hmmm.
Tenhle program umi sice najit skryty adresar, to je moc pekne.. ale to je tak
asi vsechno. Je dobry tak maximalne na vyvolani falesneho pocitu bezpeci.
homepage: www.chkrootkit.org
trace's rootkit detector (rdetect) v0.5
nevyhody:
- je to velmi mlady projekt (v dobe dopisovani clanku neco pres mesic), takze jeste neumi vsechno, co umet bude a taky neni jeste tak nejak "casem provereny"...
- odstranovani modulu jeste neni moc doladene, ale to souvisi s predchozim bodem
- jedna drobna nevyhoda, kterou trpi i KSTAT, ale ten sem uz zdrbal dost, takze
to pisu sem;) A to je prave to hledani modulu v pameti. Je celkem frustrujici vedet,
ze staci pridat do zdrojaku modulu jeden radek a razem je touhle metodou nezjistitelny...
vyhody:
- nepotrebuje podporu LKM !
- prehledny a jednoduchy na pouziti
- logfile s podrobnymi informacemi
- moznost pouziti ve skriptech nebo cronu, nalezene nesrovnalosti muze posilat mejlem
- hleda procesy i pomoci pattern searchingu v /dev/kmem
hodnoceni:
No.. jak mam hodnotit svuj program? Psal sem ho tak, aby mi vyhovoval.
A rikat, ze neumi neco, co by umet mel, je taky blbost, protoze ty veci se
tam chystam dodelat.. proste sem to jeste vsechno nestih ;) Navic kdybych
chtel pokracovat ve slibne se vyvyjejicim hodnoceni predchozich programu, tak
bych musel rdetect (resp. sebe) pekne servat ;) Takze hodnoceni
si radeji kazdy udelejte sam. Jinak napady a pripominky jsou vitane.
homepage: www.dump.cz/~trace (snad brzo.. prozatim eva.fit.vutbr.cz/~xhysek02, najdete i na hysteria.sk/~trace)
feedback
trace [trace@hysteria.sk, trace@dump.cz]
ircnet: #dump, #blackhole.sk (_2k_ nebo trace)
anonet: #talk, #dump