来自德国Saarland University和SAP SE公司的研究人员Giancarlo Pellegrino等提出一种用动态分析和属性图来检测CSRF攻击的工具——Deemon 。
与XSS,SQL注入相比,针对CSRF的研究较少,目前主流的CSRF检测还是以手动为主。但是,Gmail、Netflix、Google、Skype等主流网站都发现过CSRF漏洞,CSRF漏洞的利用导致用户财产损失、账户被接管、远程命令执行等。
CSRF 是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端
Session 的网站,因为 Session ID 也是大多保存在 cookie
里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie
的浏览器端)发起用户所不知道的请求。
要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1.登录受信任网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。
Deemon对操作行为进行动态追踪和特征图分析的方法进行CSRF攻击检测。
Deemon关键部分
监测程序执行过程的状态变换和数据流信息,包括网络交互、服务端执行和数据库操作;
用property graph的边来代表不同模型之间的关系;
用图的遍历来找出与安全相关的状态变化;
增强web应用的执行环境,然后复制用户动作来监测服务端程序的执行;
利用虚拟环境来测试web应用。
Deemon的检测过程
Deemon的输入是用户动作的集合,包括鼠标点击、HTML表单提交等。经过检测, 会输出一个漏洞报告,列出可能会被用来执行CSRF攻击的状态发生变化的HTTP请求。
对web应用的测试流程如下:
如果HTTP请求含有anti-CSRF参数,就生成一个不含该参数的HTTP请求;
如果HTTP请求不含有anti-CSRF参数,那么就生成一个抓取的HTTP请求;
两种请求中,都通过重放用户的登录动作来更新请求的session cookie。
研究人员用Deemon测试了10个主流的开源web应用,并检测到29个安全相关的状态改变请求,其中17个属于CSRF漏洞,(其中14个之前未被发现)。
目前的Deemon版本支持检测使用MySQL数据库的PHP web应用,随后的版本会支持其他程序语言和数据库。
Deemon git地址:https://github.com/tgianko/deemon/
参考来源:https://arxiv.org/pdf/1708.08786.pdf
本文作者:ang010ela 转自Freebuf