韓塞北
[摘要]本文主要從黑客入侵的技術(shù)中如何掩蓋其行蹤,達(dá)到保護(hù)自己目的,為大家查找入侵途徑及防范入侵提供幫助。
[關(guān)鍵詞]木馬 入侵 隱藏 攻擊
一、隱藏蹤跡
1.編輯系統(tǒng)日志
許多攻擊者會(huì)在本地系統(tǒng)日志中留下痕跡。例如某個(gè)對(duì)OpenSSH實(shí)施蠻力口令攻擊的用戶會(huì)產(chǎn)生日志記錄。Syslog記錄通常含有攻擊者的身份或位置的信息。在入侵之后,攻擊者很可能會(huì)抹掉記錄其蹤跡的日志。Syslog文件一般保存在root::root所屬的/var/log/目錄下。其文件許可通常為644,即所有人均可讀,但是只有root可寫。已經(jīng)攻破root的攻擊者能夠抹掉與其相關(guān)的日志信息。
2.抹去日志記錄文件
大部分登錄軟件都會(huì)在名為/var/log/utmp或/var/log/wtmp的文件中記錄每次成功的登錄。這些文件以機(jī)器可讀的格式保存每個(gè)用戶登錄和注銷時(shí)間。這樣攻擊者就能根據(jù)可疑活動(dòng)的發(fā)生時(shí)間快速地定位到這段時(shí)間內(nèi)登錄系統(tǒng)得用戶??梢杂贸绦騦ast從這些文件中提取信息:如果能夠?qū)懭?var/log/utmp或/var/log/wtmp文件,攻擊者就能夠編輯這些文件以刪除與其登錄相關(guān)的蹤跡。有許多工具可以從以上文件中刪除登錄信息。或者可以直接刪除這些文件。
二、木馬化系統(tǒng)程序
1.日志報(bào)告。多數(shù)日志程序都將日志信息記錄在wtmp,utmp或syslog文件中。通過重新編譯login,su,sudo,in.telnetd,sshd,rlogind等,攻擊者才能夠從根本上阻止記錄這些信息。類似于w,who和last的命令掃描wtmp和utmp文件,以報(bào)告當(dāng)前有哪些用戶,或者顯示之前的登錄情況。通過修改這些命令,攻擊者甚至無需修改日志文件的內(nèi)容就能保持隱身狀態(tài)。
2.進(jìn)程報(bào)告。類似于ps,lsof和top的命令通常也被木馬化。以隱藏運(yùn)行的任意進(jìn)程。這些進(jìn)程通常包括口令破解會(huì)話、對(duì)外攻擊或遠(yuǎn)程守護(hù)進(jìn)程。例如,可以在ps命令的某個(gè)源代碼文件readproc.c中添加了若干代碼:
proc_t* ps_readproc(PROCTAB *PT,proc_t* rbuf) {
next_proc:
while((ent = readdir(PT->procfs))&&(*ent->d_name<0||*ent->d_name>9)){…}
if(!ent||!ent->d_name) return NULL;
sprintf(path,”/proc/%s”,ent->d_name);
if(stat(path,&sb)= = -1) goto next_proc;
if(sb.st_uid = = 8765) { goto next_proc; }
if(!allocated){…}
在上面程序中,只是簡單地讓ps跳過任何ID為8765的進(jìn)程。這樣ps將只會(huì)報(bào)告與之無關(guān)的其他進(jìn)程。此外,也可以將ps編寫成忽略設(shè)置了在名字中包含特定字符串的進(jìn)程。
3.文件報(bào)告。文件報(bào)告工具,通常都能找到系統(tǒng)中我們創(chuàng)建的所有文件。這些文件通常包括攻擊源代碼、攻擊輸出、破解數(shù)據(jù)庫和機(jī)器列表等。攻擊者可以修改這些工具來隱藏其文件或目錄。
下面是/bin/ls源代碼ls.c的一個(gè)經(jīng)過修改的版本:
static int file_intertesting(const struct direct *next) {
for(ignore = ignore_patterns;ignore;ignore =ignore->next)
if(fnmatch(ignore->patern,next->d_name,FNM_PERIOD)= = 0) return 0;
if(!strcmp(next->d_name,”...”)) return 0;
if(really_all_files||next->d_name[0]!=.||(all_files))
在上面,修改了file_interesting函數(shù),該函數(shù)用來確定是否在列表中輸出相應(yīng)的文件名。通過修改file_interesting函數(shù)可以隱藏文件名為”...”的文件。顯然通過木馬化足夠的文件列表程序,攻擊者能夠隱藏所有特殊的目錄。
4.網(wǎng)絡(luò)報(bào)告。通過諸如netstat,lsof和tcpdump等程序,可以看到系統(tǒng)中與黑客有關(guān)的進(jìn)入連接和外出連接。其他網(wǎng)絡(luò)信息,諸如網(wǎng)絡(luò)接口配置、網(wǎng)絡(luò)路由、硬件地址表,可以通過木馬化route,ifconfig和arp等命令隱藏起來。
5.安全工具。對(duì)木馬化和蹤跡隱藏而言,本地安裝的安全工具尤為重要,例如制定的進(jìn)程檢查腳本、用戶監(jiān)視軟件、文件完整性工具或數(shù)據(jù)庫。如果攻擊者能夠修改文件完整性軟件或suid/sgid檢查程序,以使之忽略其所建立的特定目錄,就能在該目錄下安全地安裝任何東西而不被發(fā)現(xiàn),包括suid為root的程序,而通常這類程序很容易被發(fā)現(xiàn)。
三、隱藏木馬文件
1.文件名詭計(jì)。Linux文件名可以包含除/和\000之外的任何字符。在文件名中使用不可打印字符即可在諸如ls或ps的工具下偽裝其真實(shí)名字。這里創(chuàng)建了一個(gè)名為“..”的目錄。此時(shí)因?yàn)槎鄶?shù)人不會(huì)以-a標(biāo)志來使用ls,因此根本就看不到這個(gè)目錄。而那些確實(shí)使用了-a標(biāo)志的人也有可能不會(huì)注意到這個(gè)情況,將之誤以為..目錄。然后,以同樣的方式,黑客把一個(gè)攻擊程序重命名為“sh”。該程序運(yùn)行時(shí),在ps命令下的顯示與普通的sh只有細(xì)微的差別。
2.更改argv[0]。程序運(yùn)行時(shí)會(huì)得到一個(gè)命令行參數(shù)列表。這些參數(shù)保存在名為argv的數(shù)組中,其中argv[1]為第一個(gè)參數(shù),argv[2]為第二個(gè)參數(shù)。而argv[0]則是這個(gè)程序自己的名字。如果需要的話,程序可以用這個(gè)參數(shù)來確定自己的運(yùn)行方式。例如gzip,gunzip和zxat通常都是到相同i節(jié)點(diǎn)的硬連接:因此,在這個(gè)例子中,如果運(yùn)行/bin/gzip,則程序根據(jù)argv[0]來確定應(yīng)當(dāng)執(zhí)行壓縮功能。在程序中也可更改這個(gè)變量,且在ps的輸出中所顯示的將是該更改值。
3.已刪除文件。除非鏈接數(shù)為0,否則系統(tǒng)不會(huì)物理刪除磁盤上的文件。在上面的/gzip/gunzip/zcat例子中,因?yàn)檫@些文件名都指向磁盤上的同一個(gè)i節(jié)點(diǎn),所以其鏈接數(shù)是3。用戶在刪除/bin/gzip之后,仍然可以使用/bin/gunzip和/bin/zcat。每當(dāng)某個(gè)進(jìn)程打開文件時(shí),內(nèi)核會(huì)將文件的引用計(jì)數(shù)加1。也就是說,即便某個(gè)進(jìn)程打開并刪除了一個(gè)文件,所有打開該文件的其它進(jìn)程仍然可以訪問它。我們可以利用這個(gè)機(jī)制來隱藏程序所使用的數(shù)據(jù)文件,或者隱藏程序自身。因?yàn)楫?dāng)進(jìn)程被kill掉,它所打開文件的鏈接數(shù)就會(huì)歸于0,相應(yīng)文件也會(huì)永久丟失。所以,這也就成為一種簡單的方法,即只要kill進(jìn)程或重啟動(dòng)機(jī)器,管理員就要費(fèi)些周折才能找到相關(guān)證據(jù)。
4.覆蓋性加載。攻擊者可以利用加載的辦法來隱藏整個(gè)目錄,使別人難以輕易訪問。例如可以創(chuàng)建/opt/tmp目錄并將自己的所有工具都放置在該目錄下。然后切換到這個(gè)目錄,運(yùn)行所需要的任何程序。在做完這些工作之后。它在/opt/tmp上加載一個(gè)新的tmpfs文件系統(tǒng):
參考文獻(xiàn):
[1]盧開澄.計(jì)算機(jī)密碼學(xué)——計(jì)算機(jī)網(wǎng)絡(luò)中的數(shù)據(jù)保密與安全.清華大學(xué)出版社,2004.
[2]陳明.網(wǎng)絡(luò)設(shè)計(jì)教程.清華大學(xué)出版社,2004.
[3]潘志翔,岑進(jìn)鋒.黑客攻防編程解析.機(jī)械工業(yè)出版社,2003.