OAuth协议安全性研究
来源:易榕旅网
2013年第03期 曩doi:10 3969/j issn 1671・1122.2013 03 018 OAuth协议安全性研究 张天琪 (北京工业大学,北京100022) 摘要:OAuth是'3下最流行的开放式授权协议,目前在整个互联网得到了相当广泛的应用。文章主要 -对OAuth协议的整体安全性进行了研究,通过测试案例展示其安全问题造成的危害,并提出了相应的防御措 施以及整体安釜}生的提升方法。 关键词:OAuth;授权协议;账号劫持;开放式授权 中图分类号:TP393.08 文献标识码:A 文章编号:1671—1122(2013)03—0068—03 Study on OAuth Protocol Security ZHANG Tian—ai (Beijing University ofTechnology,Beijing 100022,China) Abstract:OAuth is now the most popular open standard for authorization.Among the Intemet,a wide range of applications has been used.This article focuses on the overall security of the OAuth authorization protocol study,displays the harm caused by those security issues through the test case,and puts forward the corresponding defensive measures,as well as the overall security upgrade method. Key words:OAuth;authorization protocol;account hijacking;open standard for authorization 1 OAuth协议特性 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如照片、视频、联 系人列表),而无需将用户名和密码提供给第三方应用Ⅲ。OAuth是一种授权协议而非认证协议。认证关注的是用户是谁,一般 通过用户名和密码来进行认证。授权关注的是用户在做什么,它以资源为主体,通常的授权形式是组和权限。如果滥用授权和认 证协议,就会导致很多安全隐患。OAuth协议最大的进步是能够使第三方在不获得目标网站账号和密码的情况下使用目标网站的 用户资源,这也是当前OAuth应用如此之广的一个原因。随着开放式REST(representational state transfer,表述性状态转移)风 格的API的广泛使用,OAuth协议也被应用地越来越广泛,现在很多网站建立了自己的开放平台,这些平台会提供、执行一些操 作的API,有了这些操作的API,就必然要有安全保证,OAuth协议也就应运而生。OAuth协议对用户、消费方和服务提供者都 有极大好处。对于用户来说免去了繁琐的注册过程,降低了注册成本,提高了用户体验;对于消费方来说简化了自身会员系统, 同时又带来更多的用户和流量;对于服务提供者来说围绕自身进行开发可以增加用户黏性。OAuth协议分为1.0和2.0版本,下面 将分别探讨它们及它们的安全问题。 2 OAuth1.0及安全问题 国内很多应用的OAuth协议已经升级到了2.0版本,但是部分电商因业务比较广泛,使得升级2.0版本付出的代价很大,故 而仍然使用1.0版本的OAuth协议。 OAuth1.0授权流程并不复杂,但是实际上由于授权过程中存在很多密钥、令牌及签名运算,它们相互之间又存在各种各样 的牵连,因而开发人员往往关注于繁琐的授权过程而忽略了一些可能造成安全隐患的地方。OAuth1.0中存在一个比较严重的安 全漏洞:session fixation attack(会话固话攻击) ,产生这个攻击的原因主要是用户被同意授权后,用户被跳转到一个回调地址, 这个回调地址一般是在第三方平台。如果对这个回调地址没有进行检查和限制,也没有任何机制保证整个授权流程只由一个人 完成,那么就会造成安全问题,导致攻击者可以访问目标网站的用户资源。以下是该安全漏洞的攻击流程:攻击者首先启动授 权流程,记录未授权的request_token,用当前url诱骗用户访问。用户被同意授权后,被重定向到其他位置。攻击者之前记录的 reⅡuest ot k en此时已经被目标授权,使用由这个令牌构造的相应u r1即可访问用户资源。● 收稿时间:2012—12—15 作者简介:张天琪(1992一),男,北京,本科,主要研究方向:Web相关安全研究。 I 68 2013年第03期 下面给出了一个新浪微博存在的此类安全漏洞 缺陷编号 WooYun-2010-O0781 满洞标题:Sina撇博OAuth提供者存在sessio ̄fixatlon a ̄ack潲溺 Implicit Grant 是客户端的授权流程,无需服务端配合。 这样会导致access—token被暴露在客户端,是OAuth2.0中公 认的最不安全的授权流程(如图2所示)。 钼关厂商.新渡 漏洞作者:路^甲 提交时间 2010一l 1-03 公开时问:2010-li-08 涌涧类型:设计缺7at逻辑错误 危害等圾 中 宙评Rank 10 曼瓣 漏洞状态 漏洞已经通知厂商但是厂商忽略漏凋 漏洞来源:http://www.wooyun.org 黧 Tags标签:sn霉费蠛!斑用xss url踺转 OAuth session+fixation+attack OAuth1.0a版本中已经修复了此漏洞。首先为防止=吱击者篡 改回调地址,oauth—callback(即回调地址)字段在请求未授权 的request—token的时候即传递给平台方并参与签名计算。平台 方获得用户授权后重定向用户到第三方应用时会返回一个随机 值,用在第三方申请access_token的过程当中。由于随机值无法 被猜测,因此系统能够有效防止攻击者劫持授权过程。 3 OAuth2.0及安全问题 OAuth1.0中只提供了_一种授权流程,OAuth2.0进行了扩充, 它提供了多种授权流程,这里详细介绍其中3种比较流行的授 权流程:Authorization Code授权流程适用 F有Server端配合 的应用;Implicit Grant授权流程适用于无Server端配合的应 用;Resource Owner Password Credentials授权流程直接使用用 户名和密码进行授权。此外还有一种使用refresh—token获取 access—token的方式。 OAuth2.0与1.0版本的区别在于以下几点 ]: (1)request—token在2.0版本中不再使用。 (2)取消所有签名计算,整个授权流程使用HTTPS确保 安全性。 (3)授权流程大大简化,安全性有所提高。 (4)2.0版本与1.0版本不兼容,是一个全新的协议。这 也是很多老的厂商不进行升级的原因。 下面先来看—下Resource Owner Passwm-d Credentials授权 流程(如图1所示)。 、蒋求:。。 ;j htclitentps:/~/open.id=llllllXXX.com/l&cloautient h2/secracetces=f74s—t04ko9s7oken? 48728313 i&grant. type=password&use ̄n a{h'e=:xxx&pa%word=xxx 图1 Resource Owner Password Credentials授权流程 图1中浏览器发出的url有几个关键字段:client.id和 client—secret都是第三方在开放平台注册初始时必须有的值, id是公开的,secret是保密的。grant—type在当前授权模式下 的固定值是password。username和password是用户在资源提 供方注册的用户名和密码。这种授权方式需要开放平台对第 三方有着充分的信任。恶意应用如果使用该方式授权,会导 致暴力破解资源提供方的用户账号和密码。 图2 Implicit Grant授权流程 第三方平台请求图2中第一个框中的url,其中redirect—uri 是一个回调地址,当用户同意授权后就跳转到该地址。 response—type在当前模式下的固定值是token。开放平台响应 这个url,它直接将access—token挂在回调地址后面作为url的 fragment(url中#号以后)部分,被用户直接在浏览器中看见。除 了access—token外,开放平台还会返回expires—in(过期时间)、 refreshtoken(用于刷新access_token)、scope(请求的权限)。 下面给出了一个人人网上存在的此类安全漏洞: 缺陷编号:WooYun-2012—05804 漏洞标题:人人 ̄Oauth 2 O授权可导致用户access_token泄露 相关厂商:人人网 漏洞作者:PiaCa 提交时阐:2012-04一OS 公开时间:2012-05-20 漏洞类型:敏感信息泄越 危害等圾:嵩 自评Rank:i0 漏洞状惑:厂商已经确认 漏洞泉源:http://www.wooyun.org Tags ̄签:无 这个漏洞产生的原因是client—id与redirect—uri没有做 过校验或者信任域过大,配合信任域下的XSS(跨站脚本攻 击)就可以劫持用户的access—token。例如,访问http://graph. renren.com/oauth/grant?client——id=cd271e3051444285b8a18f121 1 a095cd&redirect——uri=http:/zone.ku6.com/u/17958620&response —type=token,最后跳转到存在XSS的酷6网站页面http:/zone. ku6.com/u/17958620,攻击者可以在该页面插入一段恶意的 Javascript代码来解析存在于url的fragment(url中}}号以后1 部分中的access—token。 下面是隐式授权流程下的劫持攻击流程图(如图3所示): ……一Ⅲ f}蛾珩af顶弱ii瑟 详 ccess l… l …~ …一』 图3隐式授权下的劫持攻击流程图 除了_上文所说的安全问题,还存在一个越权API访问的 安全问题。授权服务器通常会给予第三方应用一些访问基础 功能API的权限。如果用高权限API,需要指定scope(请求 69 201 3年第O3期 的权限)进行申请。若access—token没有与应用的appkey(开 放平台注册时所分配的唯一值)绑定,即任何令牌均可以去 申请任何权限,则可以越权访问受限制的API。通过在url 后面添加scope参数,后面跟上想去越权访问的一个高权限 的AP1名字来实现。最后在回调地址的fragment部分获得 access—token,此时该令牌已经被授权使用一些高级权限的 接口。 Authorization Code授权流程需要Server端配合,属于 两步授权。首先第j方应用跳转到授权应用页面请求code, 用户同意授权后,授权服务器返回code。第三方应用使用 code请求access—token,授权服务器以响应体的形式返回 accesstoken。图4给出的是第三方应用两次请求的url: https:llapi.weibo com/oauth21authorize?clie ̄1 j id=lllllll&redcect UIi=http://www.xxx CO / nawe! ̄?&!!!曼 nse 一ty p e三 d htlps://api weibo.comloauth2/access~foken ienL j Id=1111111&clienl坩secret=l29dgp03m2& ant type {=authorization code&redirect uri=http://wwwXXX{ com/conneclJsinaweibo?&code=1sk421f0s i图4第三方应用两次请求的urI 第一次请求与之前的授权方式比较,仅response—type有 了改变,现在固定值是code。第二次请求使用从授权服务器 获得的code请求access—token。从图4中可以看到之前获得的 code是lsk421f0s。 同样这种授权流程也存在安全问题。下面结合测试案例 来展示这个CSRF(跨站请求伪造)攻击【5】。 测试场景:攻击者通过新浪微博劫持目标的360主站以 及360浏览器账号。 目标首先处于360平台登录状态,未绑定任何第三方账号。 攻击者通过新浪微博登录360,点击授权后阻止页面自 动跳转。用要跳转到的url诱骗目标访问,目标访问url。此 时在用户不知情的情况下将目标的360账户绑定到攻击者的 新浪微博上,之后我们可以使用新浪微博账号登录目标的360 浏览器,此时可以查看其历史记录、收藏夹等隐私数据。 假设我们已经通过CSRF劫持了用户的某个账号,且此时 目标账号所在网站不仅使用OAuth协议,而且还提供OAuth 授权登录机制。则我们不仅能够通过别的网站账号来登录我 们的网站,还可以通过我们这个网站账号来登录别的网站。如 果用户使用这个被劫持的账号登录过别的网站,攻击者则可 以通过这个已被劫持的账号继续劫持该用户的其他网站账号, 这样就形成了一个CSRF的递归劫持。有时网站会通过设置 强制登录字段强制用户输入第j方的账号和密码信息,我们 可以通过修改该字段为false直接读取当前会话来登录,即可 以继续劫持该网站的账号。 除此之外,Authorization Code授权流程还有另外一种 I 70 安全问题:replay attack(授权码重放攻击)。一般情况下, Authorization Code会随着access—token的过期而过期,规范中 建议过期时间为60~80min,且要保证授权码仅可以用一次。 很多资源提供方为了降低授权成本,没有严格按照规范实施, 有的过期时间甚至达到一周,从而可以通过这个Authoriza|ion Code授权流程去重复获得access—token。我们可以通过以下几 种方式获取目标授权码 l:在获得服务器权限的情况下,通过 日志获取大量的目标授权码;通过嗅探获得目标授权码,因为 回调地址位于客户端,不会强制使用HTTPS,这样就给了攻 击者可乘之机;通过XSS获得目标授权码,配合目标网站信 任域下的XSS可以实现劫持code。 4 OAuth漏洞防御及安全性提升措施 对于资源提供方来说,首先要对client—id和回调地址做 严格校验,确保获取access—token的code仅能使用一次以避 免受到重放攻击,尽量避免直接读取当前用户的session进行 绑定。对于资源使用方来说,应该使用Authorization Code方 式进行授权,授权过程中使用state随机哈希参数,并在服务 端进行判断以防止CSRF攻击,尽量使用HTTPS保证整个授 权过程的安全性。通过以上防御措施,可以提高整个授权流 程的安全性。 5结束语 由于OAuth协议在日常上网过程中时常存在,而且OAuth 协议关系到用户的账号、密码等隐私信息,因此它的安全问题 也受到了极大的重视。本文通过介绍OAuth1.0和2.0版本巾存 在的安全问题以及相应的防御方式,并且结合部分测试案例让 大家对OAuth协议的安全问题有一个直观的了解,并希望更多 的安全研究人员能够关注OAuth协议。 (责编马珂) 参考文献: [1]Wikipedia—OAuth[Z/OL].http://zh wikipedia.org/wiki/OAuth,2013 [2]Eran Hammer Explaining the OAuth Session Fixation Attack[Z/OLl_ http://hueniVe e.com/2009/04/explaining—the—oauth—session—fixation— attack/,2009 [3]Egor Homakov The Story About Two OAuth2 Vulnerabilities[Z/OL] http://homakov blogspot com/2012/09/a—couple—of-reasons—why— oauth2一spec—is.html,2012. [4]Egor Homakov OAuth2:One access——token To Rule Them AllIZ/ OL].http://homakov.blogspot.com/2012/O8/oauth2一one—accesstoken— to—mle—them—aⅡ-htm1.2012. [5]Egor Homakov The Most Common OAuth2 Vulnerability[Z/OL[ http://homakov.blogspot com/201 2/07/saferweb—most—common— oauth2.htm1.2()1 2. [6]Dndx.OpenlD和OAuth的区别及第三方登录的安全隐患分析 [Z/OL]https://idndx.com/201 2/04/23/openid—VS—oauth—and—the— security—risk—of-oauth—login/,2012