亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

UNIX系統下的應急響應工具介紹(二)
2005-11-24   

UNIX系統下的應急響應工具介紹
第二部分   文件系統工具
原作者:Holt Sorenson
原文:《Incident Response Tools For Unix, Part Two: File-System Tools》
last updated October 17, 2003
來源:http://www.securityfocus.com/infocus/1738
翻譯:Refdom
www.xfocus.org
這是關于應急響應工具介紹的三個系列文章中的第二部分。第一部分聚焦在系統工具上,本部分將主要討論文件系統工具,下一部分則主要是網絡工具和其他工具。這三部分都是基于 OpenBSD 3.2, Debian GNU/Linux 3.0 (woody), RedHat 8.0 (psyche), and Solaris 9 (aka Solaris 2.9 or SunOS 5.9)的。這些工具都是系統中比較通用的工具,除了少部分外。如果某個工具在操作系統中不存在,那么在文章的參考部分中應該可以找到相關信息。
文章中的這些工具都執行在用戶空間。如果攻擊者安裝一些核心模塊,或者root-kit來替換系統上的二進制文件,那么這些工具就可能不會很準確。這就是將數據離線在安全的系統中分析的一個原因。除非這些數據能夠確認是可信的,否則絕對不能信任它們。介紹多個工具來做相類似的事情,可以在響應事件的時候有更多選擇。
必須強調的是,這些工具都應該僅僅在只讀介質中執行,或者一個安全的系統中用來作離線分析。使用只讀介質可以確認這些工具不能被更改。
在應對事件的時候,安全人員應該首先知道的是,他們優先捕獲紀錄的是哪些數據。這些數據是存在被更改的趨勢的。應急響應隊伍需要討論處理的優先級,是否需要讓機器離線,還是應該先作好系統的鏡像,或者捕獲那些活動數據,比如當前的進程、建立的網絡連接,內存分配和使用情況,用戶登錄情況。在事件發生后,系統在線的時間越長,那么,從(遠程的、本地)攻擊者或者系統造成破壞的威脅就更大。
通過法律的介入可以來檢驗安全隊伍的事件處理過程是否符合必要的法律取證。類似HTCIA(US)和NHTCU(UK)這樣的組織能夠幫助處理技術專家同應對計算機犯罪進行取證的法律官員之間的聯系。
第一部分文章中最后找到了密碼破解工具,John the Ripper,在本文,我們將利用文件系統工具來繼續去挖掘信息來揭露這個是怎么被入侵的。
Sum packages need to be checked 
攻擊者是在03:17開始破解密碼的,現在從03:17開始進行搜索,但是這個時間并不是攻擊者闖入的時間。攻擊者通常使用一些自動化的程序來掃描和攻擊有漏洞的系統,這就意味著攻擊者使用的工具通常會在一些時間之前就留下了一些痕跡。
現在深入到一些可以幫助我們來檢測文件系統的改變的工具。一些工具在系統中默認存在的,而一些需要另外指定安裝或者是一些第三方的工具。
在Solaris和Linux上,有一些自身存在的命令來比較當前系統安裝的包。命令是: rpm -Vva(RH8.0),pkgchk -vn(Solaris 9),和debsums -ac(Deb3.0)。rpm和debian格式化都能用RFC2440 (OpenPGP)來根據簽名驗證這些包。也可以用MD5來作為校驗和。在Solaris系統上,pkgchk用SystemV(SYSV)算法來驗證二進制是否被篡改。SYSV運算法則可以檢測出只改變文件內容而不改變文件長度的變化。然而,不可能根據SYSV算法來進行完整性檢查。它只是更多地依賴于文件大小和時間戳。用慣了十六進制編輯器和touch命令的人都知道改變文件內容而不改變文件大小,以及改變文件的時間戳,這些操作是多么的容易。在Debian GNU/Linux,可以指定一套包來進行對比檢查。如果在/mnt上裝載了一套只讀的包 ,可以通過這個命令來檢查包文件:debsums -cagp /mnt/* 。這相當于rpm命令:rpm -Vvp /mnt/Redhat/RPMS/*.rpm 。用rpm -Vva --dbpath <some_path> 可以來驗證備用數據庫。在Debian系統上相似的命令是: debsums -cagd <some_path>。這些數據庫應該保存在只讀介質上并且來自可信系統。如果你想獲得rpm的詳細數量,可以加上參數-v。這些命令可以幫助檢查攻擊者做的一些改變。
package tools verifying current file system state against package metadata:  
{redhat80} $ rpm -vVa
[ snip lots of output ]
..5....T   /bin/ls
[ snip lots of output ]
{solaris9} $ pkgchk -vn
[ snip lots of output ]
ERROR: /usr/bin/ls
modtime <04/06/02 10:54:41 PM> expected <09/08/03 01:04:01 AM> actual
file cksum <63074> expected <63042> actual
/usr/bin/ls
[ snip lots of output ]
{debian30} $ debsums -ac
[ snip lots of output ]
bin/ls
[ snip lots of output ]
比較當前的系統上的安裝的包的數據庫有很多幫助,但是,如果系統被高度自定義過了,打包系統和當前的文件系統上的metadata可能是完全不同的。所以用包工具來比較當前文件系統狀態和程序包數據庫可能不會得到期望的結果。OpenBSD上有一個工具叫mtree,它可以用hash函數[5]來確信文件系統上的文件從上次數據庫更新起是否被改變過。如果攻擊者附加或者修改已經在mtree的數據庫中存儲了hash的文件,那么這些改變就可以被mtree檢測出來。另外一些第三方的工具也有類似功能,比如:AIDE, integrit, Osiris和tripwire。另外一些工具,比如:changedfiles, dnotify, 和FAM用核心模塊,或者監控查詢文件系統來檢測文件改變,這些工具可以比文件系統完整性檢測工具更快地得到文件改變的通知。這是因為文件系統完整性檢查工具是通過周期性地用hash函數來檢測的。當然,所有這些工具都應該在被入侵之前先安裝配置好。
如果上面這些工具還沒有安裝配置,或者需要進行進一步的挖掘,這里還有一些其它工具可以用到。這些工具通常可以用在文件上,在Solaris系統,也可以用于目錄。當然,這需要擁有一個可信系統,在其上運行相同的工具,來比較兩者的運行結果,這些工具才是有用的。如果信任 The Shmoo Group(http://www.shmoo.com/),那么就可以參考這里的 Known Goods(http://www.knowngoods.org/)數據庫來查詢hash和文件大小。 md5sum工具可以在Linux系統上進行MD5 hash的計算。在OpenBSD上,類似的工具是md5,OpenBSD也有基于SHA1和RIPEMD 160 hash算法功能的工具:sha1和rmd160 。命令openssl可以利用OpenSSL庫來進行hash計算。 openssl dgst <some_file> 默認使用MD5算法。用openssl dgst -?可以察看這個命令的使用方法以及提供的不同hash算法。實際上,執行命令的時候可以不需要'dgst'符號。比如,如果用MD5對文件來進行hash,可以執行 openssl md5 <filename>。 另外一個工具:shash [8]可以用前面提到的hash算法來進行校驗(詳見 shash -l),它也可以用一對另外的算法來計算校驗和。
那些不是通過hash函數來進行校驗和的命令,則并不應該使用在應急響應中。比如命令chsum和sum。校驗和(checksum)算法(CRC*, BSD和SYSV)不能到達hash函數所能提供的斷言等級。事實上也是這樣,checksum算法根本不能在取證中值得信任。checksum算法主要用于檢測數據傳輸和存儲中是否發生錯誤,而不是用于保護和警報數據被惡意攻擊者修改。很容易可以找到多種數據的組合,而有相同的校驗和。即使先得到數據的checksum,并且把checksum和它們的數據都存儲在只讀介質中,可以確保這些數據不會被修改,而應對的策略則是可以創建另一些數據,并且有相同的checksum,這種應對辦法導致的結果就是這些數據會被懷疑,但是checksum并沒有提供足夠的斷言:這些數據是被篡改了。依賴checksum算法要匹配的復雜度是很小的,而基于MD5算法的復雜度是2^128,SHA1則是2^160。對于MD5和SHA1算法,是很難找到兩組數據能夠產生相同的hash值。checksum算法可以對付數據的意外干擾,而不是對付惡意攻擊的。這就是為什么使用基于hash函數如MD5或SHA1的必須的。
Hash/Checksum tools in action:  
{deb30} $ md5sum /bin/ls
a5c720b6776331b9695d9a1f4f5c2194  /bin/ls
{deb30} $ openssl dgst /bin/ls
MD5(/bin/ls)= a5c720b6776331b9695d9a1f4f5c2194
{deb30} $ shash /bin/ls
# MD5 HASH
a5c720b6776331b9695d9a1f4f5c2194  /bin/ls
{deb30} $ cksum /bin/ls
2890986056 43784 /bin/ls
{deb30} $ sum -r /bin/ls
56701    43
{deb30} $ sum -s /bin/ls
6968 86 /bin/ls
Hey MAC, what time ya got? 
UNIX或者類UNIX文件系統存儲一套時間戳元數據,這些時間戳包括modify、access和change時間,即MAC時間。這些時間戳都保存在文件系統索引節點(inode)結構中。除了這些時間戳外,inode也包含其他的文件信息,比如:文件類型、許可、所屬、組、大小、硬連接數,以及文件占用的數據塊。目錄也有它們自己的inode,這包括目錄下的文件名,以及包含文件信息的inode數量。
mtime (modify time)反映的是文件數據最后被修改的時間,系統調用比如write, trucate, mknod 都會改變mtime。 ctime(change time)反映的是文件的inode結構最后被改變的時間,atime(access time)反映的是文件數據最后被訪問的時間。當系統調用execve, read, mknode, utime, pipe等都會修改atime。你可以在stat(2)的幫助中找到更多關于mtime, atime, ctime的細節。
要改變MAC時間有多種不同的命令和不同的方法。下面的表格現實了一些普通命令對MAC時間的作用。這些表是基于使用ext2文件系統的Debian3.0,其中包含加載在loopback設備上的flat file。如果在LINUX系統的loopback設備上加載許多鏡像,可以在引導程序中設置max_loop = 255,來在啟動前傳遞給系統核心。那么就可以加載255個鏡像,而不是默認限制的8個。一旦文件系統加載到loopback設備上,就可以用debugfs檢查。建議在你自己的系統上對下面表格中的內容進行試驗[9]驗證。下面表中基本是可以通用的。
(譯注:因為文本的排版問題,可參考原文的表格)
How common commands change MACtimes for a directory (foo):  
Action                                              atime ctime mtime
creation (mkdir foo)                                  X     X     X
directory move (mv foo bar)                                 X     X
file creation (touch foo/foo)                               X     X
file creation (dd if=/dev/zero of=foo/foo count=1)          X     X
list directory (ls foo)                               X    
change directory (cd foo)      
file test (-f foo)      
file move/rename (mv foo foo_mvd)                           X     X
permissions change (chmod/chown <some_perm> foo)            X  
file copy (mv foo_mvd foo)                                  X     X
file edit (vim foo)                                         X     X
file edit (emacs foo)                                 X     X     X
file edit (nvi/nano foo)      
How common commands change MACtimes for a file (f1):  
Action                                              atime ctime mtime
creation (touch foo)                                  X     X     X
creation (dd if=/dev/zero of=foo count=1)             X     X     X
rename (mv foo bar)      
permissions change (chmod <some_perm> foo)                  X  
copy (cp foo bar)                                     X    
copy overwrite (cp bar foo)                                 X     X
append (cat >> foo)                                         X     X
overwrite (cat > foo)                                       X     X
truncate (cp /dev/null foo)                                 X     X
list file (ls foo)      
edit (vim/emacs/xemacs/joe/jed foo)                   X     X     X
edit (ed/nvi/vi (sun)/vi (obsd)/nano/pico foo)        X1    X1    X1
1 - all times changed, but atime is slightly older than mtime and ctime
ls命令可以用來現實文件的MAC時間,下表顯示的是多個ls命令,來按最后修改時間的排序列舉。
displaying MACtimes using ls:  
Linux (ls from GNU fileutils) OpenBSD Solaris
mtime ls -latr --full-time ls -latTr ls -latr
atime ls -laur --full-time ls -lauTr ls -laur
ctime ls -lacr --full-time ls -lacTr ls -lacr
find命令也是非常有用的,可以用來查詢被修改了的文件,只需要使用-ctime, -atime, -mtime參數。當使用find命令的時候,注意,那些目錄下的文件的atime都會被改變。如果要更正規的使用find命令,那么應該使用在只讀的鏡像中。
多數Linux都有find[10],GNU版的find有很強的功能,可以指定一個時間區域,這樣讓find來顯示這個區域的時間戳。如果你想查詢多個至少7天前被修改的文件,并現實它們的mtime,ctime,atime和inode,可以用下面的命令:
# find / \( -mtime +2 -a -mtime -7 \) -a -printf "M:%t  C:%c  %i\t%p\n"
如果使用Linux,但是沒有GNU的find,那么可以用stat命令,如果沒有stat命令的權限,但可以用perl,那么可以用perl來當作stat(2):
# find / \( -mtime +2 -a -mtime -7 \)|perl -ne
'chomp;($i,$m,$c)=(stat)[1,9,10];printf"M:%s\t$i\t$_\n",localtime($m)."  C:".localtime($c)'
攻擊者可能通過有問題的suid或sgid的二進制來提升權限。攻擊者有是也留下可以suid root 的shell,這樣讓他們更方便。find命令可以捕獲到這樣的文件。可以使用這樣的命令:
find / -perm -6000 -ls
下面是一些find命令的例子:
the find command in action:  
##==
##== find all files which have had their status changed in
##==   the last 24 hrs (display ctime, inode, and filename)
# find / -ctime -1 -printf "%c  %i\t%p\n"
Fri Sep  7 11:55:14 2003  174945        /var/lib/rpm
Fri Sep  7 11:55:14 2003  174946        /var/lib/rpm/__db.001
Fri Sep  7 11:55:17 2003  174947        /var/lib/rpm/__db.002
Fri Sep  7 11:55:17 2003  174948        /var/lib/rpm/__db.003
Fri Sep  7 11:55:55 2003  160125        /var/lib/random-seed
Fri Sep  7 11:55:16 2003  222706        /var/log
Fri Sep  7 12:17:05 2003  224545        /var/log/messages
[ output deleted ]
##==
##== find all files which have had their status changed from
##==   5 to 30 (inclusive) days ago and display the ctime, inode, and filename
# find / -ctime +4 -ctime -31 -printf "%c  %i\t%p\n"
Sat Aug 30 19:49:52 2003  414661        /boot/System.map-2.4.20-20.8bigmem
Sat Aug 30 19:49:52 2003  414662        /boot/config-2.4.20-20.8bigmem
Sat Aug 30 19:49:52 2003  414663        /boot/module-info-2.4.20-20.8bigmem
Sat Aug 30 19:49:53 2003  414664        /boot/vmlinux-2.4.20-20.8bigmem
Sat Aug 30 19:49:53 2003  414665        /boot/vmlinuz-2.4.20-20.8bigmem
[ output deleted ]
If I had a photograph of you... something to remind me...
在Linux和Unix上創建文件系統鏡像的最通常的命令是dd。 dd命令按位從輸入中讀取,并保存在輸出中。dd不顯示進度,因此如果是輸入的塊同輸出塊大小不相同的時候就會非常慢。比dd更友好的是sdd[11],它就沒有這些缺點。sdd可以顯示當前的統計,也可以顯示當前的進度。
在使用dd來制作文件系統鏡像之前,可以先用工具創建需要鏡像的文件系統的hash。假設在Linux平臺上要創建/dev/hda的鏡像,可以運行md5sum /dev/hda,然后開始dd。 dd完成后,對保存的鏡像運行相同的工具。如果這些值不匹配,應該檢查為什么出現了差異。在openBSD和Solaris上進行應急響應的時候,應該用raw device。
對于Linux,工具e2image可以用來創建ext2和ext3文件系統的鏡像。e2image只解釋需要被鏡像的文件系統,而不是保存原始bit。e2image就不能保存那種聰明的攻擊者存儲在磁盤上的文件系統結構之外的數據。 e2image可以創建“raw”和“nomal”鏡像,這兩種方法都可以節約空間。因此,用e2image創建的鏡像同硬盤上的文件系統有不同的hash,這很難讓你對捕獲的數據進行斷言。這導致e2image在取證上,依然是不能替代dd的。
另一個創建系統鏡像的工具是partimage[12],可以將鏡像文件通過ssl傳輸到一個partimage服務器上,當前可以支持ext2,ext3,ReiserFS,JFS,和XFS,也支持FAT16/32和HPFS(OS/2),并且正在逐步增加支持UFS(Solaris, *BSD), HFS(MaxOS)和NTFS。
partimage只能鏡像被使用的分區塊,因此跟e2image一樣,用partimage制作的鏡像并不能精確地反映鏡像制作的時候磁盤的真實狀態。這跟流行的PC產品ghost一樣可以創建鏡像,但是不適合于取證。在面對很嚴重的狀態下,在使用ghost之前,應該先閱讀手冊,確信是否適合你使用。
可能你要問,為什么在這篇文章中介紹這些不適合于取證的工具。這是基于下面的原因:
當選擇工具[13]來創建取證鏡像的時候,所選用的工具必須能夠精確反映創建鏡像的時候磁盤的真實狀態。
當制作文件系統鏡像的時候,你需要理解工具作者是怎么理解“image”的。可以用下面方法進行測試:
1,離線測試計算機的文件系統
2,對包含文件系統的設備,運行md5sum或者執行SHA1的工具
3,用工具制作鏡像
4,對鏡像執行md5sum或者SHA1的工具
如果指紋不匹配,那么就不要在取證中用該工具。
Would you like some file system to go with that debugger?
類似ls, stat,和find這樣的命令,并不能對需要分析的文件系統提供足夠的可見度。也許你想處理用dd創建的文件系統鏡像,你可能擔心被安裝了rootkit,而ls可能已經被替換了,或者有些東西已經被刪除,但還可以恢復,或者在文件系統之外還有一些有用的數據。
這些系統都有文件系統調試器,在OpenBSD和Solaris上這個調試器就是fsdb。Solaris的調試器最復雜,需要花些時間去了解怎么使用。OpenBSD上的fsdb和對ext2,ext3的debugfs,都可以通過help得到足夠的幫助。對于其他一些流行的Linux文件系統比如JFS,ReiserFS,還沒有交互的文件系統調試器。xfs_db可以支持XFS。但是本文不討論它,因為XFS還不是一個廣泛使用的文件系統。
Linux可以加載外來的文件系統,對于只讀取證非常有用。*BSD的ffs和Solaris的ufs可以用核心模塊的ufs來加載。Linux上的文件系統,如ext2,ext3, JFS, ReiserFS和XFS都可以加載,MSDOS(fat16), fat32和大多數的NTFS鏡像也支持。但是Linux沒有對這些外來文件系統的文件系統調試器。
可以知道下面的命令來找出正在運行的Linux支持的文件系統:find /lib/modules/`uname -r`/kernel/fs/* -type f|grep -v 'nls\/'。 要察看當前裝載了哪些文件系統,可以用:grep -v '^nodev' /proc/filesystems. 要了解更多信息,可以看mount(8)
要以只讀模式加載鏡像,可以使用:mount -t ext2 -o ro,loop=/dev/loop0 /var/tmp/2003_02_17_attack.bin /mnt. 現在可以用工具來檢查加載的文件系統了。在檢查鏡像的時候,你會改變那些正在操作的目錄或者文件的訪問時間。這些改變只在內存中。一定要記住,用-o以只讀屬性加載鏡像,這樣那些改變就不會直接影響到鏡像文件。而且,最好對鏡像的拷貝進行操作。可以用md5sum來確信拷貝和原始鏡像文件是一樣的。對拷貝進行操作能保證原始鏡像不會被修改。可以在mount(8)察看更多的關于loop 設備的信息。
mounting a file system image in Linux:  
##==
##== mount the image read-only so that the image doesn't change on disk
# mount -o ro,loop=/dev/loop0 /var/space/images/2003_02_17_linux.bin /mnt
##==
##== list of files
# ls -la /mnt
total 146
drwxr-xr-x   19 root     root         1024 Feb 17  2003 .
drwxr-xr-x   19 root     root         4096 Sep 12 11:55 ..
-rw-r--r--    1 root     root            0 Sep 12 11:55 .autofsck
-rw-------    1 root     root          186 Sep  6 19:58 .bash_history
drwxr-xr-x    2 root     root         2048 Feb  8  2003 bin
drwxr-xr-x    3 root     root         1024 Sep  6 19:59 boot
drwxr-xr-x   20 root     root       116736 Feb 17  2003 dev
drwxr-xr-x   41 root     root         3072 Sep 12 14:13 etc
[ output deleted ]
##==
##== unmount /mnt
# umount /mnt
可以用debugfs <path_to_image>來執行debugfs。如果不太了解,可以用help察看debugfs的幫助。如果還不夠,就用man debugfs。 debugfs以只讀模式開始,因此幾乎不會對鏡像文件有改變。但是,還是盡量對鏡像拷貝來操作,而把原始鏡像放安全點。下面是一個使用debugfs的實例:
using debugfs on an ext2 file system image in Linux:  
##==
##==
# debugfs /var/space/images/2003_02_17_openbsd_attack.bin
debugfs 1.27 (8-Mar-2002)
##== show file system statistics
debugfs:  stats
Filesystem volume name:  
Last mounted on:          
Filesystem UUID:          93bfa3ee-d684-4d07-a5d0-1654f488aabd
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      filetype sparse_super
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65536
Block count:              262144
Reserved block count:     13107
Free blocks:              214567
Free inodes:              57335
First block:              1
Block size:               1024
Fragment size:            1024
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Last mount time:          Fri Jan  9 14:13:42 2003
Last write time:          Fri Feb 17 23:13:04 2003
Mount count:              1
Maximum mount count:      27
Last checked:             Fri Jan  9 14:13:35 2003
Check interval:           15552000 (6 months)
Next check after:         Wed Jul  9 14:13:35 2003
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Group  0: block bitmap at 3, inode bitmap at 4, inode table at 5
7928 free blocks, 2033 free inodes, 3 used directories
[output deleted]
##== print the contents of the current inode in directory format
debugfs:  ls -l
2   40755 (2)      0      0    1024 17-Feb-2003 23:13 .
2   40755 (2)      0      0    1024 17-Feb-2003 23:13 ..
4097   40700 (2)      0      0    1024  8-Feb-2003 15:17 lost+found
8193   40755 (2)      0      0   116736 17-Feb-2003 23:13 dev
57345   40755 (2)      0      0    1024  8-Feb-2003 16:20 var
43010   41755 (2)      0      0    1024 17-Feb-2003 23:13 tmp
47106   40755 (2)      0      0    3072 17-Feb-2003 11:55 etc
[ output deleted ]
##== show inode information for etc
debugfs:  stat etc
Inode: 47106   Type: directory    Mode:  0755   Flags: 0x0   Generation: 461325
User:     0   Group:     0   Size: 3072
File ACL: 0    Directory ACL: 0
Links: 41   Blockcount: 6
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x3f61d525 -- Fri Feb 17 14:16:05 2003
atime: 0x3f61d4ff -- Fri Feb 17 14:15:27 2003
mtime: 0x3f61d496 -- Fri Feb 17 14:13:42 2003
BLOCKS:
(0):188678, (1):189498, (2):189746
TOTAL: 3
##== chdir into directory inode etc
debugfs:  cd etc
##== show inode information for passwd
debugfs:  stat passwd
Inode: 47121   Type: regular    Mode:  0644   Flags: 0x0   Generation: 461394
User:     0   Group:     0   Size: 1282
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 4
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x3f61d505 -- Fri Feb 17 14:50:04 2003
atime: 0x3f61d4b2 -- Fri Feb 17 23:14:10 2003
mtime: 0x3e5e259c -- Thu Feb 17 14:50:04 2003
BLOCKS:
(0-1):188692-188693
TOTAL: 2
##== dump the contents of inode that corresponds to passwd
debugfs:  cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[ output deleted ]
debugfs:  quit
在OpenBSD上會多些步驟,在加載之前,鏡像需要被配置在vnode磁盤設備上,下面是一個實例:
mounting a file system image in OpenBSD:  
##==
##== associate the image with the vnode pseudo disk device
# vnconfig -v -c svnd0 /var/space/images/2003_02_17_openbsd_attack.bin
svnd0: 7277544448 bytes on /var/space/images/2003_02_17_openbsd_attack.bin
##==
##== mount the image read-only so that the image doesn't change on disk
# mount -o ro /dev/svnd0c /mnt
##==
##== mount the image read-only so that the image doesn't change on disk
# ls -la /mnt
total 9026
drwxr-xr-x  14 root  wheel      512 Nov  4  2002 .
drwxr-xr-x  14 root  wheel      512 Nov  4  2002 ..
-rw-r--r--   2 root  wheel      685 Nov  4  2002 .cshrc
-rw-r--r--   2 root  wheel      179 Nov  4  2002 .profile
drwxr-xr-x   2 root  wheel      512 Oct  4  2002 altroot
drwxr-xr-x   2 root  wheel     1024 Oct  4  2002 bin
-r-xr-xr-x   1 root  wheel    53248 Nov  4  2002 boot
-rw-r--r--   1 root  wheel  4515116 Nov  4  2002 bsd
drwxr-xr-x   4 root  wheel    19968 Sep 12 11:56 dev
drwxr-xr-x  19 root  wheel     2048 Mar 28 12:44 etc
[ output deleted ]
##==
##== unmount the image
# umount /mnt
##==
##== dis-associate the image from the vnode pseudo disk device
# vnconfig -v -u svnd0
svnd0: cleared
fsdb是OpenBSD的FFS(fast file system)編輯器。 fsdb沒有只讀屬性,因此鏡像拷貝在這里就更重要了。而且在fsdb中的cd命令也可能跟ci命令一樣有寫操作,這會改變[active]inode。
using fsdb on a file system image in OpenBSD:  
##==
##== associate the image with the vnode pseudo disk device
# vnconfig -vc svnd0 /var/space/images/2003_02_17_openbsd_attack.bin
svnd0: 7277544448 bytes on /var/space/images/2003_02_17_openbsd_attack.bin
##==
##== start fsdb on /dev/svnd0c
# fsdb -f /dev/rsvnd0c
** /dev/rsvnd0c
** File system is already clean
Editing file system `/dev/rsvnd0c'
Last Mounted on /mnt
current inode: directory
I=2 MODE=40755 SIZE=512
MTIME=Nov  4 19:49:30 2002 [0 nsec]
CTIME=Nov  4 19:49:30 2002 [0 nsec]
ATIME=Apr 11 14:06:57 2003 [0 nsec]
OWNER=root GRP=wheel LINKCNT=14 FLAGS=0 BLKCNT=2 GEN=e32f2a77
fsdb (inum: 2)> ls
slot 0 ino 2 reclen 12: directory, `.'
slot 1 ino 2 reclen 12: directory, `..'
slot 2 ino 0 reclen 16: regular, `boot'
slot 3 ino 7488 reclen 16: directory, `altroot'
slot 4 ino 33216 reclen 12: directory, `bin'
slot 5 ino 14016 reclen 12: directory, `dev'
slot 6 ino 42816 reclen 12: directory, `etc'
slot 7 ino 42048 reclen 16: directory, `home'
slot 8 ino 59904 reclen 12: directory, `mnt'
slot 9 ino 6528 reclen 16: directory, `root'
slot 10 ino 5568 reclen 16: directory, `sbin'
slot 11 ino 45888 reclen 16: directory, `stand'
slot 12 ino 27072 reclen 12: directory, `tmp'
slot 13 ino 41472 reclen 12: directory, `usr'
slot 14 ino 6336 reclen 12: directory, `var'
slot 15 ino 6529 reclen 16: regular, `.cshrc'
slot 16 ino 6532 reclen 20: regular, `.profile'
slot 17 ino 4 reclen 12: symlink, `sys'
slot 18 ino 0 reclen 260: regular, `bsd'
fsdb (inum: 2)> cd etc/passwd
component `passwd': current inode: regular file
I=42860 MODE=100644 SIZE=1033
MTIME=Feb 27 21:38:23 2003 [0 nsec]
CTIME=Feb 27 21:38:23 2003 [0 nsec]
ATIME=Apr 11 13:49:57 2003 [0 nsec]
OWNER=root GRP=wheel LINKCNT=1 FLAGS=0 BLKCNT=4 GEN=4bf628a5
fsdb (inum: 42860)> quit
##==
##== dis-associate the image from the vnode pseudo disk device
# vnconfig -vu svnd0
svnd0: cleared

類似OpenBSD,在Solaris上處理鏡像也需要多點步驟。Solaris有一個被稱為lofi(即 loopback file)的驅動。在用lofiadm之前,核心不會表明lofi模塊被安裝了,啟用lofiadm后,應該找到加載到核心的lofi驅動。用modinfo命令來顯示當前加載的核心模塊。lofiadm命令包含在SUNWcsu包中,而不需要安裝任何其他的包或者工具。下面是一個實例:
mounting a file system image in Solaris:  
##==
##== register the image available as a block device via the loopback driver:
# lofiadm -a /mnt/images/2003_02_17_attack.bin
/dev/lofi/1
##==
##== verify that the image is registered
# lofiadm
Block Device             File
/dev/lofi/1              /var/space/images/2003_02_17_attack.bin
##==
##== mount the image read-only so that the image doesn't change on disk
# mount -o ro /dev/lofi/1 /mnt
##==
##== mount the image read-only so that the image doesn't change on disk
# ls -la /mnt
/mnt:
total 586
drwxr-xr-x  21 root     root         512 Dec  3 04:10 .
drwxr-xr-x  21 root     root         512 Dec  3 04:10 ..
-rw-------   1 root     other       4432 Feb 17 04:25 .sh_history
lrwxrwxrwx   1 root     root           9 Nov 28 06:07 bin -> ./usr/bin
drwxr-xr-x   2 root     nobody       512 Nov 28 07:32 cdrom
drwxr-xr-x  15 root     sys         4096 Feb 17 04:14 dev
drwxr-xr-x   4 root     sys          512 Nov 28 06:29 devices
drwxr-xr-x  41 root     sys         3584 Feb 16 17:00 etc
[ output deleted ]
##==
##== un-mount the image
# umount /mnt
##==
##== unregister the image from the loopback driver
# lofiadm -d /dev/lofi/1

fsdb是一個值得花時間的工具。如果你能夠掌握這個工具,那么它的命令可能很復雜。最有用的文檔是OS提供的fsdb_ufs(1M) man手冊。
using fsdb on a file system image in Solaris:  
##==
##== register the image available as a block device via the loopback driver:
# lofiadm -a /mnt/images/2003_02_17_attack.bin
/dev/lofi/1
##==
##== verify that the image is registered:
# lofiadm
Block Device             File
/dev/lofi/1              /mnt/images/2003_02_17_attack.bin
##==
##== browse the image using fsdb:
# fsdb /dev/lofi/1
fsdb of /dev/lofi/1 (Read only) -- last mounted on /
fs_clean is currently set to FSCLEAN
fs_state consistent (fs_clean CAN be trusted)
##==
##== print the super block
/dev/lofi/1 > :sb
super block:
magic   11954   format  dynamic time    Mon Feb  17 18:36:05 2003
nbfree  605536  ndir    6363    nifree  889612  nffree  8252
ncg     290     ncyl    4631    size    8314960 blocks  8187339
bsize   8192    shift   13      mask    0xffffe000
fsize   1024    shift   10      mask    0xfffffc00
frag    8       shift   3       fsbtodb 1
cpg     16      bpg     3591    fpg     28728   ipg     3392
minfree 1%      optim   time    maxcontig 16    maxbpg  2048
rotdelay 0ms    fs_id[0] 0x0    fs_id[1] 0x0    rps     120
ntrak   27      nsect   133     npsect  133     spc     3591
trackskew 0     interleave 1
nindir  2048    inopb   64      nspf    2
sblkno  16      cblkno  24      iblkno  32      dblkno  456
sbsize  5120    cgsize  5120    cgoffset 72     cgmask  0xffffffe0
csaddr  456     cssize  5120    shift   9       mask    0xfffffe00
cgrotor 187     fmod    0       ronly   0
blocks available in each of 8 rotational positions
cylinder number 0:
[ output deleted ]
##==
##== show current entries in this directory:
/dev/lofi/1 > :ls -l
/:
i#: 2           ./
i#: 2           ../
i#: 2bc0        etc/
i#: 8c02        kernel/
i#: 3           lost+found/
i#: 8c0         usr/
[ output deleted ]
##==
##== set the current block to be examined to block 2bc0 (/etc) and display the
##==   information in block 2bc0 as an inode:
##== note that :pwd will still show the current location as / because you're
##==  examining data blocks on the file system. You haven't actually left /.
##==  To navigate the directory hierarchy, you need to use :cd <some_path>
/dev/lofi/1 > 2bc0:inode?i
i#: 2bc0           md: d---rwxr-xr-x  uid: 0             gid: 3      
ln: 29             bs: 8              sz : c_flags : 0           e00                
db#0: 65a8        
accessed: Tue May 27 04:38:06 2003
modified: Mon May 26 17:00:44 2003
created : Tue May 27 04:38:06 2003
/dev/lofi/1 > :ls -l
i#: 2c25        nsswitch.conf
i#: 2c21        passwd
i#: 2c1e        path_to_inst
i#: 2c3e        pwck@
i#: 2bee        rc0@
i#: 6042        rc0.d/
i#: 2bef        rc1@
i#: 6901        rc1.d/
i#: 2bf0        rc2@
i#: 71c2        rc2.d/
i#: 2bf1        rc3@
i#: 7a82        rc3.d/
i#: 2bf2        rc5@
i#: 2bf3        rc6@
i#: 2bf4        rcS@
i#: 834e        rcS.d/
i#: 2c2d        shadow
i#: 2c27        syslog.conf
[ output deleted ]
##==
##== set the current block to be examined to block 2c21 (/etc/passwd) and display the
##==   information in block 2c21 as an inode:
/dev/lofi/1 > 2c21:inode?i
i#: 2c21           md: ----r--r--r--  uid: 0             gid: 3      
ln: 1              bs: 2              sz : c_flags : 0           20f                
db#0: 6554        
accessed: Tue May 27 04:37:58 2003
modified: Thu Nov 28 08:18:06 2002
created : Tue May 27 04:37:58 2003
##==
##== display the information in current block as ASCII data:
##== you can display the block in hex using: 0:db:block,*/X
/dev/lofi/1 > 0:db:block,*/c
1955000:       r   o   o   t   :   x   :   0   :   1   :   S   u   p   e   r
1955010:       -   U   s   e   r   :   /   :   /   s   b   i   n   /   s   h
1955020:       \n  d   a   e   m   o   n   :   x   :   1   :   1   :   :   /
1955030:       :   \n  b   i   n   :   x   :   2   :   2   :   :   /   u   s
1955040:       r   /   b   i   n   :   \n  s   y   s   :   x   :   3   :   3
1955050:       :   :   /   :   \n  a   d   m   :   x   :   4   :   4   :   A
1955060:       d   m   i   n   :   /   v   a   r   /   a   d   m   :   \n  l
1955070:       p   :   x   :   7   1   :   8   :   L   i   n   e       P   r
1955080:       i   n   t   e   r       A   d   m   i   n   :   /   u   s   r
1955090:       /   s   p   o   o   l   /   l   p   :   \n  u   u   c   p   :
19550a0:       x   :   5   :   5   :   u   u   c   p       A   d   m   i   n
19550b0:       :   /   u   s   r   /   l   i   b   /   u   u   c   p   :   \n
19550c0:       n   u   u   c   p   :   x   :   9   :   9   :   u   u   c   p
19550d0:           A   d   m   i   n   :   /   v   a   r   /   s   p   o   o
19550e0:       l   /   u   u   c   p   p   u   b   l   i   c   :   /   u   s
19550f0:       r   /   l   i   b   /   u   u   c   p   /   u   u   c   i   c
1955100:       o   \n  s   m   m   s   p   :   x   :   2   5   :   2   5   :
1955110:       S   e   n   d   M   a   i   l       M   e   s   s   a   g   e
1955120:           S   u   b   m   i   s   s   i   o   n       P   r   o   g
1955130:       r   a   m   :   /   :   \n  l   i   s   t   e   n   :   x   :
1955140:       3   7   :   4   :   N   e   t   w   o   r   k       A   d   m
1955150:       i   n   :   /   u   s   r   /   n   e   t   /   n   l   s   :
1955160:       \n  n   o   b   o   d   y   :   x   :   6   0   0   0   1   :
1955170:       6   0   0   0   1   :   N   o   b   o   d   y   :   /   :   \n
1955180:       n   o   a   c   c   e   s   s   :   x   :   6   0   0   0   2
1955190:       :   6   0   0   0   2   :   N   o       A   c   c   e   s   s
19551a0:           U   s   e   r   :   /   :   \n  n   o   b   o   d   y   4
19551b0:       :   x   :   6   5   5   3   4   :   6   5   5   3   4   :   S
19551c0:       u   n   O   S       4   .   x       N   o   b   o   d   y   :
19551d0:       /   :   \n  k   r   h   :   x   :   1   1   1   9   :   1   1
19551e0:       1   9   :   K   r   4   D       H   a   X   0   R       y   o
19551f0:       :   /   e   x   p   o   r   t   /   h   o   m   e   /   k   r
1955200:       h   :   /   u   s   r   /   b   i   n   /   k   s   h   \n  
[ output deleted ]
##==
##== unregister the image from the loopback driver:
# lofiadm -d /dev/lofi/1

有時也需要察看鏡像的原始信息,而不是經過文件系統調試器解釋過的。這里有幾種這樣的工具來達到目的。
十六進制編輯器,如hexedit,這個工具作為了Redhat的一部分,也可以在OpenBasd中安裝(/usr/ports)[1]。如果沒有十六進制編輯器,也可以用emacs或者vim。用emacs <image_name>可以察看鏡像,使用'Esc-x toggle-read-only'以只讀模式使用。要改變到十六進制編輯器,則使用'Esc-x hexl-mode',要退出,則用'Ctrl-x Ctrl-c'. 要察看emacs的更多信息,可以用'Ctrl-h t'來察看emacs手冊。
vim的十六進制編輯支持能力相對emacs來說就差多了。以只讀模式而沒有交換文件啟動vim,可以用:vim -nRb <image_name>。然后輸入'Esc:%!xxd'轉換文件顯示為十六進制。退出則輸入'esc:q!'。可以用F1鍵察看vim的幫助。
因為RAM和swap是有限的,因此也限制了編輯器察看大文件。一旦系統開始交換swap,會話就會慢下來。可以用split和csplit將文件系統鏡像分成多個文件。你進行的改變越多(分文件,壓縮),那么下結論就更需要小心。
如果emacs和vim不可用,那么對于Solaris可以使用od,并跟上less,more來作頁顯示。OpenBSD,Redhat,Solaris都有pg.od 。od可以以多種格式導出數據。 od -vxca以十六進制導出數據,并以C類型顯示字符,和它們的ASCII字符。
Transferring data from the compromised host
如果需要在創建取證鏡像,從在線主機中傳輸出來,有一些問題需要考慮:
* 傳輸要盡可能小地保證文件系統不會被干擾
* 要通過安全的隧道傳輸到可信主機
* 不應該運行有問題主機的程序,而應該從CD中運行
* 如果調查需要法律介入,那么就應該遵循法律調查員的步驟流程
* 如果在使用存儲數據主機的認證信任證書,那么,有可能攻擊者也在用或者盜取你的信任書。
有多種辦法可以保存最重要的數據。可以用HUB或者交叉線傳輸,或者使用ssh或者用其他工具通過TLS/SSL傳輸。
將需要分析的被入侵的主機連接到保存取證數據的安全主機所在的私有網絡,這種辦法有一些缺陷:
* 一旦主機不再連,那么其他遠程主機的連接也丟失了。
* 很難能再觀察攻擊者的行為
* 觀察攻擊者安裝的程序也會更困難。比如攻擊者安裝客戶端同遠程主機連接,當遠程主機無法通訊的時候,就很難檢查客戶端-服務器端之間的交互。
* 因為攻擊者無法再連接主機,要指出攻擊者怎么連接主機也會更困難。
總之,在作出判斷之前,還需要有一些需要權衡考慮計劃的地方。
1、建立物理層。
* 用交叉線連接信息中心NIC
* 通過HUB連接兩個NIC
2、在受入侵主機的相同IP網絡架設取證數據存儲服務器
3、用netcat和dd傳輸取證數據到存儲服務器。
moving data with dd and netcat:  
sechost# nc -lp 8091 > <save_file>
##== use a tcp over ethernet friendly block size of 1460
hckdhost# dd if=/dev/hda bs=1460|nc -w10 <sechost> 8091
sechost# od -xvca <save_file>|less
另外一個工具是socat[6],這個工具相對netcat來說功能更多,它可以用多種方式傳輸數據。注意:下面命令都使用了ignoreof選項。
moving data via socat:  
##== use a tcp over ethernet friendly block size of 1460
sechost# /usr/local/socat/bin/socat -b 1460 -t5 OPEN:/dev/hda,ignoreeof,rdonly TCP4:<sechost>:8091
hckdhost# /usr/local/socat/bin/socat -b 1460 -t5 TCP4-LISTEN:8091 OPEN:>save_file<,create,excl,largefile,ignoreeof
sechost# od -xvca <save_file>|less
如果不愿意或者不能把主機離線,可以用ssh安全傳輸數據。下面的腳本將當前的網絡連接狀態,當前的進程列表,多個系統信息以及文件系統鏡像保存在遠程主機,
example script for moving data to a secure host via ssh:  
#!/bin/bash
# This is a quick hack for demonstration purpose only. It needs
# to be adapted to your environment. This script works on Linux.
# YMMV elsewhere.
rem_host="192.168.27.23"
ssh="ssh forensics@${rem_host}"
# get uname -a, uptime, and Debian or RedHat version info
echo -e `uname -a` "\n" `uptime` "\n"
`[ -s /etc/debian_version ] &&
echo Debian $(cat /etc/debian_version) || cat /etc/redhat-release`
| ${ssh} "dd of=/var/tmp/incidents/sysinfo"
# save process information
ps auwwx | ${ssh} "dd of=/var/tmp/incidents/processes_bsd"
ps -eflyc | ${ssh} "dd of=/var/tmp/incidents/processes_sysv"
# save list of open files
lsof | ${ssh} "dd of=/var/tmp/incidents/lsof"
# save networking information
netstat -A INET -anv | ${ssh} "dd of=/var/tmp/incidents/netstat_infos"
lsof -Pni | ${ssh} "dd of=/var/tmp/incidents/lsofnet_infos"
# save loaded modules
# use modinfo on Solaris, modstat on OpenBSD
lsmod | ${ssh} "dd of=/var/tmp/incidents/modules"
# wtmp info from last
# snagging /var/log/[wu]tmp* might not be bad idea
last | ${ssh} "dd of=/var/tmp/incidents/last"
# info from process accounting
# snagging /var/account/* might not be a bad idea
# lastcomm is used here, dump-acct can work too
# system accounting (sar) if enable can be useful too. files are usually ing
#   /var/log/sysstat
lastcomm | ${ssh} "dd of=/var/tmp/incidents/last"
# save /etc and logs
tar cvjf - /etc /var/log/* | ${ssh} "dd of=/var/tmp/incidents/files_and_logs.tar.bz2"
# use mount to determine currently mounted drives to image. This might need
#  tweaking depending on your system, so that it only picks up the drives you want.
#  Is compressing with bzip2 ok for forensics in your world? Since you're applying
#  a transform before taking an md5sum, it's possible it could cause an issue. Consult
#  LE or Legal.
#
#  This doesn't handle swap if swap lives on a drive that isn't in the list that
#  mount generates. Use 'swapon -s'.
#
#  bzip2 can run on whichever machine is faster, or it can be used before the
#   data goes over the network. If your network is fast enough, bziping on the remote
#   host is a good idea to conserve space. Software compression can take more time than
#   it takes to move uncompressed data across a network, if the network is fast enough.
#   In these situations compress only if you're worried about space, or compress after
#   the transfer is done.
for drive in `mount |grep '^\/dev.* (rw'|awk '{print $1}'|sed 's/[0-9]\+$//'|sort|uniq`
do
drive_name=`basename ${drive}`
dd if=${drive} |${ssh} "bzip2 -9c|dd of=/var/tmp/incidents/${drive_name}.raw.bz2"
done
另一種安全傳輸信息的方法是使用socat[16]。socat目前不支持接受TLS/SSL連接,如果要用這種方式,可以使用stunnel[17]來代替。
下面的步驟表示怎么用socat和stunnel來傳輸數據:
1、創建自簽名證書[18]
2、將diffe-hellman 參數附加到自簽名證書
3、用cert的hash創建到cert的symlink
4、編輯主機上的hosts.allow,以便合適的主機可以連接
5、啟動stunnel,并對每個接入的連接執行frecv.pl
6、用socat發送需要的文件。
moving data using socat and stunnel:  
##== 1
sechost# openssl req -new -x509 -nodes -days 365 -out stunnel.pem -keyout stunnel.pem
##== 2
sechost# dd if=/dev/urandom count=8 |openssl dhparam 512 >> stunnel.pem
##== 3
sechost# ln -sf stunnel.pem `openssl x509 -noout -hash < stunnel.pem`.0
##== 4
sechost# vi /etc/hosts.allow
##== 5
sechost# stunnel -fd <sechost>:9001 -l ./frecv.pl -p stunnel.pem -P none
##== use a tcp over ethernet friendly block size of 1460
##== 6
hckdhost# /usr/local/socat/bin/socat -b 1460 -t5 OPEN:/dev/hda,ignoreeof,rdonly OPENSSL:<sechost>:9001
sechost# od -xvca <save_file>|less
在上面的示例中,stunnel執行frecv.pl程序。dd來寫流數據,但是dd不能很聰明地創建一個文件名,如果stunnel重復執行dd就會覆蓋先前保存的文件。frecv.pl就創建隨機的文件名,并且用file來猜測后面寫入的數據類型。它寫入相關信息到一個描述文件來幫助取證調查員理解他們要處理的是什么數據。frecv.pl的一個協同程序是fsend.l,它發送文件或者執行一個命令,并發送結果給frecv.pl,而且也創建hash來驗證數據是完整無誤的。下面的地址可以下載到這兩個腳本。[Further Study and Resourses:  http://www.securityfocus.com/infocus/1738#furtherstudy]
在進一步研究和更多資源(Further Study and Resourses) 一節中,可以獲得更多的工具和資源。因為Infocus作者和其他的文章也進行了描述,所以這里就不再挨個介紹了。
總結
本文覆蓋了一些在進行調查取證檢查文件系統的時候用到的工具。一定要使用多種工具來驗證某個工具的顯示結果。如果要用到ls,最好是先用find -ls來驗證一下。一定要使用強hash算法比如MD5或SHA1的工具。確認在不離線情況下移動數據的時候,要保證這些數據的安全。創建有效的事件響應處理流程更能幫助你規范地收集信息。保持技術和經驗領先趨勢,你的調查就更容易!
關于作者:
Holt Sorenson 是 The Shmoo Group [http://www.shmoo.com/]的成員。他處理了多起網絡和計算機安全案例。
(譯注:作者的介紹就不翻譯完了,真對不住。下面的內容,因為文本COPY的原因,具體連接地址請參考原文)
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] CD-ROM and Floppy distributions
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
[3] Package Formats
Debian Linux (deb) package format
RedHat Linux (RPM) package format
Solaris package format
packages on OpenBSD: [1], [2]
package format comparisons
[4] OpenBSD's mtree
mtree (OpenBSD 3.3)
[5] Hash functions
An Introduction to OpenSSL, Part One: Cryptographic Functions, 4th section
RSA Labs FAQ
Internet Encyclopedia - Hash functions
The MD5 hash function algorithm
The Secure Hash Standard: SHA1 and SHA-256...512,
[6] File-system integrity verification tools
AIDE
integrit
Osiris
tripwire (open source), tripwire (commercial)
[7] changedfiles, dnotify, and FAM
changedfiles
dnotify
FAM
[8] shash
shash
lib mhash (shash dependency)
[9] Creating file systems for experimentation
Linux
create a file that is about the size of a file system that you'd like to test:
dd if=/dev/zero of=/var/tmp/testfs bs=1048576 count=<number of MB>
create the file system: mke2fs -m0 /var/tmp/testfs
turn off forced fsck: tune2fs -c 0 /var/tmp/testfs
mount the file system or use debugfs:
mount -o loop=/dev/loop0 /var/tmp/testfs /mnt
debugfs /var/tmp/testfs
unmount the file system if necessary: umount /mnt
OpenBSD
create a file that is about the size of a file system that you'd like to test using:
dd if=/dev/zero of=/var/tmp/testfs bs=1048576 count=<number of MB>
configure the pseudo file system as vnode disk device: vnconfig -v -c svnd0 /var/tmp/testfs
create the file system: newfs /dev/rsvnd0c
mount the pseudo file system or use fsdb:
mount /dev/svnd0c /mnt
fsdb -f /dev/rsvnd0c
unmount the file system if necessary: umount /mnt
unconfigure the vnode disk device: vnconfig -v -u svnd0
Solaris
create a file that is about the size of a file system that you'd like to test:
dd if=/dev/zero of=/var/tmp/testfs bs=1048576 count=<number of MB>
register the file system with the loopback device driver: lofiadm -a /var/tmp/testfs
create the file system: newfs /dev/lofi/1
mount the file system or use fsdb:
mount /dev/lofi/1 /mnt
fsdb /dev/lofi/1
unregister the file system from the loopback device driver: lofiadm -d /dev/lofi/1
unmount the file system if necessary: umount /mnt
[10] GNU Coreutils
GNU file utilities
GNU core utilities
[11] Shily's dd
sdd (schily dd)
[12] Partition Image
partimage - Partition Image
[13] Forensics Tools
September 2000 Market Survey Computer Forensics
Open Source Digital Forensic Tools: The Legal Argument
Gatekeeping Out Of The Box: Open Source Software As A Mechanism To Assess Reliability For Digital Evidence
[14] Cross-over cables
Section 12.2 of the comp.dcom.cabling FAQ - 10/100 Ethernet Crossover cable
Gigabit Crossover cable map
Gigabit Ethernet RJ-45 Port Pinouts (Cisco)
[15] netcat
netcat
[16] socat
socat
[17] stunnel
stunnel
stunnel examples
stunnel FAQ
[18] OpenSSL
OpenSSL
An Introduction to OpenSSL, Part Three: PKI- Public Key Infrastructure
Further Study and Resources
Freeware Forensics Tools for Unix
An introduction to the The Coroner's Toolkit
Forensics resources (Dan Farmer), Forensics resources (Wietse Venema)
The Sleuth Kit
Dave Dittrich's Forensics Resources
fsend.pl and frecv.pl

熱詞搜索:

上一篇:UNIX系統下的應急響應工具介紹
下一篇:Linux入侵監測系統

分享到: 收藏