# Linux PAM 以及其相關攻擊


## PAM 是什麼

PAM 框架提供不同的 API，讓不同軟體用統一的介面來驗證，可以讓系統來提供不同的驗證方式，應用程式不需要知道驗證細節，只要呼叫 API，主要流程為：

1. 不同應用程式像是 `sudo` 或者 `login` 程式，在編譯的時候會用 `-lpam` 連結到 `libpam.so`，程式執行時要登入時會呼叫 `pam_start()` 函式
2. 這時 PAM 會去 `/etc/pam.d/` 找跟自己名字一樣的設定檔（例如 `/etc/pam.d/sudo`）
3. PAM 會根據設定檔，去載入不同 PAM module，像是 `pam_unix.so`，它就會彈出密碼提是
4. 最後 `pam_end()` 把所有敏感資料刪除

PAM 提供不同的模組類型，像是

1. Auth 認證管理相關的
2. Account 帳戶管理相關的
3. Passwrod 密碼管理相關的
4. Session 使用者登入後管理會話

模組例子像是：

1. `pam_exec`: 讓使用者自訂自己的程式，登入成功後可以執行特定的程式
2. `pam_faillock`: 模組紀錄登入失敗的次數

## PAM 相關攻擊

PAM 相關的攻擊主要就是讓受害者能執行到攻擊者自己寫的函式，常會 hook 攻擊的 PAM API 像是

1. `pam_authenticate()`：密碼驗證點（竊取密碼、繞過驗證）
2. `pam_open_session()`：登入成功後的處理（權限維持、後門觸發）
3. `pam_acct_mgmt()`：帳號狀態檢查（過濾特定帳號免密碼）

## Reference

* [後門程式Plague透過SSH入侵Linux伺服器，濫用身分驗證模組PAM匿蹤](https://www.ithome.com.tw/news/170475)
* [When PAM Goes Rogue: Malware Uses Authentication Modules for Mischief](https://unit42.paloaltonetworks.com/linux-pam-apis/)
* [善用Linux內建PAM機制　強化SSH安全防護](https://www.netadmin.com.tw/netadmin/zh-tw/technology/38255E79CDC344AC874064D10E4CCA58)

