取证分析:查找围绕已知文件修改的所有文件

取证分析:查找围绕已知文件修改的所有文件

一个不太干净的安装程序(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 是安静的此时。)

我如何制作此方法的通用且简单的取证脚本,以便计算对以下有用的两个日期find

Dec 24 18:39    →    12/24/2015 18:37, 12/24/2015 18:41

答案1

由于我需要这种工具来处理错误的安装程序和垃圾软件,所以我写了它:

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 上进行了测试。

答案2

我如何制作此方法的通用且简单的取证脚本,以便计算对查找有用的 2 个日期:

Dec 24 18:39 → 12/24/2015 18:37, 12/24/2015 18:41

您可以使用date命令的relative time功能来完成此操作:

$ date -d"Dec 24 18:39 2 minutes ago" +'%m/%d/%Y %R'
12/24/2015 18:37

$ date -d"Dec 24 18:39 2 minutes" +'%m/%d/%Y %R'
12/24/2015 18:41

以下是您可以如何在您的情况下使用它的示例。将使用目录、参考日期以及参考日期(时间)每一侧填充的分钟数来调用该脚本。调用方式如下:

sh ./myscript / "Dec 24/2015 18:39" 2

该脚本有效地执行命令:

find "/" -newermt "12/24/2015 18:37" ! -newermt "12/24/2015 18:41" -ls

脚本:

#!/bin/sh

# usage: $0 directory reference-date minutes

dir=${1:-/}
ref=${2:-Dec 24 18:39}
mins=${3:-2}
format='+%m/%d/%Y %R'

begin=$(date -d"$ref $mins minute ago" "$format")
end=$(date -d"$ref $mins minute" "$format")

echo "# ref='$ref'"
echo "# begin='$begin'"
echo "# end='$end'"

find "$dir" -newermt "$begin" ! -newermt "$end" -ls

相关内容