Linux環(huán)境下發(fā)現(xiàn)并阻止系統(tǒng)攻擊
2024-07-26 00:30:22
供稿:網(wǎng)友
一、
當(dāng)在一臺(tái)PC機(jī)上安裝了linux系統(tǒng),你就擁有了一個(gè)強(qiáng)大的、高級(jí)的、多任務(wù)的網(wǎng)絡(luò)操作系統(tǒng)。但時(shí)候該系統(tǒng)功能有些過(guò)于強(qiáng)大了些。某些發(fā)布版本缺省啟動(dòng)很多服務(wù)(如:rlogind, inetd, httpd, innd, fingerd,timed, rhsd,等等)。作為系統(tǒng)管理員需要熟悉了解這些服務(wù)。若機(jī)器連接了Internet,就更需要關(guān)自己系統(tǒng)的安全。
大多數(shù)攻擊者并不是一個(gè)革新者,他們往往利用最新的公布的系統(tǒng)工具技術(shù)等突破一個(gè)所周知的或 一個(gè)新的剛剛發(fā)現(xiàn)的安全漏洞。但作為一個(gè)管理者,通過(guò)訪問(wèn)你使用的Linux發(fā)布的官方站點(diǎn)如
www.redhat.com、www.calderasystems.com等可以獲知最新的安全漏洞及相應(yīng)的補(bǔ)丁程序。也可以通過(guò)定
期訪問(wèn)www.securityfocus.com、www.cert.org等安全漏洞通告站點(diǎn)。
控制訪問(wèn)服務(wù)器的最方便的方法是通過(guò)一個(gè)叫TCP wrapper的程序。在大多數(shù)發(fā)布版本中該程序往往是缺 省地被安裝。利用TCP wrapper你可以限制訪問(wèn)前面提到的某些服務(wù)。而且TCP wrapper的記錄文件記錄了所 有的企圖訪問(wèn)你的系統(tǒng)的行為。通過(guò)last命令查看該程序的log,管理員可以獲知誰(shuí)企圖連接你的系統(tǒng)。
在Linux的/etc目錄下,有一個(gè)如下所示inetd.conf文件,該文件是TCP wrapper的配置文件,定義了 TCP wrapper可以控制啟動(dòng)哪些服務(wù)。比如要將finger服務(wù)去除,就將finger服務(wù)的那一行注釋掉(在前面 加上"# "即可);
# inetd。conf This file describes the services that will be available
# through the INETD TCP/ip super server. To re-configure
# the running INETD PRocess, edit this file, then send the
# INETD process a SIGHUP signal。
#
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
# Finger, systat and netstat give out user information which may be
...............
但是對(duì)于諸如sendmail,named等服務(wù),由于它們不象finger,telnet等服務(wù),在請(qǐng)求到來(lái)時(shí)由inet守護(hù) 進(jìn)程啟動(dòng)相應(yīng)的進(jìn)程提供服務(wù),而是在系統(tǒng)啟動(dòng)時(shí),單獨(dú)作為守護(hù)進(jìn)程運(yùn)行的。在slackware版本的Linux,可 以通過(guò)修改/etc/rc.d目錄下的啟動(dòng)配置文件rc.M文件,將啟動(dòng)sendmail的命令行注釋掉:
#!/bin/sh
# rc。M This file is executed by init(8) when the system is being
# initialized for one of the "multi user" run levels (i.E.
# levels 1 through 6). It usually does mounting of file
# systems et al.
# Start the sendmail daemon:
# if [ -x /usr/sbin/sendmail ]; then
# echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q 15m)… "
# /usr/sbin/sendmail -bd -q 15m
# fi
............
(注:對(duì)于redhat發(fā)布,可以鞏固運(yùn)行chkconfig命令或linuxconfig命令來(lái)管理是否啟動(dòng)某項(xiàng)服務(wù),如: chkconfig --level 345 sendmail on 來(lái)實(shí)現(xiàn)系統(tǒng)在345運(yùn)行級(jí)別下自動(dòng)啟動(dòng)sendmail) 對(duì)于諸如named等其他服務(wù),也是通過(guò)將同一個(gè)目錄下相應(yīng)啟動(dòng)配置文件中相應(yīng)的啟動(dòng)命令注釋掉,從而當(dāng) 你重新啟動(dòng)機(jī)器時(shí),相應(yīng)的服務(wù)將不會(huì)啟動(dòng)。而對(duì)于高版本的redhat linux,提供了一個(gè)linuxconfig命令, 可以通過(guò)它在圖形界面下交互式地設(shè)置是否在啟動(dòng)時(shí),運(yùn)行相關(guān)服務(wù)。 但是對(duì)于telnet、ftp等服務(wù),如果將其一同關(guān)閉,那么對(duì)于管理員需要遠(yuǎn)程管理時(shí),將非常不方便。
Linux提供另外一種更為靈活有效的方法來(lái)實(shí)現(xiàn)對(duì)服務(wù)請(qǐng)求用戶的限制,從而可以在保證安全性的基礎(chǔ)上, 使可信任用戶使用各種服務(wù)。
在/etc目錄下,有兩個(gè)文件:hosts.deny hosts.allow 通過(guò)配置這兩個(gè)文件,你可以指定哪些機(jī)器可 以使用這些服務(wù),哪些不可以使用這些服務(wù)。配置這兩個(gè)文件是通過(guò)一種簡(jiǎn)單的訪問(wèn)控制語(yǔ)言來(lái)實(shí)現(xiàn)的,訪 問(wèn)控制語(yǔ)句的基本格式為: 程序名列表,主機(jī)名/IP地址列表。
程序名列表指定一個(gè)或者多個(gè)提供相應(yīng)服務(wù)的程序的名字,名字之間用逗號(hào)或者空格分隔,可以在 inetd.conf文件里查看提供相應(yīng)服務(wù)的程序名:如上面的文件示例中,telent所在行的最后一項(xiàng)就是所 需的程序名:in.telnetd 主機(jī)名/IP地址列表指定允許或者禁止使用該服務(wù)的一個(gè)或者多個(gè)主機(jī)的標(biāo)識(shí),主機(jī)名之間用逗號(hào)或空格 分隔。程序名和主機(jī)地址都可以使用通配符,實(shí)現(xiàn)方便的指定多項(xiàng)服務(wù)和多個(gè)主機(jī)。 當(dāng)服務(wù)請(qǐng)求到達(dá)服務(wù)器時(shí),訪問(wèn)控制軟件就按照下列順序查詢這兩個(gè)文件,直到遇到一個(gè)匹配為止:
1. 當(dāng)在/etc/hosts.allow里面有一項(xiàng)與請(qǐng)求服務(wù)的主機(jī)地址項(xiàng)匹配,那么就允許該主機(jī)獲取該服務(wù)
2. 否則,如果在/etc/hosts.deny里面有一項(xiàng)與請(qǐng)求服務(wù)的主機(jī)地址項(xiàng)匹配,就禁止該主機(jī)使用該項(xiàng)服務(wù)
3. 否則允許使用該服務(wù) 如果相應(yīng)的配置文件不存在,訪問(wèn)控制軟件就認(rèn)為是一個(gè)空文件,所以可以通過(guò)刪除或者移走配置文 件實(shí)現(xiàn)對(duì)所有主機(jī)關(guān)閉所有服務(wù)。
在文件中,空白行或者以#開頭的行被忽略,你可以通過(guò)在行前加 # 實(shí) 現(xiàn)注釋功能。Linux提供了下面靈活的方式指定進(jìn)程或者主機(jī)列表:
1. 一個(gè)以"."起始的域名串,如 .amms.ac.cn 那么www.amms.ac.cn就和這一項(xiàng)匹配成功
2. 以'.'結(jié)尾的IP串如 202.37.152. 那么IP地址包括202.37.152. 的主機(jī)都與這一項(xiàng)匹配
3. 格式為n.n.n.n/m.m.m.m表示網(wǎng)絡(luò)/掩碼,如果請(qǐng)求服務(wù)的主機(jī)的IP地址與掩碼的位與的結(jié)果等于n.n.n.n 那么該主機(jī)與該項(xiàng)匹配。
4. ALL表示匹配所有可能性
5. EXPECT表示除去后面所定義的主機(jī)。如:list_1 EXCEPT list_2 表示list_1主機(jī)列表中除去List_2所列 出的主機(jī)
6. LOCAL表示匹配所有主機(jī)名中不包含'.'的主機(jī) 上面的幾種方式只是Linux提供的方式中的幾種,但是對(duì)于我們的一般應(yīng)用來(lái)說(shuō)是足夠了。
我們通過(guò)舉幾 個(gè)例子來(lái)說(shuō)明這個(gè)問(wèn)題:
例一:我們只希望允許同一個(gè)局域網(wǎng)的機(jī)器使用服務(wù)器的ftp功能,而禁止副廣域網(wǎng)上面的ftp服務(wù)請(qǐng)求, 本地局域網(wǎng)由 202.39.154. 、202.39.153. 和202.39.152. 三個(gè)網(wǎng)段組成。在hosts.deny文件中, 我們定義禁止所有機(jī)器請(qǐng)求所有服務(wù): ALL:ALL 在hosts.allow文件中,我們定義只允許局域網(wǎng)訪問(wèn)ftp功能: in.ftpd -l -a: 202.39.154 202.39.153. 202.39.152. 這樣,當(dāng)非局域網(wǎng)的機(jī)器請(qǐng)求ftp服務(wù)時(shí),就會(huì)被拒絕。而局域網(wǎng)的機(jī)器可以使用ftp服務(wù)。 ALL:ALL 然后重新啟動(dòng)你的 inetd進(jìn)程: /etc/rc.d/init.d/inet restart 但是hosts.deny文件只能控制/etc/inetd.conf文件中包含的服務(wù)的訪問(wèn)這些服務(wù)有/usr/bin/tcpd管 理。TCP wrapper監(jiān)聽接入的網(wǎng)絡(luò)請(qǐng)求,然后與在hosts.allow和hosts.deny的中的服務(wù)比較,然后做出允 許或拒絕的決定。 但是對(duì)于wrapper沒有包含的服務(wù)你就需要采用其他方法了
二、
保護(hù)你的系統(tǒng)最簡(jiǎn)單有效的的方法是TCP wrapper.Linux系統(tǒng)在跟蹤對(duì)你的機(jī)器的訪問(wèn)記錄方面作了大量的
工作。wrapper拒絕對(duì)你的系統(tǒng)的某些訪問(wèn)的同時(shí),系統(tǒng)在一些LOG文件中增加了一些信息內(nèi)容。在/var/log
目錄下,一般可以看到如下文件:
boot.log cron cron.1 cron.2 dmesg httpd
lastlog lastlog.1 maillog maillog.1
maillog.2
messages messages.1 netconf.log
netconf.log.1
netconf.log.2 secure secure.1 secure.2
secure.3 secure.4 spooler spooler.1 spooler.2
uucp wtmp wtmp.1 xferlog xferlog.1
xferlog.2
可以看到某些LOG文件有1,2等擴(kuò)展名。這是由于系統(tǒng)運(yùn)行cron.daily引起的。實(shí)際上,cron.daily是
在/etc下面的子目錄,包含了很多系統(tǒng)自動(dòng)運(yùn)行的管理script文件。不需要你參與,這些script實(shí)現(xiàn)一些
任務(wù)的自動(dòng)化:如輪轉(zhuǎn)log文件使其不會(huì)變的過(guò)分大。作為管理員你應(yīng)該熟悉如何通過(guò)修改這些script來(lái)定
時(shí)運(yùn)行程序。當(dāng)然 ,現(xiàn)在有很多功能完善的文本模式或圖形模式的log文件分析器,自動(dòng)發(fā)現(xiàn)危險(xiǎn)的攻擊
跡象,然后象管理者發(fā)送信件。在http://www.freshmeat.net/ tucows等可以找到很多這樣的工具。
從攻擊者的觀點(diǎn)而言,他們對(duì)你的你服務(wù)器上的安全文件最感興趣。若你關(guān)閉外部網(wǎng)絡(luò)對(duì)你的服務(wù)器
的訪問(wèn)。你可能會(huì)遇到這樣的情況:
[root@linux /]#grep refused /var/log/secure*
Sep 12 07:52:42 netgate in.rlogind[7138]: refused
connect from 2??.?.5?.?42
Sep 12 07:52:52 netgate in.rshd[7139]: refused
connect from 2??.?.5?.?42
Sep 12 07:52:55 netgate in.rexecd[7144]: refused
connect from 2??.?.5?.?42
Sep 12 07:52:59 netgate imapd[7146]: refused connect
from 2??.?.5?.42
Sep 12 07:52:59 netgate in.fingerd[7142]: refused
connect from 2??.?.5?.?42
Sep 12 07:53:00 netgate ipop3d[7143]: refused
connect from 2??.?.5?.?42
Sep 12 07:53:07 netgate in.ftpd[7147]: refused
connect from 2??.?.5?.?42
Sep 12 07:53:10 netgate gn[7145]: refused connect
from 2??.?.5?.?42
Sep 12 07:53:22 netgate in.telnetd[7149]: refused
connect from 2??.?.5?.?42
Sep 12 07:56:34 netgate imapd[7150]: refused connect
from 2??.?.5?.?42
正如你看到的那樣,攻擊者已經(jīng)試圖連接服務(wù)器上的若干個(gè)端口。但是由于服務(wù)器關(guān)閉了inetd啟動(dòng)的
所有服務(wù),所以LOG系統(tǒng)記錄下了這些訪問(wèn)拒絕。若在你的機(jī)器中沒有發(fā)現(xiàn)這樣的服務(wù)拒絕并不能說(shuō)明你的機(jī)
器沒有被攻擊。maillog文件將保存那些通過(guò)服務(wù)器被轉(zhuǎn)發(fā)的email信息。xferlog保存ftp的log信息等等。
若你希望查看wtmp,你可以使用last命令
# last | more fishduck ttyp6 nexus Tue Sep 28 16:03 still logged in birdrat ttyp5 speedy Tue Sep 28 15:57 still logged in root tty1 Tue Sep 28 12:54 still logged in 將顯示誰(shuí)什么時(shí)候登陸進(jìn)來(lái),登陸了多長(zhǎng)時(shí)間等信息。通過(guò)查看你可以發(fā)現(xiàn)非法登陸者信息。 你也可以查看以前的wtmp文件如wtmp.1, 你可以用命令: # last -f /var/log/wtmp.1 | more 但是你還需要注意你的log文件的狀態(tài)信息,如果它特別小 或者大小為0 則說(shuō)明可能有攻擊者進(jìn)入系統(tǒng),并 且修改了這個(gè)文件。為了防止任何用戶修改某些文件,如對(duì)log文件只允許添加,而不允許刪除操作等等: 可以通過(guò)使用Linux Intrusion Detection System可以防止攻擊者修改LOG文件passWord 文件等。該工具 可以在啟動(dòng)lilo時(shí)來(lái)決定是否允許對(duì)某些特定文件的修改。該工具的詳細(xì)信息可以通過(guò)訪問(wèn) www.soaring-bird.com.cn/oss_proj/lids/index.html獲得。 系統(tǒng)的所有進(jìn)程的祖父進(jìn)程被成稱為"init",其進(jìn)程ID號(hào)是1。你可以通過(guò)下面的命令,看到init進(jìn)程信息。 # ps ax | grep init 1 ? S 6:03 init 系統(tǒng)在啟動(dòng)時(shí)的init進(jìn)程將會(huì)啟動(dòng)"inetd"進(jìn)程,正如前面提到的該進(jìn)程實(shí)現(xiàn)監(jiān)聽網(wǎng)絡(luò)請(qǐng)求,監(jiān)聽是通過(guò)網(wǎng) 絡(luò)端口號(hào)來(lái)實(shí)現(xiàn)的。 例如你telnet到你的linux服務(wù)器上時(shí),實(shí)際上你上請(qǐng)求inetd進(jìn)程啟動(dòng)進(jìn)程in.telnetd進(jìn) 程在23端口來(lái)處理你的訪問(wèn)請(qǐng)求實(shí)現(xiàn)通信。隨后,in.telnetd進(jìn)程啟動(dòng)一個(gè)詢問(wèn)你的用戶名和密碼的進(jìn)程, 然后你 就登陸到機(jī)器了。inetd同時(shí)監(jiān)聽很多端口來(lái)等待訪問(wèn)請(qǐng)求,然后激活完成相關(guān)服務(wù)的程序。你可 以通過(guò)查看文件/etc/services來(lái)看哪個(gè)服務(wù)使用哪個(gè)端口。從節(jié)省資源角度來(lái)說(shuō),利用一個(gè)進(jìn)程而不是每 種服務(wù)對(duì)應(yīng)一個(gè)進(jìn)程是有意義的。 當(dāng)一個(gè)攻擊者第一次訪問(wèn)你的站點(diǎn)時(shí),他們往往使用成為端口掃描儀的工具,通過(guò)該工具攻擊者來(lái)查看 你開放了那些系統(tǒng)服務(wù)。LInux上比較出名的一個(gè)端口掃描儀是nmap. 可以從http://www.insecure.org/nmap/index.html下載得到該軟件,最新的版本甚至有一個(gè)圖形化 界面nmapfe。下面我們就運(yùn)行nmap看可以得到什么結(jié)果: 選項(xiàng)'-sS',指使用TCP SYN, 也就是半連接half-pen掃描, '-O',只同時(shí)探測(cè)被掃描系統(tǒng)的操作系統(tǒng)o。 (利用OS指紋的技術(shù),可以參見http://www.isbase.com/book/showQueryL.asp?libID=271)攻擊者知道了 對(duì)方使用的何種操作系統(tǒng)就可以有針對(duì)性的尋找該操作系統(tǒng)的常見漏洞
# nmap -sS -O localhost
Starting nmap V. 2.3BETA5 by Fyodor (fyodor@dhp.com,
www.insecure.org/nmap/)
Interesting ports on localhost (127.0.0.1):
Port State Protocol Service
21 open tcp ftp
23 open tcp telnet
25 open tcp smtp
53 open tcp domain
79 open tcp finger
80 open tcp http
98 open tcp linuxconf
111 open tcp sunrpc
113 open tcp auth
139 open tcp netbios-ssn
513 open tcp login
514 open tcp shell
515 open tcp printer
TCP Sequence Prediction: Class=random positive increments
Difficulty=4360068 (Good luck!)
Remote Operating system guess: Linux 2.1.122 - 2.2.12
Nmap run completed -- 1 IP address (1 host up) scanned in 2
seconds
這些打開的端口就是攻擊者入侵點(diǎn)。當(dāng)你修改過(guò)inetd.conf文件以關(guān)閉某些服務(wù),從新啟動(dòng)inetd后,你 再用nmap掃描就可以發(fā)現(xiàn)被注釋掉的服務(wù)掃描不到了。
當(dāng)然,管理員還可以使用一些其他的安全掃描工具如:satan或 Nessus等 來(lái)檢測(cè)自己的系統(tǒng)的安全可靠
性,在攻擊者發(fā)現(xiàn)其以前更早的發(fā)現(xiàn)自己的系統(tǒng)的漏洞,并加以彌補(bǔ)。
三、
一個(gè)笑話里說(shuō)一個(gè)小偷進(jìn)入到一家,偷光了屋子里所有的東西,但是卻用一個(gè)相同的東西代替了偷走
的東西。但是在網(wǎng)絡(luò)世界里,這卻是可能發(fā)生的。一個(gè)攻擊者利用一個(gè)系統(tǒng)漏洞非法入侵進(jìn)入到你的系
統(tǒng)后,當(dāng)你使用ps命令列出系統(tǒng)中的所有的進(jìn)程時(shí),卻看不到什么異常的證據(jù)。你查看你的password文件,
一切也是那么的正常。到底發(fā)生了什么事情呢?當(dāng)系統(tǒng)進(jìn)入到你的系統(tǒng)以后,第一步要做的事情就是取代
系統(tǒng)上某些特定的文件:如netstat命令等。當(dāng)你使用netstat -a命令時(shí),就不會(huì)顯示系統(tǒng)攻擊者存在的
信息。當(dāng)然攻擊者將替代所有的可能泄露其存在的文件在linux環(huán)境下一個(gè)有名的這樣的工具包名字是
rootkit。通過(guò)在任何一個(gè)搜索引擎搜索關(guān)鍵字rootkit可以得到數(shù)以百計(jì)的結(jié)果。這些工具一般來(lái)說(shuō)包括:
ps netstat top .....
由于這些經(jīng)過(guò)文件已經(jīng)被取代。所以簡(jiǎn)單的利用ls命令查看這些文件是看不出什么破綻的。有若干種方法你
可以驗(yàn)證系統(tǒng)文件的完整性。如果你安裝的是Red Hat, Caldera, TurboLinux或任何使用RPM的系統(tǒng)。你可
以利用RPM來(lái)驗(yàn)證系統(tǒng)文件的完整性: 首先你應(yīng)該查明你的那些你需要查看的文件來(lái)自哪個(gè)軟件包,使用
rpm命令你可以查明某個(gè)文件屬于某個(gè)包: # rpm -qf /bin/netstat net-tools-1.51-3 然后,可以掃描
整個(gè)rpm包來(lái)查看那些發(fā)生了改變。對(duì)沒有發(fā)生改變的包使用該命令將沒有任何輸出信息,如下所示:
# rpm -V net-tools
將netstat的5.2版本的二進(jìn)制可執(zhí)行文件替換為6.0的版本以后再使用該命令的結(jié)果為:
.......T /bin/netstat
這說(shuō)明/bin/netstat/文件已經(jīng)被修改。若我使用rpm -qf測(cè)試ps和top命令可以得到其屬于包procps,然后再
驗(yàn)證包procps的完整性。下面是一個(gè)被"黑"的站點(diǎn)的結(jié)果:
# rpm -qf /bin/ps procps.2.0.2-2
# rpm -V procps
SM5..UGT /bin/ps
..UGT /usr/bin/top
攻擊者入侵到系統(tǒng)中,并且用自己的ps及top命令替代了我們系統(tǒng)中的命令。從而使管理員看不到其
運(yùn)行的進(jìn)程,也許是一個(gè)sniffer來(lái)監(jiān)聽所有的用戶所有進(jìn)出網(wǎng)絡(luò)的數(shù)據(jù)并找尋到密碼信息。 下面是一個(gè)小
的script來(lái)掃描你系統(tǒng)的所有的rpm庫(kù),并檢查所有的包是否被篡改。但是應(yīng)該注意的是并不是所有該scripts
報(bào)告的問(wèn)題都是說(shuō)明該系統(tǒng)文件被攻擊者破壞。例如你的password文件一般肯定和你安裝系統(tǒng)時(shí)是不同的:
#!/bin/bash
#
# Run through rpm database and report inconsistencies
# for rpmlist in `rpm -qa`
# These quotes are back quotes
do echo " ----- $rpmlist -----" ;
rpm -V $rpmlist done > /tmp/rpmverify.out
當(dāng)你運(yùn)行該scripts時(shí),輸出被定向到文件/tmp/rpmverify.out你可以使用less命令查看該文件。但是
由于文本文件如:/etc/passwd, /etc/inetd.conf等很可能顯示為被修改過(guò)。但是你如何知道這些是管理員
自己修改的還是入侵者修改的呢?方法是:
在你確保你的系統(tǒng)是干凈的,沒有被攻擊者入侵時(shí),你為這些系統(tǒng)文件創(chuàng)建指紋信息。在你懷疑你的系統(tǒng)
被入侵時(shí)使用這些這些指紋信息來(lái)判定系統(tǒng)是否被入侵。創(chuàng)建文件的指紋信息是通過(guò)命令md5sum 來(lái)實(shí)現(xiàn)的:
# md5sum /etc/passwd
d8439475fac2ea638cbad4fd6ca4bc22 /etc/passwd
# md5sum /bin/ps
6d16efee5baecce7a6db7d1e1a088813 /bin/ps
# md5sum /bin/netsat
b7dda3abd9a1429b23fd8687ad3dd551 /bin/netstat
這些數(shù)據(jù)是我的系統(tǒng)上的文件的指紋信息。不同的系統(tǒng)上的文件的 指紋信息一般是不同的,你應(yīng)該是使
用md5sum來(lái)計(jì)算自己系統(tǒng)文件的指紋信息。下面是一些你應(yīng)該創(chuàng)建指紋信息的文件;
/usr/bin/passwd /sbin/portmap /bin/login /bin/ls /usr/bin/top /etc/inetd.conf /etc/services
通過(guò)指紋信息你可以決定是否有系統(tǒng)文件被篡改。
四、
上一節(jié)中說(shuō)過(guò),當(dāng)netstat,ls等命令被修改,從而發(fā)現(xiàn)系統(tǒng)已經(jīng)被入侵,下面該怎么辦?根據(jù)你系統(tǒng)的重要
性的不同,你有很多種選擇。但是我推薦對(duì)用戶目錄,password及其他關(guān)鍵的系統(tǒng)文件進(jìn)行備份。然后重新
安裝系統(tǒng)。但是不要隨便就將備份的文件拷貝到新系統(tǒng),因?yàn)楣粽呖赡茉谶@些文件中隱藏一些非法的東西。
也可以不重新安裝系統(tǒng),而是通過(guò)TCP wrapper來(lái)限制對(duì)主機(jī)的訪問(wèn),并且關(guān)閉非關(guān)鍵的網(wǎng)絡(luò)服務(wù)。然后更新
被影響的包。重新"干凈"的啟動(dòng)系統(tǒng)是很重要的,但是要實(shí)現(xiàn)這點(diǎn)并不容易。若你發(fā)現(xiàn)procps或net-tools包
已經(jīng)被攻擊者修改,第一件事情是重新安裝干凈的包來(lái)替換被攻擊者做了手腳留下后門的包。一般最好從你的
系統(tǒng)發(fā)布者處得到最新的包來(lái)重新安裝。
一旦攻擊者進(jìn)入到系統(tǒng)其就將在系統(tǒng)上存放一些工具并且將之隱藏起來(lái),使你不容易發(fā)現(xiàn)。下面是一個(gè)被攻擊
者入侵的系統(tǒng)的實(shí)例。當(dāng)系統(tǒng)被攻擊者入侵,服務(wù)器被限制網(wǎng)絡(luò)訪問(wèn),并且替代所有的受影響的包。然后就
需要通過(guò)仔細(xì)查看log文件來(lái)發(fā)現(xiàn)重復(fù)的企圖進(jìn)入系統(tǒng)。查看/etc/passwd文件,發(fā)現(xiàn)一個(gè)不屬于合法的用戶。
進(jìn)入到該用戶的目錄下:/home/jon,運(yùn)行 "ls -l"得到如下的內(nèi)容:
. .. .. .bashrc .bash_history .screenrc emech.tar.gz
除了一個(gè)名字為emech.tar.gz的文件以外,看不出什么異?,F(xiàn)象。但是仔細(xì)觀察,你就會(huì)發(fā)現(xiàn)系統(tǒng)有兩個(gè)
".."目錄。(指該子目錄的上一級(jí)目錄)是的確很奇怪,我使用命令"cd .."我就會(huì)進(jìn)入到/home目錄。原來(lái)
其中子目錄名字是在兩個(gè)點(diǎn)后面有一個(gè)空格。(".. ")你可以通過(guò)如下命令發(fā)現(xiàn):
# cd /home/jon
# echo .* | cat -v
. .. .. .bashrc .bash_history .screenrc emech.tar.gz
仔細(xì)觀察可以發(fā)現(xiàn)每個(gè)子目錄都是被一個(gè)空格隔開,而在第二個(gè)“..”和.bashrc之間有兩個(gè)空格。這就
意味著第二個(gè)".."子目錄其實(shí)為點(diǎn)-點(diǎn)-空格。下面進(jìn)入到該目錄:
# cd ".. "
然后列出該目錄下的內(nèi)容:
#ls
randfiles mech.set mech.pid checkmech cpu.memory
mech.help mech.usage mech mech.levels emech.users PSDevtab
下一步我們?cè)俨榭词欠衿溥€在其他地方隱藏了文件:
# find / -user jon -print
除了/home/jon目錄以外,還發(fā)現(xiàn)如下的內(nèi)容;
/usr/local/bin/.httpd
/tmp/cl
/tmp/.l/bcast
/tmp/.l/.l
/tmp/.l/imapd
/tmp/.l/log
/tmp/.l/pscan
/tmp/.l/pscan.c
/tmp/.l/rpc
/tmp/.l/slice2
/tmp/.l/sniffer
/tmp/.l/sxploit
/tmp/.l/thc
/tmp/.l/ufs.c
這個(gè)入侵者已經(jīng)在系統(tǒng)上安裝了Sniffers、端口掃描器,他給自己營(yíng)造了一個(gè)很好的"家" 。在查看中,還
在合法的用戶的目錄下發(fā)現(xiàn)了一個(gè)可怕的名為"tcp.log"的文件。文件該文件有幾百行長(zhǎng),包括每一次
telnet 及 ftp 出入該系統(tǒng)的連接!除了通告在該文件中出現(xiàn)的可能已經(jīng)被入侵的機(jī)器管理員應(yīng)該重新安裝
系統(tǒng)以外,我同樣告訴他們需要更新系統(tǒng)的所有的用戶的口令。
下面有一些例子來(lái)幫助你搜索隱藏的危險(xiǎn)。首先查看位于用戶目錄的具有"suid"或"guid"的文件。這些文
件的可執(zhí)行屬性位為s而不是x。如:
#ls -s /usr/bni/passwd
-r-s--x--x 1 root root 10704 Apr 14 1999 /usr/bin/passwd
屬性第四位的 "s" 表示該命令被執(zhí)行時(shí),該進(jìn)程的實(shí)際有效用戶ID就變?yōu)閞oot用戶。為了允許普通用戶修
改自己的密碼,這是必須的。第七位的x若為s則表示別的組的用戶若運(yùn)行該程序則該程序則具有用戶所有組
的有效組ID。使程序能冒充特定的用戶或者組并不是一件有害的事情。但是一般來(lái)說(shuō)非管理用戶在其目錄下
不應(yīng)該具root-suid 程序。我們可以使用下面的命令來(lái)查尋這樣的文件:
# find /home -perm -4000 -o -perm -2000 -print
下一步我們繼續(xù)尋找入侵者留下的程序和文件,所以需要一個(gè)快速的尋找隱藏目錄的方法。下面的方法就是
尋找如".kde"的隱藏目錄。你也可以找到如".. "或“..."等目錄:cracker.
# find / -type d -name ".*" -print
"-type d"選項(xiàng)指僅僅列出目錄。這個(gè)命令不會(huì)不會(huì)將"."或".."列出。
五、
作為一個(gè)好的系統(tǒng)管理者,為了擊敗攻擊者的攻擊行動(dòng),最好的方法是了解攻擊者的工作原理和機(jī)制。它
們使用了那些工具,它們?nèi)绾尾僮魅肭值鹊?。所以深入理解掌握我這里講解的各種網(wǎng)絡(luò)工具是很有必要的。
上面用實(shí)例的方式說(shuō)到了了一個(gè)攻擊者使用sniffer監(jiān)聽網(wǎng)絡(luò)流來(lái)搜集用戶名和密碼。下面我們
就詳細(xì)說(shuō)明sniffer是如何工作的。簡(jiǎn)單的說(shuō),sniffer是一個(gè)使你能檢測(cè)你的網(wǎng)絡(luò)接口接收到所有的數(shù)
據(jù)報(bào)。一般情況下,計(jì)算機(jī)僅僅接受目的地址是自身的數(shù)據(jù)報(bào),而sniffer使網(wǎng)絡(luò)接口進(jìn)入雜錯(cuò)模式,
從而可以接受網(wǎng)卡收到的所有的數(shù)據(jù)報(bào)。
若你運(yùn)行ifconfig eth0命令,會(huì)得到下面的結(jié)果:
eth0 Link encap:Ethernet HWaddr 00:C0:4F:E3:C1:8F
inet addr:192.168.22.2 Bcast:192.168.22.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49448 errors:0 dropped:0 overruns:0 frame:0
TX packets:33859 errors:0 dropped:0 overruns:0 carrier:0
collisions:6 txqueuelen:100
Interrupt:10 Base address:0x300
打開兩個(gè)終端,一個(gè)終端里運(yùn)行sniffer器-sniffit;
# sniffit -i
另外一個(gè)虛擬終端里你可以再次運(yùn)行ifconfig eth0。你將會(huì)發(fā)現(xiàn)輸出中有下面的內(nèi)容:
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
注意和上面相比較,增加了一個(gè)單詞"PROMISC" 這是雜錯(cuò)模式(promiscuous mode)的縮寫,
sniffit是一個(gè)輕量級(jí)的,基于終端的sniffer器。你可以從
http://reptile.rug.ac.be/~coder/sniffit/sniffit.html得到它。
另外一個(gè)類似的sniffer是netwatch,你可以從http://www.slctech.org/~mackay/netwatch.html得到它。
如果你不希望在系統(tǒng)中安裝另外的sniffer,你可以使用系統(tǒng)中帶有的一個(gè)工具:tcpdump 這個(gè)工具雖然
不如前面兩個(gè)工具那么華麗,但是她可以完成所有同樣的功能。
# tcpdump host www.linuxjournal.com -l | tee /tmp/tcpdump.out
其中-l指示tcpdump將輸出數(shù)據(jù)存進(jìn)入一個(gè)文件中。下面是輸出的內(nèi)容:
16:41:49.101002 www2.linuxjournal.com.www > marcel.somedomain.com.1432: F
2303148464:2303148464(0) ack 1998428290 win 16352
16:41:49.101206 marcel.somedomain.com.1432 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:50.001024 www2.linuxjournal.com.www > marcel.somedomain.com.1429: F
1805282316:1805282316(0) ack 1988937134 win 16352
16:41:50.001215 marcel.somedomain.com.1429 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:50.840998 www2.linuxjournal.com.www > marcel.somedomain.com.1431: F
1539885010:1539885010(0) ack 1997163524 win 16352
16:41:50.841198 marcel.somedomain.com.1431 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:51.494356 marcel.somedomain.com.1429 > www2.linuxjournal.com.www: P
1:335(334) ack 1 win 32120 (DF)
16:41:51.497003 marcel.somedomain.com.1433 > www2.linuxjournal.com.www: S
2019129753:2019129753(0) win 32120
(DF)
16:41:51.671023 www2.linuxjournal.com.www > marcel.somedomain.com.1429:R
Linux系統(tǒng)中可以得到有很多種的sniffer。攻擊者在入侵系統(tǒng)以后,也許會(huì)使用修改的ps命令來(lái)隱藏其運(yùn)
行的sniffer器。或者將其改為一個(gè)看上去很正常的進(jìn)程的名稱。