網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來(lái)的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)資源、信息資源、知識(shí)資源、專家資源、大型數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。 1. 帳號(hào)后門 檢查/etc/passwd、/etc/shadow文件中如下帳號(hào)是否已經(jīng)擁有合法登錄shell、登錄口令 bin、daemon、adm、lp、sync、shutdown、halt、mail、news、uucp、games、 gopher、ftp、nobody、xfs、named、gdm、sys、nuucp、listen /etc/passwd文件格式如下 username : password : uid : gid : comment : home_directory : shell 建議對(duì)/etc/passwd、/etc/shadow文件做備份,保留在其他主機(jī)或可移動(dòng)介質(zhì)上,定期對(duì) 比,檢查是否增加了異常帳號(hào)。 2. $HOME/.rhosts后門 趁系統(tǒng)干凈的時(shí)候,記錄、備份/etc/hosts.equiv和$HOME/.rhosts文件,定期掃描檢查 是否增加了這類文件以及原有文件內(nèi)容是否改變 3. binary木馬后門 二進(jìn)制木馬后門是將系統(tǒng)二進(jìn)制可執(zhí)行文件替換成特洛伊(trojan)木馬文件來(lái)達(dá)到放置后 門的效果。可能是獲取了源代碼,修改后重新編譯。或者借助其他技術(shù)直接向二進(jìn)制程序 文件中植入代碼。 對(duì)這類后門檢測(cè)的第一步是檢查時(shí)間戳與校驗(yàn)和,假設(shè)已經(jīng)對(duì)文件用類似TripWire這類工 具作了時(shí)間戳與校驗(yàn)和記錄。如果沒(méi)有使用過(guò)TripWire,用"ls -l"和"stat"命令檢查時(shí) 間戳,是否有明顯不協(xié)調(diào)的文件。如果存在,極可能被替換成特洛伊木馬植入后門了,仔 細(xì)作進(jìn)一步查證。 對(duì)于網(wǎng)絡(luò)應(yīng)用程序,運(yùn)行后用netstat和lsof命令查看是否存在不正常的行為。尤其是查 看有無(wú)異常端口被打開(kāi),有無(wú)異常文件被打開(kāi)。 作進(jìn)一步查證時(shí),第一步是用strings命令查找程序中有無(wú)異常字符串。第二步,如有必 要,需要將現(xiàn)有二進(jìn)制代碼與確認(rèn)干凈的二進(jìn)制代碼進(jìn)行比較。 對(duì)于這類后門,重點(diǎn)檢查這樣一些程序 in.ftpd、in.telnetd、in.rshd、in.rlogind、in.rexecd、in.talkd、in.tnamed、 in.uucpd、in.tftpd、in.fingerd、sadmind、rquotad、rpc.rusersd、rpc.sprayd、 rpc.rwalld、rpc.rstatd、rpc.rexd、rpc.ttdbserverd、rpc.cmsd、kcms_server、ufsd、 fs.auto、cachefsd、kerbd、in.lpd、gssd、dtspcd、in.comsat /etc/init.d目錄中啟動(dòng)腳本調(diào)用的二進(jìn)制可執(zhí)行程序 ANNOUNCE MOUNTFSYS PRESERVE RMTMPFILES ab2mgr afbinit audit autofs autoinstall buildmnttab cachefs.daemon cachefs.root cacheos cacheos.finish cron devlinks drvconfig dtlogin inetinit inetsvc init.dmi init.snmpdx initpcmcia keymap lp mkdtab nfs.client nfs.server nscd pcmcia power rootusr rpc savecore sendmail spc standardmounts sysetup sysid.net sysid.sys syslog ufs_quota utmpd volmgt xntpd 除了上面所列的,還要注意下面這些后門 1) login后門 如果"strings /usr/bin/login | grep crypt"有輸出,很可能是木馬。 2) ls、dir、vdir后門 ls、dir、vdir后門的用意在于隱藏文件和目錄。如果執(zhí)行這些命令時(shí)可以加"-/"選項(xiàng)(原 有代碼中不支持這個(gè)選項(xiàng)),則說(shuō)明已經(jīng)被植入木馬了。 檢查/dev目錄,查找是否有諸如"/dev/ptyr"之類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyr 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyr 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,說(shuō)明已經(jīng)有木馬了。如果strings ls | grep "/dev/pty"有輸出,或者直接 strings ls發(fā)現(xiàn)可疑路徑和文件名,說(shuō)明已經(jīng)有木馬。對(duì)dir、vdir也一樣。 3) du后門 du后門同樣是用來(lái)隱藏文件和目錄的。如果命令行中執(zhí)行這個(gè)命令可以加"-/"選項(xiàng)(原有 代碼中沒(méi)有這個(gè)選項(xiàng)),那么說(shuō)明已經(jīng)被植入木馬了。檢查/dev目錄,查找是否有諸如 "/dev/ptyr"之類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyr 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyr 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,說(shuō)明已經(jīng)有木馬了。如果strings du | grep "/dev/pty"有輸出,或者直接 strings du發(fā)現(xiàn)可疑路徑和文件名,說(shuō)明已經(jīng)有木馬。 [page_break] 4) ifconfig后門 ifconfig后門就是把下面一行代碼注釋掉 if ( ptr->flags & IFF_PROMISC ) printf( "PROMISC " ); 以去掉網(wǎng)卡混雜模式顯示。如果"strings /sbin/ifconfig | grep PROMISC"沒(méi)有輸出, ifconfig肯定已被修改過(guò)了。 5) netstat后門 檢查/dev目錄,檢查是否存在"/dev/ptyq"一類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyq 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyq 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,而執(zhí)行netstat時(shí)用lsof發(fā)現(xiàn)它被打開(kāi),說(shuō)明netstat被植入木馬。如果命令行 中netstat接受"-/"選項(xiàng)(原有代碼中沒(méi)有這個(gè)選項(xiàng)),那么,netstat肯定被修改過(guò)了。 如果strings netstat | grep "/dev/pty"有輸出,或者直接strings netstat發(fā)現(xiàn)可疑 路徑或文件名,說(shuō)明已經(jīng)被修改過(guò)。 netstat木馬程序的一個(gè)實(shí)現(xiàn)不支持"-p"選項(xiàng),而系統(tǒng)自身的netstat實(shí)現(xiàn)支持"-p"選項(xiàng)。 因此如果發(fā)現(xiàn)netstat不支持"-p"選項(xiàng),肯定netstat被修改過(guò)。另外,Linux系統(tǒng)的"-p" 選項(xiàng)表示打印出進(jìn)程號(hào)(pid)和程序名(program name)信息,而Solaris系統(tǒng)上"-p"表示打 印出ARP Cache信息。如果發(fā)現(xiàn)與這一點(diǎn)不符,netstat就被修改過(guò)。 6) ps后門 檢查/dev目錄,查找是否有諸如"/dev/ptyp"之類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyp 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyp 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,而執(zhí)行ps時(shí)用lsof發(fā)現(xiàn)它被打開(kāi),說(shuō)明ps被植入木馬。如果命令行中ps接受"-/" 選項(xiàng)(原有代碼中沒(méi)有這個(gè)選項(xiàng)),那么ps肯定被修改過(guò)。如果 strings ps | grep "/dev/pty"有輸出,或者直接strings ps發(fā)現(xiàn)可疑路徑和文件名,說(shuō) 明已經(jīng)被植入木馬。 7) top后門 檢查/dev目錄,查找是否有諸如"/dev/ptyp"之類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyp 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyp 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,而執(zhí)行top時(shí)用lsof發(fā)現(xiàn)它被打開(kāi),說(shuō)明ps被植入木馬。如果命令行中top接 受"-/"選項(xiàng)(原有代碼中沒(méi)有這個(gè)選項(xiàng)),那么top肯定被修改過(guò)。如果 strings top | grep "/dev/pty"有輸出,或者直接strings top發(fā)現(xiàn)可疑路徑和文件名, 說(shuō)明已經(jīng)被植入木馬。 8) tcpd后門 tcpd中有一段代碼,這段代碼對(duì)遠(yuǎn)程主機(jī)名進(jìn)行查詢和檢查,拒絕可疑連接。木馬的目的 是使這段代碼失效。 檢查/dev目錄,查找是否有諸如"/dev/ptyq"之類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyq 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyq 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,而啟動(dòng)tcpd時(shí)用lsof發(fā)現(xiàn)它被打開(kāi),說(shuō)明tcpd被植入木馬。如果tcpd接受"-/" 選項(xiàng)(原有代碼中沒(méi)有這個(gè)選項(xiàng)),那么tcpd肯定被修改過(guò)。如果 strings tcpd | grep "/dev/pty"有輸出,或者直接strings tcpd發(fā)現(xiàn)可疑路徑和文件名, 說(shuō)明已經(jīng)被植入木馬。 [page_break]9) syslogd后門 檢查/dev目錄,查找是否有諸如"/dev/ptys"之類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptys 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptys 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,而啟動(dòng)syslogd時(shí)用lsof發(fā)現(xiàn)它被打開(kāi),說(shuō)明syslogd被植入木馬。如果 strings syslogd | grep "/dev/pty"有輸出,或者直接strings syslogd發(fā)現(xiàn)可疑路徑和 文件名,說(shuō)明已經(jīng)被植入木馬。 10) killall后門 檢查/dev目錄,查找是否有諸如"/dev/ptyp"之類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyp 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyp 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,而執(zhí)行killall時(shí)用lsof發(fā)現(xiàn)它被打開(kāi),說(shuō)明killall被植入木馬。如果killall 接受"-/"選項(xiàng)(原有代碼中沒(méi)有這個(gè)選項(xiàng)),那么killall肯定被修改過(guò)。如果 strings killall | grep "/dev/pty"有輸出,或者直接strings killall發(fā)現(xiàn)可疑路徑和 文件名,說(shuō)明已經(jīng)被植入木馬。 11) pop3d后門 pop3d-trojan.tar.gz 12) sshd后門 sshd后門把ssh發(fā)行包里的login.c作了修改,加入內(nèi)置的帳號(hào)/口令。執(zhí)行 "strings sshd",發(fā)現(xiàn)諸如"hax0r3d"這樣的字符串,說(shuō)明sshd已被植入木馬 13) cgi后門 在cgi-bin/目錄下檢查這類cgi程序,尤其是perl寫(xiě)的腳本 14) find后門 檢查/dev目錄,查找是否有諸如"/dev/ptyr"之類的文件,用"ls -l"看結(jié)果是否為 -rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyr 而不是 crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyr 或 brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/*** 如果有,而執(zhí)行find時(shí)用lsof發(fā)現(xiàn)它被打開(kāi),說(shuō)明find被植入木馬。如果find接受"-/" 選項(xiàng)(原有代碼中沒(méi)有這個(gè)選項(xiàng)),那么find肯定被修改過(guò)。如果 strings find | grep "/dev/pty"有輸出,或者直接strings find發(fā)現(xiàn)可疑路徑和文件名, 說(shuō)明已經(jīng)被植入木馬。 15) chfn后門 16) chsh后門 4. 守護(hù)進(jìn)程后門 binary木馬后門是把系統(tǒng)上原有的二進(jìn)制可執(zhí)行程序換成特洛伊(trojan)木馬程序。另一 類后門是在系統(tǒng)上隱藏一些可執(zhí)行程序,這些可執(zhí)行程序原來(lái)系統(tǒng)上并不存在。按照網(wǎng)絡(luò) 協(xié)議來(lái)分類,它們有如下類別 1) UDP后門 啟動(dòng)一個(gè)守護(hù)進(jìn)程,偵聽(tīng)某個(gè)UDP端口,收到特定UDP報(bào)文后啟動(dòng)一個(gè)shell。例如 udp-backdoor-v2.0.tgz,就是這類后門的安裝包。可用"netstat -na -P udp"查看這類后 門。 2) TCP后門 諸如bdoor.c之類的小程序。執(zhí)行"netstat -na -P tcp" 查看這類后門是否在活動(dòng)。 3) Raw Socket后門 這類后門打開(kāi)一個(gè)raw socket,通過(guò)發(fā)ICMP包來(lái)進(jìn)行網(wǎng)絡(luò)通訊。 如果已對(duì)文件系統(tǒng)用TripWire之類的工具作了備份和記錄,檢測(cè)這類后門的第一步當(dāng)然是 用這類工具檢查是否增加了新文件,特別是可執(zhí)行文件。如果有,需仔細(xì)檢查,它極可能 是后門程序。 另一方面,在系統(tǒng)上安置守護(hù)進(jìn)程后門后,攻擊者要做的事就是如何啟動(dòng)它。如果沒(méi)有啟 動(dòng),后門毫無(wú)用處。Unix系統(tǒng)上守護(hù)進(jìn)程通過(guò)rc腳本來(lái)啟動(dòng),對(duì)網(wǎng)絡(luò)守護(hù)進(jìn)程,還可以 通過(guò)inetd 超級(jí)服務(wù)器來(lái)啟動(dòng)。相應(yīng)地,檢測(cè)這類后門也依據(jù)這些,并結(jié)合這類后門大都 要進(jìn)行網(wǎng)絡(luò)通訊的特征 1) 檢查rc腳本 對(duì)Solaris系統(tǒng),在/etc目錄下有這樣一些rc腳本 rcS、rc0、rc1、rc2、rc3、rc5、rc6 對(duì)Linux,rc腳本在/etc/rc.d目錄下,它們是rc、rc.local、rc.sysinit。 對(duì)Solaris系統(tǒng),rc[S-6]腳本名最后一個(gè)數(shù)字或字母表示運(yùn)行級(jí)別。/etc目錄下另有 rc0.d、rc1.d、rc2.d、rc3.d、rcS.d五個(gè)目錄,目錄名中'.'前面的數(shù)字或字母同樣是表 示運(yùn)行級(jí)別。rc[S-6] 腳本的作用是,按運(yùn)行級(jí)別,對(duì)相應(yīng)的rc[S-6]目錄下文件名以'S' 打頭的腳本文件,賦給參數(shù)start,啟動(dòng)相應(yīng)的守護(hù)進(jìn)程,以'K'打頭的腳本文件,賦給參 數(shù)stop,關(guān)閉相應(yīng)的守護(hù)進(jìn)程。其中的例外是,rc5和rc6腳本啟動(dòng)或關(guān)閉的是rc0.d中 的守護(hù)進(jìn)程。此外,rcS、rc0、rc1、rc5、rc6腳本還進(jìn)行文件系統(tǒng)安裝或拆卸工作。特 別是 rcS,它是系統(tǒng)啟動(dòng)時(shí)必須執(zhí)行的,它對(duì)文件系統(tǒng)進(jìn)行檢查和安裝,進(jìn)行各項(xiàng)系統(tǒng)配 置。 對(duì)Linux系統(tǒng),/etc/rc.d目錄下有rc0、rc1、rc2、rc3、rc4、rc5、rc6這七個(gè)目錄。 /etc/rc.d/rc腳本依據(jù)運(yùn)行級(jí)別象Solaris上一樣通過(guò)rc[0-6]目錄中的腳本啟動(dòng)或關(guān)閉 守護(hù)進(jìn)程。同時(shí),對(duì)每個(gè)運(yùn)行級(jí)別,rc.local腳本都將執(zhí)行。rc.sysinit腳本系統(tǒng)啟動(dòng)時(shí) 必須執(zhí)行,它檢查和安裝文件系統(tǒng),進(jìn)行各項(xiàng)系統(tǒng)配置。 檢查上面的幾個(gè)腳本文件,如果發(fā)現(xiàn)文件被修改,加有別的東西執(zhí)行別的程序,必須仔細(xì) 檢查這些程序,很可能是啟動(dòng)某個(gè)后門程序。 上面所列的rc?.d目錄中的腳本文件,對(duì)Solaris,都是到/etc/init.d目錄中某個(gè)腳本文 件的符號(hào)連接或者硬鏈接,對(duì)Linux,都是到/etc/rc.d/init.d目錄中某個(gè)腳本文件的符 號(hào)連接或者硬鏈接。這些rc?.d目錄中的腳本文件名為SNN***或KNN***,NN為數(shù)字,它 的大小表明腳本執(zhí)行的次序,***為字符串,表示服務(wù)名。對(duì)腳本文件名的 *** 部分,在 Solaris上大致為下面這些 ANNOUNCE MOUNTFSYS PRESERVE RMTMPFILES ab2mgr afbinit audit autofs autoinstall buildmnttab cachefs.daemon cachefs.root cacheos cacheos.finish cron devlinks drvconfig dtlogin inetinit inetsvc init.dmi init.snmpdx initpcmcia keymap lp mkdtab nfs.client nfs.server nscd pcmcia power rootusr rpc savecore sendmail spc standardmounts sysetup sysid.net sysid.sys syslog ufs_quota utmpd volmgt xntpd 在Linux上,大致為下面這些 anacron apmd arpwatch atd crond functions gpm halt httpd httpd.orig identd inet ipchains ipsec irda kdcrotate keytable killall kudzu linuxconf lpd named netfs network nfs nfslock pcmcia portmap random rstatd rusersd rwalld rwhod sendmail single snmpd syslog xfs ypbind yppasswdd ypserv 仔細(xì)檢查這些rc?.d 目錄,如果發(fā)現(xiàn)某個(gè)腳本文件不是到/etc/rc.d/init.d或/etc/init.d 目錄中某個(gè)腳本文件的符號(hào)連接、硬鏈接,或者出現(xiàn)與上面文件名規(guī)則不相符的腳本文件, 或者增加了某個(gè)腳本文件,它很可能是用來(lái)啟動(dòng)后門進(jìn)程的,必須仔細(xì)檢查這些腳本啟動(dòng) 的程序。 確信rc?.d目錄中腳本文件都是到/etc/rc.d/init.d或/etc/init.d目錄中某個(gè)腳本文件 的符號(hào)連接、硬鏈接后,再cd到/etc/rc.d/init.d或/etc/init.d目錄下。檢查init.d 目錄下的腳本文件。如果某個(gè)腳本啟動(dòng)的服務(wù)進(jìn)程與名稱不符,或者腳本文件的內(nèi)容被修 改,加有別的什么東西啟動(dòng)了別的進(jìn)程,必須仔細(xì)檢查,極可能是被用來(lái)啟動(dòng)后門進(jìn)程。 除此之外,與二進(jìn)制木馬后門相交*,對(duì)init.d目錄下腳本文件啟動(dòng)的每一個(gè)程序本身, 都要仔細(xì)檢查,運(yùn)行起來(lái)看看有沒(méi)有什么不正常的現(xiàn)象,防止它有可能被換成木馬。對(duì)于 init.d目錄中的腳本文件啟動(dòng)的程序,它們的二進(jìn)制文件大都在/usr/bin、 /usr/local/bin、/sbin、/usr/sbin目錄下。 2) 檢查/etc/inetd.conf配置文件 注意/etc/inetd.conf中的語(yǔ)法 # telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd 和,這兩個(gè)字段的關(guān)系就象execve()函數(shù)的第一個(gè)形參和第二 形參。檢查/etc/inetd.conf,特別是最后兩個(gè)字段,是否除通常的服務(wù)外啟動(dòng)了別的服務(wù)。 如果有的話,仔細(xì)檢查這項(xiàng)服務(wù),很可能是在啟動(dòng)后門程序。 同樣,與binary木馬后門相交*,對(duì)inet.conf所列的每項(xiàng)服務(wù),都要對(duì)相應(yīng)程序進(jìn)行檢 查,很有可能它們被換成木馬程序。 3) 使用netstat和lsof命令 如果后門程序作為守護(hù)進(jìn)程啟動(dòng),通常它偵聽(tīng)某個(gè)端口,通過(guò)該端口與外網(wǎng)連接。攻擊者 借此獲取對(duì)系統(tǒng)的訪問(wèn)。 對(duì)Linux系統(tǒng),用"netstat -nap"命令列出網(wǎng)絡(luò)狀態(tài)信息,特別注意 和 這兩欄。如果所列的 中 ":" 后給出端口處于偵聽(tīng) 狀態(tài),而系統(tǒng)又沒(méi)有在這個(gè)端口啟動(dòng)服務(wù),從 這欄追蹤對(duì)應(yīng)程序, 它肯定是后門程序。如果 中某端口與另一端建立了連接,系統(tǒng)沒(méi)有在該 端口上配置服務(wù),從 欄中檢查建立該連接的程序,如果程序不是通 常系統(tǒng)配置允許使用的客戶程序,仔細(xì)檢查該程序,它屬于不正常的行為,很可能是后門 程序。 對(duì)Solaris系統(tǒng),先用"netstat -na"列出網(wǎng)絡(luò)狀態(tài)信息,取出 欄中的 local_host_addr:port。再執(zhí)行"lsof -i tcp@local_host_addr:port"命令,或者對(duì)UDP 協(xié)議執(zhí)行"lsof -i udp@local_host_addr:port"命令,這樣就得到了netstat命令沒(méi)有列 出的 。隨后按上面Linux系統(tǒng)一樣的方式來(lái)做。注意,這里的 local_host_addr 是本機(jī)的IP地址或主機(jī)名,也可以簡(jiǎn)化為 tcp:port 或 udp:port,還 可以加上 -T[q、s、w 任意組合] 選項(xiàng)列出隊(duì)列長(zhǎng)度、狀態(tài)、窗口大小信息。 對(duì)于raw socket,用"lsof -n | grep raw"命令進(jìn)行檢查。 5. cron后門 除了以守護(hù)進(jìn)程方式啟動(dòng)后門,還可以利用cron機(jī)制啟動(dòng)后門,下面就是植入這類后門的 一個(gè)腳本 ------------------------------------------------------------------------------- #! /sbin/sh # Which port should the shell start on PORT="31337" # Where (and under what name) to hide the socket demon HIDE="/dev/ptyp" # Time when the demon should start (0-23 h, military time) START="2" # Same like above but when should it stop STOP="3" if [ "`whoami`" != "root" ]; then echo "you had to be root to do this!" exit 1 fi echo "#define PORT " $PORT > backdoor.c cat >> backdoor.c << 'EOF' ... ... EOF gcc -O3 -o $HIDE backdoor.c if [ -f $HIDE ]; then echo "Compiling done" rm -f backdoor.c else echo "Unable to compile" rm -f backdoor.c exit 1 fi echo "STARTTIME = "$START"; ENDTIME = "$STOP"h" echo "*" $START "* * *" $HIDE > crontabfile echo "*" $STOP "* * * killall -9 "$HIDE >> crontabfile crontab crontabfile rm -f crontabfile ------------------------------------------------------------------------------- (這個(gè)腳本有問(wèn)題,如果這樣做了,會(huì)破壞原來(lái)的/var/spool/cron/crontabs/root) [page_break]對(duì)Linux系統(tǒng),crontab文件位于/var/spool/cron目錄中,對(duì)Solaris系統(tǒng),位于 /var/spool/cron/crontabs目錄中。這些crontab文件一般以用戶名作文件名,cron守護(hù) 進(jìn)程每隔一分鐘就檢查一次,依據(jù)它們更新內(nèi)存中的crontab表。編輯crontab文件后, 后門程序就在固定的時(shí)間啟動(dòng)和停止。 檢測(cè)后門時(shí),相應(yīng)地檢查/var/spool/cron/crontabs或/var/spool/cron目錄中的crontab 文件,查看是否有可疑程序被執(zhí)行了。如果有,仔細(xì)檢查它是否是后門程序。與binary木 馬后門相交*,還要仔細(xì)檢查原有cron任務(wù)對(duì)應(yīng)的程序,防止它們被換成木馬。 如果cron后門有網(wǎng)絡(luò)通訊,與守護(hù)進(jìn)程后門一樣,可以結(jié)合netstat和lsof命令來(lái)檢測(cè)。 6. 動(dòng)態(tài)鏈接庫(kù)后門 幾乎所有的Unix系統(tǒng)使用動(dòng)態(tài)庫(kù)。動(dòng)態(tài)庫(kù)重用相同代碼而減少空間占用。入侵者可以修改 動(dòng)態(tài)庫(kù)里的函數(shù),比如說(shuō)crypt()、open()或read()等,在修改后的函數(shù)里植入后門,啟 動(dòng)shell或建立網(wǎng)絡(luò)連接。 動(dòng)態(tài)庫(kù)后門的特點(diǎn)是非常隱蔽,一旦植入很難被發(fā)現(xiàn)。尤其是可以用來(lái)避免后門作為守護(hù) 進(jìn)程常駐后臺(tái),這就大大減小了被發(fā)現(xiàn)的可能性。例如這樣,在系統(tǒng)經(jīng)常調(diào)用的函數(shù),比 如open()里植入后門,后門程序啟動(dòng)一個(gè)進(jìn)程作為連接的客戶端,它主動(dòng)發(fā)起連接連向攻 擊者指定主機(jī)上的守護(hù)進(jìn)程。如果連接失敗或攻擊者沒(méi)有坐在機(jī)器前輸入什么數(shù)據(jù)相應(yīng), 后門進(jìn)程立即退出。如果連接成功而攻擊者又坐在機(jī)器前,攻擊者迅速做完要做的事后斷 開(kāi)連接,后門進(jìn)程立即退出。如果攻擊者在夜深人靜的工作,在這個(gè)短暫的時(shí)間里很難被 發(fā)現(xiàn)。 對(duì)于動(dòng)態(tài)庫(kù)后門,很難檢測(cè)出來(lái)。一般說(shuō)來(lái),對(duì)大多數(shù)動(dòng)態(tài)庫(kù),都有一個(gè)對(duì)應(yīng)的靜態(tài)庫(kù)。 它們的功能是相同的,只有動(dòng)態(tài)連接和靜態(tài)連接的區(qū)別。因此一種檢測(cè)方法是,如果通過(guò) 某種方法,比如說(shuō)比較MD5校驗(yàn)和,確信靜態(tài)庫(kù)沒(méi)有被污染,那么,對(duì)于經(jīng)常被調(diào)用的函 數(shù),用objdump觀察動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù),比較這些函數(shù)在動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)中的代碼有沒(méi)有什 么區(qū)別。如果某個(gè)函數(shù)有區(qū)別,說(shuō)明這個(gè)動(dòng)態(tài)庫(kù)函數(shù)已被植入后門。 當(dāng)然,如果靜態(tài)庫(kù)已經(jīng)被污染,就需要干凈系統(tǒng)動(dòng)態(tài)庫(kù)文件的一份拷貝了。用objdump來(lái) 對(duì)經(jīng)常被調(diào)用的函數(shù)進(jìn)行比較,檢查是否某個(gè)函數(shù)被植入后門。 另一種方法是,寫(xiě)一個(gè)main()函數(shù)來(lái)調(diào)用這些經(jīng)常被調(diào)用的函數(shù),編譯后運(yùn)行它。運(yùn)行時(shí) 查看有沒(méi)有什么異常,特別是用netstat和lsof查看有無(wú)哪個(gè)端口或文件不正常地被打開(kāi)。 如果有這些異常,說(shuō)明相應(yīng)函數(shù)被植入后門。做這件事時(shí)要特別小心,最好事先作好系統(tǒng) 備份,以防某些有害后門對(duì)系統(tǒng)造成傷害,比如說(shuō)刪除某個(gè)文件。 如果檢測(cè)binary木馬后門和守護(hù)進(jìn)程后門時(shí)發(fā)現(xiàn)異常,但又未發(fā)現(xiàn)某個(gè)可執(zhí)行文件被換成 木馬,也沒(méi)有發(fā)現(xiàn)暗藏的后門程序,此時(shí)就要注意動(dòng)態(tài)庫(kù)了,很可能是在動(dòng)態(tài)庫(kù)做了手腳。 經(jīng)常調(diào)用的函數(shù)列表 函數(shù) | 所在的庫(kù)文件 | 簡(jiǎn)單說(shuō)明 -----------------+-----------------------+----------------------- open | libc.so | . . . -----------------+-----------------------+----------------------- close | libc.so | . . . -----------------+-----------------------+----------------------- crypt | libcrypt.so | . . . -----------------+-----------------------+----------------------- (注意完成這個(gè)表) 為了檢測(cè)這類后門,下面給出一個(gè)shell腳本。從干凈系統(tǒng)上取得一個(gè)動(dòng)態(tài)庫(kù)拷貝,用這 腳本進(jìn)行比較,查看代碼有沒(méi)有什么區(qū)別,以確定是否被置入后門。 ------------------------------------------------------------------------------- 此處代碼略 ------------------------------------------------------------------------------- 7. SLKM后門 THC的slkm-1.0.tar.gz ------------------------------------------------------------------------------- 此處代碼略 ------------------------------------------------------------------------------- 8. sniffer后門 sniffer用來(lái)監(jiān)聽(tīng)主機(jī)或網(wǎng)絡(luò),以獲取敏感數(shù)據(jù),比如帳號(hào)/口令。對(duì)于網(wǎng)絡(luò)監(jiān)聽(tīng),可以查 看網(wǎng)絡(luò)接口是否處于混雜(promisc)模式后確定。 對(duì)Linux系統(tǒng),在命令行執(zhí)行ifconfig命令,如果發(fā)現(xiàn)PROMISC這個(gè)字符串,說(shuō)明網(wǎng)絡(luò)接 口處于混雜(promisc)模式,排除合法用戶運(yùn)行網(wǎng)絡(luò)協(xié)議分析程序后,意味著有sniffer在 運(yùn)行。如果這樣,立即執(zhí)行命令"lsof -n | grep sock",對(duì)第五列TYPE字段為sock的那 些輸出行仔細(xì)檢查,確定出哪一個(gè)程序在sniffer,刪除之。 對(duì)于Solaris系統(tǒng),用下面的方法來(lái)查出是否有某個(gè)進(jìn)程在進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng),它是正常運(yùn)用 還是后門程序 # ifconfig -a # 列出活動(dòng)的網(wǎng)絡(luò)接口 lo0: flags=849 mtu 8232 inet 127.0.0.1 netmask ff000000 hme0: flags=863 mtu 1500 inet 192.168.10.2 netmask ffff0000 broadcast 192.168.255.255 ether 8:0:20:b0:64:6d # ls -l /dev/hme* # 查出網(wǎng)絡(luò)接口設(shè)備 lrwxrwxrwx 1 root other 29 Oct 9 1998 /dev/hme->../devices/pseudo/clone@0:hme # ls -l /devices/pseudo/clone@0:hme # 細(xì)看一下 crw------- 1 root sys 11, 7 Oct 9 1998 /devices/pseudo/clone@0:hme # lsof | grep "hme" # 用 lsof 查看是否處于混雜模式 snoop 7988 root 3u VCHR 7,2 0t0 423220 /devices/pseudo/clone@0:hme->bufmod->hme # lsof | grep "clone@0:hme" # 同上 snoop 7988 root 3u VCHR 7,2 0t0 423220 /devices/pseudo/clone@0:hme->bufmod->hme # "lsof | grep ***" 有輸出,說(shuō)明有監(jiān)聽(tīng)程序在運(yùn)行,"***"是程序名,進(jìn)一步仔細(xì)查證, 確定是否是后門程序。
網(wǎng)絡(luò)的神奇作用吸引著越來(lái)越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來(lái)越嚴(yán)峻的考驗(yàn)―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項(xiàng)技術(shù)都需要適時(shí)應(yīng)勢(shì),對(duì)應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。
|