Linux安全知多少?PAM這樣實施安全策略!

Linux安全知多少?PAM這樣實施安全策略!

可插拔認證模塊PAM-Pluggable Authentication Modules是一套共享庫,用來對應用程序或服務的使用進行認證授權以及提供其他安全服務。起初它是由美國Sun公司為Solaris操作系統開發的,後來,很多操作系統都實現了對它的支持,Red hat 5.0後的發行版在默認基礎安裝包中都包括了PAM。

PAM的優點是它的實用性和靈活性,對於Linux服務器上的應用程序或服務,可以根據需求實施各種安全策略,甚至可以自己編寫認證模塊進行調用。

本期安仔課堂,ISEC實驗室的老師為大家詳解PAM。

一、PAM的認證機制

Linux安全知多少?PAM這樣實施安全策略!

圖1

當User訪問一個Service或者Program,應用程序需要進行認證服務,會根據自身定義認證的PAM配置文件來調用PAM相關模塊進行驗證,最後將驗證結果返回給應用程序,應用程序再產生相應的動作。

二、PAM的配置

PAM主要的文件為 /usr/lib/security或 /usr/lib64/security目錄下的pam_*.so模塊文件,以及/etc/pam.d目錄下的特定應用程序的PAM配置文件。

Linux安全知多少?PAM這樣實施安全策略!

圖2

Linux安全知多少?PAM這樣實施安全策略!

圖3

以passwd為例,我們看一下當執行passwd時,PAM進行了哪些處理。查看passwd的PAM配置文件:

Linux安全知多少?PAM這樣實施安全策略!

圖4

PAM的配置文件以如下空白分隔的字段組成:

module_type control_flag module_path module_options

module_type:為服務指定模塊類型。有效模塊類型是 auth、account、session 或 password,給定的模塊將提供對一個或多個模塊類型的支持。

control_flag:為模塊指定堆棧行為。受支持的控制標誌是 required、requisite、sufficient 或 optional。

module_path:指定為服務裝入的模塊。

module_option:指定能夠發送到服務模塊的空格劃定的選項列表。該字段的值取決於在 module_path 字段中定義的模塊支持的選項,此字段是可選的。

passwd的PAM配置應用了system-auth配置:

Linux安全知多少?PAM這樣實施安全策略!

圖5

pam_env模塊將根據管理員在/etc/security/pam_env.conf中設置的內容設置環境變量,pam_faildelay模塊設置了失敗delay時間為2s。

pam_fprintd模塊是進行指紋驗證,由於控制標誌為sufficient,驗證失敗並不影響繼續驗證。Pam_unix nullok參數允許空密碼,try_first_pass使用先前模塊的密碼進習慣驗證。

pam_succeed_if設置了當uid大於1000時,不記錄登錄信息到系統日誌中。當前面模塊沒有驗證成功,最後的pam_deny模塊將直接拒絕 OTHER的默認動作。關於PAM模塊的詳細信息可以通過man 模塊名進行查詢:

Linux安全知多少?PAM這樣實施安全策略!

圖6

三、PAM後門

通過在pam_unix下的pam_unix_auth.c源碼中添加判斷條件,使得_unix_verify_password返回值為PAM_SUCCESS。這樣就可以在用系統存在的任意用戶名與設置的後門密碼進行登錄。

首先查看服務器PAM的版本信息:

Linux安全知多少?PAM這樣實施安全策略!

圖7

安裝之前需要先安裝flex flex-deve,否則在64位系統上編譯PAM的時候會遇到yywrap()函數未定義錯誤。

Linux安全知多少?PAM這樣實施安全策略!

圖8

下載指定版本的PAM進行修改然後編譯成so文件,再複製到系統pam模塊目錄下替換原文件,這樣就造好後門了。

關於PAM後門的排查:

如果添加的是自定義的PAM模塊,那麼只要查詢模塊所屬的包就可以發現PAM後門:

Linux安全知多少?PAM這樣實施安全策略!

圖9

對於通過修改原PAM模塊,可以通過計算MD5值與原來進行diff

Linux安全知多少?PAM這樣實施安全策略!

圖10

Linux安全知多少?PAM這樣實施安全策略!

圖11

四、PAM實現雙因子認證

買了臺ECS/VPS,設置密碼太複雜了不方便記住也不方便輸入,用證書登錄得y用證書也不方便。何不設置個弱口令外加個動態驗證碼?

雙因子可以使用Google動態令牌,也可以使用Duo Unix,Duo Unix支持App動態口令、短信口令以及電話。

首先需要到DUO官網註冊賬號,新建一個UNIX Application保護應用,獲得

Integration key、Secret key、API hostname。

Linux安全知多少?PAM這樣實施安全策略!

圖12

然後安裝pam_duo

Linux安全知多少?PAM這樣實施安全策略!

圖13

安裝後修改配置文件/etc/duo/pam_duo.conf

Linux安全知多少?PAM這樣實施安全策略!

圖14

然後在配置文件中添加該模塊,SSH需要在配置文件開啟USE PAM以及USE DNS

Linux安全知多少?PAM這樣實施安全策略!

圖15

接著登錄服務器,這時會出現一個url讓你進行註冊

Linux安全知多少?PAM這樣實施安全策略!

圖16

訪問url綁定註冊完成後再次登錄時就可以選擇動態驗證碼了

Linux安全知多少?PAM這樣實施安全策略!

圖17

五、PAM_DUO源碼淺析

DUO_UNIX項目地址:

Linux安全知多少?PAM這樣實施安全策略!

圖18

PAM_DUO認證中主要就是pam_sm_authenticate函數的處理,處理時首先會讀取DUO的配置文件,之後檢測是否配置了其他config文件,有則更新conf的值。此外,也將檢測是否配置了debug參數。

Linux安全知多少?PAM這樣實施安全策略!

圖19

Linux安全知多少?PAM這樣實施安全策略!

圖20

然後調用duo_parse_config檢查配置文件的讀寫權限,當返回值為-2時拋出錯誤“config文件應僅root可讀”,當返回值為-1時拋出文件不可打開錯誤:

Linux安全知多少?PAM這樣實施安全策略!

圖21

Linux安全知多少?PAM這樣實施安全策略!

圖22

然後檢查是否開啟fips_mode:

Linux安全知多少?PAM這樣實施安全策略!

圖23

調用pam_get_user獲取認證用戶信息,檢查用戶密碼信息:

Linux安全知多少?PAM這樣實施安全策略!

圖24

對於SSH服務,關閉增量狀態信息提示:

Linux安全知多少?PAM這樣實施安全策略!

圖25

調用duo_check_groups檢查認證用戶是否是否在DUO認證的配置組中:

Linux安全知多少?PAM這樣實施安全策略!

圖26

檢查獲取用戶/etc/passwd的GECOS信息並進行轉換:

Linux安全知多少?PAM這樣實施安全策略!

圖27

調用duo_local_ip解析本機ip地址:

Linux安全知多少?PAM這樣實施安全策略!

圖28

這邊開始進行DUO認證過程。使用pam_duo.conf配置的ikey、skey、apihost調用DUO API接口,檢測API接口連接,當處理錯誤返回DUO服務錯誤:

Linux安全知多少?PAM這樣實施安全策略!

圖29

接著調用duo_login進行登錄,在duo_login函數中會POST一個BOSN格式的認證信息到服務器,當返回錯誤為NULL則認證成功。

Linux安全知多少?PAM這樣實施安全策略!

圖30


分享到:


相關文章: