當前位置:
首頁 > 新聞 > 案例分析:利用OAuth實施釣魚

案例分析:利用OAuth實施釣魚

OAuth百科

OAUTH(Open Authorization)協議為用戶資源的授權提供了一個安全的、開放而又簡易的標準。同時,任何第三方都可以使用OAUTH認證服務,任何服務提供商都可以實現自身的OAUTH認證服務,因而OAUTH是開放的。業界提供了OAUTH的多種實現如PHP、JavaScript,Java,Ruby等各種語言開發包,大大節約了程序員的時間,因而OAUTH是簡易的。互聯網很多服務如Open API,很多大公司如Google,Yahoo,Microsoft等都提供了OAUTH認證服務,這些都足以說明OAUTH標準逐漸成為開放資源授權的標準。

OAuth授權有如下幾個階段,如圖:

第一步:申請授權

在這一步,網站向IDP發起授權請求。比如說你想要從Office365獲取用戶的某些許可權,那麼你需要生成一個帶有你想要請求的許可權的鏈接,而許可權則需要通過SCOPES這個參數來傳遞。

釣魚郵件偽裝成Spotify官方,發起授權申請,這個類似網路釣魚。

用戶點擊鏈接後,跳轉到LIVE進行授權許可(當然,你保持一定的警惕的話,應該不會上當)。

第二步:獲取授權

當用戶點擊鏈接後會跳轉到IDP(Microsoft, Google等)的授權介面,如果你還沒登錄,網站會要求你先登錄,如果已登錄,頁面中會有個選擇按鈕讓你選,YES或者NO,這個選擇是將許可權授予應用的最後一道屏障。

上圖就是用戶未登錄,網站要求用戶登錄的情況

上圖為已登錄的情況下,網站向用戶發出詢問,是否要給應用授權。

第三步:獲取許可權

如果用戶在上一步中點擊了YES,IDP就會生成AuthCode給應用。

應用會將自己的ApplicationID、secret、用戶的AuthCode一併發送給授權伺服器,如果這三個參數確認無誤,伺服器就會返回一個accessToken給應用,然後應用帶著這個accessToken就能獲取資源伺服器上用戶的資源(SCOPES中申請的許可權)。

上圖為你已允許授權的應用。

其實,整個攻擊大致可以分為以下幾個步驟:


1、創建一個應用Sappo

2、利用該應用創建一個申請授權的鏈接(SCOPE)

3、用戶給應用Sappo授權後,獲取AuthCode

4、利用AuthCode獲取accessToken

5、使用accessToken以API請求的方式獲取所有資源

下面就是詳細的步驟了。

一、創建一個應用

我們將在Microsoft平台上創建一個名為」Sappo」的應用,通過該應用來盜取Office365和Windows Live用戶的數據。

首先,我們登錄Outlook賬號,訪問apps.dev.microsoft.com,創建一個新的應用,然後我們會獲取到該應用的Application ID和Secret,同時我們也需要設定一個end–point來回收後面伺服器返回的AuthCode和accessToken,這個end-point需要我們可控,並且一直監聽所有的請求。

上圖為創建的」Sappo」應用

Sappo這個框架的作用就是利用授權accessToken來獲取用戶的數據。為了更直觀的演示整個過程,接下來在Sappo上創建一個app,用來作為end-point,我們將這個app命名為」MS PRO O365 AntiSpam」,目的是模仿AntiSpam Pro免費版,這樣用戶在查看的時候,才不會產生懷疑。

二、創建一個申請授權的鏈接(SCOPE)

為了獲取許可權,用戶會被url重定向至Microsoft,該url要包含如下格式數據:


GET

https://login.microsoftonline.com/common/oauth2/authorize/common/oauth2/authorize?scope=[scope_list]&response_type=[code]&client_id=[client_id]&redirect_uri=[redirect_uri]

通過client_id來指明是哪個應用申請授權,通過scope來指明申請的是哪些許可權,通過redirect_uri來指明返回的AuthCode要送到哪裡去。

上圖為應用被允許申請的Windows Live許可權,其中有一些允許通過API來讀寫郵件,但實際上真正操作的時候是會被禁止的。

上圖為Windows Live中更多的允許應用和OneDrive、OneNote進行交互的授權。

上圖為Office365中允許API進行郵件讀寫刪除的授權

一旦設置好鏈接,就可以通過郵件進行發送了。我們選擇使用Microsoft的郵箱賬號來進行郵件的發送,並且將郵件的內容偽裝成像來自AntiSpam Pro一樣。我們在上面建立的app中已經集成了這樣的功能,這裡還需要選定一個攻擊對象,如下圖。

最後發出去的郵件是下面這樣子的。

用戶收到這封郵件後,如果他點擊了鏈接,用戶就會被重定向到授權頁面。

就像上面你看到的,這是一個web釣魚,並不要求用戶輸入用戶名和密碼,而且頁面是在Microsoft的域名下,是來自https的請求,並且證書也是綠標的。

三、獲取accessToken

當用戶點擊YES授權後,AuthCode會被傳送到先前設定的Redirect‐URI,接下來應用就可以通過如下的格式去申請獲取accessToken:


POST common / oauth2 / HTTP / 1.1 token

Host: https://login.microsoftonline.com

Content‐Type: application/x‐www‐form‐urlencoded

grant_type=[ authorization_code ]&code=[ authCode ]

&client_id=[ client_id ]&client_secret=[ secret ]

&redirect_uri=[ redirect_uri ]

client_id為應用的Application ID,secret為當前應用的secret,如果AuthCode驗證通過了,則accessToken會被發給已經設定的redirect_uri。

如上圖,accessToken是以JWT (JSON Web token)的格式返回的,是一串經過URL編碼後再BASE64編碼的字元串,其中包含3部分:Header、Payload、Signature。經過解碼後的數據如下圖所示:

scp中規定了我們的應用已經申請的許可權。

每次向IDP發起API請求資源時都要附帶上accessToken的原始數據,格式如下:


Https://login.microsoftonline.com/common/oauth2/authorize GET

HTTP / 1.1

Host: login.microsoftonline.com

Authorization: Bearer [ access_token ]

四、使用API獲取用戶在IDP的數據

在用戶點擊了授權之後,我們在sappo上搭建的應用能夠自動實現獲取authCode並轉化為access_token,這時候我們只要操作一下界面就能以API的形式向IDP申請獲取數據。

以Office365為例,在這例中,我們擁有足夠的許可權來操作郵件服務。

如上圖,我們可以查看用戶的郵件,當然我們也能以用戶的身份對外發送郵件。

如果你要撤銷此類授權怎麼辦?這就需要你到Office 365的配置中,找到相關應用,點擊取消授權,就可以成功撤銷授權了。

接下來我們再以Windows Live為例,和之前的Office 365 步驟差不多,唯一不同的是,這裡需要把申請的許可權換成Windows Live設定的。

同樣地,用戶點擊了YES後,就會給我們的應用授權,在我們獲取到accessToken之後,就能以API的方式去請求用戶的數據了。我們還需要注意的就是,雖然Windows Live的許可權申請中有包含email,但是目前是不可以訪問的。

雖然郵件不能訪問,但是我們可以去看看用戶存儲在OneDrive上的數據,只要點擊上面的」OneDrive storage」, app就會向資源伺服器自動發起請求,我們就能進到該用戶的OneDrive中了,然後你就可以進行一系列操作,就像使用自己的賬戶一樣。

同樣的如果你要撤銷此類授權,需要到」應用和服務」選項中,找到這個應用,然後點擊取消授權。點擊進入這個應用後,你就能看到這個應用已經申請的許可權

其實,這個案例顛覆了我們隊網路釣魚的傳統觀念,我們之前會說釣魚網站會通過讓用戶填入賬號密碼,然後盜取你的數據,但這個例子就是一個很好的佐證。我想,就算是專業的安全人士也不一定能在第一時間識別出來。所以,我們在給應用授權的時候,一定要十分小心。萬事都要從安全性出發,沒有了安全性,估計也沒有人敢用你的產品和服務吧?

當然,如何對應用進行限制,也是值得我們進行深入研究的。

*參考來源:youtube,elladodelmal,FB小編latiaojun編譯,轉載請註明來自FreeBuf.COM。



請您繼續閱讀更多來自 FreeBuf 的精彩文章:

維基解密網站下線4小時,與《41號修訂案》有關?
深入了解VoWiFi安全性
【FB TV】一周「BUF大事件」
Apache Tomcat再曝遠程代碼執行(CVE-2016-8735)

TAG:FreeBuf |

您可能感興趣

如何利用Fluxion誘惑目標用戶獲取WPA密碼
「充分利用你的Azure」將Azure用作雲計算平台
如何利用NSA Smbtouch批量檢測內網?
利用Python實現DGA域名檢測
鋒友分享:利用Automator自製一個效率App
利用Fiddler修改請求信息通過Web API執行Dynamics 365操作(Action)實例
Linux用戶小心!「Bad Taste」漏洞利用MSI文件運行任意代碼
下架4萬APP?暫無黑客利用「熱更新」攻擊iOS App實例
iOS內核漏洞利用PoC——zIVA
寫給Python程序員:如何利用Rust取代C/C ++?
Nat Nanotechnol:重磅!利用納米顆粒在體內製造CAR-T細胞
Nature:利用CRISPR/Cas9構建出更加強效的CAR-T細胞
基於Wi-Fi的HID注射器,利用WHID攻擊實驗
利用 API 實現對 Windwos 日誌監控的繞過
如何利用sdclt.exe繞過UAC?
Shadow Brokers 泄漏 NSA 的 Windows 和 SWIFT 漏洞利用代碼
TC Hackathon:如何利用 Magento2 技術開發出一個「萬物成本」計算器?
如何利用photoshop設計製作炫酷的3D凸出立體條形海報!
Java利用DES/3DES/AES這三種演算法分別實現對稱加密