Web安全十年演进:从架构攻击到前端威胁的全面解析

本文回顾了2013至2023年Web安全领域的四大发展趋势,涵盖架构攻击、底层逻辑漏洞、协议不一致性和跨应用组合攻击,并提供了多个真实案例和攻击手法的深入分析。

從 2013 到 2023: Web Security 十年之進化與趨勢!

TL;DR for Hackers & Researchers: 这是一个更偏向概念性的演讲,面向Web开发者。所有内容均为中文,但如果有兴趣,你可以在这里查看幻灯片。

好久没有写博客了,记录一下这次我在WebConf 2023上的演讲。大致上,我将Web安全这十年的演化趋势分类,并给出相应的攻击手法作为案例。虽然没配合演讲看幻灯片可能不知道在讲什么,但如果有兴趣还是可以点这边获得幻灯片!

由于听众皆为网站开发者(涵盖前端、后端甚至架构师),因此选用的攻击手法力求简单、可快速理解又有趣。不谈到防御手法也是因为在短短的45分钟内绝对涵盖不完,所以给自己订下的小目标是:只要有一项也好,如果开发者遇到同样场景、脑中会跳出个红色小框框警告好像有人讲过,可以通过这样的方式稍稍弥平网站开发者与资安从业人员间的差异,那我的目的就达成了!

所以Web安全这十年到底有什么发展呢?如果要用一个字形容,最贴切应该就是「卷」这个字!Web Security如今已经竞争到连一个字节都要斤斤计较,例如Nginx经典的Off-by-Slash问题,到底什么时候该加斜线什么时候不该,相信懂得人都会露出会心一笑。

纵观这十年间的Web Security发展,我总结出了以下四个趋势(以下纯代表个人观点,你可以不同意 :)

1. 架構層面的攻擊逐漸成為顯學

随着网站架构日趋复杂,以往可以在Single Server下解决的问题,随着Reverse Proxy、Load Balance、Firewall、Cache Server甚至CDN的引入都开始变得复杂。原有的网页应用、网页服务器如何去跟这些新角色进行搭配,这些组合的互动如何引入新的攻击面,这都是这十年来一直有人在探讨的趋势。

这里我给出的案例是:

  • Abusing HTTP hop-by-hop request headers by Nathan Davison
  • [Case Study] F5 iControl REST Endpoint Authentication Bypass Technical Deep Dive by James Horseman
  • Web Cache Deception Attack by Omer Gil
  • [Case Study] Web Cache Deception Attack in PayPal Home Page
  • (遗珠之憾): HTTP Desync Attacks: Request Smuggling Reborn by James Kettle

2. 對底層邏輯重新梳理的攻擊

随着资安意识、以及前后端框架的成熟,开发者已逐渐养成使用框架的习惯。为了因应这个趋势,攻击者不得不开始往框架、甚至编程语言底层挖掘,如早期的SQL Injection,随着ORM出现开始被大面积减缓,造成攻击者开始往ORM实作寻找漏洞;同理XSS,随着框架内建的保护已足以应付大部分的开发场景,攻击者只能开始检视实作玩起我绕你补的游戏。

另一方面重新梳理一些便于开发者使用的框架逻辑也是这几年发展的一个流派,例如在红极一时的Spring4Shell漏洞表面上虽然问题出在Data Binding中,但认真梳理后会发现其主因还是在Java Runtime版本更新导致其底层内部机制改变受到影响。

在这个趋势中我介绍了两个针对编程语言底层的新攻击手法:

  • File Operation Induced Unserialization via the “phar://” Stream Wrapper by Sam Thomas
  • [Case Study] LARAVEL <= V8.4.2 DEBUG MODE: REMOTE CODE EXECUTION
  • Prototype pollution attack in NodeJS application by Olivier Arteau
  • [Case Study] Exploiting prototype pollution – RCE in Kibana (CVE-2019-7609) by Michał Bentkowski

3. 不一致性所造成的攻擊面

随着网站功能越趋复杂,资料在网站间的生命周期也越来越长!一个使用者请求(一笔资料)可能经过中间层Proxy/Cache Server预处理、商业逻辑再处理、云端API又处理,最后日志服务器又要再解释一遍。随着处理资料的来源越多、各家来源对同一笔资料又存在着不同的解释,解释间的不一致就可能造成安全上的问题。

这几年尤其有趣的是针对RFC解释的攻击,RFC只定义了规范却没有说明该如何实作,造成不同实作间的差异造成问题,例如案例中光是JavaScript与Erlang对同一个JSON解读的不一致就造成那么多问题了,相信这也会是未来Web Security的重要趋势之一!

  • A New Era of SSRF - Exploiting URL Parser in Trending Programming Languages! by Orange Tsai
  • Remote Code Execution in CouchDB by Max Justicz

4. 跨應用組合所導致的新攻擊

在这个Web包山包海开发者什么都要会的时代,传统认为写网站就不须接触底层结果被WebAssembly打脸;写网站不须懂密码学结果出现Web 3.0,信息安全从来都不只是一个单一学科,如果只熟悉自己的领域、很容易就会陷入思考误区甚至被降维打击!

这十年间Web Security也开始往跨应用的攻击影响,无论是跨协议的组合、跨规范的误用、跨领域的结合,甚至把不同的Convention组合在一起,例如RFC的命名规范刚好跟HTTP函数库约定成俗的变量撞名所造成的资安漏洞,近几年不时会冒出这种打破三观的例子,让人不得不佩服到底想像力多丰富才能把这八竿子打不着的东西组合再一起!

  • (Ticket Trick) How I hacked hundreds of companies through their helpdesk by Inti De Ceukelaire
  • HTTPoxy Attack
  • AvOracle: New Attack Vector Against Anti Virus by Ryo Ichikawa and Ryota Shiga
  • (遗珠之憾) Timeless Timing Attacks by Tom Van Goethem & Mathy Vanhoef

5. 當前端安全不只在前端…

本来整理四个打算点到为止就好,但总是很难把前端安全给移出发展趋势外,反正四天王总会有五个人对吧!就把前端安全当大魔王吧。

伴随Web 2.0/3.0的兴起,网站开始以使用者为中心、储存在使用者端的敏感资料也越来越多,这十年间从浏览器的兴衰、新旧特性的加入到主流框架的切换,前端安全的发展其实完全可以自成一派、发展出许多酷炫技术,甚至倒还有那么点钻牛角尖的程度,不过由于前端安全很大一部分还是得基于使用者互动,往往相比之下比较不被那么受到重视,但随着Headless Browser以及Electron-Based桌面应用的发展这种偏见慢慢开始被打破!

首先是Chromium的广泛应用,越来越多开发者会在服务器端使用Headless Browser直接将网页渲染成PDF或图片,加上网页爬虫的盛行与测试的自动化,以往许多需要使用者互动的XSS现在都可以直接在服务器端(或自动地)触发,这些都是让网页前端安全与后端安全的边界愈加模糊的一点。

另一个分水岭则是Electron-Based桌面应用的流行(当然手机App中的Webview同理),当所有受欢迎的桌面应用例如Slack、Discord、Trello、甚至连写程式用的Visual Studio Code都成为基于浏览器的桌面应用,以往被视为鸡肋被认为只能窃取Cookie的XSS现在摇身一变,成为可以直接跳小算盘的高风险漏洞!这里可以看看Microsoft Teams的例子,如何通过一个AngularJS的特性在桌面应用中创造出XSS、再通过Prototype Pollution完成整个攻击链,通过一个讯息就可以完整控制受害者!

  • How I Hacked Microsoft Teams and got $150,000 in Pwn2Own by Masato Kinugawa

总是很懒得写结语,总之、我相信Web Security还是会有下一个十年啦,攻击也只会更精致、更刁钻,至于要持续学习?躺平?还是直接交给专业的,就交由各位自己决定囉!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计