技術討論 | 使用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://<phish site>/creds/view?api_token=<api token>
標記憑據(GET)
https://<phish site>/creds/seen/<cred_id>?api_token=<api token>
更新配置(POST)
https://<phish site>/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 HOSTNAMESSL主機名
如果你選擇在不使用內建API的情況下監控網路釣魚憑據,則應該熟悉以下兩個檔案:
臨時快取憑據
.cache:快取檔案主要用於在啟用雙因素憑據的臨時儲存,以防止在目標未完成雙因素步驟的情況下丟失憑據。
sniped檔案
.sniped:sniped檔案提供捕獲憑據的平面檔案(Flat File)儲存以及雙因素資訊,IP地址和地理位置等資訊。在某些情況下,如果你在一個從未登入的位置進行身份驗證,Gmail將可能要求你提供經過身份驗證的最後位置資訊。通過抓取釣魚目標的IP地址,並快速對其進行地理定位,可以為你提供準確可靠的答案。
頁面克隆
雖然唯一公開的內建模組是Gmail,但modules/目錄中還有一個示例模組可幫助你快速建立新模組。為了快速的克隆一個頁面,我傾向於使用名為“ ofollow,noindex" target="_blank">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