一、引入
入侵检测系统所监控的两大部分可以概括为:流量和文件。针对敏感文件进行监控,是否被篡改,是否有新增内容以及是否被删除。进而发送通知告知管理员。
二、敏感文件监控原理
判断文件是否被篡改可以使用md5sum命令记录文件的数字指纹,md5是一种数字摘要算法,具有不可逆加密的特性,可以用来检测数据是否被篡改或者保存密码,可以针对任意文件类型进行摘要。
在安全状态下对文件进行一次摘要保存起来,当文件状态更新或者一段时间之后再次对文件进行摘要,并对比两次的摘要是否相同,即可判断文件是否被篡改。但这里也有一个潜在的风险,入侵者可能会更改最开始安全状态下的摘要,解决办法可以是将安全状态的摘要存储在远程安全的服务器中。
三、md5摘要
md5sum * #如果是目录无法进行md5摘要
find ~/桌面 -type f | xargs md5sum #这样可以找到所以的普通文件进行摘要
find ~/桌面 -type f | xargs md5sum > /tmp/md5.base #保存摘要带md5.base这个文件中
cd /tmp
md5sum -c ./md5.base #重新计算摘要并进行对比
md5sum -c --quite ./md5.base > md5.diff #保存两次对比不同的文件
都要使用绝对路径
上述摘要可以检测文件是否被篡改,但无法检测出是否有文件新增或删除。为了完成此功能,可以使用diff命令
diff ~/桌面 /tmp/base #比较这两个文件夹下不同的地方
d代表删除 a代表新增 c代表修改
四、shell脚本的编写
#通过参数传递监控的目标目录和极限备份目录
target=$1
base=$2
action=$3
if [ ! -d $target -o ! -d $base ]; then
echo "参数一或参数二不是有效的目录"
exit 1
fi
#如果第三个参数设置为new,则基线备份目录进行预处理
if [ $action = "new" ]; then
mkdir $base/files
cp -r $target/* $base/files/
find $target -type f | xargs md5sum > $base/learn.md5
fi
#先清空日志文件
echo > $base/result.log
#通过对比MD5数据确定文件是否被删除
md5sum -c --quite $base/learn.md5 1> $base/learn.diff 2> /dev/null
remove=$(cat $base/learn.diff | grep "FAILED open or read" | sed 's/: FAILED open or read//g')
if [ ${#remove} -gt 0 ]; then
echo -e "$target 目录有文件被删除: \n$remove" | tee -a $base/result.log
fi
#通过文件对比结果确定哪些文件被修改了
change=$(cat $base/learn.diff | grep "FAILED$" | sed 's/: FAILED//g')
if [ ${#change} -gt 0 ]; then
echo -e "$target 目录中有文件被修改:\n$change" | tee -a $base/result.log
fi
#列出文件变化情况
list=$(diff $target $base/files/ | grep ^Only | sed -e 's/Only in //g' -e 's/: //g')
if [ ${#list} -gt 0 ]; then
echo -e "两个目录中有文件数量的变化: \n$list" | tee -a $base/result.log
fi