敏感文件监控

敏感文件监控

入侵检测功能很多,总结起来就是两大部分:流量、文件。针对敏感文件进行监控:是否被篡改,是否有新增内容,是否被删除…进而发送通知,系统管理员可以及时关注到系统的运行情况。
一、敏感文件的监控原理
判断一个文件是否被篡改:可以使用md5sum命令记录文件的md5的数字指纹。md5是一种摘要算法,是不可逆的加密,主要用于标识某个文件是否被篡改,或者用于保存密码。可以针对任意文件类型进行摘要。 在安全的状态下,针对敏感文件生成基线摘要数据,保存起来,下一次,再根据当前最新的文件状态生成一次,两次进行对比,可以知道是否被篡改。(潜在的风险:基线数据也被算改,解决方案:离线保存) 另外,针对文本型文件,还可以继续深入,去比较哪些内容被篡改了。
二、实验
1、对某个目录下的敏感文件进行基线操作,实验目录为/ftamper
┌──(root㉿kali)-[~]
└─# date >> /ftamper/time.txt

┌──(root㉿kali)-[/ftamper]
└─# ll -a
total 164
drwxr-xr-x  2 root root   4096 Mar 15 09:58 .
drwxr-xr-x 20 root root   4096 Mar 15 09:57 ..
-rwxr-xr-x  1 root root  26944 Mar 15 09:58 apt-config #二进制文件
-rwxr-xr-x  1 root root 121904 Mar 15 09:58 date
-rw-r--r--  1 root root     32 Mar 15 09:58 time.txt  #文本文件
drwxr-xr-x  2 root root   4096 Mar 15 10:00 error  #目录

#对敏感文件进行备份
┌──(root㉿kali)-[~]
└─# mkdir /backup                                           

┌──(root㉿kali)-[~]
└─# cp  -r /ftamper/* /backup

┌──(root㉿kali)-[~]
└─# ls -a /backup 
.  ..  apt-config  date  error  time.txt

#由于MD5无法对目录进行摘要,所以执行下面命令会提示错误
┌──(root㉿kali)-[/]
└─# md5sum /ftamper/*
c20a959f45b60c952e57824be74ddeaf  /ftamper/apt-config
eabbb6891e630b56133f5586c2967d24  /ftamper/date
md5sum: /ftamper/error: Is a directory  #此处
29685dd828cbea27ed7b9bdab6ac63e5  /ftamper/time.txt

#对目录下的文件进行处理,MD5加密后再将数据进行存储
┌──(root㉿kali)-[~]
└─# find /ftamper -type f | xargs md5sum > /tamper/backup.md5 
//xargs md5sum:对传递过来的文件列表逐一执行 md5sum 命令,计算每个文件的 MD5 校验和。

┌──(root㉿kali)-[~]
└─# cat /tamper/backup.md5 | head -n 1
eabbb6891e630b56133f5586c2967d24  /ftamper/date
2、进行篡改操作
#在初始情况下使用-c参数进行校验,并未提示问题
┌──(root㉿kali)-[~]
└─# md5sum -c  /tamper/backup.md5 
/ftamper/date: OK
/ftamper/time.txt: OK
/ftamper/apt-config: OK
#-c:从指定文件中读取MD5校验和,并进行校验                                              
#重新写入time.txt文件
┌──(root㉿kali)-[~]
└─# date >> /ftamper/time.txt
                                                                               #再次校验时,提示失败                 
┌──(root㉿kali)-[~]
└─# md5sum -c  /tamper/backup.md5
/ftamper/date: OK
/ftamper/time.txt: FAILED
/ftamper/apt-config: OK
md5sum: WARNING: 1 computed checksum did NOT match

#将疑似被篡改的文件结果记录到/tamper/md5.diff文件内
┌──(root㉿kali)-[~]
└─# md5sum -c  --quiet /tamper/backup.md5 > /tamper/md5.diff
md5sum: WARNING: 1 computed checksum did NOT match
#--quiet 参数表示在校验时不输出每个文件的校验结果,仅输出错误信息。                         

#查看md5.diff的文件内容
┌──(root㉿kali)-[~]
└─# cat /tamper/md5.diff              
/ftamper/time.txt: FAILED

三、查看文件被修改的内容
#查看两个文件内容的区别
┌──(root㉿kali)-[~]
└─# cat /ftamper/time.txt
Fri Mar 15 09:58:36 AM CST 2024
Fri Mar 15 10:13:18 AM CST 2024
Fri Mar 15 10:23:55 AM CST 2024

┌──(root㉿kali)-[~]
└─# cat /backup/time.txt 
Fri Mar 15 09:58:36 AM CST 2024
Fri Mar 15 10:13:18 AM CST 2024

#第一次使用diff命令进行对比
┌──(root㉿kali)-[~]
└─# diff /ftamper/time.txt /backup/time.txt 
3d2
< Fri Mar 15 10:23:55 AM CST 2024
#第一次使用diff命令输出的结果,表示将/ftamper下的time.txt文件第三行删除(3d2)即可变成与/backup目录下一样的time.txt文件,需要删除的内容为Fri Mar 15 10:23:55 AM CST 2024。

#读者可以尝试再次将当前时间追加到/ftamper/time.txt文件内,此时再次对比的结果应为3,4d2

#将两个文件位置互换,查看输出结果的变化
┌──(root㉿kali)-[~]
└─# diff /backup/time.txt /ftamper/time.txt 
2a3
> Fri Mar 15 10:23:55 AM CST 2024
#a为删除,c为修改

#文件没变化,执行命令无回显
┌──(root㉿kali)-[~]
└─# diff /backup/time.txt /backup/time.txt 

四、查看目录内是否有新增的可疑文件
#对比此时工作目录和备份目录是否有差异
┌──(root㉿kali)-[~]
└─# diff /ftamper/ /backup                                                    
Common subdirectories: /ftamper/error and /backup/error
Only in /ftamper/: hack.txt  #发现此文件只存在于/ftamper目录中
diff '--color=auto' /ftamper/time.txt /backup/time.txt
3d2
< Fri Mar 15 10:37:05 AM CST 2024
                                                                               #输出md5已被更改的文件名                 
┌──(root㉿kali)-[~]
└─# diff /ftamper/ /backup | grep ^diff | awk '{print $3}'
/ftamper/time.txt
                                                                               #输出在目录内可疑的文件                 
┌──(root㉿kali)-[~]
└─# diff /ftamper/ /backup | grep ^Only                   
Only in /ftamper/: hack.txt

#对输出进行截取
┌──(root㉿kali)-[~]
└─# diff /ftamper /backup | grep "Only in" | awk '{print $3,$4}' | sed -e 's/: /\//g 
/ftamper/hack.txt
五、附带监控脚本
#通过在CLI界面传递参数指定监控目录和对比目录
target=$1
backup=$2
action=$3

#如果首次执行,action参数设置为first,进行文件备份和预处理
if [ $action = "first" ];then
    mkdir -p $backup/files
    cp -r $target/* $backup/files/
    find $target -type f | xargs md5sum > $backup/learn.md5
else
    echo "Testing..."
fi

#创建日志文件,对后续操作结果进行记录
echo > $backup/result.log

echo "-----------------------------------"
#通过与初始MD5进行校验,查看文件是否被删除
md5sum -c  --quiet $backup/learn.md5 1> $backup/learn.diff 2> /dev/null
remove=$(cat $backup/learn.diff | grep "FAILED open or read" | sed 's/: FAILED open or read//g')
if [ ${#remove} -gt 0 ]; then
    echo "$target目录中有文件被删除:\n$remove" | tee -a $backup/result.log
fi

echo "-----------------------------------"
#通过与初始MD5进行校验,查看文件是否被修改
change=$(cat $backup/learn.diff | grep "FAILED$" | sed 's/: FAILED//g')
if [ ${#change} -gt 0 ]; then
    echo "$target目录中有文件被修改:\n$change" | tee -a $base/result.log
fi

echo "-----------------------------------"
#通过diff命令,查看监控目录与备份目录文件数量是否一致
list=$(diff /ftamper /backup | grep "Only in" | awk '{print $3,$4}' | sed -e 's/: /\//g')
if [ ${#list} -gt 0 ]; then
    echo "发现文件数量出现变化:\n$list" | tee -a $backup/result.log
fi