精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當(dāng)前位置:安全企業(yè)動(dòng)態(tài) → 正文

微軟Office365平臺(tái)SAML漏洞,可越權(quán)訪問其他資源

責(zé)任編輯:editor006 |來源:企業(yè)網(wǎng)D1Net  2016-05-12 17:39:21 本文摘自:論壇

1.png

近期,兩位安全研究人員,Klemen Bratec及 Ioannis Kakavas,公布了他們發(fā)現(xiàn)的一個(gè)在MicrosoftOffice 365平臺(tái)上的SAML服務(wù)漏洞,該漏洞可被利用進(jìn)行跨域認(rèn)證繞過,最終可對(duì)365平臺(tái)上的所有聯(lián)邦域造成影響。

攻擊者可以利用這個(gè)漏洞突破訪問權(quán)限限制,越權(quán)獲取到受害用戶的Office 365賬戶信息,并可借此訪問他們的郵箱以及存儲(chǔ)在 OneDrive(微軟的云存儲(chǔ)服務(wù))上的文件等等。目前該漏洞已經(jīng)被微軟臨時(shí)修復(fù)。

SAML簡介

SAML即為安全聲明標(biāo)記語言,英文全稱是Security Assertion Markup Language。它是一個(gè)基于XML的標(biāo)準(zhǔn),用于在不同的安全域(security domain)之間交換認(rèn)證和授權(quán)數(shù)據(jù)。其重要的作用在于跨域的單點(diǎn)登錄。SAML實(shí)現(xiàn)的目標(biāo)在于用戶經(jīng)過認(rèn)證后,能對(duì)多個(gè)應(yīng)用服務(wù)中的資源進(jìn)行訪問,無需重新進(jìn)行身份驗(yàn)證(比如再次輸入賬戶和密碼等),而SAML便是這個(gè)過程中的“中間人”。

web單點(diǎn)登錄(Single Sign-on,SSO)

單點(diǎn)登錄是一種用于方便用戶訪問網(wǎng)絡(luò)的技術(shù)。如上所述,用戶只需在登錄時(shí)進(jìn)行一次注冊(cè),即可獲得訪問系統(tǒng)和應(yīng)用軟件的授權(quán),以后便可以在各類應(yīng)用中切換,不必多次輸入用戶名和口令來確定身份。在此條件下,管理員無需修改或干涉用戶登錄就能方便地實(shí)施希望得到的安全控制。

例如,我們很多時(shí)候登錄一些網(wǎng)站時(shí),發(fā)現(xiàn)除了注冊(cè)新賬戶外,還可以通過其他應(yīng)用賬戶(如QQ、微博等)來進(jìn)行登錄,其中便會(huì)使用到WEB單點(diǎn)登錄技術(shù)。因?yàn)閺挠脩糁貜?fù)性的角度出發(fā)的話,實(shí)際上有些網(wǎng)站的用戶是重復(fù)的,那么對(duì)于這部分用戶來說,如何在訪問網(wǎng)站A之后,無需驗(yàn)證地去訪問網(wǎng)站B,web單點(diǎn)登錄技術(shù)便是一個(gè)不錯(cuò)的解決方案。

SAML中若干重要的概念

我們從前文簡單了解了這一部分主要會(huì)詳細(xì)關(guān)注在SAML 2.0的原理上。目前,SAML標(biāo)準(zhǔn)中最為重要的組成部分如下,

1、聲明(Assertions)

首先,聲明是一個(gè)XML結(jié)構(gòu),其中包含了打包在聲明中的用戶信息。其中兩個(gè)最為常用的聲明類型是:

(1)認(rèn)證聲明(Authentication Assertions),包含用戶已經(jīng)對(duì)其身份進(jìn)行認(rèn)定的信息;

(2)屬性聲明(Attribute Assertions),包含關(guān)于用戶的特定信息(如郵件地址,名稱等等)。

2、協(xié)議(Protocols)

SAML協(xié)議描述了某些SAML要素(例如聲明)是如何被封裝在請(qǐng)求及系統(tǒng)是如何響應(yīng)請(qǐng)求的,并給出了當(dāng)進(jìn)行登錄或注銷時(shí),SAML實(shí)體(身份提供方和服務(wù)提供方)必須遵循的處理規(guī)則。也可以這么說,SAML協(xié)議定義了系統(tǒng)實(shí)體之間傳遞和處理SAML聲明的協(xié)議集合,其中上述提到的驗(yàn)證請(qǐng)求協(xié)議將在之后介紹。

3、綁定(Bindings)

SAML綁定描述了一個(gè)SAML消息如何被映射到非SAML相關(guān)的消息格式和通信協(xié)議中。例如,我們?cè)谶M(jìn)行身份驗(yàn)證過程中,服務(wù)提供方(即用戶去訪問的應(yīng)用資源)需與身份提供方進(jìn)行通訊驗(yàn)證,那么如何從傳輸?shù)南⒅校崛‰p方需要的信息,這個(gè)就涉及到了綁定。當(dāng)需要從一個(gè)HTTP GET請(qǐng)求中取出URL中的查詢字符串時(shí),HTTP重定向綁定(HTTP Redirect Binding)定義了如何對(duì)該URL進(jìn)行格式化,使之符合SAML消息標(biāo)準(zhǔn)格式。而在通訊過程中,SAML請(qǐng)求是經(jīng)過SAMLRequest查詢參數(shù)進(jìn)行傳遞的,并經(jīng)過壓縮后,再進(jìn)行基于base64的編碼和URL解碼。

4、身份提供方(Identity Provider)

身份提供方經(jīng)過SAML 授權(quán),并持有著關(guān)于用戶的信息,身份提供方可以為使用者發(fā)布聲明,使其能夠于身份提供方的應(yīng)用上進(jìn)行權(quán)限內(nèi)的操作。

5、服務(wù)提供方(Service Provider)

服務(wù)提供方是SAML消息的接收者,其接受來自身份提供方的用戶信息,并開放符合該用戶訪問權(quán)限的資源。

Web瀏覽器單點(diǎn)登錄(SSO)的例子

接下來可以看一個(gè)基于Web瀏覽器單點(diǎn)登錄框架的簡單例子,我們可以通過這個(gè)例子來更加深入理解SAML。首先,在進(jìn)行單點(diǎn)登錄的過程中,服務(wù)提供方使用 HTTP重定向綁定和身份提供方使用 HTTP POST綁定。其中整個(gè)過程涉及到的部分如下,

1、用戶使用的瀏覽器

2、身份提供方

3、服務(wù)提供方

我們從下圖中也可以看到關(guān)于三者之間的交互,

2.png

一、在我們這個(gè)例子中,這個(gè)單點(diǎn)登錄過程始于一個(gè)用戶嘗試訪問一個(gè)受保護(hù)的資源(或者簡單來說,可以理解為請(qǐng)求登錄)。服務(wù)提供方擁有允許或者拒絕聯(lián)合登錄的功能配置,以及實(shí)時(shí)地將用戶重定向到一個(gè)發(fā)現(xiàn)服務(wù)接口,以便來選擇他們的身份提供方。通過自動(dòng)匹配選擇,可讓服務(wù)提供方知道和信任所其選擇的身份提供方,接著服務(wù)提供方會(huì)創(chuàng)建一個(gè)SAML身份驗(yàn)證請(qǐng)求

在請(qǐng)求的信息中,有兩個(gè)重要部分需要了解下,

1、編碼中的Issuer(發(fā)行人)代表了服務(wù)提供方的實(shí)體ID,其表現(xiàn)形式為一個(gè) URI(統(tǒng)一資源標(biāo)識(shí)符),像一串身份標(biāo)識(shí)字符串一樣的。Issuer(發(fā)行人)包含了服務(wù)提供方請(qǐng)求用戶身份驗(yàn)證的信息。

2、IssueIstant,其包含的信息體現(xiàn)了當(dāng)服務(wù)提供方發(fā)出請(qǐng)求后,生成的內(nèi)部識(shí)別ID ,用以匹配在接受到該條請(qǐng)求后發(fā)出的SAML響應(yīng)。

二、然后用戶的瀏覽器被重定向到身份提供方綁定的URL,SAML Authentication Request(SAML 驗(yàn)證請(qǐng)求)是通過 HTTP GET中的一串查詢參數(shù)(之后請(qǐng)求的信息會(huì)被進(jìn)行壓縮,再經(jīng)過 base64以及URL編碼再進(jìn)行傳遞)

三、在接收來自用戶瀏覽器的SAML請(qǐng)求后,身份提供方檢查發(fā)送請(qǐng)求驗(yàn)證信息的服務(wù)提供方身份,并在成功認(rèn)證服務(wù)提供方身份后,驗(yàn)證請(qǐng)求的內(nèi)容,提示用戶進(jìn)行登錄認(rèn)證(輸入賬戶密碼)。如果用戶認(rèn)證成功,身份提供方將生成SAML回應(yīng)

gxnHkIizISbLkkB1vSWapmWuQzk=

Qn69P4a3PQTISfqk/0t2JdJqG1nlswFQt8bNWPZ+K41EIYkCcTyuwlKnCzlTvU1YgNXIvHcFEyKjYAge+s3gwqecATI+yRB9OtD34YxBC4kyGcbq/ETQxIQ515xehfRxLrQjUpRzgHQXMLSjGdgjeelfKsHeSczA9Hp44kasQSs=

MIICajCCAdOgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBSMQswCQYDVQQGEwJ1czETMBEGA1UECAwKQ2FsaWZvcm5pYTEVMBMGA1UECgwMT25lbG9naW4gSW5jMRcwFQYDVQQDDA5zcC5leGFtcGxlLmNvbTAeFw0xNDA3MTcxNDEyNTZaFw0xNTA3MTcxNDEyNTZaMFIxCzAJBgNVBAYTAnVzMRMwEQYDVQQIDApDYWxpZm9ybmlhMRUwEwYDVQQKDAxPbmVsb2dpbiBJbmMxFzAVBgNVBAMMDnNwLmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZx+ON4IUoIWxgukTb1tOiX3bMYzYQiwWPUNMp+Fq82xoNogso2bykZG0yiJm5o8zv/sd6pGouayMgkx/2FSOdc36T0jGbCHuRSbtia0PEzNIRtmViMrt3AeoWBidRXmZsxCNLwgIV6dn2WpuE5Az0bHgpZnQxTKFek0BMKU/d8wIDAQABo1AwTjAdBgNVHQ4EFgQUGHxYqZYyX7cTxKVODVgZwSTdCnwwHwYDVR0jBBgwFoAUGHxYqZYyX7cTxKVODVgZwSTdCnwwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQ0FAAOBgQByFOl+hMFICbd3DJfnp2Rgd/dqttsZG/tyhILWvErbio/DEe98mXpowhTkC04ENprOyXi7ZbUqiicF89uAGyt1oqgTUCD1VsLahqIcmrzgumNyTwLGWo17WDAa1/usDhetWAMhgzF/Cnf5ek0nK00m0YZGyc4LzgD0CROMASTWNg==

_ce3d2948b4cf20146dee0a0b3dd6f69b6cf86f62d7

urn:oasis:names:tc:SAML:2.0:ac:classes:Password

test

[email protected]

users

examplerole1

四、接下來,引導(dǎo)用戶瀏覽器回應(yīng)一個(gè)HTTP POST請(qǐng)求到服務(wù)提供方。其中,有部分內(nèi)容也是需要了解的,具體如下。

1、InResponseTo,包含了一個(gè)ID值,該ID會(huì)與先前服務(wù)提供方發(fā)送請(qǐng)求的時(shí)候產(chǎn)生的內(nèi)部標(biāo)識(shí)ID進(jìn)行匹配(避免重放攻擊);

2、IssueIstant, NotBefore 以及NotOnOrAfter 定義了 SAML響應(yīng)(以及聲明)的有效時(shí)間,也是為了避免重放攻擊;

3、聲明還包含了一個(gè) Isssuer字段,其中具有一個(gè) url,因此服務(wù)提供方可以確認(rèn)身份提供方的身份(是否符合此前請(qǐng)求指定的身份提供方地址);

4、AudienceRestriction部分,則定義了可對(duì)該聲明進(jìn)行讀取的服務(wù)提供方,而其他服務(wù)提供方并無權(quán)限進(jìn)行讀取。

5、Subject,用于識(shí)別驗(yàn)證用戶身份;

6、AttributeStatement部分,包含用戶進(jìn)行驗(yàn)證的信息,其中也包括各種屬性以及它們的值;

在這份聲明中(也包括全部的 SAML響應(yīng))是基于XML簽名( XML Signature)來保護(hù)其完整性,檢查其在傳輸過程中并未遭受篡改。

五、在接收到SAML響應(yīng)后,服務(wù)提供方可以驗(yàn)證其內(nèi)容和結(jié)構(gòu),并驗(yàn)證簽名,隨后通過了用戶認(rèn)證,分配用戶一個(gè)Cookie,啟動(dòng)與用戶間的Web會(huì)話。

問題在哪里?

那么到這里,或許你會(huì)有些疑惑,

1、服務(wù)提供方如何知道并信任身份提供方?

2、身份提供方如何知道并信任服務(wù)提供方?

3、身份提供方如何對(duì)聲明進(jìn)行簽名?

4、服務(wù)提供方在接受到一份聲明后如何驗(yàn)證其完整性?

實(shí)際上,在驗(yàn)證之前,身份提供方和服務(wù)提供方會(huì)進(jìn)行相互之間的信任處理。為了實(shí)現(xiàn)在請(qǐng)求和響應(yīng)的交互過程中,身份及信息的驗(yàn)證,兩者之間需要交換元數(shù)據(jù)。我們可以理解為,此處的元數(shù)據(jù)包含了一個(gè)公鑰,對(duì)應(yīng)著身份提供方對(duì)聲明進(jìn)行簽名加密所使用的私鑰,每一個(gè)實(shí)體(可以是用戶、服務(wù)提供方或是身份提供方)所綁定的URL以及支持或響應(yīng)的算法等等。那么基于這樣的出發(fā)點(diǎn),有兩種方法可讓他們獲取彼此的元數(shù)據(jù):

1、雙方以一種安全的方式交換元數(shù)據(jù),確立信任關(guān)系;

2、或者通過加入一個(gè)聯(lián)邦(Federation),將這種信任關(guān)系委托給第三方機(jī)構(gòu)。然后聯(lián)邦運(yùn)營者會(huì)設(shè)定任務(wù),收集來自所有參與的實(shí)體(身份提供方和服務(wù)提供方)的元數(shù)據(jù),并發(fā)布這些數(shù)據(jù)。每個(gè)身份提供方和服務(wù)供應(yīng)方都會(huì)提交其元數(shù)據(jù)來獲取有關(guān)參與該聯(lián)邦的其他實(shí)體的信息。

Office 365 的SAML交互是如何運(yùn)行的?

Office 365平臺(tái)服務(wù)提供方使用的是一個(gè)WS-Trust以及 SAML 2.0 web 瀏覽器單點(diǎn)登錄框架的混合體。Office 365平臺(tái)支持通過WS-Trust以及SAML 2.0 web 瀏覽器進(jìn)行單點(diǎn)登錄兩種方式進(jìn)行訪問,但兩者之間并不孤立。

實(shí)際上,WS-Trust為我們提供了一種安全令牌服務(wù),比如令牌的頒發(fā)(Issuance)、續(xù)訂(Renewal)和終止(Cancel)等。但SAML的服務(wù)提供方會(huì)將SAML 2.0標(biāo)準(zhǔn)的傳輸信息,使用令牌( token)轉(zhuǎn)換服務(wù),在內(nèi)部將 SAML信息轉(zhuǎn)化為WS-Trust信息。而因?yàn)樯鲜龅牧钆妻D(zhuǎn)換服務(wù),所以此次在 SAML服務(wù)提供方發(fā)現(xiàn)的漏洞,也會(huì)影響到WS-Trust單點(diǎn)登錄。

然而,為了簡單起見,在理解本文Office 365 的服務(wù)提供方時(shí),均可認(rèn)為是使用SAML進(jìn)行單點(diǎn)登錄。

不過有一點(diǎn)需要強(qiáng)調(diào)的是, 對(duì)于經(jīng)過SAML的賬戶驗(yàn)證,Office 365并不支持實(shí)時(shí)資源配置,所以對(duì)于使用賬戶進(jìn)行單點(diǎn)登錄的用戶,需要已經(jīng)在Azure AD上有租戶才行。這個(gè)需要經(jīng)過Directory同步或者經(jīng)過用戶在IDM 系統(tǒng)的幫助下進(jìn)行配置,不過這已經(jīng)超出了本文的范圍,這里先略過不談。

從一個(gè)身份提供方到 Office 365服務(wù)提供方,需要在請(qǐng)求消息中發(fā)布的屬性,以便進(jìn)行信息匹配,包括以下兩個(gè):

1、UPN(User principal name)用戶主體名稱,包含IDP(即身份提供方)Email名稱等信息;

2、ImmutableId,用戶的唯一識(shí)別符,存放于SAML聲明的Subject中。

接下來,我們可以看下Office 365平臺(tái)的登錄情況,

流程始于用戶開始訪問 Office 365 portal,接著被重定向到 https://login.microsoftonline.com/login.srf,而響應(yīng)形式如下,

4.png

在鍵入用戶名稱以及按下“TAB”或點(diǎn)擊密碼輸入?yún)^(qū)域,該頁面將構(gòu)建一個(gè)XHR (XMLHttpRequest),而為了驗(yàn)證用戶的域(可以簡單理解為用戶歸屬的企業(yè))是否能與Office 365平臺(tái)上的租戶(可以理解為某企業(yè)所租賃的服務(wù))相匹配。

GET /common/userrealm/[email protected]&api-version=2.1&stsRequest=rQIIAbNSzigpKSi20tcvyC8qSczRy09Ly0xO1UvOz9XLL0rPTAGxioS4BMruuVuZ2Fh77Wj-e6KxLMF2FaMaTp36OYl5KZl56XqJxQUVFxgZu5hYDA2MjTcxsfo6-zp5nmCacFbuFpOgf1G6Z0p4sVtqSmpRYklmft4jJt7Q4tQi_7ycypD87NS8Scx8OfnpmXnxxUVp8Wk5-eVAAaDxBYnJJfElmcnZqSW7mFVSU00tTCxTUnRNkpOTdU2Sksx0kwxSzXRTzZMtTC1ME00Mk1MOsGwIucAi8IOFcREr0C-3A6ZLrn182Gt-tWV-vVlpwi5OW-L8Yl-SWJSeWmKrapSWkpqWWJpTAhYGAA2&checkForMicrosoftAccount=false HTTP/1.1

Host: login.microsoftonline.com

User-Agent:Mozilla/5.0 (X11;UbuntuLinuxx86_64; rv:45.0) Gecko/20100101 Firefox/45.0

Accept: application/json

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate, br

DNT: 1

X-Requested-With: XMLHttpRequest

Referer: https://login.microsoftonline.com/login.srf?wa=wsignin1.0&rpsnv=4&ct=1460721662&rver=6.7.6640.0&wp=MCMBI&wreply=https%3a%2f%2fportal.office.com%2flanding.aspx%3ftarget%3d%252fdefault.aspx&lc=1033&id=501392&msafed=0&client-request-id=3a47de76-3c34-4a3b-b883-fdc88176603d

如果域已被知道及配置成聯(lián)邦身份,用戶的瀏覽器將被引導(dǎo)構(gòu)建一個(gè) HTTP POST請(qǐng)求到 HTTP-POST綁定的身份提供方的 URL,具體的信息如下,

urn:federation:MicrosoftOnline

用戶實(shí)時(shí)在身份提供方中進(jìn)行身份驗(yàn)證,如下,

5.png

隨后瀏覽器會(huì)被引導(dǎo)到創(chuàng)建一個(gè)HTTP POST返回到 Office 365 HTTP-POST綁定的 URL。通過包含著聲明的SAML響應(yīng)。一個(gè)簡單的響應(yīng)例子如下,

dc1f3jn97lZ6FWdxGxsEWxXNsTM=

Removed for brevity

Removed for brevity

WBgE+nW+3g9P5XpiZwGE06MT//g=

Removed for brevity

Removed for brevity

This is where my ImmutableId is

urn:federation:MicrosoftOnline

urn:oasis:names:tc:SAML:2.0:ac:classes:

[email protected]

在聲明中的Subject 屬性里面,包含的唯一標(biāo)識(shí)符ImmutableId,具體如下,

//以下為ImmutableId所在

在屬性聲明中,包含著與用戶在Azure AD已有賬號(hào)的UPN(用戶主體名稱)相匹配的 IDPEmail信息,具體如下,

[email protected]

在這里,同樣能將SAML響應(yīng)以及SAML聲明看成是經(jīng)過數(shù)字簽名的。

關(guān)于SAML NameID

首先我們從上方的聲明中可以注意到,Office 365 SAML 服務(wù)提供方忽略了聲明中的Subject,雖然ImmutableId 值包含了用戶在Azure AD 唯一標(biāo)識(shí)符。

而名稱標(biāo)識(shí)符,可以通過SAML 2 .0 元素來體現(xiàn),往往用以識(shí)別一個(gè)SAML聲明中的 subject的。名稱識(shí)別符可以是任意的字符,而其通常是一個(gè)郵件地址或電腦用戶名稱。

從攻擊者的角度出發(fā),事實(shí)上NameID的準(zhǔn)確性并無進(jìn)行校驗(yàn),而使得事情更加容易的是,ImmutableID通常是來自于 AD objectGUID。

范圍界定

在身份校驗(yàn)的過程中,IDPEmail屬性值會(huì)去匹配Azure AD中用戶的UPN,而這依靠在聲明中的信息便可達(dá)到。但是聲明中亦包含了Issuer(發(fā)行人)的信息(雖然有經(jīng)過簽名驗(yàn)證),所以根據(jù)前文的了解,正常來說,一個(gè)不相關(guān)的身份提供方是無法為其他域(或是租戶)的用戶創(chuàng)建聲明么?

答案是否定的。

事實(shí)證明(在本文的漏洞利用過程中),服務(wù)提供方使用使用聲明中的 Issuer (發(fā)行人)只是為了找到匹配的認(rèn)證,識(shí)別SAML響應(yīng)或者是聲明的簽名而已,但卻沒有真正對(duì)IDPEmail屬性值進(jìn)行任何檢查。這基本上意味著可以通過聲明,以身份提供方A的聲明來認(rèn)證身份提供方B的用戶。以此便可實(shí)現(xiàn)越權(quán)訪問B域的資源。

如何利用前文提到的漏洞?

在驗(yàn)證該漏洞時(shí),我們需要有一個(gè) Office 365租戶作為連接Office 365和 SAML 2.0身份提供方的平臺(tái)。我們還需要擁有一個(gè)基本的 Active Directory實(shí)例以及 SimpleSAMLphp(SAML 2.0 服務(wù)提供者和標(biāo)識(shí)提供者功能的 PHP 實(shí)現(xiàn),兼容 Shibboleth 1.3 和 2.0)作為我們的身份提供方。

首先,設(shè)置另外一個(gè)組織機(jī)構(gòu),其在我們這次試驗(yàn)中扮演著受害用戶的角色。其中包含不同的EntityID并且是為新的Office 365試用租戶,同時(shí)我們還需另外一個(gè)SimpleSAMLphp實(shí)例。

我們的測試所需環(huán)境如下,

1、首先,Office 365通過預(yù)設(shè)someorg-attacker.com作為身份提供方

2、接著, Office 365再通過預(yù)設(shè) someorg-victim.com作為身份提供方。

接下來,我們?cè)黾淤~戶到 someorg-attacker的用戶目錄下,看下當(dāng)我們嘗試登錄時(shí)會(huì)發(fā)生些什么。在AD(Active Directory)上增加一個(gè)新的alternative UPN suffix,接著通過內(nèi)置的工具來新增用戶,

以下為someorg-victim用戶目錄下的實(shí)體用戶,

6.png

6.png

  以下為someorg-attacker用戶目錄下的包含兩個(gè)組織機(jī)構(gòu)的實(shí)體用戶,

7.png

  我們可以看到其中新增了關(guān)于受害方中的實(shí)體用戶。

接下來,該驗(yàn)證我們的發(fā)現(xiàn)了。,驗(yàn)證步驟具體如下,

1、我們通過使用[email protected]賬戶(以上用戶目錄中的兩個(gè)賬戶任意一個(gè))作為登錄的用戶名,然后瀏覽器會(huì)被重定向到someorg-attacker的身份提供方進(jìn)行身份認(rèn)證;

2、當(dāng)我們?cè)谏矸萏峁┓降膶?shí)時(shí)身份驗(yàn)證登錄過程中,我們通過使用此前在someorg-attacker目錄下創(chuàng)建的帶有受害方域名稱的賬戶(例如[email protected]),進(jìn)行登錄驗(yàn)證,接著順利完成了在身份提供方的驗(yàn)證過程;

3、接下來,我們會(huì)看到問題點(diǎn)所在,如上,在經(jīng)過身份提供方的驗(yàn)證后,微軟的登錄頁面會(huì)提示一個(gè)錯(cuò)誤的信息,但除此之外并沒有其他特別的提示和處置。而最終,我們也“順利”以 [email protected]的身份登錄進(jìn)來了,并擁有了訪問someorg-victim資源的權(quán)限。

而對(duì)于這樣的情況,我們不知道該是高興(因?yàn)轵?yàn)證了我們的發(fā)現(xiàn))還是擔(dān)憂(因?yàn)槠溆绊懙姆秶?。

影響的用戶

受影響的用戶包括,

1、telefonika

2、Caltex Australia

3、Georgia State University

4、Japan Airlines

5、Santa Clara County

6、City of Chicago,IL

7、British Airways

漏洞檢測方法

我們也可以通過以下的查詢方式,確認(rèn)某個(gè)域是否設(shè)置為加入聯(lián)邦中

上述為檢測一個(gè)域是否加入聯(lián)邦的HTTP GET請(qǐng)求,而將會(huì)返回一個(gè) json的響應(yīng)信息,

{

"NameSpaceType":"Federated",

"federation_protocol":"WSTrust",

"Login":"[email protected]",

"AuthURL":"",

"DomainName":"ba.com",

"FederationBrandName":"BA.COM",

"cloudinstancename":"login.microsoftonline.com"

}

關(guān)鍵字:重放攻擊redirect

本文摘自:論壇

x 微軟Office365平臺(tái)SAML漏洞,可越權(quán)訪問其他資源 掃一掃
分享本文到朋友圈
當(dāng)前位置:安全企業(yè)動(dòng)態(tài) → 正文

微軟Office365平臺(tái)SAML漏洞,可越權(quán)訪問其他資源

責(zé)任編輯:editor006 |來源:企業(yè)網(wǎng)D1Net  2016-05-12 17:39:21 本文摘自:論壇

1.png

近期,兩位安全研究人員,Klemen Bratec及 Ioannis Kakavas,公布了他們發(fā)現(xiàn)的一個(gè)在MicrosoftOffice 365平臺(tái)上的SAML服務(wù)漏洞,該漏洞可被利用進(jìn)行跨域認(rèn)證繞過,最終可對(duì)365平臺(tái)上的所有聯(lián)邦域造成影響。

攻擊者可以利用這個(gè)漏洞突破訪問權(quán)限限制,越權(quán)獲取到受害用戶的Office 365賬戶信息,并可借此訪問他們的郵箱以及存儲(chǔ)在 OneDrive(微軟的云存儲(chǔ)服務(wù))上的文件等等。目前該漏洞已經(jīng)被微軟臨時(shí)修復(fù)。

SAML簡介

SAML即為安全聲明標(biāo)記語言,英文全稱是Security Assertion Markup Language。它是一個(gè)基于XML的標(biāo)準(zhǔn),用于在不同的安全域(security domain)之間交換認(rèn)證和授權(quán)數(shù)據(jù)。其重要的作用在于跨域的單點(diǎn)登錄。SAML實(shí)現(xiàn)的目標(biāo)在于用戶經(jīng)過認(rèn)證后,能對(duì)多個(gè)應(yīng)用服務(wù)中的資源進(jìn)行訪問,無需重新進(jìn)行身份驗(yàn)證(比如再次輸入賬戶和密碼等),而SAML便是這個(gè)過程中的“中間人”。

web單點(diǎn)登錄(Single Sign-on,SSO)

單點(diǎn)登錄是一種用于方便用戶訪問網(wǎng)絡(luò)的技術(shù)。如上所述,用戶只需在登錄時(shí)進(jìn)行一次注冊(cè),即可獲得訪問系統(tǒng)和應(yīng)用軟件的授權(quán),以后便可以在各類應(yīng)用中切換,不必多次輸入用戶名和口令來確定身份。在此條件下,管理員無需修改或干涉用戶登錄就能方便地實(shí)施希望得到的安全控制。

例如,我們很多時(shí)候登錄一些網(wǎng)站時(shí),發(fā)現(xiàn)除了注冊(cè)新賬戶外,還可以通過其他應(yīng)用賬戶(如QQ、微博等)來進(jìn)行登錄,其中便會(huì)使用到WEB單點(diǎn)登錄技術(shù)。因?yàn)閺挠脩糁貜?fù)性的角度出發(fā)的話,實(shí)際上有些網(wǎng)站的用戶是重復(fù)的,那么對(duì)于這部分用戶來說,如何在訪問網(wǎng)站A之后,無需驗(yàn)證地去訪問網(wǎng)站B,web單點(diǎn)登錄技術(shù)便是一個(gè)不錯(cuò)的解決方案。

SAML中若干重要的概念

我們從前文簡單了解了這一部分主要會(huì)詳細(xì)關(guān)注在SAML 2.0的原理上。目前,SAML標(biāo)準(zhǔn)中最為重要的組成部分如下,

1、聲明(Assertions)

首先,聲明是一個(gè)XML結(jié)構(gòu),其中包含了打包在聲明中的用戶信息。其中兩個(gè)最為常用的聲明類型是:

(1)認(rèn)證聲明(Authentication Assertions),包含用戶已經(jīng)對(duì)其身份進(jìn)行認(rèn)定的信息;

(2)屬性聲明(Attribute Assertions),包含關(guān)于用戶的特定信息(如郵件地址,名稱等等)。

2、協(xié)議(Protocols)

SAML協(xié)議描述了某些SAML要素(例如聲明)是如何被封裝在請(qǐng)求及系統(tǒng)是如何響應(yīng)請(qǐng)求的,并給出了當(dāng)進(jìn)行登錄或注銷時(shí),SAML實(shí)體(身份提供方和服務(wù)提供方)必須遵循的處理規(guī)則。也可以這么說,SAML協(xié)議定義了系統(tǒng)實(shí)體之間傳遞和處理SAML聲明的協(xié)議集合,其中上述提到的驗(yàn)證請(qǐng)求協(xié)議將在之后介紹。

3、綁定(Bindings)

SAML綁定描述了一個(gè)SAML消息如何被映射到非SAML相關(guān)的消息格式和通信協(xié)議中。例如,我們?cè)谶M(jìn)行身份驗(yàn)證過程中,服務(wù)提供方(即用戶去訪問的應(yīng)用資源)需與身份提供方進(jìn)行通訊驗(yàn)證,那么如何從傳輸?shù)南⒅校崛‰p方需要的信息,這個(gè)就涉及到了綁定。當(dāng)需要從一個(gè)HTTP GET請(qǐng)求中取出URL中的查詢字符串時(shí),HTTP重定向綁定(HTTP Redirect Binding)定義了如何對(duì)該URL進(jìn)行格式化,使之符合SAML消息標(biāo)準(zhǔn)格式。而在通訊過程中,SAML請(qǐng)求是經(jīng)過SAMLRequest查詢參數(shù)進(jìn)行傳遞的,并經(jīng)過壓縮后,再進(jìn)行基于base64的編碼和URL解碼。

4、身份提供方(Identity Provider)

身份提供方經(jīng)過SAML 授權(quán),并持有著關(guān)于用戶的信息,身份提供方可以為使用者發(fā)布聲明,使其能夠于身份提供方的應(yīng)用上進(jìn)行權(quán)限內(nèi)的操作。

5、服務(wù)提供方(Service Provider)

服務(wù)提供方是SAML消息的接收者,其接受來自身份提供方的用戶信息,并開放符合該用戶訪問權(quán)限的資源。

Web瀏覽器單點(diǎn)登錄(SSO)的例子

接下來可以看一個(gè)基于Web瀏覽器單點(diǎn)登錄框架的簡單例子,我們可以通過這個(gè)例子來更加深入理解SAML。首先,在進(jìn)行單點(diǎn)登錄的過程中,服務(wù)提供方使用 HTTP重定向綁定和身份提供方使用 HTTP POST綁定。其中整個(gè)過程涉及到的部分如下,

1、用戶使用的瀏覽器

2、身份提供方

3、服務(wù)提供方

我們從下圖中也可以看到關(guān)于三者之間的交互,

2.png

一、在我們這個(gè)例子中,這個(gè)單點(diǎn)登錄過程始于一個(gè)用戶嘗試訪問一個(gè)受保護(hù)的資源(或者簡單來說,可以理解為請(qǐng)求登錄)。服務(wù)提供方擁有允許或者拒絕聯(lián)合登錄的功能配置,以及實(shí)時(shí)地將用戶重定向到一個(gè)發(fā)現(xiàn)服務(wù)接口,以便來選擇他們的身份提供方。通過自動(dòng)匹配選擇,可讓服務(wù)提供方知道和信任所其選擇的身份提供方,接著服務(wù)提供方會(huì)創(chuàng)建一個(gè)SAML身份驗(yàn)證請(qǐng)求

在請(qǐng)求的信息中,有兩個(gè)重要部分需要了解下,

1、編碼中的Issuer(發(fā)行人)代表了服務(wù)提供方的實(shí)體ID,其表現(xiàn)形式為一個(gè) URI(統(tǒng)一資源標(biāo)識(shí)符),像一串身份標(biāo)識(shí)字符串一樣的。Issuer(發(fā)行人)包含了服務(wù)提供方請(qǐng)求用戶身份驗(yàn)證的信息。

2、IssueIstant,其包含的信息體現(xiàn)了當(dāng)服務(wù)提供方發(fā)出請(qǐng)求后,生成的內(nèi)部識(shí)別ID ,用以匹配在接受到該條請(qǐng)求后發(fā)出的SAML響應(yīng)。

二、然后用戶的瀏覽器被重定向到身份提供方綁定的URL,SAML Authentication Request(SAML 驗(yàn)證請(qǐng)求)是通過 HTTP GET中的一串查詢參數(shù)(之后請(qǐng)求的信息會(huì)被進(jìn)行壓縮,再經(jīng)過 base64以及URL編碼再進(jìn)行傳遞)

三、在接收來自用戶瀏覽器的SAML請(qǐng)求后,身份提供方檢查發(fā)送請(qǐng)求驗(yàn)證信息的服務(wù)提供方身份,并在成功認(rèn)證服務(wù)提供方身份后,驗(yàn)證請(qǐng)求的內(nèi)容,提示用戶進(jìn)行登錄認(rèn)證(輸入賬戶密碼)。如果用戶認(rèn)證成功,身份提供方將生成SAML回應(yīng)

gxnHkIizISbLkkB1vSWapmWuQzk=

Qn69P4a3PQTISfqk/0t2JdJqG1nlswFQt8bNWPZ+K41EIYkCcTyuwlKnCzlTvU1YgNXIvHcFEyKjYAge+s3gwqecATI+yRB9OtD34YxBC4kyGcbq/ETQxIQ515xehfRxLrQjUpRzgHQXMLSjGdgjeelfKsHeSczA9Hp44kasQSs=

MIICajCCAdOgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBSMQswCQYDVQQGEwJ1czETMBEGA1UECAwKQ2FsaWZvcm5pYTEVMBMGA1UECgwMT25lbG9naW4gSW5jMRcwFQYDVQQDDA5zcC5leGFtcGxlLmNvbTAeFw0xNDA3MTcxNDEyNTZaFw0xNTA3MTcxNDEyNTZaMFIxCzAJBgNVBAYTAnVzMRMwEQYDVQQIDApDYWxpZm9ybmlhMRUwEwYDVQQKDAxPbmVsb2dpbiBJbmMxFzAVBgNVBAMMDnNwLmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZx+ON4IUoIWxgukTb1tOiX3bMYzYQiwWPUNMp+Fq82xoNogso2bykZG0yiJm5o8zv/sd6pGouayMgkx/2FSOdc36T0jGbCHuRSbtia0PEzNIRtmViMrt3AeoWBidRXmZsxCNLwgIV6dn2WpuE5Az0bHgpZnQxTKFek0BMKU/d8wIDAQABo1AwTjAdBgNVHQ4EFgQUGHxYqZYyX7cTxKVODVgZwSTdCnwwHwYDVR0jBBgwFoAUGHxYqZYyX7cTxKVODVgZwSTdCnwwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQ0FAAOBgQByFOl+hMFICbd3DJfnp2Rgd/dqttsZG/tyhILWvErbio/DEe98mXpowhTkC04ENprOyXi7ZbUqiicF89uAGyt1oqgTUCD1VsLahqIcmrzgumNyTwLGWo17WDAa1/usDhetWAMhgzF/Cnf5ek0nK00m0YZGyc4LzgD0CROMASTWNg==

_ce3d2948b4cf20146dee0a0b3dd6f69b6cf86f62d7

urn:oasis:names:tc:SAML:2.0:ac:classes:Password

test

[email protected]

users

examplerole1

四、接下來,引導(dǎo)用戶瀏覽器回應(yīng)一個(gè)HTTP POST請(qǐng)求到服務(wù)提供方。其中,有部分內(nèi)容也是需要了解的,具體如下。

1、InResponseTo,包含了一個(gè)ID值,該ID會(huì)與先前服務(wù)提供方發(fā)送請(qǐng)求的時(shí)候產(chǎn)生的內(nèi)部標(biāo)識(shí)ID進(jìn)行匹配(避免重放攻擊);

2、IssueIstant, NotBefore 以及NotOnOrAfter 定義了 SAML響應(yīng)(以及聲明)的有效時(shí)間,也是為了避免重放攻擊;

3、聲明還包含了一個(gè) Isssuer字段,其中具有一個(gè) url,因此服務(wù)提供方可以確認(rèn)身份提供方的身份(是否符合此前請(qǐng)求指定的身份提供方地址);

4、AudienceRestriction部分,則定義了可對(duì)該聲明進(jìn)行讀取的服務(wù)提供方,而其他服務(wù)提供方并無權(quán)限進(jìn)行讀取。

5、Subject,用于識(shí)別驗(yàn)證用戶身份;

6、AttributeStatement部分,包含用戶進(jìn)行驗(yàn)證的信息,其中也包括各種屬性以及它們的值;

在這份聲明中(也包括全部的 SAML響應(yīng))是基于XML簽名( XML Signature)來保護(hù)其完整性,檢查其在傳輸過程中并未遭受篡改。

五、在接收到SAML響應(yīng)后,服務(wù)提供方可以驗(yàn)證其內(nèi)容和結(jié)構(gòu),并驗(yàn)證簽名,隨后通過了用戶認(rèn)證,分配用戶一個(gè)Cookie,啟動(dòng)與用戶間的Web會(huì)話。

問題在哪里?

那么到這里,或許你會(huì)有些疑惑,

1、服務(wù)提供方如何知道并信任身份提供方?

2、身份提供方如何知道并信任服務(wù)提供方?

3、身份提供方如何對(duì)聲明進(jìn)行簽名?

4、服務(wù)提供方在接受到一份聲明后如何驗(yàn)證其完整性?

實(shí)際上,在驗(yàn)證之前,身份提供方和服務(wù)提供方會(huì)進(jìn)行相互之間的信任處理。為了實(shí)現(xiàn)在請(qǐng)求和響應(yīng)的交互過程中,身份及信息的驗(yàn)證,兩者之間需要交換元數(shù)據(jù)。我們可以理解為,此處的元數(shù)據(jù)包含了一個(gè)公鑰,對(duì)應(yīng)著身份提供方對(duì)聲明進(jìn)行簽名加密所使用的私鑰,每一個(gè)實(shí)體(可以是用戶、服務(wù)提供方或是身份提供方)所綁定的URL以及支持或響應(yīng)的算法等等。那么基于這樣的出發(fā)點(diǎn),有兩種方法可讓他們獲取彼此的元數(shù)據(jù):

1、雙方以一種安全的方式交換元數(shù)據(jù),確立信任關(guān)系;

2、或者通過加入一個(gè)聯(lián)邦(Federation),將這種信任關(guān)系委托給第三方機(jī)構(gòu)。然后聯(lián)邦運(yùn)營者會(huì)設(shè)定任務(wù),收集來自所有參與的實(shí)體(身份提供方和服務(wù)提供方)的元數(shù)據(jù),并發(fā)布這些數(shù)據(jù)。每個(gè)身份提供方和服務(wù)供應(yīng)方都會(huì)提交其元數(shù)據(jù)來獲取有關(guān)參與該聯(lián)邦的其他實(shí)體的信息。

Office 365 的SAML交互是如何運(yùn)行的?

Office 365平臺(tái)服務(wù)提供方使用的是一個(gè)WS-Trust以及 SAML 2.0 web 瀏覽器單點(diǎn)登錄框架的混合體。Office 365平臺(tái)支持通過WS-Trust以及SAML 2.0 web 瀏覽器進(jìn)行單點(diǎn)登錄兩種方式進(jìn)行訪問,但兩者之間并不孤立。

實(shí)際上,WS-Trust為我們提供了一種安全令牌服務(wù),比如令牌的頒發(fā)(Issuance)、續(xù)訂(Renewal)和終止(Cancel)等。但SAML的服務(wù)提供方會(huì)將SAML 2.0標(biāo)準(zhǔn)的傳輸信息,使用令牌( token)轉(zhuǎn)換服務(wù),在內(nèi)部將 SAML信息轉(zhuǎn)化為WS-Trust信息。而因?yàn)樯鲜龅牧钆妻D(zhuǎn)換服務(wù),所以此次在 SAML服務(wù)提供方發(fā)現(xiàn)的漏洞,也會(huì)影響到WS-Trust單點(diǎn)登錄。

然而,為了簡單起見,在理解本文Office 365 的服務(wù)提供方時(shí),均可認(rèn)為是使用SAML進(jìn)行單點(diǎn)登錄。

不過有一點(diǎn)需要強(qiáng)調(diào)的是, 對(duì)于經(jīng)過SAML的賬戶驗(yàn)證,Office 365并不支持實(shí)時(shí)資源配置,所以對(duì)于使用賬戶進(jìn)行單點(diǎn)登錄的用戶,需要已經(jīng)在Azure AD上有租戶才行。這個(gè)需要經(jīng)過Directory同步或者經(jīng)過用戶在IDM 系統(tǒng)的幫助下進(jìn)行配置,不過這已經(jīng)超出了本文的范圍,這里先略過不談。

從一個(gè)身份提供方到 Office 365服務(wù)提供方,需要在請(qǐng)求消息中發(fā)布的屬性,以便進(jìn)行信息匹配,包括以下兩個(gè):

1、UPN(User principal name)用戶主體名稱,包含IDP(即身份提供方)Email名稱等信息;

2、ImmutableId,用戶的唯一識(shí)別符,存放于SAML聲明的Subject中。

接下來,我們可以看下Office 365平臺(tái)的登錄情況,

流程始于用戶開始訪問 Office 365 portal,接著被重定向到 https://login.microsoftonline.com/login.srf,而響應(yīng)形式如下,

4.png

在鍵入用戶名稱以及按下“TAB”或點(diǎn)擊密碼輸入?yún)^(qū)域,該頁面將構(gòu)建一個(gè)XHR (XMLHttpRequest),而為了驗(yàn)證用戶的域(可以簡單理解為用戶歸屬的企業(yè))是否能與Office 365平臺(tái)上的租戶(可以理解為某企業(yè)所租賃的服務(wù))相匹配。

GET /common/userrealm/[email protected]&api-version=2.1&stsRequest=rQIIAbNSzigpKSi20tcvyC8qSczRy09Ly0xO1UvOz9XLL0rPTAGxioS4BMruuVuZ2Fh77Wj-e6KxLMF2FaMaTp36OYl5KZl56XqJxQUVFxgZu5hYDA2MjTcxsfo6-zp5nmCacFbuFpOgf1G6Z0p4sVtqSmpRYklmft4jJt7Q4tQi_7ycypD87NS8Scx8OfnpmXnxxUVp8Wk5-eVAAaDxBYnJJfElmcnZqSW7mFVSU00tTCxTUnRNkpOTdU2Sksx0kwxSzXRTzZMtTC1ME00Mk1MOsGwIucAi8IOFcREr0C-3A6ZLrn182Gt-tWV-vVlpwi5OW-L8Yl-SWJSeWmKrapSWkpqWWJpTAhYGAA2&checkForMicrosoftAccount=false HTTP/1.1

Host: login.microsoftonline.com

User-Agent:Mozilla/5.0 (X11;UbuntuLinuxx86_64; rv:45.0) Gecko/20100101 Firefox/45.0

Accept: application/json

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate, br

DNT: 1

X-Requested-With: XMLHttpRequest

Referer: https://login.microsoftonline.com/login.srf?wa=wsignin1.0&rpsnv=4&ct=1460721662&rver=6.7.6640.0&wp=MCMBI&wreply=https%3a%2f%2fportal.office.com%2flanding.aspx%3ftarget%3d%252fdefault.aspx&lc=1033&id=501392&msafed=0&client-request-id=3a47de76-3c34-4a3b-b883-fdc88176603d

如果域已被知道及配置成聯(lián)邦身份,用戶的瀏覽器將被引導(dǎo)構(gòu)建一個(gè) HTTP POST請(qǐng)求到 HTTP-POST綁定的身份提供方的 URL,具體的信息如下,

urn:federation:MicrosoftOnline

用戶實(shí)時(shí)在身份提供方中進(jìn)行身份驗(yàn)證,如下,

5.png

隨后瀏覽器會(huì)被引導(dǎo)到創(chuàng)建一個(gè)HTTP POST返回到 Office 365 HTTP-POST綁定的 URL。通過包含著聲明的SAML響應(yīng)。一個(gè)簡單的響應(yīng)例子如下,

dc1f3jn97lZ6FWdxGxsEWxXNsTM=

Removed for brevity

Removed for brevity

WBgE+nW+3g9P5XpiZwGE06MT//g=

Removed for brevity

Removed for brevity

This is where my ImmutableId is

urn:federation:MicrosoftOnline

urn:oasis:names:tc:SAML:2.0:ac:classes:

[email protected]

在聲明中的Subject 屬性里面,包含的唯一標(biāo)識(shí)符ImmutableId,具體如下,

//以下為ImmutableId所在

在屬性聲明中,包含著與用戶在Azure AD已有賬號(hào)的UPN(用戶主體名稱)相匹配的 IDPEmail信息,具體如下,

[email protected]

在這里,同樣能將SAML響應(yīng)以及SAML聲明看成是經(jīng)過數(shù)字簽名的。

關(guān)于SAML NameID

首先我們從上方的聲明中可以注意到,Office 365 SAML 服務(wù)提供方忽略了聲明中的Subject,雖然ImmutableId 值包含了用戶在Azure AD 唯一標(biāo)識(shí)符。

而名稱標(biāo)識(shí)符,可以通過SAML 2 .0 元素來體現(xiàn),往往用以識(shí)別一個(gè)SAML聲明中的 subject的。名稱識(shí)別符可以是任意的字符,而其通常是一個(gè)郵件地址或電腦用戶名稱。

從攻擊者的角度出發(fā),事實(shí)上NameID的準(zhǔn)確性并無進(jìn)行校驗(yàn),而使得事情更加容易的是,ImmutableID通常是來自于 AD objectGUID。

范圍界定

在身份校驗(yàn)的過程中,IDPEmail屬性值會(huì)去匹配Azure AD中用戶的UPN,而這依靠在聲明中的信息便可達(dá)到。但是聲明中亦包含了Issuer(發(fā)行人)的信息(雖然有經(jīng)過簽名驗(yàn)證),所以根據(jù)前文的了解,正常來說,一個(gè)不相關(guān)的身份提供方是無法為其他域(或是租戶)的用戶創(chuàng)建聲明么?

答案是否定的。

事實(shí)證明(在本文的漏洞利用過程中),服務(wù)提供方使用使用聲明中的 Issuer (發(fā)行人)只是為了找到匹配的認(rèn)證,識(shí)別SAML響應(yīng)或者是聲明的簽名而已,但卻沒有真正對(duì)IDPEmail屬性值進(jìn)行任何檢查。這基本上意味著可以通過聲明,以身份提供方A的聲明來認(rèn)證身份提供方B的用戶。以此便可實(shí)現(xiàn)越權(quán)訪問B域的資源。

如何利用前文提到的漏洞?

在驗(yàn)證該漏洞時(shí),我們需要有一個(gè) Office 365租戶作為連接Office 365和 SAML 2.0身份提供方的平臺(tái)。我們還需要擁有一個(gè)基本的 Active Directory實(shí)例以及 SimpleSAMLphp(SAML 2.0 服務(wù)提供者和標(biāo)識(shí)提供者功能的 PHP 實(shí)現(xiàn),兼容 Shibboleth 1.3 和 2.0)作為我們的身份提供方。

首先,設(shè)置另外一個(gè)組織機(jī)構(gòu),其在我們這次試驗(yàn)中扮演著受害用戶的角色。其中包含不同的EntityID并且是為新的Office 365試用租戶,同時(shí)我們還需另外一個(gè)SimpleSAMLphp實(shí)例。

我們的測試所需環(huán)境如下,

1、首先,Office 365通過預(yù)設(shè)someorg-attacker.com作為身份提供方

2、接著, Office 365再通過預(yù)設(shè) someorg-victim.com作為身份提供方。

接下來,我們?cè)黾淤~戶到 someorg-attacker的用戶目錄下,看下當(dāng)我們嘗試登錄時(shí)會(huì)發(fā)生些什么。在AD(Active Directory)上增加一個(gè)新的alternative UPN suffix,接著通過內(nèi)置的工具來新增用戶,

以下為someorg-victim用戶目錄下的實(shí)體用戶,

6.png

6.png

  以下為someorg-attacker用戶目錄下的包含兩個(gè)組織機(jī)構(gòu)的實(shí)體用戶,

7.png

  我們可以看到其中新增了關(guān)于受害方中的實(shí)體用戶。

接下來,該驗(yàn)證我們的發(fā)現(xiàn)了。,驗(yàn)證步驟具體如下,

1、我們通過使用[email protected]賬戶(以上用戶目錄中的兩個(gè)賬戶任意一個(gè))作為登錄的用戶名,然后瀏覽器會(huì)被重定向到someorg-attacker的身份提供方進(jìn)行身份認(rèn)證;

2、當(dāng)我們?cè)谏矸萏峁┓降膶?shí)時(shí)身份驗(yàn)證登錄過程中,我們通過使用此前在someorg-attacker目錄下創(chuàng)建的帶有受害方域名稱的賬戶(例如[email protected]),進(jìn)行登錄驗(yàn)證,接著順利完成了在身份提供方的驗(yàn)證過程;

3、接下來,我們會(huì)看到問題點(diǎn)所在,如上,在經(jīng)過身份提供方的驗(yàn)證后,微軟的登錄頁面會(huì)提示一個(gè)錯(cuò)誤的信息,但除此之外并沒有其他特別的提示和處置。而最終,我們也“順利”以 [email protected]的身份登錄進(jìn)來了,并擁有了訪問someorg-victim資源的權(quán)限。

而對(duì)于這樣的情況,我們不知道該是高興(因?yàn)轵?yàn)證了我們的發(fā)現(xiàn))還是擔(dān)憂(因?yàn)槠溆绊懙姆秶?。

影響的用戶

受影響的用戶包括,

1、telefonika

2、Caltex Australia

3、Georgia State University

4、Japan Airlines

5、Santa Clara County

6、City of Chicago,IL

7、British Airways

漏洞檢測方法

我們也可以通過以下的查詢方式,確認(rèn)某個(gè)域是否設(shè)置為加入聯(lián)邦中

上述為檢測一個(gè)域是否加入聯(lián)邦的HTTP GET請(qǐng)求,而將會(huì)返回一個(gè) json的響應(yīng)信息,

{

"NameSpaceType":"Federated",

"federation_protocol":"WSTrust",

"Login":"[email protected]",

"AuthURL":"",

"DomainName":"ba.com",

"FederationBrandName":"BA.COM",

"cloudinstancename":"login.microsoftonline.com"

}

關(guān)鍵字:重放攻擊redirect

本文摘自:論壇

電子周刊
回到頂部

關(guān)于我們聯(lián)系我們版權(quán)聲明隱私條款廣告服務(wù)友情鏈接投稿中心招賢納士

企業(yè)網(wǎng)版權(quán)所有 ©2010-2024 京ICP備09108050號(hào)-6 京公網(wǎng)安備 11010502049343號(hào)

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 江永县| 道真| 来安县| 普格县| 长海县| 蒲城县| SHOW| 阿拉善左旗| 成都市| 阿坝| 蛟河市| 包头市| 甘谷县| 礼泉县| 昭苏县| 宜君县| 永靖县| 思南县| 诸暨市| 巴塘县| 额尔古纳市| 沾益县| 赣榆县| 合江县| 五家渠市| 公安县| 仁怀市| 盖州市| 涟源市| 宜川县| 兖州市| 丰顺县| 郯城县| 廉江市| 全州县| 铜山县| 乌鲁木齐县| 新绛县| 大渡口区| 凤城市| 年辖:市辖区|