[徐博文 賈曼 曹維華 朱華虹]
?
基于OAuth協(xié)議的天翼開放平臺(tái)安全性淺析
[徐博文賈曼曹維華朱華虹]
摘要OAuth協(xié)議是當(dāng)前互聯(lián)網(wǎng)最流行的開放授權(quán)標(biāo)準(zhǔn)。以天翼開放平臺(tái)為例,介紹了OAuth2.0協(xié)議的工作原理,重點(diǎn)分析了OAuth2.0安全問題的兩個(gè)焦點(diǎn),一是技術(shù)應(yīng)用漏洞,即由于授權(quán)場(chǎng)景的多樣性導(dǎo)致部署時(shí)產(chǎn)生邏輯和代碼設(shè)計(jì)漏洞,二是業(yè)務(wù)應(yīng)用漏洞,即由于安全機(jī)制不夠完善以及協(xié)議涉及的實(shí)體之間無法有效配合導(dǎo)致業(yè)務(wù)應(yīng)用層面的安全性降低。
關(guān)鍵詞:OAuth2.0 授權(quán)協(xié)議 天翼開放平臺(tái) 應(yīng)用漏洞
徐博文
中國電信股份有限公司廣東研究院,主要研究方向?yàn)镮P網(wǎng)絡(luò)通信技術(shù)。
賈曼
中國電信集團(tuán)公司網(wǎng)絡(luò)運(yùn)行維護(hù)事業(yè)部數(shù)據(jù)處,主要研究方向?yàn)镮P網(wǎng)絡(luò)通信技術(shù)。
曹維華
中國電信股份有限公司廣東研究院,主要研究方向?yàn)镮P技術(shù)、移動(dòng)互聯(lián)網(wǎng)技術(shù)。
朱華虹
中國電信股份有限公司廣東研究院,主要研究方向?yàn)镮P技術(shù)、SDN技術(shù)。
中國電信天翼開放平臺(tái)為合作伙伴提供統(tǒng)一的開放合作服務(wù)門戶(Open.189.cn),打造統(tǒng)一的運(yùn)營商級(jí)能力開放合作品牌和入口,平臺(tái)于2012年3月27日正式上線,基于OAuth協(xié)議提供授權(quán)服務(wù),支持版本為2.0。OAuth(Open Authorization,即開放授權(quán))為用戶資源的授權(quán)提供了一個(gè)安全、開放而又簡(jiǎn)易的標(biāo)準(zhǔn),OAuth授權(quán)不會(huì)使第三方觸及到用戶的帳號(hào)信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就可以申請(qǐng)獲得該用戶資源的授權(quán)。OAuth提供的是可信的第三方認(rèn)證,既能通過其統(tǒng)一認(rèn)證解決用戶在不同Web應(yīng)用之間的身份認(rèn)證問題,又能實(shí)現(xiàn)在保證用戶信息安全的基礎(chǔ)上,將用戶指定的資源授權(quán)給第三方,實(shí)現(xiàn)用戶身份認(rèn)證以及資源開放授權(quán),因此出現(xiàn)不久即成為RFC標(biāo)準(zhǔn)并獲得各大網(wǎng)絡(luò)服務(wù)提供商的支持,包括微軟、Google、Facebook、Twitter,以及國內(nèi)的新浪、騰訊、網(wǎng)易、人人和豆瓣等在內(nèi)的互聯(lián)網(wǎng)公司均在其開放平臺(tái)上提供了OAuth認(rèn)證接口。本文將以天翼開放平臺(tái)為例,介紹OAuth2.0協(xié)議工作原理,同時(shí)探討OAuth2.0的安全問題。
(1)協(xié)議實(shí)體
OAuth2.0協(xié)議定義了 4種不同的實(shí)體:資源擁有者(Resource Owner),指能夠?qū)κ鼙Wo(hù)資源進(jìn)行授權(quán)的實(shí)體,如天翼用戶。資源服務(wù)器(Resource Server),存放用戶受保護(hù)的資源并通過與授權(quán)服務(wù)器的交互對(duì)資源的訪問請(qǐng)求作出應(yīng)答,天翼開放平臺(tái)資源服務(wù)器地址為api.189.cn。授權(quán)服務(wù)器(Authorization Server),對(duì)資源擁有者進(jìn)行身份認(rèn)證,對(duì)驗(yàn)證通過的授予訪問權(quán)限,天翼開放平臺(tái)授權(quán)服務(wù)器地址為oauth.api.189.cn,授權(quán)服務(wù)器和資源服務(wù)器構(gòu)成了天翼開放平臺(tái)的主體。客戶端(Client),指第三方應(yīng)用系統(tǒng)或程序,可以是一個(gè)遠(yuǎn)程Web站點(diǎn)、一段JavaScript代碼或一個(gè)本地App,它獲得域內(nèi)用戶授權(quán)之后可以訪問用戶存放在資源服務(wù)器上的資源,天翼開放平臺(tái)支持開發(fā)者根據(jù)平臺(tái)所提供資源,創(chuàng)建和管理第三方合作應(yīng)用,通過合作應(yīng)用調(diào)用平臺(tái)的資源。
(2)協(xié)議工作流程
OAuth 2.0協(xié)議的基本工作流程如圖 1 所示。
圖1 OAuth 2.0協(xié)議基本工作流程
①客戶端向資源擁有者發(fā)起“授權(quán)請(qǐng)求”(authorization request);②資源擁有者同意客戶端的授權(quán)請(qǐng)求,并返回“授權(quán)許可”(authorization grant)給客戶端;③客戶端將“授權(quán)許可”提交給授權(quán)服務(wù)器,請(qǐng)求獲得用戶資源的訪問權(quán)限;④授權(quán)服務(wù)器驗(yàn)證通過后向客戶端返回“訪問令牌”(access token);⑤客戶端將“訪問令牌”提交給資源服務(wù)器,請(qǐng)求訪問用戶資源;⑥資源服務(wù)器將對(duì)應(yīng)用戶的受保護(hù)資源(Protected Resource)返回給客戶端。
(3)授權(quán)模式
OAuth2.0強(qiáng)調(diào)可擴(kuò)展性和靈活性,為此定義了多種授權(quán)模式,以適應(yīng)多個(gè)應(yīng)用場(chǎng)景授權(quán),包括授權(quán)碼模式(Authorization Code)、簡(jiǎn)化模式(Implicit Grant)、客戶端授權(quán)模式(Client Credentials)以及資源擁有者密碼授權(quán)模式(Resource Owner Password Credentials),天翼開放平臺(tái)支持前3種,其中Authorization Code主要用于Web應(yīng)用,Implicit Grant用于手機(jī)和桌面等Native應(yīng)用,Client Credentials可用于Web和Native應(yīng)用,但僅限于用來訪問一些公共資源,而不是受限資源如某個(gè)特定天翼用戶的資源。
OAuth 2.0協(xié)議領(lǐng)導(dǎo)者之一Eran Hammer認(rèn)為OAuth2.0沒有達(dá)到安全和互操作性這兩個(gè)最重要的目標(biāo),“在大部分開發(fā)者手中明顯出現(xiàn)了不安全的實(shí)現(xiàn)結(jié)果”[1]。從大量案例[2]來看,OAuth2.0協(xié)議的安全焦點(diǎn)集中在技術(shù)應(yīng)用漏洞和業(yè)務(wù)應(yīng)用漏洞兩個(gè)方面。本文并未對(duì)天翼開放平臺(tái)進(jìn)行安全方面的深入測(cè)試,針對(duì)OAuth2.0安全性的探討來自其他案例,天翼開放平臺(tái)僅作為場(chǎng)景類比和討論。
(1)技術(shù)應(yīng)用漏洞
由于OAuth2.0授權(quán)場(chǎng)景的復(fù)雜化,容易導(dǎo)致開放平臺(tái)方設(shè)計(jì)和部署不周,或者對(duì)應(yīng)用方的安全指引不足而錯(cuò)誤使用應(yīng)用場(chǎng)合。另外,場(chǎng)景之間的安全問題容易產(chǎn)生交叉,使一些潛在威脅通過場(chǎng)景轉(zhuǎn)換成為顯性漏洞[3]。
以第三方登錄認(rèn)證為例,當(dāng)應(yīng)用方通過平臺(tái)方的Access token 獲取接口得到用戶的授權(quán)信息后,將授權(quán)信息(Access Token、uid、expire_time)作為本應(yīng)用賬號(hào)系統(tǒng)的匹配參數(shù),實(shí)現(xiàn)新用戶注冊(cè)或者已有用戶的身份認(rèn)證。在這個(gè)流程中,如果應(yīng)用方在授權(quán)信息匹配處理邏輯部分設(shè)計(jì)不嚴(yán)謹(jǐn),例如參數(shù)選擇不當(dāng)或沒有應(yīng)用方來源驗(yàn)證機(jī)制,將導(dǎo)致嚴(yán)重漏洞,最常見的攻擊是授權(quán)信息篡改,可導(dǎo)致任意登錄應(yīng)用方賬號(hào)的嚴(yán)重漏洞。
圖2 基于天翼開放平臺(tái)的某手機(jī)客戶端應(yīng)用OAuth認(rèn)證案例
圖2是OAuth 2.0應(yīng)用于移動(dòng)終端進(jìn)行用戶身份認(rèn)證的典型案例,在其業(yè)務(wù)邏輯的第3步,當(dāng)基于天翼開放平臺(tái)的某手機(jī)客戶端應(yīng)用獲取開放平臺(tái)方返回的Access Token、uid等用戶授權(quán)信息后,將授權(quán)信息上報(bào)給手機(jī)客戶端應(yīng)用自身的用戶認(rèn)證系統(tǒng)進(jìn)行賬號(hào)匹配登錄,如果該應(yīng)用后續(xù)用戶匹配邏輯不嚴(yán)謹(jǐn),存在錯(cuò)誤選擇授權(quán)信息作為參數(shù)(如單純選擇uid一項(xiàng))或者沒有對(duì)授權(quán)信息(Access Token)進(jìn)行來源驗(yàn)證,攻擊者可以通過截包篡改匹配參數(shù),比如修改為其他天翼用戶uid,從而實(shí)現(xiàn)該手機(jī)客戶端自身用戶系統(tǒng)的任意賬號(hào)登錄。
另外,由于部署了OAuth2.0的平臺(tái)方和第三方應(yīng)用存在邏輯設(shè)計(jì)和代碼安全方面的問題,攻擊者可以對(duì)二者的賬號(hào)系統(tǒng)進(jìn)行包括截包篡改、CSRF和XSS等多種形式的復(fù)合攻擊[4]。
(2)業(yè)務(wù)應(yīng)用漏洞
OAuth2.0協(xié)議作為一種授權(quán)認(rèn)證協(xié)議,在業(yè)務(wù)應(yīng)用層面涉及到用戶、平臺(tái)以及第三方應(yīng)用這3個(gè)實(shí)體,其安全問題由這3個(gè)實(shí)體綜合決定。平臺(tái)方在部署協(xié)議時(shí),需要一套相應(yīng)的安全機(jī)制來保證整個(gè)業(yè)務(wù)環(huán)節(jié)的安全,而同時(shí)又有賴于第三方應(yīng)用和用戶在使用過程中的配合。然而,從對(duì)主流開放平臺(tái)應(yīng)用情況的調(diào)研來看,由于平臺(tái)方安全機(jī)制不夠完善,同時(shí)用戶與第三方應(yīng)用這兩個(gè)實(shí)體之間缺乏有效配合,導(dǎo)致OAuth2.0協(xié)議在業(yè)務(wù)應(yīng)用層面安全性降低。
3.1安全機(jī)制
(1)對(duì)平臺(tái)資源的權(quán)限分級(jí)不嚴(yán)格
OAuth認(rèn)證最終結(jié)果是獲得用戶平臺(tái)資源的訪問授權(quán),如果平臺(tái)方對(duì)平臺(tái)資源權(quán)限分級(jí)不嚴(yán)格,將導(dǎo)致用戶信息和資源泄露的危險(xiǎn),因此必須對(duì)平臺(tái)資源進(jìn)行嚴(yán)格的權(quán)限等級(jí)劃分,使第三方應(yīng)用只能根據(jù)自身網(wǎng)絡(luò)服務(wù)需求去申請(qǐng)并獲取用戶在平臺(tái)上的相應(yīng)資源,例如第三方登錄認(rèn)證只授權(quán)用戶賬號(hào)和頭像信息,郵件客戶端只授權(quán)用戶通信錄列表以及郵件讀取、發(fā)送和修改權(quán)限。天翼開放平臺(tái)對(duì)自身能力服務(wù)及第三方特色能力即平臺(tái)資源進(jìn)行優(yōu)化配置、整合、分類和分級(jí),形成了以天翼帳號(hào)、電信能力、數(shù)字內(nèi)容以及綜合信息為主體的四大類開放能力[1],基于平臺(tái)的第三方應(yīng)用需要進(jìn)行相應(yīng)的“能力綁定”,因此在平臺(tái)資源權(quán)限分級(jí)方面相對(duì)完善。
(2)缺乏與其他安全驗(yàn)證機(jī)制的配合應(yīng)用
OAuth認(rèn)證使第三方獲得對(duì)用戶資源的授權(quán)訪問,如果該授權(quán)是由于漏洞攻擊引發(fā)的被動(dòng)授權(quán),那么如果沒有其他安全驗(yàn)證機(jī)制的配合,攻擊將獲得成功。谷歌公司最早意識(shí)到這一點(diǎn)并且將OAuth認(rèn)證與兩步驗(yàn)證機(jī)制(Two-step verification,簡(jiǎn)稱2SV)結(jié)合起來,即在谷歌賬號(hào)系統(tǒng)中啟用OAuth認(rèn)證必須首先綁定手機(jī)并通過短信或電話進(jìn)行一次性密碼的身份驗(yàn)證,以保證OAuth認(rèn)證是在用戶知情的情況下發(fā)生的。其他平臺(tái)和應(yīng)用有的則是在授權(quán)頁面要求用戶填入第三方渠道如備用郵箱獲取的驗(yàn)證碼來保證授權(quán)流程的安全性,但可惜的是大部分平臺(tái)方和應(yīng)用僅考慮操作方便性,沒有做到將OAuth認(rèn)證與其他安全驗(yàn)證機(jī)制結(jié)合起來使用,忽視了賬戶安全。
3.2協(xié)議實(shí)體
(1)第三方應(yīng)用開發(fā)者:缺乏自律
在OAuth2.0的整體解決方案中,第三方應(yīng)用的配合是安全的重要一環(huán),這種配合實(shí)際上指的是應(yīng)用開發(fā)者的自律。在平臺(tái)資源權(quán)限進(jìn)行了嚴(yán)格劃分的基礎(chǔ)上,開發(fā)者應(yīng)該按照應(yīng)用自身網(wǎng)絡(luò)服務(wù)需求去申請(qǐng)相應(yīng)的權(quán)限,這些應(yīng)該在開發(fā)者協(xié)議條款中著重闡明,然而這種完全依賴開發(fā)者高度自律的機(jī)制是不可靠的,以Android系統(tǒng)移動(dòng)應(yīng)用為例,就普遍存在高權(quán)限授權(quán)申請(qǐng)的情況。
(2)平臺(tái)方:審核機(jī)制存在漏洞
對(duì)第三方應(yīng)用的約束責(zé)任主要在平臺(tái)方,第一步就是對(duì)第三方應(yīng)用的審核上,審核內(nèi)容最重要的就是對(duì)用戶資源權(quán)限的申請(qǐng)是否符合要求,是否有越權(quán)行為等。然而,從對(duì)多個(gè)開放平臺(tái)的調(diào)研看,審核標(biāo)準(zhǔn)不一,有的甚至只需要填寫應(yīng)用的基本信息,對(duì)用戶資源請(qǐng)求權(quán)限根本不做任何審查和限制,惡意第三方應(yīng)用可以繞過審查,非法獲取超額權(quán)限。天翼開放平臺(tái)審核機(jī)制相對(duì)健全,對(duì)個(gè)人開發(fā)者和企業(yè)開發(fā)者均有較為嚴(yán)格的身份認(rèn)證,個(gè)人必須提供身份證件進(jìn)行實(shí)名認(rèn)證,企業(yè)則需要提供法人和營業(yè)執(zhí)照,對(duì)接入應(yīng)用的信息審核項(xiàng)目也較為豐富。
(3)用戶:對(duì)OAuth認(rèn)證的安全性缺乏認(rèn)識(shí)
OAuth協(xié)議盡管在國內(nèi)得到較大應(yīng)用,但對(duì)于大多數(shù)用戶來說仍然屬于新鮮事物,而且國內(nèi)用戶缺乏保護(hù)賬戶信息和權(quán)限的習(xí)慣,往往在應(yīng)用方引導(dǎo)下一步步完成授權(quán)操作,只體驗(yàn)到易用性而忽略了安全性,例如當(dāng)前流行的OAuth協(xié)議“一鍵登錄”操作,給用戶帶來極大便利的同時(shí)也降低了用戶的安全意識(shí),用戶越來越不在意自己的賬號(hào)安全,敏感賬戶同時(shí)授權(quán)給多個(gè)應(yīng)用的情況非常常見。
OAuth協(xié)議促進(jìn)了Web2.0技術(shù)的發(fā)展,但同時(shí)也帶來了安全問題。盡管2.0版本已經(jīng)解決了協(xié)議自身的安全漏洞,但是在應(yīng)用層面仍然存在諸多問題,解決這些問題不僅需要平臺(tái)方在部署方面以及多個(gè)業(yè)務(wù)環(huán)節(jié)的努力,也需要第三方應(yīng)用的配合,同時(shí)藉由OAuth認(rèn)證的不斷普及,用戶能夠逐步提升對(duì)OAuth協(xié)議的了解和認(rèn)識(shí),養(yǎng)成保護(hù)個(gè)人賬戶資源的習(xí)慣。天翼開放平臺(tái)與應(yīng)用開發(fā)者通過合作實(shí)現(xiàn)便利服務(wù)和價(jià)值增值,在強(qiáng)調(diào)業(yè)務(wù)擴(kuò)展的同時(shí),雙方同時(shí)承擔(dān)著推廣OAuth協(xié)議、培養(yǎng)用戶安全意識(shí)以及規(guī)范應(yīng)用開發(fā)業(yè)態(tài)的責(zé)任,真正構(gòu)建一個(gè)更為開放、安全的能力合作生態(tài)價(jià)值鏈。
參考文獻(xiàn)
1Eran Hammer.OAuth 2.0:通往地獄之路[Z/OL]. http:// article.yeeyan.org/view/50978/307535, 2012
2Horseluke. OAuth 2.0安全案例回顧[Z/OL]. http://drops. wooyun.org/papers/598, 2013
3T. Lodderstedt, Ed.等. OAuth 2.0 Threat Model and Security Considerations[Z/OL]. https://tools.ietf.org/html/ draft-ietf-oauth-v2-threatmodel-08, 2012
DOI:10.3969/j.issn.1006-6403.2016.04.003
收稿日期:(2016-03-22)