APP下载

HTML5的CSRF攻击与防御技术研究

2021-11-01李立原建伟

微型电脑应用 2021年10期
关键词:攻击者浏览器代码

李立, 原建伟

(陕西工业职业技术学院 信息工程学院, 陕西 咸阳 712000)

0 引言

HTML5J技术作为Web平台标准,基于HTML5的Web急剧增加,在丰富了Web应用的同时,导致网络攻击量增大,安全性下降[1]。相较于XSS方式,CSRF(Cross-Site Request Forgey,跨站请求伪造)攻击流程程度低,对应的防御资源和措施相对较少,导致CSRF攻击难以防范,造成很大的危害[2]。目前针对CSRF攻击的防御进行了多角度研究[3],如利用Rational AppScan工具和检测技术实现对CSRF漏洞的检测,并提出基于CSRF攻击的防御手段[4];通过添在地址中加入token[5],对HTTP头添加自定义属性来实现对CSRF攻击的有效防御。

本文在相关研究的基础上,通过建立Web服务器和HTML5环境来验证HTML5受到CSRF攻击全过程,并提出相应的CSRF漏洞检测和防御方式。

1 HTML5的CSRF攻击验证

1.1 HTML5的CSRF 攻击原理

HTML5是互联网应用领域的一种应用技术,其中涵盖了各种API函数,通过完善的CSS3使得Web前端更加活跃。基于HTML5的应用程序能够在任何浏览器上运行,但也带来了针对该程序的攻击方式。当登录HTML5站点时,要求进行身份验证。通常,Web通过Cookie方式记录用户认证信息,当用户重复登录该Web时,浏览器将携带了该用户先前的认证信息放入HTTP头部并一同发送至服务器,避免了二次认证。而用户认证信息一旦被恶意控制,则攻击者往往利用认证执行恶意操作,从而受到CSRF攻击,CSRF攻击程序图如图1所示。

图1 CSRF攻击基本原理图

当用户需认证可信任的Web时,用户通过浏览器向Web站点A发送请求,服务器接收请求并认证用户合法性,如果是,则将包含用户认证信息的Cookie发送至浏览器,完成身份认证。服务器收到会话请求,添加为可信任站点,当浏览器向站点A发送请求,经确认发现已通过用户的认证请求,则执行动作。攻击者获得可信站点信息后,在站点B构建页面,让用户在站点B执行操作,攻击者代码让用户执行一些恶意操作,浏览器接收到Cookie信息协同恶意攻击代码发送至站点B,即完成了一次CSRF攻击。

1.2 HTML5的CSRF攻击验证

在HTML5的Web完成一次CSRF攻击时,攻击者往往伪造特定路径通过程序实现攻击,其中包括同源策略、跨域资源共享的安全策略、Cookies机制的P3P头机制等。同源策略作为最基本单圈策略,是采用动态脚本对相同的协议、端口的HTTP应答;跨域资源共享的安全策略为程序开发提供跨域请求许可,通过服务器和浏览器相互协商进行判定,同时支持HTTP请求。Cookie安全策略是用户输入一次认证信息后,服务器记录用户认证信息和HTTP状态信息,生成Cookie,并保存在浏览器中,当用户再次登录时,只需在HTTP请求头部带上Cookie一并发送服务器完成用户认证。P3P策略是基于用户隐私角度指定的相关标准,标识目标网站Cookie能否被其他域加载。

从上述分析可以看出,同源策略限制了来自不同域的访问请求,但并未限制不同域的用户通过GET或POST方向Web站点提交信息。在HTML5中,一些标签均带有“src”属性标签,仅能发送GET请求,而对于多数Web应用程序来讲,多数开发者并未严格区分POST请求和GET请求,在数据提交过程中也并未按照POST方式提交。因此,攻击者可用GET请求表单提交地址进行CSRF攻击。

以一个模拟隐患网站Back为例,采用MySQL 5.5搭建PHP服务器,建立转账功能页面www.Back.com/transfer.html。假设采用GET方式提交转账信息,通过URL:http://www.Bank.com/Transfer.php?AccountId=11&number=1000将转账请求提交给服务器。当攻击者掌握相关参数时通过伪造相同的URL并放入攻击网站的页面Attck_GET.html中等待用户执行。攻击者利用社交手段将攻击页面Attck_GET.html的URL发送给攻击者,执行攻击页面。攻击者构造的页面Attck_GET.html代码,如图2所示。

图2 页面 Attck_GET.html 的代码

图3 GET 完成的 CSRF 攻击

在HTML5中,CORS机制下的XML HttpRequst请求通过跨域XHR-2API完成,HTTP向服务器发送的请求源信息被包含在生成的Origin头部中,因而不需要对现有的浏览器保护程序修改。由浏览器发起对XMLHttpRquest请求检验是否符合COSR安全规范用来保护合法性。然而当重新定义XHR-2对象时,将对象的setRequestHeander设置为“ Content-type ”,设置属性“WithCredentials”值为“ture”,浏览器的预检机制处于待机状态,此时Cookie重播,发生CSRF攻击。

如在一个论坛站点 www.discuss.com,注册用户可通过 www.discuss.com/post.php发帖,具体内容保存在后台数据库,当Bob用户登录时,服务器将携带的登录信息发送至浏览器,允许发帖。Bob发帖后,将内容存储在后台名为CSRF数据库的Postmessage数据表,并设计一个check.php页面来查看数据库增加的内容。用户登录后,利用页面show.php查看发帖内容,并可删除帖子。

当攻击者掌握页面相关参数后,在www.csrf.com构造 attack_del.html页面,利用一个XHR-2对象将域www.discuss.com 上用户Bob帖子删除。即通过XHR-2对象http跨域向页面show.php发出请求。当attack_del.html页面发出跨域请求时,浏览器将Cookie信息加载到HTTP请求头部并向服务器发送请求,服务器鉴别合法用户发送的请求,执行删贴操作。attack_del.html页面代码,如图4所示。

图4 页面 attck_del.html 的代码

2 HTML5 的 CSRF 攻击的检测与防御

2.1 HTML5的CSRF攻击检测

由于CSRF攻击流程程度较低,因而Web程序员容易忽视CSRF的安全问题。本节从CSRF漏洞检测入手,采用自动和手动方式进行CSRF攻击的检测。

AppScan作为目前流行的网络安全检测工具,能从代码和产品方面进行安全检测。采用Rational AppScan测试时,通过向被检测地址发送两次请求。第一次请求后退出登录,第二次请求时,若没有CSRF漏洞或进行了CSRF漏洞防范,由于AppScan检测是在两个不同的Session中对目标资源的操作,因此两次请求返回结果不同。Rational AppScan工作示意图,如图5所示。

图5 Rational AppScan工作示意图

实际上,由于一个Web中存在大量URL,因此,首先采用Rational AppScan进行全路径覆盖检测,保证路径测试能够覆盖Web应用的每一个路径。同时利用手动检测CSRF漏洞,对一些静态资源有DELETE/PUT操作下进行测试,针对GET请求来删除数据库记录情况下,在维持一个服务器连接下,输入浏览器地址,当ID号为“0”时页面被删除,CSRF进行攻击,表明URL没有任何CSRF保护。

2.2 基于 HTML5 的 CSRF 的防御

2.2.1 验证码验证

当用户与服务器信息交互时,要求用户同时填写随机字符串验证码,并对其检测[13]。CSRF往往在用户不知情下强制让用户与应用执行交互操作,因而由攻击者伪造的请求能被用户发现,有效避开了CSRF的攻击,根据代码生成的验证码代码如图6所示。

图6 验证码预防CSRF攻击

验证码验证方法使得用户和应用间频繁交互,降低了用户体验度。同时,由于验证图片使用中存在类似的MHTML缺陷,对一些版本IE功能造成影响,因此,验证码进行预防CSRF攻击中更多的是作为一种辅助手段。

2.2.2 验证HTTP Referer字段

当用户访问一个受限制地址时,需要登录该网站才能浏览该网址资源,通常一个请求的Referer值为受限制资源的URL,但攻击者通过CSRF攻击时,发起请求的Referer为本身的URL,因此,可通过验证Referer值抵御CSRF攻击。浏览器域名中采用discuss.com的Referer值开头作为合法请求,则跟进响应,否则拒绝请求,防止外部链接请求的代码如图7所示。

图7 验证HTTP Referer字段攻击

图中函数strncnmp()检测访问页面与设定页面Referer是否一致,若一致,则该请求为合法页面发出的请求,受理POST请求,可执行访问和删除操作,否则为不合法请求,直接清除该POST请求。

2.2.3 请求中添加token

攻击者发送CSRF攻击时,通过猜测来获取部分重要操作参数,要有效地预防CSRF攻击,关键是在一个关键点放入不能伪造的随机数,即加入token,并在服务器端建立相应的拦截器对token进行过认证。一旦请求中为发现该token或token错误,则认为是非法请求而拒绝。token通过如下代码引入:$tokenvalue=md5(uniqid(rand(), true))。服务器登录建立token,放入会话Session中,当每次发出请求时,则从Session中提取token,并与请求携带的token比较,如果相互匹配,则执行请求。在页面中加入token的设计代码,如图8所示。

图8 页面嵌入token代码

实际执行中,一个站点往往存在多个地方接受form请求,因此将token以参数形式加入每一个请求者中并不显示,通常在每次页面加载时,用脚本遍历DOM树,将token加入到

标签,因而解决了大部分请求,对于一部分不能添加token的问题,可通过手动编写相关应用来添加token。

3 总结

本文建立了Web服务器和HTML5环境,对HTML5收到的CSRF攻击全过程进行分析。通过在服务器搭建模拟服务,构建攻击脚本来验证GET、POST方式突破同源策略限制进行CSRF攻击,并运用监本验证验证了CORS存在的安全漏洞实现攻击。针对HTML5下的CSRF攻击,提出了采用Rational AppScan进行CSRF漏洞检测,并在此基础上,提出利用验证码验证、验证HTTP Referer字段、添加token方式进行CSRF防御,在很大程度抵御大部分CSRF的攻击。当实际执行过程中,需要结合相关情况选定合适的防御策略来降低CSRF的危害。

猜你喜欢

攻击者浏览器代码
机动能力受限的目标-攻击-防御定性微分对策
微软发布新Edge浏览器预览版下载换装Chrome内核
反浏览器指纹追踪
创世代码
创世代码
创世代码
创世代码
正面迎接批判
有限次重复博弈下的网络攻击行为研究
浏览器