使用CredSniper獲取雙因素認證令牌

前言

面對日趨嚴峻的網路安全形式,企業也不斷的變換著他們的安全防護方案。越來越多的企業開始對GSuite和OWA等外部服務,推出強制性的2FA驗證。

這一舉措為外部邊界創造了更高級別的安全性,但同時也促進了攻擊者對捕獲2FA令牌技術的不斷創新。

近些年,網上也出現了許多有關竊取2FA令牌的技術手段。在某些情況下,攻擊者會嘗試欺騙行動電話上的GSM,或是嘗試通過查找禁用雙因素的舊門戶來繞過2AF。近期,我們還發現了有攻擊者通過社工手段在帳戶上偽造密碼重置來欺騙用戶,以竊取發送至他們簡訊的令牌。

本文主要討論如何使用CredSniper來竊取2AF令牌 。

CredSniper 簡介

憑證釣魚也算是個老生常談的話題了。為此,大多數企業也開始在正常的入職流程中推出安全意識培訓。但據我所知,大多數企業所謂的培訓就是例如如何在Email中找到flags這類的問題,而不是灌輸真正的網路安全意識。因此,如果我能克隆一個完美且他們熟悉的認證門戶再結合一些社工技巧,那麼我相信,大多數人都會乖乖的交出他們的憑據和2AF令牌。

HTTPS是強制性的

如果你要克隆GSuite門戶網站,則必須執行此操作,否則Google Chrome瀏覽器會向目標提醒該網站為惡意網站。想要解決這個問題也很容易,只需將其切換為HTTPS即可,因為Google並不會攔截訪問者和伺服器之間的請求和響應payload。在安裝過程中,CredSniper將為你的主機從Let』s Encrypt請求一個新的SSL證書。唯一你要做的就是,將你使用的主機名指向託管克隆門戶的伺服器IP地址。

模塊化認證門戶

雖然CredSniper附帶了用於GSuite的模塊,但我們可以以最小的開銷來創建新模塊。在未來這將更加簡化,使用戶能夠在5-10分鐘內完成新門戶模塊的創建。該模塊定義了模板和路由之間的映射。例如,某人訪問/登錄,則模塊將智能識別該認證過程階段並載入相應的模板。CredSniper希望目標用戶首先使用真正的門戶進行身份驗證,而後當2FA SMS token被發送給目標用戶後,CredSniper就會提示用戶輸入它。

模板是真正門戶網站的HTML副本,但帶有必要的模板標籤。CredSniper使用的模板語言是Jinja2,它提供了一種使用用戶提供的數據個性化網路釣魚頁面的無縫方式。例如,像GSuite這樣的一些身份驗證門戶,它們首先會要求用戶提供電子郵件地址,然後將其發送到密碼頁再發送到2FA頁面。在密碼頁中,GSuite會在其電子郵件地址旁顯示用戶個人資料。由於CredSniper在網路釣魚的第一階段已經捕獲了電子郵件地址,因此在後續頁面中使用它只需在HTML模板中放置標記(例如{{username}})即可。在渲染模板時,Jinja2會自動將標記替換為值。此外,我們可以在模塊內配置任意數量的路由,以應對身份驗證過程中所有不同的情況。

API集成

CredSniper還附帶了輕量級API,因此用戶可以將捕獲的憑據集成到其他應用程序中。由於2FA令牌時效性較短,因此API提供了一種快速使用憑據來自動執行身份驗證任務的方法。在運行CredSniper時,屏幕上將生成一個API令牌,你可以使用該令牌查看憑據、標記憑據以及更新配置。

查看憑據(GET)

https://

/creds/view?api_token=

標記憑據(GET)

https://

/creds/seen/?api_token=

更新配置(POST)

https://

/config

{

  "enable_2fa": true,

  "module": "gmail",

  "api_token": "some-random-string"

}

安裝

CredSniper要求你為計劃使用的主機名配置DNS。Let』s Encrypt需要能夠在頒發SSL證書之前驗證主機名,因此需要將主機名分配給託管CredSniper的主機的IP地址。之前有人報告說,安裝腳本在Ubuntu 16.04之外的發行版上會拋出錯誤。雖然該腳本支持在其他Linux版本或發行版上安裝運行,但這裡我強烈建議大家使用Ubuntu 16.04,避免可因此帶來的不必要麻煩。

首先,我們從GitHub repo克隆該項目,這將為我們獲取所有必要文件。 克隆完成後,切換目錄並運行install.sh腳本。

$ git clone https://github.com/ustayready/CredSniper
$ cd CredSniper
~/CredSniper$ ./install.sh

安裝過程中,腳本將會向你詢問一些基本配置信息。

Module to deploy (ex: gmail):

將要運行的CredSniper模塊。有關列表,請參閱modules/目錄。

Final redirect URL:

釣魚後目標瀏覽器最終重定向到的URL。

Enable SSL? [Y/n]:

是否啟用SSL進行網路釣魚。

Enable two-factor phishing? [Y/n]:

是否啟用雙因素釣魚。

Enter hostname for certificates (ex: app.example.com):

Let』s Encrypt將使用該主機名來檢索CredSniper的SSL證書。為了使該主機名能夠訪問CredSniper,在運行install.sh之前,主機名的DNS必須指向主機名的IP地址。

Port to listen on (default: 80/443):

默認情況下,如果CredSniper在HTTP模式下運行,則分配埠為80。如果在HTTPS模式下運行,則分配埠為443。

如果以下尚未安裝,則該腳本也會為你安裝:

Let』s Encrypt Apt Repository

Python3

VirtualEnv

GnuPG

CertBot

Python3 模塊:Flask, mechanicalsoup, pyopenssl

使用Python3為你創建一個虛擬環境並安裝一些必要的Python3模塊。緊接著,將會為你啟用Python的埠綁定,你將可以從userland偵聽埠80/443。最後,SSL證書的證書和私鑰將被複制到certs/文件夾中。

安裝完成後,將會運行CredSniper!之後想要運行CredSniper,只需簡單的鍵入 python credsniper.py -help 即可。

如果你想退出主機並希望在之後運行CredSniper,請確保你在運行credsniper.py之前已激活了Python虛擬環境:

~/$ cd CredSniper
~/CredSniper$ source bin/activate
(CredSniper) ~/CredSniper$ python credsniper.py –help

使用

CredSniper具有較強的使用靈活性,可在多種不同的可配置模式下運行。

usage: credsniper.py [-h] --module MODULE [--twofactor] [--port PORT] [--ssl] [--verbose] --final FINAL --hostname HOSTNAME

optional arguments:
-h, --help                           顯示幫助信息並退出
--module MODULE                      釣魚模塊名稱 - 例如, "gmail"
--twofactor                          啟用雙因素釣魚
--port PORT                          偵聽埠 (默認: 80/443)
--ssl                                通過Let"s Encrypt使用SSL
--verbose                            啟用詳細輸出
--final FINAL                        釣魚完成後用戶重定向到的最終URL
--hostname HOSTNAME                  SSL主機名

如果你選擇在不使用內置API的情況下監控網路釣魚憑據,則應該熟悉以下兩個文件:

臨時緩存憑據

.cache:緩存文件主要用於在啟用雙因素憑據的臨時存儲,以防止在目標未完成雙因素步驟的情況下丟失憑據。

sniped文件

.sniped:sniped文件提供捕獲憑據的平面文件(Flat File)存儲以及雙因素信息,IP地址和地理位置等信息。在某些情況下,如果你在一個從未登錄的位置進行身份驗證,Gmail將可能要求你提供經過身份驗證的最後位置信息。通過抓取釣魚目標的IP地址,並快速對其進行地理定位,可以為你提供準確可靠的答案。

頁面克隆

雖然唯一公開的內置模塊是Gmail,但modules/目錄中還有一個示例模塊可幫助你快速創建新模塊。為了快速的克隆一個頁面,我傾向於使用名為「Save Page WE」的FireFox插件,該插件可以為你在一個HTML頁面內嵌入外部資源。這樣可以避免載入克隆網站託管的嵌入資源,希望刪除CredSniper可能意外發生的任何回調。請務必遵循示例模塊HTML模板,以包含正確的模板參數。有關更多內容,你可以關注後續我們關於CredSniper克隆頁面的文章,或是觀看我們發布在YouTube上的Tradecraft Security Weekly視頻「使用CredSniper釣取2FA令牌」。

對於Gmail等網站,會有多個頁面。身份驗證過程的生命周期大致如下:

用戶提供電子郵件地址,Google會驗證該帳戶

如果無效,則告知用戶電子郵件無效;

如果有效,則繼續。

Google要求提供用戶密碼

如果無效,則告知用戶密碼無效;

如果有效且2FA未激活,則重定向到GSuite;

如果有效且2FA已激活,則繼續。

Google請求2FA令牌

如果是SMS,則使用代碼向用戶觸發文本消息;

如果是Authenticator,則提示輸入OTP代碼;

如果是Yubikey,則提示插入並激活U2F設備;

如果是觸摸提示,則提示用戶觸摸手機;

如果user-agent反映未知瀏覽器,則提示簡訊;

如果令牌有效,則重定向到GSuite;

如果令牌有效但仍存可疑,則提示用戶輸入其他信息。

CredSniper的處理方式也很簡單:

提示用戶發送電子郵件

使用谷歌的Picaso服務在後台使用電子郵件載入配置文件

提示用戶輸入密碼

使用電子郵件和密碼在後台進行認證,然後確認是否啟用了2FA;

如果啟用了2FA,則捕獲其他信息(即SMS的最後幾位數字,OTP應用程序名稱(Duo/Authenticator/etc),IP地址,地理位置);

如果禁用2FA,則重定向到CredSniper中配置的最終目標URL。

提示用戶輸入2FA令牌

重定向到最終目標URL

結語

CredSniper在Black Hills受到了用戶的廣泛好評。除了CredSniper,在這裡我還想為大家推薦另一款功能強大的工具Evilginx2。Evilginx2是一個可繞過雙因素驗證的高級釣魚框架,用於遠程捕獲任何Web服務的憑證和會話cookie。因此,如果CredSniper不是你想要的,那麼我強烈建議你嘗試使用evilginx2。最後,感謝大家的閱讀!

*參考來源:blackhillsinfosec,FB小編 secist 編譯,轉載請註明來自FreeBuf.COM

推薦閱讀:

空客H225獲俄認證 為俄首次認證外國重直
落紙雲煙:史上唯一官方認證的草書!
國內首個獲得歐洲「E」字頭認證電池,為這家車企豎起大拇指
李虎軍:美國FDA稱未認證過牛奶鹼性蛋白(《財經》 2009-2-20)

TAG:認證 | 因素 | 獲取 | Snip |