Rootkit Hunter Sourcecode Learning
目錄
1. Rootkit Hunter Introduce() 2. Source Code Frame() 3. do_system_check_initialisation() 4. do_system_commands_checks() 5. do_rootkit_checks() 6. do_network_checks() 7. do_local_host_checks() 8. do_app_checks()?
1. Rootkit Hunter Introduce
rkhunter (Rootkit Hunter) is a Unix-based tool that scans for
1. rootkits 2. backdoors 3. possible local exploitsIt does this by
1. comparing SHA-1 hashes of important files with known good ones in online databases 2. searching for default directories (of rootkits) 3. searching for wrong permissions 4. searching for hidden files 5. searching for suspicious strings in kernel modules 6. searching for special tests for Linux and FreeBSDRelevant Link:
http://en.wikipedia.org/wiki/Rkhunter http://netsecurity.51cto.com/art/201012/240038.htm http://linux.vbird.org/linux_security/0420rkhunter.php?
2. Source Code Frame
0x1: 源代碼結構
rkhunter的源代碼是bash代碼,對于rkhunter,所有的檢測邏輯都在do_system_check()函數中,do_system_check由很多子函數組成,分別從不同方面完成rootkit的檢測功能 ,總體來說,rkhunter的代碼邏輯流程如下
0x2: rkhunter的功能特性
1. 基于指紋庫思想的rootkit檢測1.1 建立了一個已知rootkit的默認目錄名、文件名列表,通過默認文件名、目錄名特征這個維度對rootkit進行檢測1.2 通過檢查某個文件或目錄是否存在來判斷對應的rootkit病毒是否存在(FILESCAN)1.3 在文件系統中搜索rootkit常用的文件名(SUSP_FILES_INFO)1.4 檢測是否有已知的sniffer(嗅探器)的日志文件存在(SNIFFER_FILES)1.5 檢測是否有已知的LKM Rootkit對應的.so文件存在(LKM_BADNAMES)1.6 檢查自從上次運行rkhunter以來,/etc/passwd的內容文件有沒有變化1.7 檢查是否存在"邏輯rootkit",即通過減低指定系統配置或軟件的安全配置來構建邏輯后門rootkit2. 基于可疑字符串的指令劫持檢測2.1 檢查某個"二進制系統命令"是否否存在某個字符串,如存在則有危險(STRINGSCAN)2.2 依次用一些rootkit病毒的文件名或路徑做參數調用strings命令,看其是否能正常輸出2.3 檢查和動態鏈接庫預加載相關的環境變量1) LD_PRELOAD2) LD_AOUT_PRELOAD3) LD_ELF_PRELOAD4) /etc/ld.so.preload5) LD_LIBRARY_PATH3. 基于可疑字符串的Linux啟動文件惡意修改、劫持檢測3.1 檢查某個"二進制啟動文件"是否存在某個字符串,如存在則有危險(STRINGSCAN、RCLOCATIONS)3.2 在系統啟動文件中搜索特定的字符串,如果搜到,則說明有危險(RCLOCAL_STRINGS)4. 基于異常文件目錄屬性特征的rootkit檢測1) 檢查系統命令程序文件的ACL屬性1.1) 異常-s標志位1.2) 權限開放過大(任意用戶可執行)1.3) 異常的隱藏標志位1.4) 可疑文件修改時間 2) 檢查敏感文件的HASH值是否和標準的一致(需要建立一個標準黃金基準列表),以確定這些系統命令是否被篡改過5. 基于網絡異常狀態監控的rootkit檢查1) 檢查指定端口上監聽的程序是否在白名單中(正常的程序只會listen在指定的端口上)2) 檢查是否有白名單之外的程序在進行流程sniffer6. 基于系統賬戶、組異常權限檢查的rootkit監控1) 檢查/etc/passwd中是否有白名單之外的"超級用戶(uid)",這是一種異常現象2) 檢查是否存在無密碼賬戶?
3. do_system_check_initialisation()
初始化rootkit常用的默認文件名、目錄名特征、rootkit特征
1) 已知的rootkit的文件名、目錄名特征 不管是什么rootkit,它一定會或多或少地在磁盤目錄下留下一些文件和目錄,"文件、目錄指紋特征庫"的目的就是從這個最終結果的角度去檢測是否存在rootkit的嫌疑1.1) W55808A(55808 Variant A)1.2) AKIT(Adore rootkit)1.3) AJAKIT(AjaKit Rootkit)1.4) APAKIT(aPa Kit Rootkit)1.5) APACHEWORM(Apache Worm)1.6) ARK(Ambient (ark) Rootkit)1.7) BALAUR(Balaur Rootkit 2.0 (LRK5 based))1.8) BEASTKIT(Beastkit Rootkit)1.9) BEX(beX2 Rootkit)1.10) BOBKIT(BOBkit Rootkit)1.11) BOONANA(OSX Boonana-A Trojan (aka Koobface.A))1.12) CB(cb Rootkit (w00tkit by ZeeN))1.13) CINIK(CiNIK Worm (Slapper.B variant))1.14) CXKIT(CX Rootkit)1.15) DANNYBOYS(Danny-Boy's Abuse Kit)1.16) DEVIL(Devil Rootkit)1.17) DICA(Dica-Kit (T0rn variant) Rootkit)1.18) DREAMS(Dreams Rootkit)1.19) DUARAWKZ(Duarawkz Rootkit)1.20) ENYELKM(ENYE LKM v1.1, v1.2)1.21) FLEA(Flea Linux Rootkit)1.22) FREEBSD_RK(FreeBSD Rootkit)1.23) FU(Fu Rootkit)1.24) FUCKIT(Fuckit Rootkit)1.25) GASKIT(GasKit Rootkit)1.26) HEROIN(Heroin LKM)1.27) HJCKIT(HjC Kit Rootkit)1.28) IGNOKIT(ignoKit Rootkit)1.29) ILLOGIC(iLLogiC Rootkit (SunOS Rootkit variant))1.30) INQTANAA(OSX Inqtana (Variant A))1.31) INQTANAB(OSX Inqtana (Variant B))1.32) INQTANAC(OSX Inqtana (Variant C))1.32) INTOXONIA(IntoXonia-NG Rootkit)1.33) IRIXRK(Irix Rootkit (for Irix 6.x))1.34) JYNX(Jynx Rootkit)1.35) KBEAST(KBeast (Kernel Beast) Rootkit)1.36) KITKO(Kitko Rootkit)1.37) KNARK(Knark Rootkit)1.38) LINUXV(ld-linuxv.so (LD_PRELOAD shared library rootkit))1.39) LION(Lion Worm)1.40) LOCKIT(Lockit Rootkit (aka LJK2))1.41) MRK(MRK (MiCrobul?) RootKit (based on Devil RootKit, also see Xzibit))1.42) MOODNT(Mood-NT Rootkit)1.43) NIO(Ni0 Rootkit)1.44) OHHARA(Ohhara Rootkit)1.45) OPTICKIT(Optic Kit (Tux variant) Rootkit)1.46) OSXRK(OSX Rootkit 0.2.1 (OSXRK))1.47) OZ(Oz Rootkit)1.48) PHALANX(Phalanx Rootkit)1.49) PHALANX2(Phalanx2 Rootkit)1.50) PORTACELO(Portacelo Rootkit)1.51) REDSTORM(R3dstorm Toolkit)1.52) RHSHARPES(RH-Sharpe's Rootkit)1.53) RSHA(RSHA's Rootkit)1.54) SHUTDOWN(Shutdown Rootkit)1.55) SCALPER(Scalper (FreeBSD.Scalper.Worm) Worm)1.56) SHV4(SHV4 Rootkit)1.57) SHV5(SHV5 Rootkit)1.58) SINROOTKIT(Sin Rootkit)1.59) SLAPPER(Slapper Worm)1.60) SNEAKIN(Sneakin Rootkit)1.61) WANUKDOOR(Solaris Wanuk backdoor)1.62) WANUKWORM(Solaris Wanuk Worm (ELF_WANUK.A))1.63) SPANISH(Spanish' Rootkit)1.64) SUCKIT(Suckit Rootkit)1.65) NSDAP(SunOS / NSDAP Rootkit)1.66) SUNOSROOTKIT(SunOS Rootkit)1.67) SUPERKIT(Superkit Rootkit (Suckit 1.3b-based))1.68) TBD(Telnet Backdoor)1.69) TELEKIT(TeLeKiT Rootkit)1.70) TOGROOT(OSX Togroot Rootkit)1.71) TORN(T0rn (and misc) Rootkit)1.72) TRNKIT(trNkit Rootkit)1.73) TROJANIT(Trojanit Kit Rootkit)1.74) TURTLE(Turtle / Turtle2 Rootkit)1.75) TUXTENDO(Tuxtendo (Tuxkit) Rootkit)1.76) URK(Universal Rootkit by K2 (URK) Release 0.9.8)1.77) VCKIT(VcKit Rootkit)1.78) VAMPIRE(Vampire Rootkit)1.79) VOLC(Volc Rootkit)1.80) WEAPONX(weaponX 0.1)1.81) XZIBIT(Xzibit Rootkit)1.82) XORGSUNOS(X-Org SunOS Rootkit)1.83) ZARWT(zaRwT.KiT Rootkit)1.84) ZK(ZK Rootkit)1.85) LOGIN(Miscellaneous login backdoors)1.86) SUSPICIOUS(Suspicious directories)2) STRINGSCAN(Evil strings)檢查某個二進制系統命令或啟動文件總是否存在某個字符串,如存在則有危險 很多rootkit啟動后,會將系統默認的指令程序替換為攜帶惡意后門代碼的同名指令程序,從常規的做法來看,我們可以通過建立一個"MD5哈希列表"來對關鍵目錄下的指令程序進行完整性檢測(事實上這也是一個最好的方法,但是問題就是如果考慮到跨版本、跨內核、用戶自定義等因素,系統下的指令程序可能會有很多版本,用MD5完整性檢測的方法可能會有問題),而rkhunter采用了另一種思考方式,從替換后的行為結果的角度來對這類指令劫持、替換的攻擊進行檢測2.1) crond crond:LOGNAME=root:Illogic Rootkit(其中crond是二進制命令的文件名,LOGNAME=root是要搜索的字符串,Illogic Rootkit是rootkit病毒的描述)2.2) hostnamehostname:phalanx:Phalanx Rootkit2.3) initinit:/dev/proc/fuckit:Fuckit Rootkitinit:FUCK:Suckit Rootkitinit:backdoor:Suckit Rootkit (backdoored init file)init:/usr/bin/rcpc:Portacelo Rootkitinit:/usr/sbin/login:trNkit Rootkit ulogin2.4) killallkillall:/dev/ptyxx/.proc:Ambient (ark) Rootkit2.5) loginlogin:vt200:Linux Rootkit (LRK4)login:/usr/bin/xstat:Linux Rootkit (LRK4)login:/bin/envpc:Linux Rootkit (LRK4)login:L4m3r0x:Linux Rootkit (LRK4)login:/lib/libext:SHV4 Rootkitlogin:/usr/sbin/login:Flea Linux Rootkitlogin:/usr/lib/.tbd:TBD Rootkitlogin:sendmail:Ambient (ark) Rootkitlogin:cocacola:cb Rootkitlogin:joao:Spanish Rootkit2.6) lsls:/dev/ptyxx/.file:Dica-Kit Rootkitls:/dev/ptyxx/.file:Ambient (ark) Rootkitls:/dev/sgk:Linux Rootkit (LRK4)ls:/var/lock/subsys/...datafile...:Ohhara Rootkitls:/usr/lib/.tbd:TBD Rootkit2.7) netstatnetstat:/dev/proc/fuckit:Fuckit Rootkitnetstat:/lib/.sso:Dica-Kit Rootkitnetstat:/var/lock/subsys/...datafile...:Ohhara Rootkitnetstat:/dev/caca:MRK Rootkitnetstat:/dev/ttyoa:Sin Rootkitnetstat:/usr/lib/ldlibns.so:Flea Linux Rootkitnetstat:/dev/ptyxx/.addr:Ambient (ark) Rootkitnetstat:syg:Trojaned netstat2.8) nscdnscd:sshd_config:Backdoor shell installed (SSH)2.9) psps:/var/lock/subsys/...datafile...:Ohhara Rootkit or Ni0 Rootkitps:/dev/pts/01:Universal Rootkit (URK)ps:tw33dl3:SunOS Rootkitps:psniff:SunOS Rootkitps:uconf.inv:Universal Rootkit (URK)ps:lib/ldlibps.so:Flea Linux Rootkit or Universal Rootkit (URK)pstree:/usr/lib/ldlibpst.so:Flea Linux Rootkitps:libproc.so.2.0.7:Fuckit Rootkitps:/dev/ptyxx/.proc:Ambient (ark) Rootkitpstree:/dev/ptyxx/.proc:Ambient (ark) Rootkit2.10) sshdsshd:/dev/ptyxx:OpenBSD Rootkitsshd:/.config:SHV4 Rootkitsshd:+\\$.*\\$\!.*\!\!\\$:Backdoored SSH daemon installedsshd:backdoor.h:Trojaned SSH daemonsshd:backdoor_active:Trojaned SSH daemonsshd:magic_pass_active:Trojaned SSH daemonsshd:/usr/include/gpm2.h:Trojaned SSH daemonsshd:/usr/include/openssl:Trojaned SSH daemonsshd:aion:Trojaned SSH daemonsshd:pcszPass:Trojaned SSH daemonsshd:LogPass:Trojaned SSH daemonsshd:Login_Check:Trojaned SSH daemonsshd:includes.h:Trojaned SSH daemonsshd:DecodeString:Trojaned SSH daemonsshd:EncodeString:Trojaned SSH daemon2.11) rcfilercfile:in.inetd:SHV4 Rootkit(rcfile表示要在啟動文件中去搜索,in.inetd是要搜索的字符串,SHV4 Rootkit是rootkit病毒的描述)rcfile:+#<HIDE_.*>:Enye LKMrcfile:bin/xchk:Optic Kit (Tux) Wormrcfile:bin/xsf:Optic Kit (Tux) Wormrcfile:/usr/bin/ssh2d:Flea Linux Rootkit or Optic Kit (Tux variant) Rootkit or SunOS Rootkit rcfile:/usr/sbin/xntps:SHV4 Rootkitrcfile:ttyload:SHV5 Rootkitrcfile:/etc/rc.d/init.d/init:cb Rootkit or w00tkit Rootkitrcfile:usr/bin/xfss:Devil Rootkitrcfile:/usr/sbin/rpc.netinet:FreeBSD (FBRK) Rootkitrcfile:/usr/lib/.fx/cons.saver:FreeBSD (FBRK) Rootkitrcfile:/usr/lib/.fx/xs:FreeBSD (FBRK) Rootkitrcfile:/ssh2d:Illogic Rootkit or SunOS Rootkitrcfile:/dev/kmod:Illogic Rootkit or SunOS Rootkitrcfile:/crth.o:Illogic Rootkit or SunOS Rootkitrcfile:/crtz.o:Illogic Rootkit or SunOS Rootkitrcfile:/dev/dos:Illogic Rootkit or SunOS Rootkitrcfile:/lpq:Illogic Rootkit or SunOS Rootkitrcfile:/usr/sbin/rescue:Spanish Rootkitrcfile:/usr/lib/lpstart:SunOS NSDAP Rootkit or Universal Rootkit (URK)rcfile:/volc:Volc Rootkitrcfile:sourcemask:Rootkit componentrcfile:/bin/vobiscum:Rootkit componentrcfile:/usr/sbin/in.telnet:Rootkit componentrcfile:/usr/bin/hdparm?-t1?-X53?-p:Xzibit Rootkitrcfile:/lib/.xsyslog:Flooder (Linux/Bckdr-RKC) componentrcfile:/etc/.xsyslog:Flooder (Linux/Bckdr-RKC) componentrcfile:/lib/.ssyslog:Flooder (Linux/Bckdr-RKC) componentrcfile:/tmp/.sendmail:Flooder (Linux/Bckdr-RKC) component 3) FILESCAN 通過檢查某個文件或目錄是否存在來判斷對應的rootkit病毒是否存在3.1) 文件file:/dev/sdr0:T0rn Rootkit MD5 hash database(file表示后面的字段是一個文件,/dev/sdr0就是要搜索的文件,后面的字段是rootkit病毒的描述)file:/dev/pisu:Rootkit componentfile:/dev/xdta:Dica-Kit Rootkitfile:/dev/saux:Trojaned SSH daemon sniffer logfile:/dev/hdx:Linux.RST.B infectionfile:/dev/hdx1:Linux.RST.B infectionfile:/dev/hdx2:Linux.RST.B infectionfile:/dev/ptyy:Rootkit componentfile:/dev/ptyu:Rootkit componentfile:/dev/ptyv:Rootkit componentfile:/dev/hdbb:Rootkit componentfile:/tmp/.syshackfile:Trojaned syslog daemonfile:/tmp/.bash_history:Lite5-r Rootkitfile:/usr/info/.clib:Backdoor componentfile:/usr/sbin/tcp.log:Sniffer logfile:/usr/bin/take/pid:Trojaned SSH daemonfile:/sbin/create:MzOzD Local backdoorfile:/dev/ttypz:spwn login backdoorfile:/var/log/tcp.log:beX2 Rootkitfile:/usr/include/audit.h:beX2 Rootkitfile:/usr/bin/sourcemask:Rootkit componentfile:/usr/bin/ras2xm:Rootkit componentfile:/dev/xmx:Dica-Kit Rootkitfile:/usr/sbin/gpm.root:Rootkit componentfile:/bin/vobiscum:Rootkit componentfile:/bin/psr:Rootkit componentfile:/dev/kdx:Rootkit componentfile:/dev/dkx:Rootkit componentfile:/usr/sbin/sshd3:Rootkit componentfile:/usr/sbin/jcd:Rootkit componentfile:/etc/rc.d/init.d/jcd:Rootkit componentfile:/usr/sbin/atd2:Rootkit componentfile:/home/httpd/cgi-bin/linux.cgi:Dica-Kit Rootkitfile:/home/httpd/cgi-bin/psid:Dica-Kit Rootkitfile:/home/httpd/cgi-bin/void.cgi:Dica-Kit Rootkitfile:/etc/rc.d/init.d/system:Rootkit componentfile:/etc/rc.d/rc3.d/S93users:Rootkit componentfile:/tmp/.ush:Dica-Kit Rootkitfile:/usr/lib/libhidefile.so:HIDEFILE envvar file-hiding libraryfile:/etc/cron.d/kmod:Illogic Rootkitfile:/usr/lib/dmis/dmisd:Trojaned SSH daemonfile:/lib/secure/libhij.so:Solaris Trojaned SSH daemonfile:/usr/sbin/sshd3:Rootkit componentfile:/etc/rc.d/init.d/crontab:Rootkit componentfile:/etc/rc.d/init.d/jcd:Rootkit componentfile:/usr/sbin/atd2:Rootkit componentfile:/etc/rc.d/rc5.d/S93users:Rootkit componentfile:/usr/include/mysql/mysql.hh1:Rootkit componentfile:/etc/init.d/xfs3:Rootkit componentfile:/usr/sbin/t.txt:Opyum kit componentfile:/usr/sbin/change:Opyum kit componentfile:/usr/sbin/s:Opyum kit componentfile:/bin/f:Opyum kit componentfile:/bin/i:Opyum kit componentfile:/lib/libncom.so.4.0.1:ncom rootkit libraryfile:/sbin/zinit:Rootkit componentfile:/tmp/pass_ssh.log:Trojaned SSH daemonfile:/usr/include/gpm2.h:Trojaned SSH daemonfile:/etc/ssh/.sshd_auth:Trojaned SSH daemon (logins)file:/usr/lib/.sshd.h:Trojaned SSH daemon (logins)file:/var/run/.defunct:Trojaned SSH daemonfile:/etc/httpd/run/.defunct:Trojaned SSH daemonfile:/usr/share/pci.r:Trojaned Syslog daemonfile:/etc/cron.daily/dnsquery:Snifferfile:/usr/lib/libutil1.2.1.2.so:Trojaned SSH daemon component (hwclock binary)file:/bin/ceva:Trojaned SSH daemon (client binary)file:/sbin/syslogd%:Trojaned SSH daemon (sebd)file:/usr/include/shup.h:Trojaned SSH daemon (client binary)file:/etc/rpm/sshdOLD:Trojaned SSH daemon (original sshd binary)file:/etc/rpm/sshOLD:Trojaned SSH daemon (original ssh binary)file:/usr/share/passwd.h:Trojaned SSH daemon (default configuration)file:/lib/.xsyslog:Flooder (Linux/Bckdr-RKC) componentfile:/etc/.xsyslog:Flooder (Linux/Bckdr-RKC) componentfile:/lib/.ssyslog:Flooder (Linux/Bckdr-RKC) componentfile:/tmp/.sendmail:Flooder (Linux/Bckdr-RKC) componentfile:/usr/share/sshd.sync:Trojaned SSH daemonfile:/bin/zcut:Trojaned SSH daemonfile:/usr/bin/zmuie:Trojaned SSH daemonfile:/lib/libkeyutils.so.1.9:Sniffer componentfile:/lib64/libkeyutils.so.1.9:Sniffer componentfile:/usr/lib/libkeyutils.so.1.9:Spam tool componentfile:/usr/lib64/libkeyutils.so.1.9:Spam tool component3.2) 目錄 dir:/dev/ptyas:Langsuir installation directory(dir表示后面的字段是一個目錄,/dev/ptyas就是要搜索的目錄)dir:/usr/bin/take:Trojaned SSH daemondir:/usr/src/.lib:Rootkit componentdir:/usr/share/man/man1/.1c:Eggdrop (IRC bot)dir:/lib/lblip.tk:T0rn Rootkit directory with backdoored SSH-configurationdir:/usr/sbin/...:Rootkit componentdir:/usr/share/.gun:Rootkit componentdir:/unde/vrei/tu/sa/te/ascunzi/in/server:Unknown rootkitdir:/usr/man/man1/..%%/.dir:Unknown rootkitdir:/usr/X11R6/include/X11/...:Unknown rootkitdir:/usr/X11R6/lib/X11/.fonts/misc/...:Unknown rootkitdir:/tmp/.sys:Rootkit componentdir:/tmp/':Rootkit componentdir:/tmp/.,:Rootkit componentdir:/tmp/,.,:Rootkit componentdir:/dev/shm/emilien:Rootkit componentdir:/var/tmp/.log:Rootkit componentdir:/tmp/zmeu/...%:Rootkit componentdir:/var/log/ssh:Rootkit componentdir:/dev/ida:Rootkit componentdir:/var/lib/games/.src/ssk/shit:Rootkit componentdir:/usr/lib/libshtift:Rootkit componentdir:/usr/src/.poop:Ramen wormdir:/dev/wd4:IRC botdir:/var/run/.tmp:Rootkit componentdir:/usr/man/man1/lib/.lib:Rootkit componentdir:/dev/portd:Rootkit componentdir:/dev/...:Rootkit componentdir:/usr/share/man/mansps:Rootkit componentdir:/lib/.so:Rootkit componentdir:/lib/.sso:Rootkit componentdir:/usr/include/sslv3:Rootkit componentdir:/dev/shm/sshd:Trojaned SSH daemondir:/usr/share/locale/mk/.dev/sk:Snifferdir:/usr/share/locale/mk/.dev:Snifferdir:/usr/include/netda.h:Trojaned SSH daemondir:/usr/include/.ssh:Trojaned SSH daemondir:/usr/share/locale/jp/.%:IRC botdir:/usr/share/.sqe:IRC bot" 4) RCLOCAL_STRINGS 在系統啟動文件中搜索特定的字符串,如果搜到,則說明有危險/usr/bin/rpc.wall:Linux Rootkit (LRK4)(其中/usr/bin/rpc.wall就是要搜索的字符串,后面的Linux Rootkit (LRK4)是對應的rootkit病毒說明)sshdd:GasKit Rootkithidef:Knark Rootkit/usr/bin/.etc:Dica-Kit Rootkit5) LKM_BADNAMES 搜索/lib/modules/`uname -r 2>/dev/null`(這個目錄也可由用戶在配置文件中指定)目錄中是否存在已知的危險模塊adore.obkit-adore.ocleaner.oflkm.oknark.omodhide.omod_klgr.ophide_mod.ovlogger.op2.korpldev.oxC.ostrings.owkmr26.ko
?
4. do_system_commands_checks
該函數用來檢查一些系統二進制命令和系統庫文件,確保這些文件沒有被篡改。因為后面的各項檢查都會用到這些命令和庫?????
?
5. do_rootkit_checks
該函數用來檢查rootkit病毒和木馬
/* 1. rootkit_file_dir_checks 該函數通過檢查和已知rootkit病毒相關聯的文件或目錄或內核符號是否存在來確定該rootkit病毒是否存在(即還是判斷對應文件、目錄是否存在的思路) */ rootkit_file_dir_checks check_test known_rkts || check_test all && keypresspause/* 2. 該函數用來補充檢查rootkit。依次調用如下子函數:2.1 suckit_extra_checks該函數用來專門檢查suckit病毒,檢查方法:1) 查看/sbin/init文件有幾個硬鏈接,如果硬鏈接數大于1,則有可能存在suckit病毒。2) 查看以xrk和mem為后綴的文件是否被隱藏。方法是:2.1) 分別新建兩個以xrk和mem為后綴的臨時文件,然后查看其是否存在2.2) 如果不存在,則說明該文件被隱藏了,可能存在suckit病毒3) 測試skdet命令是否存在,如果存在,則對該命令進行一些測試,根據其結果判斷是否存在suckit病毒2.2 possible_rootkit_file_dir_checks 該函數用來檢查一些特定的rootkit是否存在。檢查方法是:1) 通過檢查某個文件或目錄是否存在來判斷對應的rootkit病毒是否存在。使用的數據(存在變量FILESCAN中)格式例如:file:/dev/sdr0:T0rn Rootkit MD5 hash database 1.1) file表示后面的字段是一個文件1.2) /dev/sdr0就是要搜索的文件1.3) 后面的字段是rootkit病毒的描述2) dir:/dev/ptyas:Langsuir installation directory 2.1) dir表示后面的字段是一個目錄2.2) /dev/ptyas就是要搜索的目錄3.3 possible_rootkit_string_checks該函數用來檢查某個二進制系統命令或啟動文件總是否存在某個字符串,如存在則有危險 ,使用的數據(存在變量STRINGSCAN中)格式例如: 1) crond:LOGNAME=root:Illogic Rootkit1.1) crond是二進制命令的文件名1.2) LOGNAME=root是要搜索的字符串1.3) Illogic Rootkit是rootkit病毒的描述2) rcfile:in.inetd:SHV4 Rootkit2.1) rcfile表示要在啟動文件中去搜索2.2) in.inetd是要搜索的字符串2.3) SHV4 Rootkit是rootkit病毒的描述3) 默認要搜索的啟動文件(定義在變量RCLOCATIONS中)包括如下文件和目錄,用戶也可通過配置文件自己指定要搜索的啟動文件和目錄(定義STARTUP_PATHS字段)3.1) RCLOCATIONS=/etc/rc.d /etc/rc.local3.2) /usr/local/etc/rc.d3.3) /usr/local/etc/rc.local3.4) /etc/conf.d/local.start3.5) /etc/init.d3.6) /etc/inittab上面路徑有些是目錄,表示該目錄下(遞歸包含子目錄)所有的"普通文件"(且不為符號鏈接)都要進行搜索 */ additional_rootkit_checks/* 3. malware_checks 該函數用來檢查malware病毒 */ malware_checks/* 4. trojan_checks 該函數用來檢查木馬。會依次進行以下檢查:1. 檢查/etc/inetd.conf文件2. 檢查/etc/xinetd.conf文件3. 檢查apache后門模塊。方法是:1) 查看mod_rootme.so和mod_rootme2.so兩個文件是否存在2) 若存在,查看httpd.conf文件中是否有mod_rootme2.so字符串存在,若存在則說明有問題 */ trojan_checks/* 5. os_specific_checks 該函數用來檢查和操作系統相關的項目,對于linux系統來說,這里調用linux_specific_checks函數進行檢查。依次調用如下函數進行檢查:5.1 linux_loaded_modules該函數用來檢查當前加載的內核模塊。方法是:1) 測試lsmod命令的結果和/proc/modules文件中的內容是否一致,如果不一致則說明有危險,存在隱藏LKM的rootkit5.2 inux_avail_modules該函數用來檢查系統中是否存有已知的危險模塊。方法是:1) 搜索/lib/modules/`uname -r 2>/dev/null`(這個目錄也可由用戶在配置文件中指定)目錄中是否存在已知的危險模塊。危險模塊的名稱存放在LKM_BADNAMES變量中,內容如下:1.1) LKM_BADNAMES=adore.o1.2) bkit-adore.o1.3) cleaner.o1.4) flkm.o1.5) knark.o1.6) modhide.o1.7) mod_klgr.o1.8) phide_mod.o1.9) vlogger.o1.10) p2.ko1.11) rpldev.o1.12) xC.o1.13) strings.o1.14) wkmr26.ko */ os_specific_checks?
6. do_network_checks
該函數用來檢查網絡相關的內容
/* 1. do_network_port_checks 該函數用來檢查網絡端口,掃描是否有已知的后門端口被使用,檢查原理是: 1.1 在數據庫文件backdoorports.dat中存放有多條后門端口的記錄,格式如下: <port>:<description>:protocol1) port表示端口號,其值在1-65535之間2) description是后門木馬的描述3) protocol是協議類型,為TCP或者UDP 例如: 1984:Fuckit Rootkit:TCP: 該條記錄表示Fuckit Rootkit這個rootkit病毒以TCP協議的方式使用了1984端口1.2真正的檢查工作是在函數check_port_wl中完成的1) 程序從backdoorports.dat中依次讀出每條記錄,解析出端口和協議2) 用lsof命令來搜索以該協議方式使用該端口的進程(lsof -wnlP -i TCP:1984)并拿到其PID3) 根據這個PID得到進程名稱4) 如果lsof命令沒有搜索到以該協議方式使用該端口的進程或該端口在用戶設置的白名單中,就說明沒有危險,否則有危險(即正常情況下,已知的正常軟件只會工作在已知的端口上,而已知的端口也只會跑已知的正常軟件,如果超出這個范圍,則說明有可疑情況) */ do_network_port_checks/* 2. do_network_hidden_port_checks 該函數用來掃描隱藏端口。掃描時需要使用unhide-tcp命令 */ do_network_hidden_port_checks/* 3. do_network_interface_checks 該函數用來掃描是否有網絡接口處于混雜模式和是否有抓包應用程序。 檢查混雜模式的方法: 3.1 查看下面兩個命令的輸出結果:1) ifconfig 2>&1 | awk 'BEGIN { RS="" }; /PROMISC/ { print }'2) ip link | grep '^[0-9]' | grep -vE "^[0-9][0-9]*: (${IFWLIST}):" | grep 'PROMISC'2.1) 其中IFWLIST變量存放的是白名單網絡接口 如果上述兩個命令的輸出為空,則說明沒有處于混雜模式的網絡接口,否則存在處于混雜模式的網路接口3.2 檢查抓包程序的方法:1) 先運行命令egrep -v '^sk|888e' /proc/net/packet | awk '{ print $9 }'得到一個inode列表,將其存放在變量INODE_LIST中。2) 然后用命令lsof -lMnPw -d 1-20 | egrep "[ ](${INODE\_LIST})[ ]" | awk '{ print $2 }'得到各個inode對應的PID3) 并利用/proc/$PID/exe或/proc/$PID/status文件得到進程名稱。4) 如果得到的進程名稱沒有在白名單列表中,則說明該進程就是抓包軟件 (將網絡連接情況映射到對應的具體程序) */ do_network_interface_checks
?
7. do_local_host_checks
該函數用來掃描本地主機
/* 1. do_system_startup_file_checks 該函數用來檢查系統啟動文件 1.1檢查主機名:1) 先用hostname命令查看主機名2) 如果為空則用uname -n命令查看主機名3) 如果仍為空,說明有問題1.2 檢查系統啟動文件: 1) 檢查方法是在系統啟動文件中搜索特定的字符串,如果搜到,則說明有危險2) 要搜索的字符串存放在變量RCLOCAL_STRINGS中 */ do_system_startup_file_checks/* 2. do_group_accounts_check 該函數用來檢查系統帳戶和組2.1 先檢查/etc/passwd文件是否存在且為非空白文件,如果不存在或為空則告警。2.2 找出/etc/passwd文件中uid為0(即擁有root權限)的所有帳戶的帳戶名(用命令grep '^[^:]*:[^:]*:0:' /etc/passwd | cut -d: -f1),如果這些帳戶名不在用戶設置的白名單中(root默認在白名單中),則說明存在危險2.3 檢查所有的無密碼帳戶,分為兩步:1) 首先在shadow文件(/etc/shadow及tcb相關文件)中搜索空密碼帳戶:grep '^[^:]*::' ${SHADOW\_FILE} | cut -d: -f12) 然后在/etc/passwd文件中搜索空密碼帳戶:grep '^[^:]*::' /etc/passwd | cut -d: -f1這兩步中得到的結果,要忽略帳戶名為"+"的帳戶(這個和NIS/YP有關)并要進行白名單檢查。如果仍然有空密碼帳戶,則有危險,需要告警2.4 檢查自從上次運行rkhunter以來,/etc/passwd的內容文件有沒有變化rkhunter腳本在運行后會在一個臨時目錄中保存當前系統的/etc/passwd文件。進行該項檢查時,用diff命令來比較上次保存的passwd文件和系統當前的/etc/passwd文件,如果有變化則告警。2.5 檢查自從上次運行rkhunter以來,/etc/gourp的內容文件有沒有變化2.6 檢查root帳戶的shell的history1) /root/.bash_history(bash)2) /root/.sh_history(Korn)3) /root/.history(C-shell)4) /root/.zhistory(zsh)四個文件是否存在,并且是否為符號鏈接文件,如果是則存在危險 */ do_group_accounts_check/* 3. do_system_config_files_check 該函數用來檢查指定系統軟件的配置文件。當前檢查的配置文件包括SSH和syslog3.1 在/etc、/etc/ssh、/usr/local/etc、/usr/local/etc/ssh目錄尋找SSH的配置文件sshd_config3.2 查看sshd是否允許root用戶用SSH登陸(sshd_config文件中PermitRootLogin字段)。看其和rkhunter配置文件中用戶的設置(ALLOW_SSH_ROOT_USER字段)是否相同,不相同則告警。如果ALLOW_SSH_ROOT_USER字段沒有被設置,則rkhunter默認不允許root用戶用SSH登陸。注意:sshd本身默認是允許root用戶登陸的3.3 查看sshd的協議版本是否為1(sshd_config文件中Protocol字段),若為1則告警3.4 查看syslog守護程序是否在運行1) 運行命令ps ax | egrep '(syslogd|syslog-ng)( |$)' | grep -v 'egrep'2) 若結果為空,運行命令ps ax | egrep 'metalog( |$)' | grep -v 'egrep'3) 若結果為空,運行命令ps ax | egrep 'socklog( |$)' | grep -v 'egrep'4) 若結果為空,則告警。5. 檢查syslog的配置文件是否允許遠程日志 */ do_system_config_files_check/* 4. do_filesystem_check 該函數用來檢查文件系統的可疑文件 */ do_filesystem_check
?
8. do_app_checks
該函數用來檢查一些特定的應用程序?
1. 本函數會用到一個數據庫文件:programs_bad.dat 在這個文件中存放著多個已知的有BUG的應用程序的名稱及其對應的版本號 ,本函數要檢查的應用程序名稱存放在變量APP_NAMES中,其定義如下:1) APP_NAMES=2) exim:Exim MTA3) gpg:GnuPG4) httpd:Apache5) named:Bind DNS6) openssl:OpenSSL7) php:PHP8) procmail:Procmail MTA9) proftpd:ProFTPD10) sshd:OpenSSH 其中冒號前面是應用程序的名稱,冒號后面是描述信息2. 本函數會用到的白名單:在rkhunter的配置文件/etc/rkhunter.conf中 字段APP_WHITELIST存放著用戶指定的應用程序白名單 檢查步驟:1) 用find命令找出APP_NAMES中包含的應用程序的全路徑。2) 用各個應用程序得到其對應的版本號。3) 依次查看各個應用程序是否在白名單中,如果不在,則進行下一步檢查。4) 依次在programs_bad.dat中搜索上述各個應用程序及其對應的版本號,如果搜到了,則說明該版本程序有問題,需要向用戶告警結束了do_app_checks之后,rkhunter的主代碼邏輯基本結束,接下來就是顯示檢測結果的時候
Relevant Link:
?
Copyright (c) 2014 LittleHann All rights reserved
?
轉載于:https://www.cnblogs.com/LittleHann/p/3879118.html
總結
以上是生活随笔為你收集整理的Rootkit Hunter Sourcecode Learning的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS 打印语句
- 下一篇: XEN的clone和copy那点事