2. 南阳理工学院 软件学院,南阳 473000
2. School of Software, Nanyang Institute of Technology, Nanyang 473000, China
在云计算时代, 开放和共享数据的需求日益增加, 为了便于用户将资源授权给第三方应用, 开放授权的思想应运而生. 开放授权旨在对权限进行细粒度的控制, 并且保护用户的密码以及认证凭据. 目前主要的Web2.0安全开放授权机制是: OAuth协议[1], OpenID协议[2]和IAM服务[3].
OAuth协议面向个人用户, 可对资源进行开放授权. 在线授权是其特点: OAuth让第三方无法触及到用户的敏感信息(如用户名与密码等), 在认证用户的资源所有者身份后, 即可以申请获得该用户资源的授权[4], 从而安全便捷地访问用户的网络资源.
OpenID描述用户分布式方式身份认证的URI框架[5], 解决了传统数字身份标识管理以及认证的问题. 具有多种认证方式, 例如用户名/密码的通用认证方式, 或生物识别技术、智能卡等新型认证方式. 服务提供商不用考虑认证机制, 用户只需要注册获取 OpenID 账户, 即可在多个网站间登录, 而不需要重复注册, 便于用户统一管理身份信息[6].
IAM服务涵盖两方面内容: 用户信息管理和用户访问策略管理. IAM服务采用预先授权, 用户在预先知道第三方应用所需资源请求的情况下, 授权客户端使用REST API方式访问资源.
2 OAuth协议工作原理(1) 用户打开客户端后, 客户端要求用户给予授权. 请求会包含以下信息: 用户的身份信息, 要访问的资源路径和操作类型等.
(2) 用户同意给予客户端授权, 并传输授权证据.
(3) 客户端向认证服务器申请访问令牌. 此时, 客户端需提供授权证据和客户端的凭证.
(4) 客户端通过认证服务器的认证后, 得到其发放的访问令牌.
(5) 客户端携带访问令牌, 向资源服务器申请获取资源. 在令牌的有效期内, 客户端可多次携带令牌访问资源.
(6) 资源服务器验证令牌的有效性后同意让客户端访问资源. 令牌的有效性包括是否过期、是否伪造、是否越权等.
在OAuth 2.0中定义了四种授权方式, 如表1所示.
在OAuth 2.0协议在使用授权码模式与认证服务器进行互动时, 使用到的各个参数如表2至表6所示.
3 CPN简介
Petri 网是一种基于状态的建模方法, CPN (Colored Petri Net) 是在 Petri 网基础上扩展而来, 具有概念简单性以及图形化表达的特点. Kumar和Spaf- ford将 Petri 网应用于Web安全领域[7], 建立了基于Petri网的入侵检测模型, 对入侵行为进行CPN建模, 当相应模型匹配的事件序列被触发时, 表示入侵行为发生.
CPN在解决协议建模问题时具有以下的优势:
(1)层次化. 引入了层次子网的结构, 含有替代变迁和融合库所, 可利用多个彼此联系的CPN网子模型构建复杂系统的整体模型.
(2)可实现推理. 具有变迁机制, 库所被触发后变迁到达新的库所, 因果关系明确.
(3)可处理并发或顺序性问题. 具有时间因子可以处理不同行为发生的时间.
(4)有较完善的仿真工具, 可使用CPNTools工具进行可视化建模和仿真分析.
4 OAuth2.0协议建模 4.1 OAuth2.0协议的顶层模型基于CPN的OAuth2.0协议顶层模型如图2所示, 定义模型的颜色集和变量如下:
colset DATA= String;
colset NO = INT;
colset NO*DATA =Product NO*DATA;
var success: BOOL;
库所A表示申请认证URI, 库所B表示请求令牌, 库所C表示返回令牌, 库所D表示回应URI, 库所E表示更新令牌. 库所Type credential 表示授权证书, 库所Grant Access表示授权访问.
申请认证URI的参数和请求令牌的参数(client_id, redirect_uri)用数据类型NO×DATA表示, 回应URI的参数(code) 用数据类型NO表示, 返回令牌的参数(expires_in) 用数据类型NO表示, 更新令牌的参数(refresh_token, scope)用数据类型NO×DATA表示.
4.2 Resource Owner模型Resource Owner的执行过程如图3所示. 用户访问客户端, 给客户端授权后, 认证服务器将用户导向重定向URI, 并附授权码.
变迁Resource Owner表示客户端将用户导向认证服务器, 变迁Receive Token表示用户是否将授权给予客户端. 库所NextToken表示用户批准授权后发送的授权证据. 库所Type credential 表示授权证书. 库所A表示申请认证URI, 库所D表示回应URI, 库所E表示更新令牌.
4.3 Authorization Server模型Authorization Server的执行过程如图4所示. 在认证服务器确认授权码以及重定向URI无误后之, 将访问令牌发送给客户端.
变迁Generate token表示客户端向认证服务器请求访问令牌, 变迁Validate token表示验证通过后, 向客户端返回访问令牌. 库所A表示申请认证URI, 库所B表示请求令牌, 库所C表示返回令牌, 库所D表示回应URI.
4.4 Resource Server模型Resource Server的执行过程如图5所示. 客户端携带访问令牌访问资源服务器上的资源. 如果令牌在有效期内, 客户端可以多次访问相关资源. 资源服务器验证令牌的有效性, 通过验证后, 提供所需服务.
变迁Resource server表示验证令牌的有效性. 库所NextReq表示客户端多次携带令牌访问资源. 库所Grant access表示授权访问相应资源. 库所B表示请求令牌, 库所C表示返回令牌, 库所E表示更新令牌.
5 OAuth2.0协议分析跨站请求伪造缩写为CSRF, 通过在授权用户访问的页面中包含链接, CSRF攻击可伪装用户请求, 访问受信任网站. CSRF攻击者的目标站点常具有持久化授权cookie或者具有当前受信任用户的会话cookie. 为了防范CSRF攻击, 需要将类似cookie的持久化授权方法, 转换为瞬时授权方法. 例如在form中包含用户授权证据作为cookie之外的验证.
申请认证URI的参数(client_id, redirect_uri)如果在redirect_uri中注入攻击者提供的authorization_code, 模型仿真会终止在Authorization Server的变迁validate token执行过程中, 不会访问资源服务器上的资源. 这说明从浏览器安全角度考虑, OAuth协议在redirect_uri中引入state参数可以防范CSRF攻击. 如果没有state参数, 攻击者可能导致客户端访问错误的资源.
6 小结本文列举了主要的几种Web安全开放协议, 绘制了OAuth协议时序图, 使用CPN对OAuth2.0协议的授权码模式进行层次化建模. OAuth2.0协议的模型包括顶层模型、Resource Owner模型、Authorization Server模型和Resource Server模型. 并使用Petri网仿真工具CPNTools对OAuth2.0协议进行了仿真分析, 直观地展现协议运行过程和防范CSRF攻击的特点.
[1] |
The OAuth 2.0 authorization protocol (draft-ietf-oauth-v2-16). http://tools.ietf.org/html/draft-ietf-oauth-v2-16. [2011-05-19].
|
[2] |
Recordon D, Reed D. OpenID 2.0: A platform for user-centric identity management. Proceedings of the 2nd ACM Workshop on Digital Identity Management. Alexandria, VA, USA. 2006. 11–16.
|
[3] |
胡刚, 郭文奇, 戚前方. IAM安全技术在开放平台系统管理的应用. 计算机工程, 2005, 31(S1): 192-194. |
[4] |
李馥娟. 基于OAuth的开放授权技术及在云计算中的应用. 计算机系统应用, 2015, 24(4): 228-232. |
[5] |
夏晔, 钱松荣. OpenID身份认证系统的认证等级模型研究. 微型电脑应用, 2011, 27(4): 7-9. |
[6] |
刘润达, 王卷乐, 杜佳. OpenID: 一种开放的数字身份标识管理及其认证框架. 计算机应用与软件, 2008, 25(12): 127-129. DOI:10.3969/j.issn.1000-386X.2008.12.043 |
[7] |
Kumar S, Spafford E H. A software architecture to support misuse intrusion detection [Technical Report]. CSD-TR-95-009. West Lafayette, USA: Purdue University, Department of Computer Sciences, 1995.
|