Linux的一個後門引起對PAM的探究

轉自http://www.91ri.org/16803.html

1.1   原由html

今天在搜索關於Linux下的後門姿式時,發現一條命令以下:
軟連接後門:linux

經典後門。直接對sshd創建軟鏈接,以後用任意密碼登陸便可。
ssh root@x.x.x.x -p 5555這個是你們也常常會用到的命令,可是在好奇心的驅使下,爲何任意密碼就能夠了?
因而搜索了相關的資料,發現都是執行了這條命令就能夠免密碼登陸了,可是爲何卻沒有一篇詳細的解答。
1.2   調查git

首先測試一下這個命令:github

自動草稿

在A的機器上執行了以下命令:centos

在B機器SSH登陸A機器,輸入任意密碼,成功登陸。
先理解這條命令主要在作什麼:
首先,作一個軟連接,結果在/tmp/su  參數的意義: -o option  -p port
這樣就開啓了一個端口爲5555的服務:
自動草稿
測試過程當中發現,只容許命名爲su,命名其餘嘗試登陸都不成功(/tmp/xxx)。
自動草稿
因而看了一下sshd相關的log,發現以下:
自動草稿
發現是基於pam認證的,使用了pam中的su,爲了區分是否和/bin/中的su是否相關,作了測試以下:session

自動草稿
把/bin/su 從新命名爲其餘文件,發現依然可以任意密碼登陸,又作了測試以下:ssh

自動草稿

在此執行:測試

自動草稿

成功登陸,根據日誌和實踐如今確認調用的是/etc/pam.d/suui

1.3   疑問spa

如今確認了是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:
自動草稿

第一條:

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_rootokhttps://fossies.org/dox/Linux-PAM-1.3.0/pam__rootok_8c_source.htmlhttps://fossies.org/dox/Linux-PAM-1.3.0/pam__succeed__if_8c.htmlhttps://fossies.org/dox/Linux-PAM-1.3.0/pam__succeed__if_8c_source.htmlhttp://man7.org/linux/man-pages/man2/getuid.2.htmlhttp://www.tuxradar.com/content/how-pam-workshttp://www.centoscn.com/CentOS/help/2014/0504/2899.html

相關文章
相關標籤/搜索