整個文章分三個系列介紹對於 OpenBSD, Linux, 或者Solaris系統的應急響應和取證過程中有用的工具。本部份聚焦在系統工具上,第二部份主要是介紹文件系統工具,最後部分則主要是網絡工具。本文用到的都是基於 OpenBSD 3.2, Debian GNU/Linux 3.0 (woody), RedHat 8.0 (psyche), and Solaris 9 (aka Solaris 2.9 or SunOS 5.9)的。
依賴於你所使用的操作系統,本文討論的許多軟件可能不是默認安裝的。這種情況下,請根據文章後面的參考部分獲得這些工具。
The Soapbox 那些可以用來處理入侵威脅的工具不在本系列討論內容中,本文只覆蓋在入侵發生之後使用的工具。入侵通常是可以防止的。使用一些比如保證系統更新安裝最新補丁的技術,按照最小化服務配置系統,使用設計為安全的操作系統,使用能夠加固系統的核心補丁等等,這些來防范入侵的技術可能讓你根本就從來不會使用在本系列文章中介紹到的這些工具。
讀者應該命令,一旦攻擊者獲得了系統控制權,這個系統就基本不應該被信任。我們討論的工具多數都操作在用戶方式。一個欺騙的核心模塊可能不會讓你正常地檢查系統,比如,這個系統已經被入侵的情況下。這些欺騙的模塊會采用多種辦法來隱藏自己,比如根據系統設計來讓自己在系統運行的時候不能輕易檢測到。這意味著,你不應該相信你使用的那些工具的輸出結果。這意味著在響應入侵事件中,應該采取懷疑、研究和謹慎的方式。
你用於分析系統的工具應該是你可以去信任,而且沒有被修改的。下面討論了一些技術,比如將工具保存在離線的只讀介質中,這樣,你就更可以信賴,而不是那些在已經被入侵的系統上的二進制程序。
你已經做了所有正確的事情,可以進行下面的一些練習,你的系統已經被入侵了。現在怎麼辦呢?
Breaking Out the Toolbelt 現在首先應該檢查那些我們後面需要用到的工具。這裡不說man(1)提供的信息,特別是因為命令參數因為系統不同而不同。檢查這樣的信息是留給讀者的一種練習。
vmstat - 這是可以快速察看內存、CPU和磁盤子系統的命令。vmstat 通常執行一個短時間,以便可以察看子系統利用的趨勢。vmstat 經常可以在系統性能有一些問題的時候幫助我們知道哪些地方應該去深究。
mpstat - 這個命令在Linux和Solaris上都有,可以用它察看處理器利用的統計。mpstat 提供一個選項,允許在多處理器系統中察看指定CPU的統計。vmstat 沒有這個功能。
iostat - 顯示比vmstat更詳細的跟子系統相關的統計信息。
sar,sa,lastcomm,last - 這些是檢查歷史數據和一些近來的系統事件。sar是一個Solaris和Linux的系統性能分析工具。這些可以用於檢查的性能數據類似於vmstat, mpstat和 iostat的顯示。 sar的數據是一段時間保存的內容,因此可以察看過去的信息。 lastcomm可以現在系統最近被執行的命令。這些可以用在系統審計中。sa 可以在*BSD和Linux中找到,它給用戶在系統審計中更多的選項來收集信息。
ps - 立足於進程狀態,用於顯示系統執行的進程和他們的信息。
top - 顯示的信息同ps接近,但是top可以了解到CPU消耗,可以根據用戶指定的時間來更新顯示。
lsof - 列舉打開的文件,顯示系統當前打開的所有文件。Unix系統的所有東西幾乎都可以看作是文件,因此lsof也顯示了系統的狀態中有重要意義的內容。
file - 判斷文件是什麼,不同的文件格式可以16進制的形式現實文件的內容
readelf - 顯示二進制文件的ELF(可執行鏈接和格式)頭的細節。這些內容可以判斷可執行提供的函數。
od - 以用戶指定的格式輸出文件內容。od對於在文件內容中有一些解釋的情況下察看原始內容是有幫助的。
ldd - 讀取ELF頭的內容,並顯示可執行文件依賴的對象庫。
string - 現實文件中的ASCII字符串。對於在二進制文件中查找其中可讀的字符串是非常有用處的。
find - 用於在文件系統中查找指定的對象。
strace - 這個工具開始或者附加到一個當前運行的進程中,顯示這個進程所作的所有系統調用。這可以用來判斷程序運行的行為,並且來決定是否是合適的程序。strace 存在於Linux上。在 Solaris上是truss, *BSD提供的ktrace可以達到相似的功能。
sudo - 可以讓管理員給用戶以其他用戶的權限執行命令的能力,而不用給該用戶密碼。
grep - 用於按照用戶指定的模式查詢。 grep用匹配規則。
less - 頁面調度程序,用來按頁顯示文本。
在參考部分中的"CD-ROM and Floppy distributions"[3]中,一些站點介紹了怎麼編譯這些工具以便用於不同的操作系統,並放置在CD-ROM。現在,開始檢查運行的系統了。
運氣就是在機會面前有所准備 運氣對於技術來說,並不是可求解的。攻擊者可以采用很多方法來危及OS的安全。威脅系統安全的漏洞可能是OS提供商,也可以是那些應用軟件。當漏洞還沒有大面積公布,或者還沒有讓它的相關提供商自己知道的時候,攻擊者已經在IRC裡面知道那種系統可以被入侵了。作為一個安全管理員,你必須在這場游戲中表現一直出色。但是,攻擊者則只需要一次就足夠。
然而,你需要做許多前期的准備工作。你應該有一個應急響應的策略。你必須有一張CD-ROM或者軟盤什麼的,來存儲檢查系統中需要的工具,而不是使用被入侵的系統中的工具。如果正使用軟盤,讓他們處於寫保護模式,你可以在取證[5]中獲得非常優秀的資源。
現在回到機器上。把事件響應的日期和時間都紀錄在記錄本上。並且紀錄采取的每一步的所有細節和時間。裝載CD-ROM或者軟盤,並且使用紀錄在這些介質上的軟件,緊記按照易失性的順序[6]保存相關的信息到安全的地方。
按照易失性順序的重要原因是因為入侵事件發生後與之相關信息的數量和自量都將隨時間增加而迅速減少。那些經驗豐富的攻擊者制造的事件則可能讓曲線更陡,下降速度更快。
了解自己 可能在入侵事件之前,你已經在系統上花費了大量時間。你了解這些系統的裡裡外外,進行了相當多的文檔工作,並且做了備份。在系統上,開啟了進程審計(或者*BSD的系統審計),進行了系統實時數據(sadc[8])來保存系統的性能數據。管理日志的時候,可能沒有足夠的空間來頻繁存儲這些數據,你可以發送syslog數據到安全的日志服務器上。
你接到webmaster的電話,他發現某個web服務器上CPU負載很高,而這個服務器每天的浏覽量僅僅幾千而已。webmaster確信服務器存在有什麼問題。
vmstat 和 mpstat (只在*BSD系統上) 表明CPU被用戶空間的一個或者多個進程消耗掉了,但是內存和I/O子系統還沒有大量使用。 iostat 也顯示出磁盤系統不正常。
$ vmstat 1 4
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
1 0 0 376 7756 29772 570960 0 0 7 3 441 397 87 5 8
5 0 0 376 6728 29772 570960 0 0 0 0 498 1249 100 0 0
6 0 0 376 7240 29772 570960 0 0 0 0 652 1563 97 3 0
6 0 0 376 7604 29772 570960 0 0 0 0 536 1323 97 3 0
$ mpstat 1 4
20:51:21 CPU %user %nice %system %idle intr/s
20:51:22 all 100.00 0.00 0.00 0.00 479.00
20:51:23 all 100.00 0.00 0.00 0.00 496.00
20:51:24 all 100.00 0.00 0.00 0.00 499.00
20:51:25 all 97.00 0.00 3.00 0.00 481.00
Average: all 98.00 0.60 1.40 0.00 486.60
$ iostat -dk 1 4
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
dev3-0 0.00 0.00 0.01 73 1296
dev3-0 0.00 0.00 0.00 0 0
dev3-0 0.00 0.00 0.00 0 0
dev3-0 0.00 0.00 0.00 0 0
sar (*BSD的sa) 顯示CPU從早些晚上 03:17 就開始被使用。 lastcomm 顯示FTP客戶端在03:17以root運行了幾次, last 這個命令顯示最近的登錄,沒有顯示出這個時間段有 root 從什麼地方登錄進來。另外,這個服務器又使用 sudo來管理root權限。這裡有兩個系統管理員賬號可以用 root登錄,但是他們並沒有登錄過,特別是在 AM 3這個時間附近。根據這一點,你決定使用CD上准備好的二進制工具。現在運行 top -d1,並且發現apache這個進程占用了100%的CPU。
現在用 grep 檢查apche的錯誤日志,這個GNU工具可以有更多有用的參數,-A, -B和-C 可以讓你指定想從哪一個匹配的行的開始,之前或者周圍看。 grep可以通過-E 來使用擴展的模式匹配表達式。可以檢查系統日志。但是並沒有在這些日志裡面檢查到什麼奇怪的地方。
現在繼續進行檢查。運行 ps -eflcyL (Solaris 9),ps -eflcym --headers (Deb3.0, RH8.0)或者 ps auwxhkwvl(OBSD 3.2)。找到進程 apache,而這一次發現有問題了。這裡只有一個apache進程和多個httpd進程。httpd實際上是Apache服務器,因為httpd是在apachectl文件執行的二進制,運行的apache是前派生的,因此,如果二進制文件被重命名為"apache",那麼也應該有多個進程存在。這就是問題所在。
使用 lsof -p
[9] ,發現這個apache進程打開了一個叫 john.pot 的文件。立刻通過google,查詢這是一個叫“John the Ripper”的密碼破解工具,正是這個東西讓CPU滿負荷了。
現在來檢查這個所謂的apache程序。通過 file apache,表明這個文件是ELF可執行的。現在進行進一步的挖掘,執行 readelf -a apache,確信這是一個ELF可執行程序。 od -xc apache | less