电商安全无小事,如何有效地抵御 CSRF 攻击?
现在,我们绝大多数人都会在网上购物买东西。但是很多人都不清楚的是,很多电商网站会存在安全漏洞。比如乌云就通报过,国内很多家公司的网站都存在 CSRF 漏洞。如果某个网站存在这种安全漏洞的话,那么我们在购物的过程中,就很可能会被网络黑客盗刷信用卡。是不是有点「不寒而栗」 的感觉?
首先,我们需要弄清楚 CSRF 是什么。它的全称是 Cross-site request forgery ,翻译成中文的意思就是「跨站请求伪造」,这是一种对网站的恶意利用。简单而言,就是某恶意网站在我们不知情的情况下,以我们的身份在你登录的某网站上胡作非为——发消息、买东西,甚至转账......
这种攻击模式听起来有点像跨站脚本(XSS),但 CSRF 与 XSS 非常不同,并且攻击方式几乎相左。XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。与 XSS 攻击相比,CSRF 攻击往往很少见,因此对其进行防范的资源也相当稀少。不过,这种「受信任」的攻击模式更加难以防范,所以被认为比 XSS 更具危险性。
这个过程到底是怎样的呢?让我们看个简单而鲜活的案例。
银行网站 A,它以 GET 请求来完成银行转账的操作,如:
http://www.mybank.com/Transfer.php?toBankId=11&money=1000
危险网站 B,它里面有一段 HTML 的代码如下:
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
可能会发生什么?你登录了银行网站 A,然后访问危险网站 B 以后,突然发现你的银行账户少了10000块......
为什么会这样呢?原因是在访问危险网站 B 之前,你已经登录了银行网站 A,而 B 中的以 GET 的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站 A 的 Cookie 发出 GET 请求,去获取资源
「http://www.mybank.com/Transfer.php?toBankId=11&money=1000」,
结果银行网站服务器收到请求后,认为这是一个合理的转账操作,就立刻转账了......
其实,真实的银行网站不会如此不加防范,但即使用 POST 替代 GET,也只是让危险网站多花些力气而已。危险网站 B 依然可以通过嵌入 Javascript 来尝试盗取客户资金,所以我们时不时会听到客户资金被盗的案件,其实这并不是很不稀奇。
相信,很多人了解到这儿,会出现一身冷汗,还让不让我们在「双11」期间能够愉快地享受网购的快感了?难道没有什么办法防住它嘛?
当然是有的。可以给网站打补丁,如 Cookie Hashing (所有表单都包含同一个伪随机值)。这可能是最简单的解决方案了,因为理论上攻击者不能获得第三方的 Cookie,所以表单中的数据也就构造失败了。但这并不是完美的解决方案,因为用户的 Cookie 很容易由于网站的 XSS 漏洞而被盗取;另一种方法是用验证码,每次的用户提交都需要用户在表单中填写一个图片上的随机字符串....这个方案可以完全解决 CSRF,但用户体验很遭罪(忒麻烦了)。还有一种是 One-Time Tokens(不同的表单包含不同的伪随机值),需要设计令牌和 Session 管理逻辑,并修改 Web 表单,网站运维又很遭罪。
以上所有办法都需要对网站进行修修补补,再花费很多气力去测试。可能有人会想到用防火墙来防护,那么有没有满足要求的产品呢?在去年,下一代防火墙——自适应安全防护(RASP)这个概念横空出世,吸引了很多企业的注意,它对请求上下文的感知能力和深入应用内部的识别防御能力一改被动的、外部肉盾式的防护理念,可以在无需给网站打补丁的情形下承担起防护的责任,值得尝试。
这里推荐一个最新的解决方案,它的名字叫 RASP(实时应用自我保护),这种方式可以有效解决这类的问题。针对 CSRF 漏洞问题,RASP 定制了规则集和防护类,然后采用 Java 字节码技术,在被保护的类被加载进虚拟机之前,根据规则对被保护的类进行修改,将防护类织入到被保护的类中。大家不妨可以一试。
目前国内仅有一家在提供 RASP 的服务厂商 OneASP。 能以最小代价并且快速解决上述难题,你只需要非常简单的修改一下 JVM 的启动配置,就可以将运行。它能将攻击过程透明化,通过控制台可以非常清楚的知道系统什么时候、哪个模块、哪行代码遭受了哪种类型的攻击。同时还能够快速修复漏洞,只要将 OneRASP 和应用程序部署在一起就可以快速修复已知漏洞,不需要漫长的扫描 - 修复 - 扫描的过程。通过实时升级系统快速同步最新漏洞,避免零日攻击。
当然,只有 OneRASP 也并非万无一失,最优的解决方案是将 OneRASP 和网络安全解决方案、应用安全扫描与测试等安全防护系统结合起来,形成多层次立体的防御体系。如今各种攻击手段层出不穷,单靠其中任一技术来防范应用程序的安全是不科学的。但 OneRASP 永远是应用程序安全保护的最后一道无法逾越的壕沟,它可以帮你快速提升应用程序的安全级别,你再也不用担忧没有合格的安全工程师了。当然也确保你的企业不会作为下一个安全受害者登上头条。
OneRASP(实时应用自我保护)是一种基于云的应用程序自我保护服务, 可以为软件产品提供实时保护,使其免受漏洞所累。