Web安全十年演进:从架构攻击到跨应用威胁

本文回顾2013至2023年Web安全的发展趋势,涵盖架构层攻击、底层逻辑漏洞、协议不一致性、跨应用组合攻击及前端安全演变,通过实际案例解析攻击手法的演进与创新。

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

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

好久没有写博客了,记录一下这次我在 WebConf 2023 上的演讲。内容主要是将 Web Security 这十年的演化趋势分类,并给出相应的攻击手法作为案例。虽然不配合演讲看幻灯片可能不太清楚在讲什么,但有兴趣的话还是可以点击这里获取幻灯片!

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

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

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

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

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

这里我给出的案例是:

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

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

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

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

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

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

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

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

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

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

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 完成整个攻击链,透过一个讯息就可以完整控制受害者!

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

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