UNIX系統(tǒng)下的應(yīng)急響應(yīng)工具介紹
整個文章分三個系列介紹對于 OpenBSD, Linux, 或者Solaris系統(tǒng)的應(yīng)急響應(yīng)和取證過程中有用的工具。本部份聚焦在系統(tǒng)工具上,第二部份主要是介紹文件系統(tǒng)工具,最后部分則主要是網(wǎng)絡(luò)工具。本文用到的都是基于
整個文章分三個系列介紹對于 OpenBSD, Linux, 或者Solaris系統(tǒng)的應(yīng)急響應(yīng)和取證過程中有用的工具。本部份聚焦在系統(tǒng)工具上,第二部份主要是介紹文件系統(tǒng)工具,最后部分則主要是網(wǎng)絡(luò)工具。本文用到的都是基于 OpenBSD 3.2, Debian GNU/Linux 3.0 (woody), RedHat 8.0 (psyche), and Solaris 9 (aka Solaris 2.9 or SunOS 5.9)的。
依賴于你所使用的操作系統(tǒng),本文討論的許多軟件可能不是默認(rèn)安裝的。這種情況下,請根據(jù)文章后面的參考部分獲得這些工具。
The Soapbox
那些可以用來處理入侵威脅的工具不在本系列討論內(nèi)容中,本文只覆蓋在入侵發(fā)生之后使用的工具。入侵通常是可以防止的。使用一些比如保證系統(tǒng)更新安裝最新補(bǔ)丁的技術(shù),按照最小化服務(wù)配置系統(tǒng),使用設(shè)計(jì)為安全的操作系統(tǒng),使用能夠加固系統(tǒng)的核心補(bǔ)丁等等,這些來防范入侵的技術(shù)可能讓你根本就從來不會使用在本系列文章中介紹到的這些工具。
讀者應(yīng)該命令,一旦攻擊者獲得了系統(tǒng)控制權(quán),這個系統(tǒng)就基本不應(yīng)該被信任。我們討論的工具多數(shù)都操作在用戶方式。一個欺騙的核心模塊可能不會讓你正常地檢查系統(tǒng),比如,這個系統(tǒng)已經(jīng)被入侵的情況下。這些欺騙的模塊會采用多種辦法來隱藏自己,比如根據(jù)系統(tǒng)設(shè)計(jì)來讓自己在系統(tǒng)運(yùn)行的時候不能輕易檢測到。這意味著,你不應(yīng)該相信你使用的那些工具的輸出結(jié)果。這意味著在響應(yīng)入侵事件中,應(yīng)該采取懷疑、研究和謹(jǐn)慎的方式。
你用于分析系統(tǒng)的工具應(yīng)該是你可以去信任,而且沒有被修改的。下面討論了一些技術(shù),比如將工具保存在離線的只讀介質(zhì)中,這樣,你就更可以信賴,而不是那些在已經(jīng)被入侵的系統(tǒng)上的二進(jìn)制程序。
你已經(jīng)做了所有正確的事情,可以進(jìn)行下面的一些練習(xí),你的系統(tǒng)已經(jīng)被入侵了。現(xiàn)在怎么辦呢?
Breaking Out the Toolbelt
現(xiàn)在首先應(yīng)該檢查那些我們后面需要用到的工具。這里不說man(1)提供的信息,特別是因?yàn)槊顓?shù)因?yàn)橄到y(tǒng)不同而不同。檢查這樣的信息是留給讀者的一種練習(xí)。
vmstat - 這是可以快速察看內(nèi)存、CPU和磁盤子系統(tǒng)的命令。vmstat 通常執(zhí)行一個短時間,以便可以察看子系統(tǒng)利用的趨勢。vmstat 經(jīng)常可以在系統(tǒng)性能有一些問題的時候幫助我們知道哪些地方應(yīng)該去深究。
mpstat - 這個命令在Linux和Solaris上都有,可以用它察看處理器利用的統(tǒng)計(jì)。mpstat 提供一個選項(xiàng),允許在多處理器系統(tǒng)中察看指定CPU的統(tǒng)計(jì)。vmstat 沒有這個功能。
iostat - 顯示比vmstat更詳細(xì)的跟子系統(tǒng)相關(guān)的統(tǒng)計(jì)信息。
sar,sa,lastcomm,last - 這些是檢查歷史數(shù)據(jù)和一些近來的系統(tǒng)事件。sar是一個Solaris和Linux的系統(tǒng)性能分析工具。這些可以用于檢查的性能數(shù)據(jù)類似于vmstat, mpstat和 iostat的顯示。 sar的數(shù)據(jù)是一段時間保存的內(nèi)容,因此可以察看過去的信息。 lastcomm可以現(xiàn)在系統(tǒng)最近被執(zhí)行的命令。這些可以用在系統(tǒng)審計(jì)中。sa 可以在*BSD和Linux中找到,它給用戶在系統(tǒng)審計(jì)中更多的選項(xiàng)來收集信息。
ps - 立足于進(jìn)程狀態(tài),用于顯示系統(tǒng)執(zhí)行的進(jìn)程和他們的信息。
top - 顯示的信息同ps接近,但是top可以了解到CPU消耗,可以根據(jù)用戶指定的時間來更新顯示。
lsof - 列舉打開的文件,顯示系統(tǒng)當(dāng)前打開的所有文件。Unix系統(tǒng)的所有東西幾乎都可以看作是文件,因此lsof也顯示了系統(tǒng)的狀態(tài)中有重要意義的內(nèi)容。
file - 判斷文件是什么,不同的文件格式可以16進(jìn)制的形式現(xiàn)實(shí)文件的內(nèi)容
readelf - 顯示二進(jìn)制文件的ELF(可執(zhí)行鏈接和格式)頭的細(xì)節(jié)。這些內(nèi)容可以判斷可執(zhí)行提供的函數(shù)。
od - 以用戶指定的格式輸出文件內(nèi)容。od對于在文件內(nèi)容中有一些解釋的情況下察看原始內(nèi)容是有幫助的。
ldd - 讀取ELF頭的內(nèi)容,并顯示可執(zhí)行文件依賴的對象庫。
string - 現(xiàn)實(shí)文件中的ASCII字符串。對于在二進(jìn)制文件中查找其中可讀的字符串是非常有用處的。
find - 用于在文件系統(tǒng)中查找指定的對象。
strace - 這個工具開始或者附加到一個當(dāng)前運(yùn)行的進(jìn)程中,顯示這個進(jìn)程所作的所有系統(tǒng)調(diào)用。這可以用來判斷程序運(yùn)行的行為,并且來決定是否是合適的程序。strace 存在于Linux上。在 Solaris上是truss, *BSD提供的ktrace可以達(dá)到相似的功能。
sudo - 可以讓管理員給用戶以其他用戶的權(quán)限執(zhí)行命令的能力,而不用給該用戶密碼。
grep - 用于按照用戶指定的模式查詢。 grep用匹配規(guī)則。
less - 頁面調(diào)度程序,用來按頁顯示文本。
在參考部分中的"CD-ROM and Floppy distributions"[3]中,一些站點(diǎn)介紹了怎么編譯這些工具以便用于不同的操作系統(tǒng),并放置在CD-ROM。現(xiàn)在,開始檢查運(yùn)行的系統(tǒng)了。
運(yùn)氣就是在機(jī)會面前有所準(zhǔn)備
運(yùn)氣對于技術(shù)來說,并不是可求解的。攻擊者可以采用很多方法來危及OS的安全。威脅系統(tǒng)安全的漏洞可能是OS提供商,也可以是那些應(yīng)用軟件。當(dāng)漏洞還沒有大面積公布,或者還沒有讓它的相關(guān)提供商自己知道的時候,攻擊者已經(jīng)在IRC里面知道那種系統(tǒng)可以被入侵了。作為一個安全管理員,你必須在這場游戲中表現(xiàn)一直出色。但是,攻擊者則只需要一次就足夠。
然而,你需要做許多前期的準(zhǔn)備工作。你應(yīng)該有一個應(yīng)急響應(yīng)的策略。你必須有一張CD-ROM或者軟盤什么的,來存儲檢查系統(tǒng)中需要的工具,而不是使用被入侵的系統(tǒng)中的工具。如果正使用軟盤,讓他們處于寫保護(hù)模式,你可以在取證[5]中獲得非常優(yōu)秀的資源。
現(xiàn)在回到機(jī)器上。把事件響應(yīng)的日期和時間都紀(jì)錄在記錄本上。并且紀(jì)錄采取的每一步的所有細(xì)節(jié)和時間。裝載CD-ROM或者軟盤,并且使用紀(jì)錄在這些介質(zhì)上的軟件,緊記按照易失性的順序[6]保存相關(guān)的信息到安全的地方。
按照易失性順序的重要原因是因?yàn)槿肭质录l(fā)生后與之相關(guān)信息的數(shù)量和自量都將隨時間增加而迅速減少。那些經(jīng)驗(yàn)豐富的攻擊者制造的事件則可能讓曲線更陡,下降速度更快。
了解自己
可能在入侵事件之前,你已經(jīng)在系統(tǒng)上花費(fèi)了大量時間。你了解這些系統(tǒng)的里里外外,進(jìn)行了相當(dāng)多的文檔工作,并且做了備份。在系統(tǒng)上,開啟了進(jìn)程審計(jì)(或者*BSD的系統(tǒng)審計(jì)),進(jìn)行了系統(tǒng)實(shí)時數(shù)據(jù)(sadc[8])來保存系統(tǒng)的性能數(shù)據(jù)。管理日志的時候,可能沒有足夠的空間來頻繁存儲這些數(shù)據(jù),你可以發(fā)送syslog數(shù)據(jù)到安全的日志服務(wù)器上。
你接到webmaster的電話,他發(fā)現(xiàn)某個web服務(wù)器上CPU負(fù)載很高,而這個服務(wù)器每天的瀏覽量僅僅幾千而已。webmaster確信服務(wù)器存在有什么問題。
vmstat 和 mpstat (只在*BSD系統(tǒng)上) 表明CPU被用戶空間的一個或者多個進(jìn)程消耗掉了,但是內(nèi)存和I/O子系統(tǒng)還沒有大量使用。 iostat 也顯示出磁盤系統(tǒng)不正常。
$ 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運(yùn)行了幾次, last 這個命令顯示最近的登錄,沒有顯示出這個時間段有 root 從什么地方登錄進(jìn)來。另外,這個服務(wù)器又使用 sudo來管理root權(quán)限。這里有兩個系統(tǒng)管理員賬號可以用 root登錄,但是他們并沒有登錄過,特別是在 AM 3這個時間附近。根據(jù)這一點(diǎn),你決定使用CD上準(zhǔn)備好的二進(jìn)制工具。現(xiàn)在運(yùn)行 top -d1,并且發(fā)現(xiàn)apache這個進(jìn)程占用了100%的CPU。
現(xiàn)在用 grep 檢查apche的錯誤日志,這個GNU工具可以有更多有用的參數(shù),-A, -B和-C 可以讓你指定想從哪一個匹配的行的開始,之前或者周圍看。 grep可以通過-E 來使用擴(kuò)展的模式匹配表達(dá)式。可以檢查系統(tǒng)日志。但是并沒有在這些日志里面檢查到什么奇怪的地方。
現(xiàn)在繼續(xù)進(jìn)行檢查。運(yùn)行 ps -eflcyL (Solaris 9),ps -eflcym --headers (Deb3.0, RH8.0)或者 ps auwxhkwvl(OBSD 3.2)。找到進(jìn)程 apache,而這一次發(fā)現(xiàn)有問題了。這里只有一個apache進(jìn)程和多個httpd進(jìn)程。httpd實(shí)際上是Apache服務(wù)器,因?yàn)閔ttpd是在apachectl文件執(zhí)行的二進(jìn)制,運(yùn)行的apache是前派生的,因此,如果二進(jìn)制文件被重命名為"apache",那么也應(yīng)該有多個進(jìn)程存在。這就是問題所在。
使用 lsof -p <pid>[9] ,發(fā)現(xiàn)這個apache進(jìn)程打開了一個叫 john.pot 的文件。立刻通過google,查詢這是一個叫“John the Ripper”的密碼破解工具,正是這個東西讓CPU滿負(fù)荷了。
現(xiàn)在來檢查這個所謂的apache程序。通過 file apache,表明這個文件是ELF可執(zhí)行的。現(xiàn)在進(jìn)行進(jìn)一步的挖掘,執(zhí)行 readelf -a apache,確信這是一個ELF可執(zhí)行程序。 od -xc apache | less 現(xiàn)實(shí)ELF魔法數(shù)字(7f454c46),ldd顯示apache連接的共享對象庫比實(shí)際的httpd進(jìn)程小一些,這里面一定有文章:
$ ldd ./apache
libc.so.6 => /lib/libc.so.6 (0x4001f000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$ ldd /usr/sbin/httpd
libm.so.6 => /lib/libm.so.6 (0x7002c000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x700c4000)
libdb.so.2 => /lib/libdb.so.2 (0x70100000)
libdb2.so.2 => /lib/libdb2.so.2 (0x70120000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x70180000)
libdl.so.2 => /lib/libdl.so.2 (0x701b4000)
libc.so.6 => /lib/libc.so.6 (0x701c8000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x70000000)
執(zhí)行: strings | grep -i john,顯示如下:
$ strings apache | grep -i john
/usr/share/john/password.lst
/etc/john.ini
~/john.pot
/etc/john.ini
john
John the Ripper Version 1.6 Copyright (c) 1996-98 by Solar Designer
/etc/john.ini
/etc/john.ini
/etc/john.ini
用 strace -fp 'pgrep apache'(Deb3.0, RH8.0), truss -fp 'pgrep apache'(Sol9),或者 ktrace -dip <pid> (OBSD 3.2),來察看apache進(jìn)程到底在做什么。
# strace -fp `pgrep apache`
--- SIGALRM (Alarm clock) ---
sigreturn() = ? (mask now [])
--- SIGALRM (Alarm clock) ---
sigreturn() = ? (mask now [])
--- SIGALRM (Alarm clock) ---
sigreturn() = ? (mask now [])
_llseek(4, 65536, [65536], SEEK_SET) = 0
read(4, "\2YUz\0\2Z\0241\0\2ZA1dkmnr\0\2ZDa\0\2ZElnrd"..., 4096) = 4096
read(4, "\2\5Ma\0\2\5Te\0\2\6\n(\0\2\6>%\0\2\10\n&\0\2\10\0210\0"..., 4096) = 4096
read(4, "IPVm\0\2(%L\0\2((H\0\2(/CMRBNTUWcr\0\2(5"..., 4096) = 4096
read(4, "fgq\0\2BCh26o\0\2BDaikmoy\0\2BEanreltc"..., 4096) = 4096
read(4, "ag\0\2N\23l\0\2N\25j\0\2N\0269\0\2N\30f\0\2N!ds\0\2N)"..., 4096) = 4096
read(4, "\0\2_9LRMTes\0\2_:6Z\0\2_>&%\0\2_?)Cw\0\2_"..., 4096) = 4096
read(4, "%Antv\0\2%Cr\0\2%Dd\0\2%Gg\0\2%Ke\0\2%Lls\0"..., 4096) = 4096
read(4, "rtlpbdgiuv\0\2GBeam\0\2GDuy\0\2GEnert\0"..., 4096) = 4096
read(4, "We6hilw\0\2RYasdpcgilmno\0\2S\0205c\0\2S\21"..., 4096) = 4096
read(4, "68jDxMEBTIRNLAGSKCPOqVHFUZWJ$%#^"..., 4096) = 4096
read(4, "\0022In\0\0022Ke\0\0022LiEe\0\0022Ma\0\0022NEe\0\0022P"..., 4096) = 4096
read(4, "I5y\0\2I6e\0\2I7ae\0\2IAnmrs9t67dhlpuz"..., 4096) = 4096
read(4, "Eprylsenbu9ak013ft!Lcox\0\2SFi9aey"..., 4096) = 4096
read(4, "o149dlytwMbckr0u\0\2_Xixae01537926"..., 4096) = 4096
read(4, "2\0\2-!NCLS\0\2-%RS\0\2-)ETDNS\0\2--M\0\2-"..., 4096) = 4096
read(4, "!*bfgk\0\2GJu\0\2GLeiayYs\0\2GMaAoegu\0"..., 4096) = 4096
read(4, "Utsdbgmpy\0\2PWa\0\2PXy\0\2PY1!27sy.05"..., 4096) = 4096
read(4, "w!9bAjp5clgkr068EFSYf$.?CJKLW]n\0"..., 4096) = 4096
--- SIGALRM (Alarm clock) ---
sigreturn() = ? (mask now [])
用 grep -n 在John the Ripper的源代碼中找到在 crk_password_loop()函數(shù)中有一個叫 sig_timer_emu_tick()的函數(shù),它在timer_emu_max到達(dá)之后產(chǎn)生 SIGALRM。這就是 strace 顯示的SIGALRM。通過 lsof -p 'pgrep apache'來檢查哪個文件同讀的文件描述符fd 4在讀取數(shù)據(jù),以及fd 4相關(guān)聯(lián)的叫all.chr的文件。察看 john.ini 文件,找到所引用的 all.chr 文件。
所有跡象表明,這的確是一個密碼破解工具, John the Ripper。因此,無論是你還是其他的任何管理員安裝了這個工具,它運(yùn)行起來的時候,就會好像web 服務(wù)器被入侵了。
結(jié)論
在下一篇文章中,我們會繼續(xù)進(jìn)行研究在Webserver使用文件系統(tǒng)工具的時候到底發(fā)生了什么事情。記住,面對任何威脅最好的準(zhǔn)備是做好預(yù)防。當(dāng)入侵真正發(fā)生的時候,你要做很多工作去了解你的系統(tǒng),設(shè)置策略,和實(shí)施應(yīng)急響應(yīng)的技術(shù),你的優(yōu)勢越明顯,那么控制和根除威脅就更能實(shí)現(xiàn)。
[下面參考中的連接請察看原文檔。]
References
[1] Acquiring/Installing software
• OpenBSD ports system
• FreeBSD ports system
• Freeware for Solaris
• HOWTO install packages on a Debian system
• Installing packages on a RedHat system
• GNU binutils (readelf)
• lsof
• top
• sudo
[2] Kernel Modules Countermeasures
• Dino Dai Zovi's paper on kernel rootkits
• Sealing the linux kernel
• gr-security linux kernel patch
• LIDS linux kernel patch
[3] CD-ROM and Floppy distributions
• Here is a link that explains how to make CD-ROMs on Linux: http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html
• F.I.R.E. (Forensic and Incident Response Environment) Bootable CD
• Knoppix Linux
• How to Make a Bootable, Full System OpenBSD CD-ROM
• LNX-BBC mini-linux distribution
• Google's Tiny Linux distributions list
[4] Incident Response Policy
• Handbook for Computer Security Incident Response Teams
• Expectations for Computer Security Incident Response
• Recommended Internet Service Provider Security Services and Procedures
• Recovering from an Incident (CERT)
• Security Practices and Implementations (CERT)
•
[5] Forensics
• Incident response and Forensics Resources
• Forensics resources maintained by Dan Farmer
• Computer Forensics Resource Center
•
[6] Order of Volatility
• Computer Forensics Analysis Class: Introduction, Pg. 14 (Dan Farmer & Wietse Venema)
[7] Process accounting
• Solaris 9 SysAdmin Guide: Resource Management and Network Services, Ch 7
• Enabling Process Accounting on Linux HOWTO
• OpenBSD sa(8) man page
[8] System Activity Data Collector (sadc)
• sadc(8) Linux man page
• Solaris 9 SysAdmin Guide: Monitoring System Performance (Tasks), Ch 24
[9] lsof alternatives
Don't have lsof? These techniques might help.
Solaris 9:
1. use psto find the pid of the process you're interested in.
2. run /usr/proc/bin/pfiles .
3. Look for the string 'ino:' in the output. The number that follows is the 'inode number'.
4. run find -inum <inode number>
OpenBSD 3.2:
1. run fstat -v.
2. Look in the INUM column to find the the inode numbers that a particular process has open.
3. run find -inum <inode number>
Poking around in /proc (Deb 3.0, RH 8.0):
1. ls -l /proc/<pid>/fd
進(jìn)一步研究
下面的命令沒有在本系列中列出來,它們在分析系統(tǒng)的時候也非常有幫助:nm, size, ar, objdump, what(OBSD3.2), ltrace(Deb3.0, RH8.0), /usr/procebin/*(Sol9), w, who, 和 fuser.
責(zé)任編輯:大云網(wǎng)
免責(zé)聲明:本文僅代表作者個人觀點(diǎn),與本站無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實(shí)相關(guān)內(nèi)容。
我要收藏
個贊
-
發(fā)電電力輔助服務(wù)營銷決策模型
2019-06-24電力輔助服務(wù)營銷 -
電力線路安全工作的組織措施和技術(shù)措施分別是什么?
-
兩會保電進(jìn)行時丨陜西電力部署6項(xiàng)重點(diǎn)任務(wù)
-
電力線路安全工作的組織措施和技術(shù)措施分別是什么?
-
兩會保電進(jìn)行時丨陜西電力部署6項(xiàng)重點(diǎn)任務(wù)
-
山東特高壓首次完成帶電消缺 確保電力安全穩(wěn)定迎峰度冬
-
發(fā)電電力輔助服務(wù)營銷決策模型
2019-06-24電力輔助服務(wù)營銷 -
繞過安卓SSL驗(yàn)證證書的四種方式
-
網(wǎng)絡(luò)何以可能
2017-02-24網(wǎng)絡(luò)
-
Windows 10首發(fā) 四大安全提升
-
超級安卓漏洞 “寄生獸”影響數(shù)千萬手機(jī)應(yīng)用
-
航空公司首出現(xiàn)操作系統(tǒng)被黑
2015-06-23航空公司
-
“企業(yè)應(yīng)急響應(yīng)和反滲透”之真實(shí)案例分析
-
攜程恢復(fù)正常 安全,我們準(zhǔn)備好了嗎?
2015-05-29攜程 -
一張圖讀懂《2014年消費(fèi)者個人信息網(wǎng)絡(luò)安全報告》