1. 需求
监控Web站点目录(比如/var/html/www)下的所有文件是否被恶意篡改(文件内容被更改了),如果有则打印改动的文件名(发邮件),定时任务每3分钟执行一次。
2. 过程
2.1. 问题分析
- 首先要说明的是,思考过程的积累比实际代码开发的能力积累更重要。
- 什么是恶意篡改,只要是未经过许可的改动都是篡改。
- 文件内容被改动了会有如下特征:
- 大小可能会变化
- 修改时间会变化
- 文件内容会变化,利用
md5sum
指纹校验 - 增加或删除文件,比对每次检测前后的文件数量
2.2. 参考解答
本案例主要采用md5sum的方法来实现。
2.2.1. 第一步
在企业网站发布代码之后,即对所有网站数据建立初始指纹库和文件库,这个步骤很重要,没有基础的指纹库,无法进行入侵检测。
以/var/html/www作为站点目录为例:
建立测试数据
1234mkdir /var/html/www -p #<==创建站点目录cp -a /etc/a* /var/html/www/ #<==复制少量测试数据cp -a /etc/b* /var/html/www/ #<==复制少量测试数据ls /var/html/www/ #<==检查建立初始的文件指纹库
12find /var/html/www -type f | xargs md5sum > /opt/zhiwen.db.ori #<==建立文件内容指纹库tail /opt/zhiwen.db.ori #<==查看指纹库建立初始的文件库
12find /var/html/www -type f > /opt/wenjian.db.ori #<==建立文件数量和名字库tail /opt/wenjian.db.ori #<查看文件库
2.2.2. 第二步
检测文件内容和文件数量变化
检测文件内容变化:
12345echo theshu >> /var/html/www/audisp/plugins.d/af_unix.conf #<==篡改文件export LANG=en #<==调整字符集md5sum -c --quiet /opt/zhiwen.db.ori #<==检查所有文件的内容是否变化/var/html/www/audisp/plugins.d/af_unix.conf: FAILED #<==变化的会被打印出来md5sum: WARNING: 1 of 33 computed checksums did NOT match #<==综合提示检测文件数量变化
123456789echo theshu.txt > /var/html/www/test.txt #<==模拟增加新文件md5sum -c --quiet /opt/zhiwen.db.ori #<==利用指纹库无法检测新增文件/var/html/www/audisp/plugins.d/af_unix.conf: FAILEDmd5sum: WARNING: 1 of 33 computed checksums did NOT matchfind /var/html/www -type f > /opt/wenjian.db_curr.ori<==获取检测前的所有文件数量和文件名diff /opt/wenjian.db* #<==采用diff命令比较18d17< /var/html/www/test.txt #<==test.txt就是新增的
2.2.3. 第三步
开发检测指纹识别脚本。
首先,人工做如下操作:
脚本检测会以上述两个命令获取的结果为原始的正确依据,如下:
然后,利用定时任务检查,命令如下:
3. 补充
现在来思考一下,在企业中一般什么文件需要做指纹验证呢?
系统命令、用户文件、配置文件、启动文件等重要文件,都要监控起来,另外,在实际工作中应对所有的用户操作做日志审计,让所有人的操作无处遁形,起到威慑和监督的作用,从而减少被当作“黑锅侠”的风险。