REST的安全性分析与策略研究
2013-11-29程飞,沈波
程 飞,沈 波
(北京交通大学 通信与信息系统北京市重点实验室,北京 100044)
随着网络架构研究的不断深入,表述性状态转移(REST,Representational State Transfer)技术日益成熟,REST架构不但能提高Web应用的运行效率,还可以简化开发过程,已经在电子政务、电子商务等领域得到广泛的应用。但这些新技术在给社会发展带来便利的同时,也带来了巨大的安全风险。
针对REST应用的攻击手段与破坏程度,其被关注程度越来越高,已经超过了对传统安全问题的关注度[1]。文献[2]中阐述了构造REST的Web服务接口,同时针对REST安全性将其与WS-*技术进行比较。文献[3]中阐述了REST APIs可能存在的安全隐患并给出防范建议。
本文通过对REST安全性的分析与总结,找出常见的安全问题及安全策略。根据REST安全问题在应用中的作用原理,给出应对策略。最后建立REST的安全模型及安全检测系统,通过攻击演示证明系统的可用性。
REST并不是一种协议或标准,而HTTP是一种应用协议,REST经常作为传输协议诠释HTTP协议的设计初衷。互联网上的各种资源就是通过HTTP协议的4种基本操作实现类似数据库中增删查改功能,REST规定了定位资源的规则,并对资源通过 HTTP协议实现操作[4]。
1 REST安全问题分析
(1)REST风格API的快速发展。现在很多基于REST风格的API已经由只读模式转变成读写模式,这极大的促进了人机和机器之间的交互性,但权限的增加意味着安全性的降低。(2)认证和授权方式不够完善。例如密钥没有加密或是静态加密;一些基于HTTP的认证授权没有使用安全套接层(SSL,Secure Sockets Layer);自定义的权限文件AuthZ存在缺陷等。(3)API设计者对Web基本应用安全的忽视及对API的不合理调用。开发人员对安全风险考虑不足,尤其是对新安全问题缺乏足够认识,或对可能存在安全隐患的危险函数或程序使用不当。(4)Mashup的广泛应用使REST安全性降低。不同API聚集使安全风险升高,向Mashup添加新工件或数据源会增加安全漏洞,不同API之间的匿名请求可能存在安全隐患;同源策略无法给予网络保护。
通过对REST架构和常见安全隐患的分析发现,与REST密切相关的安全问题包括注入攻击、跨站脚本攻击、跨站请求伪造和会话固定攻击等。其中跨站脚本攻击、注入式攻击在发生时有一个共同点,即攻击者都是通过伪造URL参数或输入数据来实现对基于REST的应用程序的攻击;另外,中断认证和会话固定以及跨站脚本伪造等攻击手段都是通过与服务器传递给用户的会话ID实现的,而很多基于REST应用的会话ID都会保存在cookie中,所以,会话类攻击可以通过对cookie进行处理加以防范。
2 安全对策研究
本文采取的防范策略结构如图1所示。
图1 策略方案基本框架结构
2.1 注入式攻击的安全策略
(1)参数化查询。设计与数据库链接或访问数据时,使用参数给的值填入需要添加的地方,这样就将执行代码与数据分离。(2)输入信息检测。输入信息检测会在服务器与用户端进行,用户端会检测用户输入信息,服务器端则检测HTTP请求头中的Content-Type、Host、Content-Length等信息,以及报文体的用户输入信息,检测输入的格式、地址、长度等。为确保检测效果,本文采用客户端和服务器端双重检测的策略。(3)屏蔽返回的出错信息。输入错误时,响应报文要使浏览器只显示一种错误信息。(4)过滤危险字符。服务器端要过滤掉敏感字符,同时可使用白名单机制,只允许名单内的用户通过。
2.2 跨站脚本攻击的安全策略
(1)对输入进行验证。可在服务器与用户端进行,检测的内容与注入式攻击的检测相似,除了检测HTTP请求头中的Content-Type、Host、Content-Length等信息外,服务器端还要检测报文体中用户输入的语法。(2)对输出进行检查并指定编码方式。字符串过滤过程中API需要把过滤规则和数据库及前台共享。对输出进行编码必不可少,HTTP响应报文头的charset对此做了规定。(3)对字符串过滤。本文采用白名单机制,也就是只允许指定语法的输入信息通过,这样对安全性更有保障。
2.3 跨站请求伪造攻击的安全策略
(1)会话超时机制。浏览器与服务器建立通信时不使用长连接,使HTTP请求与响应报文的Connection项是close状态。(2)同步令牌机制。典型的是使用一次性令牌策略,要求服务器对每个响应报文都重新发送会话令牌Set-Cookie。(3)双向认证机制。检测报文体的用户输入,发现相关事务会要求用户端的再次确认。(4)挑战应答机制。需要服务器端增加挑战应答引擎,在响应报文中增加一项给用户传送“挑战”字符串,用户的请求报文也要增加一项“应答”字符串。(5)验证请求来源。就是验证HTTP请求报文头的Referer字段。
2.4 会话固定攻击的安全策略
(1)拒绝用户指定会话标识。即Cookie项由服务器端赋值,通过响应报文的Set-Cookie进行赋值。(2)使用更安全的会话标识。要求服务器产生Set-Cookie项的引擎更加强大,使用更复杂的算法产生更难破解的随机数。(3)会话标识绑定网络地址。要求Set-Cookie项与用户的IP地址相关,服务器端要增加一个检测会话标识与IP地址相关度的引擎。
3 检测系统及仿真实验
3.1 对注入式攻击的检测
本文使用SQL injection中的1‘or’1‘=’1方式来演示注入式攻击,这里注入下列攻击代码:Fei' OR '1'='1。
系统检测到敏感字段,发出注入式攻击的警报并生成日志对这次攻击进行了记录,如图2所示。采用本文的REST安全模型,系统对用户进行输入检测及过滤并使用参数化查询等策略有效防范了这次攻击。
图2 SQL注入攻击警报检测记录
3.2 对XSS攻击的检测
本文使用存储型XSS攻击,在页面代码中添加一个恶意的JavaScript脚本,被攻击者在点击被注入的脚本时浏览器执行脚本中的恶意代码,完成XSS攻击。示例演示通过恶意脚本获取被攻击用户的cookie,添加的脚本代码为:
系统在检测到敏感字段后产生的XSS攻击记录如图3所示。
图3 XSS攻击检测记录
3.3 对CSRF攻击的检测
对CSRF攻击检测示例中攻击者编写一个带恶意请求的HTML文件,例如恶意请求为转移5000资金,在REST中具体实现的过程是先创建一个转账交易资源transferFunds,然后加入参数。本文采用如下代码:
被攻击者通过验证产生cookie,攻击者利用上面的恶意请求使用此cookie访问信任网站,实现转移资金的操作,完成CSRF攻击。系统检测到输入会造成CSRF攻击产生的记录,同时系统发出警报,如图4所示。系统采用会话超时机制、令牌同步机制、双向认证机制策略有效防范了这种攻击。
图4 CSRF攻击检测记录
3.4 对会话固定攻击的检测
对会话固定攻击的检测里攻击者在邮件中加入如下代码:
其中SID表示要被用来固定的会话令牌,服务器端通过rewrite规则实现REST风格。收信者按照邮件的链接登录基于REST应用后,攻击者得到收信者的权限,实施会话固定攻击。系统采用会话超时机制、令牌同步机制、双向认证机制策略避免这种攻击。
检测结果表明本系统能有效识别并防范注入式攻击、XSS攻击、CSRF攻击及会话固定攻击等REST常见安全问题,同时能给出详细攻击信息。
4 结束语
本文通过对REST安全性的分析与总结,找出REST常见的安全问题及可以使用的安全策略。建立了REST安全检测系统,并通过攻击演示证明系统的可用性。测试结果表明,采用本文的安全检测系统能有效检测并防御REST常见安全问题。下一步的工作是增强系统检测库的自我学习能力,使其能自主分析问题,更新检测规则,提高检测效率。同时提出更高效的实现机制,并且通过仿真过程验证系统的科学性、算法的复杂度、实现机制的可行性。
[1]冯新扬,沈建京.REST和RPC:两种Web服务架构风格比较分析[J].小型微型计算机系统,2010,12(7):1393-1395.
[2]Joe Gregorio. REST and WS[OL]. http://bitworking.org/news/125/REST-and-WS,2007.
[3]Pete Soderling, Chris Comerford. Why REST Security Doesn’t Exist(and What to Do About It)[C]. RSA CONFERENCE ,2010.
[4]陈 磊. REST的真谛[J].软件世界,2007(17).