1. 程式人生 > 其它 >偽裝在系統PAM配置檔案中的同形異義字後門

偽裝在系統PAM配置檔案中的同形異義字後門

0x00. 前言

受到FreeBuf早前相關同形異體字攻擊文章的啟發,故有此文。

目前主流的Linux發行版本都支援Unicode,這也給了利用同形異義字迷惑系統管理員的後門有了可乘之機。 本文通過案例描繪此類漏洞是如何實現的。

0x01. 同形異義字後門案例

我們看一下 ssh 的 pam 認證模組

注意第一行 @ include common-auth

我們再看一下 common-auth

注意紅框圈的那一行

auth    [success=1 default=ignore]    pam_unix.so nullok_secure

pam_unix.so 是用於校驗使用者的的賬戶和密碼是否正確,如果賬號密碼正確,則直接返回,不執行下一行,否則執行下一行。

auth    requisite            pam_deոy.so

關於 requisite 的含義解釋如下:

因為 pam_deny.so 模組會返回失敗, 加上這行的控制標記是requisite,所以系統會直接拒絕使用者登入。

我們知道與 pam_deny.so 模組對應的就是 pam_permit.so , 如果我們能把

auth    requisite            pam_deոy.so

更改為

auth    requisite            pam_permit.so

則任意密碼都可以登入成功,但這裡也有個問題

pam_permit.so 很容易被管理員發現啊,畢竟pam_permit.so 和pam_deny.so 看起來就不一樣嘛

所以這裡要用到本文所述Unicode 的同形異義字來將pam_permit.so 偽裝起來,使其看起來像pam_deny.so

1、先把 pam_deny.so 備份

2、然後利用 Unicode 同形異義字 將 pam_permit.so 偽裝成 pam_deny.so

root@kali:~# cp /lib/x86_64-linux-gnu/security/pam_permit.so /lib/x86_64-linux-gnu/security/pam_de$'u578'y.so

偽裝後的 pam_deոy.so , 紅圈所示, 不留心仔細觀察,很難分辨真偽

3、然後修改 /etc/pam.d/common-auth 中的 pam_deny.so 為 偽裝的pam_deոy.so

 root@kali:~# perl -i -pe's/deny/dex{578}y/' /etc/pam.d/common-auth

檢視一下修改後的common_auth (紅框所示)

不仔細觀察,不好辨真偽

4、修改後,登入測試,看看能否可以實現任意密碼登入

隨便輸入密碼

點選‘確定’

成功登入

我們看一下登入日誌 ( /var/log/auth.log )

我們可以看出,雖然 pam_unix.so 認證失敗,但是 最終還是登入成功(因為偽裝的 pam_deոy.so 起了作用)

0x02. 總結

雖然偽裝的 pam_deոy.so 和真正的 pam_deny.so 看起來一樣,但實際上是不同的兩個檔案,要區分它也很簡單, 總結以下方法:

1、直接使用 file 或者 locate 命令檢視 pam_deny.so 是否存在

2、系統安裝後給所有的檔案做 hash, 然後對比 hash 3、檢視登入日誌 (比如 /var/log/auth.log ) 如果發現 pam_unix 認證失敗,仍能登入成功,則必須警惕 pam_deny.so 是否已經被調包 4、如果發現任意密碼均可登入,則要警惕 pam_deny.so 是否已經被調包