你是否曾經有過這樣的感覺,你的Web站點安全曾經受到威脅,但你又不能確定?誠然,你可以緊跟補丁的速度,你可以保證所有的ACL(訪問控制列表)都進行了正確的設置,但是現在每周都有許多新的攻擊出現,還有許多攻擊沒有被公開,在這種情況下,如何才能確信你受到了保護?有些攻擊者會讓你明白你受到了黑客襲擊,但是也確有一些人來去都不讓你知道,但你會感覺到不對勁,懷疑自己受到了攻擊,這種情況更加危險。
如何才能判斷自己的安全是否受到了威脅?本文通過模擬實例來介紹一些在入侵發生時進行檢測的技術,以及一些自我保護策略。有許多第三方應用程序能幫助我們實現入侵檢測目的,但在這里我將演示使用Windows 2000的內置程序執行入侵檢測。其實,最重要的是通過分析攻擊者的行為方式,了解哪些技術對發現攻擊最有效。
假設入侵行為1及應對措施
現在假設出于某種原因我決定要侵入你的網絡。我將從哪里開始呢?首先,我要盡可能地收集你的網絡信息,這可以通過一系列程序完成,如whois、dig、nslookup、tracert,還可以使用一些在Internet上公開的信息。假設通過這些操作,我發現你的網絡中有一小部分沒有被防火墻所保護。然后,通過執行端口掃描,我注意到有許多機器的135、139、389和445端口都是開放的。
445端口是Win2K的一個致命后門。在Win2K中,SMB(Server Message Block,用于文件和打印共享服務)除了基于NBT(NetBIOS over TCP/IP,使用端口137, UDP端口138 和TCP端口139來實現基于TCP/IP的NETBIOS網際互聯)的實現,還有直接通過445端口實現。如果win2000服務器允許NBT, 那么UDP端口137, 138, TCP 端口 139, 445將開放。如果 NBT 被禁止, 那么只有445端口開放。445端口的使用方式有以下2種:
# 當Win2K在允許NBT情況下作為客戶端連接SMB服務器時,它會同時嘗試連接139和445端口,如果445端口有響應,那么就發送TCP RST包給139端口斷開連接,以455端口通訊來繼續;當445端口無響應時,才使用139端口。
# 當Win2K在禁止NBT情況下作為客戶端來連接SMB服務器時,那么它只會嘗試連接445端口,如果無響應,那么連接失敗。
現在繼續我的發現假設。我還注意到許多機器的端口80和443也是開放的,這可能是一個IIS 5 Web服務器。
Ok,我做了以上的窺視工作,你能檢測到我的活動嗎?下面來分析一下。首先,發生了端口掃描,在掃描的過程中,你應該注意到網絡的通信量有一個突然的增加。端口掃描通常表現為持續數分鐘的穩定的通信量增加,時間的長短閏:
這樣,隨著所有信息進出網絡,將會有一個圖標點亮在任務欄中一閃一閃:
方法三
如果懷疑自己受到掃描,還可以使用一個內置的命令行工具netstat。鍵入以下命令:
Netstat -p tcp -n
如果目前正在被掃描,根據掃描所使用的工具,就會得到以下類似結果:
Active Connections
Proto Local Address Foreign Address State
TCP 127.13.18.201:2572 127.199.34.42:135 TIME_WAIT
TCP 127.13.18.201:2984 127.199.34.42:1027 TIME_WAIT
TCP 127.13.18.201:3106 127.199.34.42:1444 SYN_SENT
TCP 127.13.18.201:3107 127.199.34.42:1445 SYN_SENT
TCP 127.13.18.201:3108 127.199.34.42:1446 SYN_SENT
TCP 127.13.18.201:3109 127.199.34.42:1447 SYN_SENT
TCP 127.13.18.201:3110 127.199.34.42:1448 SYN_SENT
TCP 127.13.18.201:3111 127.199.34.42:1449 SYN_SENT
TCP 127.13.18.201:3112 127.199.34.42:1450 SYN_SENT
TCP 127.13.18.201:3113 127.199.34.42:1451 SYN_SENT
TCP 127.13.18.201:3114 127.199.34.42:1452 SYN_SENT
以上信息中,我們要重點注意在本地和外部地址上的連續端口以及大量的SYN_SENT信息。有些掃描工具還會顯示ESTABLISHED或TIME_WAIT信息??傊?,信息的關鍵在于連續的端口序列和來自同一主機的大量連接。
假設入侵行為2及應對措施
再回到假設的環境中來。在發現了一些機器沒有被防火墻保護以及掃描到一些開放端口后,現在有幾條路擺在我面前。其一是尋找你的網絡中的弱點。Windows網絡口令用于使用Web服務器上的Web服務,這些網絡登錄信息對我來說是最有用的,因此我決定朝這個方向試一試。首先從一個機器下載帳號名列表,從中選出一個很少使用的,例如guest帳號。我用這個帳號嘗試多次登錄直到它被鎖住,這樣我就能推測設置的是什么帳號鎖住策略了。然后我編寫一個腳本對每個帳號都嘗試多次登錄,但不觸發鎖住條件。當然,管理員帳號一般是不會被鎖住的。我啟動腳本,并運行Whisker掃描器程序,它使用我為IIS服務器編寫的一個腳本,來試探公共代理服務器信息。現在,可以坐等結果了。
在我的上述探測過程中,你那端應該從一些關鍵入侵檢測記數器指標中接收到許多警報信息。第一個應該是Web Service-Connection Attempts/sec:
這個指標能顯示出Web信息量的突然增加。
另一個非常重要的記數器是Web Service-Not Found Errors/sec:
由于類似于Whisker 的Web 掃描器要檢查指定URL的存在,因此以上性能記數器就會顯示出通信量的急劇增長和404 錯誤信息。因此,可以預先設定通信量的正常水平,然后一旦有針對你的掃描行為時,就會發出警報。
與此同時,在你的網絡上也會有窮舉法攻擊(brute-force attack)。在這種情況下,能夠幫助你的兩個性能記數器分別是Server-Logon/sec和Server-Errors Logon:
對每秒兩個以上的登錄和五個以上的登錄錯誤設置警報,這樣就能知道是否有窮舉攻擊正在發生。同時,對安全事件日志進行檢查,就能驗證出大量的失敗登錄是否來自同一個計算機。
假設入侵行為3及應對措施
繼續回到假設的環境中?,F在,我的探測腳本已經結束運行,我發現你的網絡中一臺計算機的系統管理員口令為空,這表明該系統剛剛安裝不久,還沒有來得及進行保護。我用管理員帳號和空口令連接到那個機器上,將要做的第一件事就是上傳一些木馬類程序和運行狀況檢測程序,例如nc.exe、lsadump2.exe、tlist.exe以及一些掃描腳本。當然,你的系統上已經內置了我所需要的其它工具,如nbtstat.exe。我啟動服務器的定時服務,設定nc.exe在一分鐘后運行,并將cmd.exe重新定向到一個端口,如1234。一分鐘后,我使用nc.exe從本地連接到遠程計算機進入命令行狀態,運行tlist.exe得到了當前程序列表,運行lsadump2.exe來查看存儲的口令,或者瀏覽硬盤,得到想要的內容。
現在看看你能對以上攻擊有何察覺以及能夠采取的措施。打開任務管理器,你會注意到cmd.exe,它有一個很高的程序ID值;你還會注意到定時服務正在運行;你查看C:\Winnt\SchedLgU.txt,注意到就在剛才有一個nc.exe程序的內容,在任務列表中也同樣有一個;使用Explorer的查找功能,你可以尋找最后一天中生成的所有文件,這不奇怪,你會在System32目錄中發現許多新的可執行文件,包括nc.exe。你試圖結束命令行操作,但是卻未被允許,這時就可以斷定發生了一個侵入行為,馬上可以開始收集證據了。現在關閉計算機告誡攻擊者已經被發現,因為你不想留給他進行實際攻擊的時間。事件日志顯示失敗的登錄嘗試,在最后也會將成功的登錄顯示出來。但是,事件日志中的條目沒有顯示另一端計算機的IP地址,只是顯示了計算機的名字。為了確定其IP地址,可以鍵入以下命令:
netstat -a –n
從顯示信息中找到與本地 TCP端口139、UDP端口137以及端口445處于連接狀態的IP地址信息。將輸出保存在一個文件中,然后使用nbtstat程序在那個IP地址上執行一個名字查找:
nbtstat -A
在netstat 的輸出中,你還應該能注意到一個與TCP端口1234的連接,這屬于nc進程。你可能還會注意到許多與網絡上其它計算機的 UDP 137 和138的連接。
假設入侵行為4及應對措施
再次回到假設的環境中。我還通過nc的遠程命令行對你的內部網絡中其它計算機進行了掃描,發現在一臺名叫FILESERVER的計算機上有一個共享目錄PUBLIC。我將這個共享進行映射,并開始嗅探工作。由于你的網絡中其它計算機存在NetBIOS連接,因此你懷疑這個計算機會被利用并危及內部網絡的安全。在命令行中鍵入以下命令:
net view
你可以從輸出中觀察到對內部文件服務器的驅動器映射情況。
在對你的硬盤瀏覽了一會兒之后,我再次運行tlist.exe,注意到現在屏幕保護程序不再運行了,并且打開了一個命令行窗口。我還不能肯定你是否發現了我,于是趕快對注冊表的某些項目進行修改,以使計算機啟動時再次運行netcat,最后斷開連接。等了大約10分鐘,我再次ping這個計算機,得到了一個請求超時應答。顯然,你已經發現了我,于是我與“借來的”帳號說聲白白。
小結:入侵檢測跟蹤信息6部分
以上這些入侵行為都是虛構的,并且有點簡單,但是它展示了一個基于網絡的攻擊的許多要素,以及如何檢測出這樣的攻擊。理論上而言,只要你堅持跟蹤以下信息,那么幾乎所有基于網絡的攻擊都能被檢測出來:
# 網絡上擁擠程度和網絡連接
# Web擁擠程度和“pages not found”錯誤的發生次數
# 成功及失敗的登錄嘗試
# 對文件系統所做的改變
# 當前運行的應用程序和服務
# 定時運行的應用程序或在啟動時運行的應用程序
通過對這些內容進行跟蹤,不需要任何外來的入侵檢測軟件就能阻止許多破壞企圖。當然,其它應用程序也會很有幫助,但管理員必須時刻牢記以上六條。
結 語
本文描述的場景是在管理員在場的時候發生的一個攻擊,而在真實生活中,一天24小時中可能發生許多次攻擊。有些只是簡單的端口掃描,而有些則是對網絡的全面威脅。不管是哪種攻擊,都不應該漠然坐視而不采取行動。通過本文介紹的應對措施,我們完全可以建立一個對自己網絡有用的入侵檢測系統:我們可以通過Email或者頁面的方式發送警報信息,也可以使用定時服務來定時將當前運行的所有程序或網絡連接寫入日志文件。就是說,編寫一些腳本程序,并借助定時服務以及少量的免費軟件工具,我們就可以建立一個實用的入侵檢測系統,其性能可能比市場上的許多入侵檢測軟件都要好得多。發現入侵者的關鍵不在于有多少強有力的軟件,最重要的是要了解入侵者是如何行動的,并且比他們搶先一步。