Shell-Script
取證分析:查找圍繞已知文件修改的所有文件
一個不太乾淨的安裝程序(Adobe Acrobat Reader DC)安裝在我的 Unix(Mac OS X)上,在不同的地方安裝了很多文件。
我有一個參考文件
Application
,我很確定它是在這個龐大的安裝過程開始時安裝的,而且我確信這個安裝過程不到 2 分鐘。和:
ls -lc /Application
我能夠獲得創建此參考文件的正確時間:
-rwxrwxr-x 3 root wheel 102 Dec 24 18:39 /Application
有了這些資訊,我建構了一個簡單的
find
命令來估計損壞的大小:find / -newermt '12/24/2015 18:37' ! -newermt '12/24/2015 18:41' -ls
而且我可以檢查這種方法是否列出了該安裝程序修改或創建的所有文件,沒有別的。
(這是訣竅:
find
在前 5 分鐘範圍內和接下來的 5 分鐘範圍內進行相同的操作,並檢查它們是否為空。老實說,我很幸運:此時我的 Unix 很安靜。)我如何製作此方法的通用和簡單的取證腳本,以便計算對以下有用的 2 個日期
find
:Dec 24 18:39 → 12/24/2015 18:37, 12/24/2015 18:41
因為我需要這種用於錯誤安裝程序和垃圾軟體的工具,所以我寫了它:
crater
評估任何行為不端的軟體造成的損害。
#!/bin/sh # shell script to search for files created or modified around # a reference modified file (known impact on the file system) # default time interval to search is 5 minutes _cn=`basename $0` USAGE="Usage: ${_cn} impact_reference_file [delay_around_impact_in_minutes]" case $# in 1|2) _ref_file="$1" ;; *) echo "${USAGE}" >&2 exit 2 ;; esac _ref_date=`ls -ldT "${_ref_file}" | awk '{printf ("%s %2s %s %s\n", $6, $7, $8, $9)}'` _minutes=${2:-5} _seconds=`expr ${_minutes} \* 60` _format="+%m/%d/%Y %H:%M:%S" echo "\treference date:\t${_ref_date}" # convert reference date in seconds since the epoch # so as to make arithmetic on it _ref_date_epoch=`date -j -f "%b %e %T %Y" "${_ref_date}" "+%s"` _beg_date_epoch=`expr ${_ref_date_epoch} - ${_seconds}` _end_date_epoch=`expr ${_ref_date_epoch} + ${_seconds} + 1` _log="/var/log/${_cn}_`date -r ${_ref_date_epoch} +%d-%m-%Y_%H:%M:%S`.log" echo "\tlog: \t\t${_log}" # convert back to the format for find _beg_date=`date -r ${_beg_date_epoch} "${_format}"` _end_date=`date -r ${_end_date_epoch} "${_format}"` echo "\tbeginning time:\t${_beg_date}" echo "\tending time:\t${_end_date}" find / -xdev -newerct "${_beg_date}" ! -newerct "${_end_date}" -ls >${_log} awk '{n++; s+=$7}END{printf ("\timpact:\t\t%d files\t\t%d bytes\n", n, s) }' ${_log}
如何安裝它:
- 將上面的源碼粘貼到
crater.sh
make crater
如何使用它:
/usr/bin/sudo ./crater impact_reference_file delay_around_impact_in_minutes
例子:
/usr/bin/sudo ./crater /Applications/Adobe\ Reader.app Password: reference date: Dec 29 16:11:56 2015 log: /var/log/crater_29-12-2015_16:11:56.log beginning time: 12/29/2015 16:06:56 ending time: 12/29/2015 16:16:57 impact: 1518 files 298217339 bytes
兼容性:
在 FreeBSD、MacOS X 和 Linux 上測試。