利用基於 NTP 的 TOTP 演算法缺陷繞過 WordPress 登陸驗證

wyzsk發表於2020-08-19
作者: Her0in · 2015/11/17 11:02

近日,國外安全研究人員 Gabor 發表了兩篇關於如何利用基於 NTP (Network Time Protocol)的驗證演算法缺陷繞過 WordPress 登陸驗證的文章,這兩篇文章分別介紹了基於 NTP 的驗證演算法缺陷以及如何利用該缺陷繞過 WordPress 登陸驗證並給出了 POC 和相關工具。以下內容是對這兩篇文章的彙總介紹。 ;)

0x00 WordPress 外掛 Google Authenticator 驗證演算法介紹


關於 NTP 相關的知識,可以在這裡進行了解。

基於 NTP 的 TOTP 演算法

現在以 WordPress 的一款外掛 Google Authenticator 為例來說明一般的 token 生成程式生成一次性密碼(TOTP)的實現細節。

如下圖所示,程式會使用一個金鑰種子與當前伺服器的時間戳進行 TOTP 演算法後得出一個 6 位純數字的 Token,該 Token 每 30 秒更換一次,其實這就是我們常見的 “動態口令”。

在這個動態口令生成過程中所存在的問題就在於每次使用相同的金鑰種子和時間戳的組合總會生成一個相同的動態口令。而金鑰種子是個不變數同時在攻擊中不可控,因此只要控制了時間戳那麼即可生成任意時間戳所對應的動態口令。

圖 1 :基於 NTP 的 TOTP 演算法

修改伺服器時鐘進行攻擊

從目前來看有很多使用 NTP 的網路都沒有對 NTP 傳輸過程進行加密驗證。因此,攻擊者就可以修改 NTP 傳輸的資料進行中間人攻擊,給 NTP 客戶端提供一個偽造的時間戳。 Gabor 在文章中提到了幾個早先對 NTP 進行安全研究的文章資料和工具。

結合以上工具以及多種中間人攻擊技術就可以透過 NTP 控制遠端伺服器的時鐘。

在 Unix 中設定時間的 ntpd 服務不會接受一個偽造的虛假時間戳,所以無法進行時間戳的偽造攻擊。不過,可以結合 CVE-2015-5300 漏洞進行攻擊。

另外一種設定時間的方法是 ntpdate。這種設定方式非常簡單,也是 Ubuntu Wiki 中推薦的方式。因此,在很多地方都使用了這種方式進行時間設定。你可以參考官方手冊這篇博文進行設定。

設定的方式極其簡單,在 corntab 中執行 ntpdate <hostname> 即可。但是值得注意的是 ntpdate 會接受任何來自於 NTP 服務的資料流!

幾個有名的開源專案,如 Yocto ProjectOpenWRTStartups,還有託管在 GitHub 上的無數配置指令碼,以及 5 萬多 Docker 使用者,甚至包括 VPS 提供商 都使用了 ntpdate 進行時間同步設定。

早在 2002年 就有人提出使用 corntab 執行 ntpdate 不是一個好主意。

0x01 繞過 WordPress 登陸驗證


透過上述描述,讓我們來總結一下攻擊 NTP 的現有條件:

  • ntpd 和 ntpdate 都容易遭到 MITM 攻擊
  • 已經有現成的工具可以對 NTP 進行攻擊
  • 可以控制並修改 TOTP 演算法的時間戳

WordPress 中的外掛 Google Authenticator 可以對 WordPress 後臺登入開啟雙重驗證。如下圖所示:

圖 2 :Google Authenticator 外掛對 WordPress 後臺登入開啟雙重驗證

由於可以利用中間人攻擊設定伺服器的時間一直為指定的時間,因此,可以使用暴力破解的手段對動態口令進行破解。大約最多需要一百萬次的破解嘗試。

攻擊測試

搭建如下網路環境:

整個網路非常簡單,三臺 Ubuntu 虛擬機器需要處於同一個子網中。如下圖所示:

圖 3 :搭建攻擊網路環境

為了模擬中間人攻擊以篡改 NTP 傳輸資料,我們首先需要修改 WordPress 伺服器的 /etc/hosts 檔案,如下圖所示:

圖 4 :修改 /etc/hosts 檔案

其次,我們假設管理員使用計劃任務每隔一分鐘同步一次時間(事實上很多人都是這麼做的),如下圖所示:

圖 5 :管理員每隔一分鐘同步一次時間

然後,我們使用預先設定的時間作為引數執行 Delorean ,同時 WordPress 伺服器依舊會每隔一分鐘同步一次時間。

圖 6 :使用預先設定的時間作為引數執行 Delorean

現在,我們在另外一臺虛擬機器中,也就是攻擊者的機器中執行 WPBiff。設定 WordPress 後臺登入使用者名稱和密碼,以及與上圖相同的時間戳作為執行引數。如下圖所示:

圖 7 :執行 WPBiff 開始攻擊

在 WPBiff 執行了 39 分鐘後,成功的爆破出了 6 位純數字動態口令,同時 dump 出了有效的登陸 WordPress 後臺的 session cookies。如下圖所示:

圖 8 :成功爆破出了動態口令

由於外掛不允許動態口令的重用,所以可以使用 dump 出來的 session cookies 直接登入 WordPress 後臺。 在額外的三次測試中,又分別花費了 51分鐘,57分鐘,83分鐘 爆破出了動態口令。

圖 9 :成功登陸 WordPress 後臺

0x02 參考 & 引用

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章