什么是CSRF攻击?
跨站点请求伪造是一种攻击,在这种攻击中,对手可以代表受害用户提交恶意请求。在具有跨站点请求伪造(CSRF)漏洞的应用程序中,恶意用户可以提交未经授权的命令,因为应用程序信任源用户帐户。CSRF攻击也被称为会话骑乘、XSRF、会话固定、恶意链接或一键式攻击,主要针对导致服务器状态改变的合法请求,使攻击者能够继承受害者的身份和特权。
什么是CSRF 攻击?
CSRF攻击是通过强制用户登录到攻击者控制的帐户来策划的。为了达到这一目的,黑客使用他们的凭证向网站伪造一个状态改变请求,并将表单提交到受害者的浏览器。服务器对浏览器请求进行身份验证,并将用户登录到攻击者的帐户。当受害者向攻击者的帐户提交正在登录的敏感信息时,攻击者可以利用这些信息执行一些不必要的操作,包括身份盗窃。
策划CSRF攻击通常涉及两个步骤:
- 使用漏洞利用脚本构建恶意链接
- 通过策划社会工程攻击,欺骗受害用户提交敏感信息
根据暴露的用户帐户和信息,攻击的影响范围从轻微到严重。
成功CSRF攻击的一些后果包括:
- 未经授权的金融交易
- 数据泄露和敏感信息泄露
- 部署恶意代码
- 完成帐户接管
攻击者可以利用多种技术欺骗用户,让他们登录到黑客控制的帐户。除了在登录页面上执行的攻击外,CSRF登录攻击几乎与经典的CSRF攻击相似。
在一些主要的网站和服务中,CSRF登录漏洞也已被识别和修复。最近发现的一些影响各种流行服务的缺陷包括:
eBay
2013年8月,eBay网站上报告了一个登录CSRF漏洞(并进行了进一步修补),允许对手修改受害者的送货地址为其选择的一个地址。为了利用这个安全漏洞,攻击者强迫一个活动用户会话向ebay.com/intended-address-page发送请求。由于服务器是脆弱的,它更新送货地址为指定的恶意链接。这种攻击很容易实施,因为攻击者只需要填写表单字段,而无需猜测受害者的合法凭证。
PayPal
2016年,PayPal修复了其PayPal.me 网站上的一个CSRF漏洞。该漏洞允许黑客滥用合法用户的帐户信息。由于用户必须注册信用卡或银行帐户才能为PayPal帐户提供资金,因此攻击者通过以下步骤利用登录CSRF漏洞发起攻击:
受害者使用电子商务网站并在结账时选择PayPal
弹出一个窗口,要求用户提供他们的PayPal凭证
黑客使用一个隐藏的表单字段将用户登录到黑客的帐户
受害者注册了他们的信用卡,但它被登录到黑客的帐户
目前上面列出的所有漏洞都已修复,仅作为真实世界攻击示例的表示形式进行概述。
一些常见的防止登录CSRF攻击的方法包括:
内置CSRF防御
大多数编程框架都内置了同步器令牌模式。建议开发人员和安全专家在实现自定义CSRF令牌生成器之前,研究一下默认情况下用于中继身份验证令牌的框架。虽然框架可以生成会话令牌,但软件团队负责进行适当的配置,以确保防止登录CSRF攻击。
尽管同步器令牌模式强制服务器端令牌验证,但为了实现健壮的登录CSRF保护,应该为每个状态更改请求生成一个随机令牌。当客户端发出请求时,web服务器将请求令牌与为用户会话存储的令牌进行比较。这种技术被认为是防止攻击的最简单方法之一,因为如果没有有效的令牌,对服务器的登录请求将被拒绝。
双重提交Cookies
当实现CSRF令牌的服务器端验证具有挑战性时,双重提交cookie技术提供了另一种CSRF防御。该技术在请求参数中发送一个随机值,并将其作为会话cookie属性。在提交登录表单期间,站点生成一个伪随机值,设置为客户端浏览器上的cookie。这些随机值与会话标识符分离,应该包含在每个后续请求头的隐藏字段中。在身份验证和加密cookie中包含这种方法可以成倍地增强应用程序的登录CSRF保护。
基于用户交互的CSRF防御
这种技术要求用户防止不必要的操作。可以用于阻止登录CSRF尝试的基于用户交互的技术的例子包括:
重新认证授权机制
使用验证码机制
一次性请求令牌