基于Web会话管理漏洞检测技术的研究
2019-03-11谢品章曾德生庞双龙
谢品章 曾德生 庞双龙
摘要:WEB会话管理涵盖了从登录到离开WEB应用程序的所有用户控制,在提高应用的易用性和友好性方面发挥了重要作用,同时也增加了在无须提供正确凭证就能非法访问WEB应用程序的风险。本文首先对WEB会话管理漏洞进行详细分析,针对不同类型的WEB会话管理漏洞设计相对应的检测方法,并在此基础上提出WEB会话管理漏洞的防范措施。
关键词:Web安全;会话管理;漏洞检测;防范措施
0引言
HTTP是一种无状态协议。WEB服务器并不需要关联客户端请求就会做出响应。为了避免不断地认证网站或者服务的每一个页面。WEB应用程序通常采用某种会话管理机制将多个客户端请求关联起来组成一个“会话”,每个会话使用一个会话标识符或者Cookie来标识。通过在预先确定的时间范围内存储和验证其会话凭证,实现对网站用户交互方式的控制,会话管理涵盖了从登录到离开WEB应用程序的所有用户控制,在提高应用的易用性和用户的友好性方面发挥了重要作用,同时也增加了在无须提供正确凭证的情况下进入用户账号。非法访问WEB应用程序的安全风险。
大多数的WEB应用程序都是通过Cookie来关联一个会话中的多个请求,RFC6265文档对这一方法给出了详细的说明。一个典型的应用例子就是在线购物车,整个用户会话期间,WEB应用程序必须跟踪用户身份、个人信息以及选择购买的产品、数量、单价、折扣等信息,这些信息存储在Cookie中。WEB应用程序在HTTP应答中使用SET-COOKIE指令来创建相关的Cookie。当WEB应用程序指示客户端浏览器使用某个Cookie后,浏览器就会在以后的每个请求中发送该Cookie。由于Cookie中的数据非常重要,如果会话管理存在漏洞,则可能导致用户会话被劫持。利用当前活动会话非法进入用户账号,获得访问WEB应用程序的权限,在未经授权的情况下实施非法操作。
会话管理漏洞在2010年的OWASP TOP 10中排名第三,而在2013年的OWASP TOP 10中排名第二,说明会话管理攻击事件在不断增加,安全风险在上升。本文对WEB会话管理漏洞进行了详细分析,然后提出WEB会话管理漏洞的检测方法,最后针对该漏洞提出一些防范措施。
1 Web会话管理漏洞分析
会话管理漏洞主要是由于WEB应用程序的会话管理缺陷。Cookie属性设置不当等原因造成的。例如:
(1)WEB应用程序或客户端使用非加密信道传送Cookie,攻击者通过网络监听,非法获取Cookie,导致Cookie内容泄露或者被篡改。
(2)WEB应用程序的会话ID生成算法缺乏足够的随机性,攻击者通过逆向分析,伪造一个有效的Cookie,实施未授权的非法访问。
(3)WEB应用程序在会话中使用了固定的会话ID,攻击者通过会话劫持攻击,假冒合法用户绕过WEB应用程序的身份认证机制,非法进入该用户账户。
(4)Cookie属性设置不当,导致Cookie属性设置漏洞,为攻击者提高了攻击Cookie的机会。
(5)WEB应用程序提供了不安全的请求方法,允许客户端使用GET请求来传送Cookie。与POST请求的方法相比,GET请求方法容易被操控,引发安全风险。
会话管理的攻击方法主要有Cookie篡改、Cookie溢出、会话劫持、跨站请求伪造等。
1.1 COOKIE篡改攻击
Cookie篡改攻击一般采用如下步骤:
(1)Cookie收集。收集足够数量的COOKIE样本。
(2)Cookie逆向分析。分析会话ID生成算法。
(3)Cookie伪造。当加密的Cookie被第三方获取,并通过密文分析、暴力破解等方式获取了相应的加密密鑰,第三方就可以伪造Cookie,获得访问WEB应用程序的权限,实施非法操作。
攻击者一旦从Cookie中得到足够多的用户信息,就能够对Cookie内容进行篡改。例如:移动电信运营商用户通过互联网发送彩信消息,在身份认证过程结束后,在Cookie中包含了发件人的电话号码,这个Cookie是服务收费程序用来识别用户的。如果攻击者得到电话号码以明文方式存储的,并且没有任何保护,则可以将Cookie中的电话号码改成攻击者的电话号码,那么被攻击者将会为攻击者支付彩信的费用。
1.2COOKIE欺骗攻击
由于在Cookie中存在用户的敏感信息,所以开发者往往采用MD5对Cookie内容进行加密处理,即使攻击者获得了Cookie也很难破解其中的内容。但在某种情况下。攻击者并不需要知道Cookie的明文内容,就可以采用Cookie欺骗的方式进行攻击,将截获的Cookie提交给服务器,从而假冒他人的身份登录到网站。
实施Cookie欺骗攻击的前提条件是服务器的验证程序存在漏洞,并且攻击者能够获得被假冒者的Cookie信息。网站的验证程序要验证所有的非法登录是非常困难的,并且编写验证程序的语言也可能存在漏洞。获得他人的Cookie信息比较容易,下面是利用PHP脚本语言编写的用于收集Cookie的程序代码:
攻击者把以上代码放到论坛里,并附上让人感兴趣的话题。吸引大家点击浏览,这样就可以收集到大量的Cookie,攻击者利用这些信息尝试提交给服务器验证。如果服务器验证成功。就可以成功登录到该网站。
1.3 会话固定漏洞攻击
会话固定(Session Fixation)漏洞是指WEB应用程序没有废止当前会话ID,而是继续使用同一个会话ID来认证其它用户身份,导致会话劫持攻击。攻击者在WEB应用程序上创建一个新的会话并记录相关的会话ID,当一个用户使用同一个会话ID通过了WEB应用程序的身份认证后。攻击者就有可能利用当前的活动会话进入该用户账户,假冒该用户非法访问WEB应用程序。
1.4 URL重写
WEB应用程序支持URL重写,将用户的会话ID直接放在URL中返回给用户。如果用户不小心泄露了该URL,则会导致会话ID泄露和被恶意利用。
例如。一个网站的机票预订程序支持URL重写,将用户的会话ID直接放在URL中返回给用户,即:
http://www.xxxx.com/ex:Isessionid:2POc2JDXMDOOSQXIEMDPSSDNXSHCJKJVMSL?dest=huawei
该网站一个用户通过认证,该用户想通知朋友知道机票打折信息,于是将这个链接发给朋友,但该用户并不知道已经泄露了自己的会话ID。当该用户的朋友点击该链接时,将会使用该用户的会话登录这个网站,并可以恶意消费该用户的信用卡。
1.5 CSRF攻击
跨站请求伪造(CSRF)是一种恶意利用网站的攻击方式。从字面来看,跨站请求伪造与跨站脚本有些相似,然而二者是两种不同的攻击方式。XSS攻击的对象是网站用户。而CSRF攻击的对象则是网站或者WEB应用程序。与XSS攻击相比,CSRF攻击更难防范,比XSS攻击更具危险性。
CSRF攻击主要通过在用户访问的页面包含恶意链接或者脚本的方式来实施。假设一个用户使用GET请求来访问一个网站,如果该用户通过了网站WEB应用程序身份验证,则下次提交的GET请求可以由如下的用户来产生。
(1)由实际使用WEB应用程序的用户来产生。
(2)由直接在浏览器输入URL的用户来产生。
(3)由使用外部链接访问网站的用户来产生。
由于WEB应用程序无法判断由谁产生的GET请求,因此攻击者可以利用这一特征来实施跨站请求伪造攻击。攻击者首先将一个执行恶意操作的外部链接通过嵌入在一个电子邮件、图片、或者网站等形式发布出来,引诱用户点击。如果一个通过了WEB身份验证的用户点击了该链接。则浏览器就会向WEB应用程序发出包含该用户Cookie的GET请求,由于该用户的Cookie是有效的,因此WEB就会执行该外部链接所规定的操作,导致跨站请求伪造攻击。
1.6 隐私信息泄露
跨站Cookie和超级Cookie的存在,可能导致用户隐私信息泄露。
1.6.1 跨站Cookie
由于Cookie的敏感性,使Cookie具有专属性质,即A网站存在Cookie中的信息,B网站是没有权限直接获取的。然而,一些第三方广告联盟的代码使用范围非常广,这就可能通过第三方广告代码形成跨站Cookie。例如,A网站和B网站都使用了同一家第三方广告代码,如果用户首先在A网站搜索了一个“心脏病”关键词,然后再去访问B网站,第三方广告代码就可以从Cookie中获取到用户在A网站的搜索行为。在用户浏览器上就会即刻出现治疗心脏病的广告信息,虽然实现了精准投放广告,但是未经用户同意,对用户的隐私构成了侵犯,造成用户隐私信息泄露。
1.6.2 超级Cookie
超级Cookie存在于某些浏览器中,如Mozilla、谷歌Chrome、苹果IOS浏览器等,能够在浏览器隐私模式下执行普通会话,导致浏览器隐私模式的失效。IE浏览器不存在这种问题,因为IE浏览器内部并没有提供对特殊操作的记忆功能。例如,用户在浏览器地址栏使用前缀https://,对某个网站的通信进行加密保护。一些浏览器对此进行记忆,保存一个“超级Cookie”,当用户下次访问该网站时,浏览器会自动进入HTTPS通道,即使用户在浏览器设置了隐私模式,禁用了Cookie,但是这个超级Cookie依然存在。
2 Web会话管理漏洞检测
会话管理漏洞主要是由于WEB应用程序的会話管理缺陷和Cookie属性设置不当等原因造成的,通常采用动态检测技术来检测会话管理漏洞。检测系统由两部分组成:检测主机和被检测网站。两者之间通过网络连接起来,在检测主机运行检测程序,对被测网站进行测试:在被测网站上运行WEB服务器及应用程序,图1是会话管理漏洞检测系统模型。
动态检测方法的一般步骤如下:
(1)Cookie获取。根据测试项目,检测主机采用GET或者POS了请求方法向被测网站发出HTTP请求包。
(2)Cookie分析。对被测网站返回的Cookie信息进行分析,确定是否存在相应的漏洞,给出检测结果。
2.1 COOKIE属性设置漏洞检测
分析被测网站返回的Cookie,对Cookie属性设置进行逐项检测,检查是否存在Cookie属性设置漏洞,即:
(1)Seetlre属性。检查是否使用安全方式来传送含有敏感信息或会话ID的Cookie。例如,当登录WEB应用程序后,应用程序在Cookie中设置了会话ID。检测是否设置了secure属性,如果没有设置,则存在Cookie信息泄露风险。
(2)HTTP OnlY属性。检查是否设置了HTTPOnly属性,如果没有设置,则存在客户端脚本利用该Cookie进行攻击的风险。
(3)Domain属性。检查Domain设置情况,应该将其设置为需要接收该Cookie的服务器。例如,如果WEB应用程序存储在app.myweb.con服务器上,则应该设置成“Domain=app.myweb.con”,而不能设置成“”,因为这种设置允许其它存在漏洞的服务器接收到Cookie。
(4)Path属性。检查PATH属性,如果PATH是设置在根目录“/”下,则同样允许其它存在漏洞的WEB应用程序接收该Cookie。例如,如果WEB应用程序存储在“/myapp/”目录,则Cookie路径应设置为“path=/myapp/”,而不能设置为“path=/”或“path=/myapp”。
(5)Expires属性。检查Expires属性情况,如果该属性设置成一个未来的截止日期,则需要确认该Cookie不包含任何敏感信息,否则有权读取这个Cookie的用户就有可能在截止日期前通过重复提交这个Cookie进入WEB应用程序。
2.2 会话固定漏洞检测
会话固定漏洞检测方法如下:
(1)向被测试网站(例如:www.xxxx.con)发送get请求:
GET www.xxxx.com
(2)被测试网站响应如下信息:
从网站服务器响应的信息可知,WEB应用程序为客户建立了一个新的会话ID:JSESSIONID=CD7F8599FDD1BB09FDB2F9DFF3276EA2.jvm_0.
(3)利用POST方法向WEB服务器提交身份认证请求:
利用POST方法提交身份认证成功之后,从WEB响应的信息可知,WEB服务器并没有重新产生新的会话ID,因此,存在会话固定漏洞。攻击者利用这种漏洞就可以实施会话劫持攻击。假冒该用户进行各种非法操作。
2.3 CSRF漏洞检测
CSRF漏洞检测方案如下:
(1)使用U代表被测URL,例如,U=http=www.mytest.com/action.
(2)建立一个包含URL的HTTP请求的HTML页面,并列出所有相关参数。如果使用GET请求方法,则可以直接完成,如果使用POST請求方法,则需要通过JavaScfpt脚本来完成。
(3)确保有效的用户能够登陆到WEB应用程序。
(4)模拟用户点击到一个指向被测网站的链接。
(5)检查被测网站是否执行了所指定的操作。
2.4 请求方法弱点检测
由于GET请求方法容易被操控,存在安全弱点,因此在传输Cookie时,最好使用POST请求。虽然POST请求可以通过JavaScript脚本等手段来模拟,但是增加了攻击的难度。
请求方法弱点检测是对使用POST请求方法传送数据的WEB程序进行检测,检查WEB应用程序是否接受通过GET请求方法传送的数据。
例如:一个WEB登陆产生如下的POST请求:
根据以上POST请求信息,经过修改后采用GET方法提交请求,直接在浏览器地址栏输入如下内容:
http://www.xxxx.com/denglu.php?name=xiaoli&password=xiel23456&SessionID=987654321
如果能够成功登陆,说明该WEB程序存在安全漏洞,容易被攻击者利用。
3 Web会话管理漏洞防范
由于WEB应用程序的会话管理缺陷,以及Cookie属性设置不当等原因导致产生会话漏洞。因此需要从正确使用会话管理功能,合理设置Cookie属性等方面提高会话管理的安全性,防止攻击者利用会话管理漏洞实施攻击。可以采用如下防范措施:
(1)Web应用程序和客户端应避免使用非加密信道传送Cookie,防止攻击者通过网络监听来获取Cookie,导致Cookie内容泄露。
(2)应避免使用缺乏足够随机性的会话ID生成算法,防止攻击者通过逆向分析来伪造Cookie。
(3)避免使用固定的会话,防止攻击者利用固定会话漏洞实施会话劫持攻击。
(4)正确设置Cookie属性对Cookie进行保护,防止攻击者利用Cookie属性设置漏洞实施Cookie攻击。
(5)避免使用GET请求方法来传送Cookie,防止攻击者利用GET请求来实施攻击。
(6)避免使用持久性Cookie,尽量使用一次性Cookie,使Cookie只在当前活动会话中有效,并设置合理的Cookie有效期,浏览器应当及时删除过期的Cookie。
(7)不要在URL错误信息或者日志中暴露会话ID,会话ID应当只出现在HTTP Cookie头信息中,不要以GET参数来传递会话ID。
(8)通过在每个请求或者每个会话中使用强制随机令牌或者参数,为敏感或者关键的操作提供标准的会话管理。
(9)在身份认证时,如果连接从HTTP变为HTTPS,则应当生成一个新的会话ID。在WEB应用程序中,推荐持续使用HTTPS而并非在HTTP和HTTPS之间切换使用。
(10)禁止连续的登录并强制执行周期性的会话终止。即使是活动的会话,特别是对于支持网络连接或者连接到关键系统的WEB应用程序。终止时间应当根据业务需求做适当的调整。
(11)将Cookie设置为HTTP only属性。除非在WEB应用程序中明确要求客户端脚本程序读取或者设置Cookie的值。
4 结束语
本文介绍了WEB会话在实际应用中的作用。详细分析了会话管理漏洞产生的原因以及利用会话漏洞实施攻击的各种手段:提出了由于不同原因造成的会话漏洞的检测方法:最后给出一些防范WEB会话管理漏洞的建议。通过以上的分析与研究,为下一步对WEB安全的学习打下基础,指明方向。