CSRF-Scanner——打造全自动检测CSRF漏洞利器

        CSRF(Cross-site request forgery跨站请求伪造)通常缩写为CSRF或者XSRF。CSRF使黑客可以冒充合法用户的身份,使合法用户在不知情的情况下触发如金融支付,发表 微博等危险操作,并可直接导致蠕虫,危害巨大,从2007年至今,CSRF漏洞已连续几年位于OWASP统计的十大Web安全漏洞前列。
        攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。举一个简单的例子,例如:用户A在自己的博客站点中写了一篇文章C,用户B在回复中贴了一张 图,在贴图的URL中写入删除文章C的链接,当A看见这张图片的时候,文章C便被不知不觉间删除了。这就是CSRF攻击了。

2.业界现有CSRF检测技术

2.1业界现有的技术方案
        目前对于csrf的检测,业界还没有成熟有效的工具,唯一的一款比较有名的检测工具是由开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)发布的Csrftester,该工具仅支持简单的对页面所提交的表单信息进行抓取,然后由用户人工地进行修改该数据来确定是否存在 csrf漏洞,效率低下,无法适应互联网海量CGI漏洞检测的需求。
        而其他的扫描器只能半自动发现,但误报极高,例如著名的awvs对csrf扫描的逻辑就比较简单,导致误报率很高。所以,业界一直缺少一个自动的和高准确率的csrf检测工具。

2.2业界现有技术的缺点
 1)、不支持自动csrf漏洞检测;
 2)、误报率很高。

3.创新的CSRF检测技术
        针对近期外部报告的大量csrf漏洞,为快速地解决当前面临的问题,腾讯安全团队自研了一款全自动检测csrf漏洞的工具——CsrfScanner,主 要检测基础数据库中的存在的漏洞。csrf产生危险的核心就是利用的他人的cookie来进行有敏感的操作,区别对待带cookie和不带cookie两种情况是扫描器的检测逻辑的关键点<有些动作需要带上cookie,有些不需要>。CsrfScanner的检测步骤如下:
        1)、不带cooie访问页面得到表单form1。
        2)、带cookie访问页面得到表单form2。
        3)、判断form1与form2是否为同一个表单,如果不是则转到步骤4。这是因为要取出能利用cookie的form。
        4)、判断form2是否存在token、g_tk等字样,如果不存在,则转到步骤5;否则,则说明该指向的cgi有极大的可能做了csrf防御,为了降低误报率,应过滤掉。
        5)、判断form2是否存在search、login等黑名单字样,如果存在,则转到步骤6;否则,则说明该指向的cgi有极大的可能不存在敏感性,为了减低误报率,应过滤掉。
        6)、判断form2是否存在保存、修改,提交等白名单字样,如果存在,则说明该form2所指向的cgi具有相当的敏感性,因此检测出该指向的cgi存在csrf漏洞。

   

        CsrfScanner的主要是使用C++开发,使用qtwebkit库在返回的html内容中解析出尽可能多的form即将js动态生成的form也能显示出来。
        以下是CsrfScanner所检测出的漏洞及其利用截图,此为公司微博业务存在CSRF漏洞,可以导致黑客任意创建微活动并导致蠕虫:

A.用户原本是没有创建微活动的
 

B. CsrfScanner检测出微活动创建的cgi存在csrf漏洞
 

据此编写出poc,并挂在站点:http://hacker.com
 

C.黑客向用户发送一个http://hacker.com的链接,用户在点击之后,便不知不觉间创建了名为http://hacker.com的微活动。
 

 D.用户的好友看见此活动后,又去点击链接http://hacker.com,再度被欺骗性地发起同样的微活动,于是便导致微博蠕虫的泛滥,后果非常严重。

4.效果
        csrf漏洞的自动检测一直是业界的技术难点,到目前也没有很好的解决方案,所以一直是我们的扫描器中未覆盖的漏洞类型。而csrf漏洞的数量在tsrc上一直占据前3位。图4-1为7月的tsrc上的漏洞情况,其中csrf有65个,占据了第一位。
 

        自CsrfScanner在7月20日上线后,共发现数千个cgi、数百个域名存在漏洞,误报率低于20%。其中包括discuz, 微博,邮箱等多个重要业务,tsrc上每月仅有个位数的csrf漏洞,较7月的数十个外报有明显收敛。

5.后续
        目前腾讯安全团队已经设计出新的csrf漏洞检测方案来进一步提升CsrfScanner的检测能力。简单的说,该方案通过使用webkit内 核hook住敏感的请求在该请求中检测token是否存在来判断是否存在csrf漏洞,正在排期完成。该方案的增强点主要在
        1)、覆盖form以外的csrf漏洞检测,提供更广的检测宽度
        2)、更高精度的检测
        3)、通过hook每一个敏感请求,能准确定位漏洞的原因