攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。举一个简单的例子,例如:用户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每一个敏感请求,能准确定位漏洞的原因