为了防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查
RPM除了可以安装软件包以外,还可以对已经安装好的软件包进行校验。使用这种功能可以很好的对计算机上已经安装的软件进行监控,检测软件包是否被替换或篡改;
功能简介
RPM的校验功能可以比较现在已经安装的文件与未安装的文件之间的属性差别。如文件的大小、MD5 值、权限、类型、所有者、以及所属组。可以用它来判断系统是否受到 入侵,特定文件是否被修改过。
使用方法
rpm -V 软件包名称 #可检查对应软件包安装的文件是否有变化
rpm –Vf 文件路径 #可检查某一文件是否有变化
rpm –Va #显示所有已经安装的文件是否有变化
rpm –Vp RPM包名.rpm #根据RPM软件包文件来校验安装了的软件包
应急响应中常用到的命令:
rpm -Va | sort
rpm -Va | sort > ./cntf.txt
(命令会对比当前文件和RPM数据中记录的文件的大小、MD5值、权限、类型、属主、属组、修改时间等信息:)
需要说明的是如果文件测试通过,也就是说没有任何改变的话,那么不会有任何输出,但是如果检测有变化,那么就会输出对应的内容,
输出的格式包括九个字符的字符串(如果有c代表是配置文件),之后就是文件名称,这九个字符的每个字符都代表一种文件属性的比较结果,所比较的是文件的属性和RPM数据库中记录的属性
单用一个 .(点)意味着测试通过。出现下列某字符代表某类测试失败:
S – File size differs(文件大小发生变化)
M – Mode differs(permissions)(文件权限/模式发生变化)
5 – MD5 sum differs(文件MD5值发生变化)
D – Device number mismatch(设备名不匹配)
L – readLink path mismatch(readLink路径不匹配)
U – user ownership differs(用户所有者不同)
G – group ownership differs(属组所有者不同)
T – modification time differs(文件修改时间发生变化)
验证内容中的8个信息的具体内容如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验是否改变(可以看成文件内容是否改变)
D 设备中,从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
5 — MD5 校验和检查失败
S — 文件大小检查失败
L — 符号链接检查失败
T — 文件修改时间检查失败
D — 设备检查检失败
U — 用户检查失败
G — 组检查失败
M — 模式检查失败(包括权限和文件类型)
? — 不可读文件
如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与RPM数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。
如果命令被篡改或者替换就需要将其还原回来,当然也可以从同版本操作系统拷贝过来或,下载静态编译好的相同命令,还原回来的方法如下:
文件提取还原案例:
rpm -qf /bin/ls 查询ls命令属于哪个软件包
mv /bin/ls /tmp 先把ls转移到tmp目录下,造成ls命令丢失的假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取rpm包中ls命令到当前目录的/bin/ls下
cp /root/bin/ls /bin/ 把ls命令复制到/bin/目录 修复文件丢失
对于在 /sbin, /bin, /usr/sbin, 和 /usr/bin 等目录中的文件要尤其注意。在部分Linux发行版中,这个分析可以用内建的 check-packages 脚本来完成
参考:
https://blog.csdn.net/cnbird2008/article/details/2060986
https://zhuanlan.zhihu.com/p/385597478
https://www.cnblogs.com/xiaozi/p/9865336.html