Quantum ROP: How Being in Many Places at Once Beats One of Computing's Toughest Defenses
ASLR shuffles the memory layout at random, so overwriting a return address comes down to guesswork. "Quantum ROP" has nothing to do with quantum computing: it exploits the fact that randomization is page-aligned, picking qgadgets whose low-order bits match and that sit exactly whole pages apart, so that a single address covers several layouts at once. It then tells which "reality" it has landed in from differences in how far the stack pointer shifts, cutting 256 blind guesses down to 16.

Phrack 第 72 期 · 第 12 篇
虽然标题里带着“量子”,但它讲的却是一个极其巧妙的、发生在经典计算机世界里的黑客技巧。它充满了“跳出盒子思考”的智慧。
“量子”黑客:如何利用“分身术”骗过电脑最强的防御之一?
在网络安全的世界里,攻与防就像一场永无休止的“猫鼠游戏”。程序员筑起高墙,黑客则研究如何翻越或挖地道。其中一道最坚固的墙,叫做ASLR(地址空间布局随机化)。
为了理解这篇文章的巧妙之处,我们先来玩一个“银行劫案”的比喻。
传统的劫案:假设你要入侵一个软件。软件运行时,它的所有指令和数据都存放在内存里,就像一个大厦里的不同房间。其中一个关键房间是“指令室”,里面有一张“下一步去哪”的指令条(术语叫“返回地址”)。经典黑客攻击(比如“缓冲区溢出”)就像往大厦里塞了太多东西,把“指令室”的门挤开,然后偷偷换掉了那张指令条,写上“去金库”。这样,当程序执行完当前任务,就会乖乖地走向黑客指定的“金库”,从而被完全控制。
ASLR防御系统:软件开发者当然不傻。他们启用了ASLR,这相当于给大厦装了一套“每日随机变形系统”。每天软件启动时,大厦内部的楼层、房间号全部重新随机排列。“金库”还在,但你昨天记下的“8楼808房”的地址,今天可能变成了“3楼101房”。
这样一来,黑客就陷入了“猜谜游戏”。你偷偷换了指令条,写上你猜的“8楼808房”,结果那里今天只是个杂物间。程序一头撞墙,崩溃了。你只能第二天再来,猜一个新的地址。对于32位系统,你可能有256个可能的楼层布局要猜,这非常耗时,尤其是在远程攻击时,每一次失败都可能让你暴露。
那么,有没有一种方法,能让你的一次猜测,命中率翻倍,甚至翻16倍呢?
这篇名为《量子ROP:更酷的ROP》的文章,就提出了一种堪称“分身术”的绝妙方案。
一、 “量子”的洞察:当一个地址指向两个“未来”
首先要澄清:这个技术和真正的量子计算机没有半点关系。 作者只是借用了“量子叠加”的概念来做比喻,形容他的技术能让“一个地址,同时拥有多种可能性”。
他的核心思想是:我不再把宝押在一个“金库”上。我要在大厦里找到两个,甚至更多,具有特殊空间关系的房间。
比如,我找到了两个非常有用的房间:
A房间(比如“安保监控室”)位于
xxxxb456地址。B房间(比如“备用电闸室”)位于
xxxxc456地址。
请注意它们的地址末尾几位 ...456 是相同的,但前面的数字不同,它们之间正好相隔了整数个“楼层”的高度(比如B比A高一层)。
现在,我开始我的“量子”攻击。我只猜一个地址,比如我猜今天大厦的基准楼层在0xf0000000,并据此将指令条换成 0xf015c456。
接下来,奇迹发生了:
- 可能性一:我猜对了!
大厦的布局恰好就是我猜的那样。那么 0xf015c456 这个地址,就会准确无误地指向“备用电闸室”(B房间)。攻击成功!
- 可能性二:我猜错了,但只错了一点点!
大厦的实际布局比我猜的整体“高了一层”,基准楼层在了 0xf0001000。这时,我写下的 0xf015c456 这个绝对地址,相对于新的基准,实际上指向的是 (0xf015c456 - 0x1000) = 0xf015b456。由于我精心挑选,这个地址恰好就是“安保监控室”(A房间)!攻击也成功了!
看到了吗?用同一个地址,同一个攻击载荷,我覆盖了两种完全不同的大厦布局。 我的一次攻击,仿佛进入了“叠加态”,它既可能通向A,也可能通向B。无论最终是哪种情况,我都成功进入了一个关键房间。我的成功率,瞬间翻了一倍!
作者将这种具有“多种可能性”的特殊代码片段(房间)称为“qgadget”(量子小工具)。
二、 “秘密握手”:我如何知道自己身在何处?
一个新的问题来了:虽然我成功进入了A或B房间,但我并不知道自己到底在哪一个。如果我在安保室,我应该执行“关闭监控”的后续计划;如果在电闸室,我应该执行“切断警报”的计划。我该如何判断呢?
这就是这个技术更精妙的地方:选择有不同“副作用”的qgadget。
A房间的指令可能是:“打开门,然后后退一步,再继续”。
B房间的指令可能是:“打开门,然后后退五步,再继续”。
虽然它们都打开了门,但它们对“我”的位置(术语叫“栈指针”)造成了不同的位移。攻击者在设计后续的指令链时,就可以根据这个位移来布局。
如果发现自己“后退了一步”,就接着执行为A房间准备的计划。
如果发现自己“后退了五步”,就接着执行为B房间准备的计划。
通过这个微小的差异,攻击者就像通过“秘密握手”一样,精确地知道了自己身处哪个“现实”,并能够执行正确的后续步骤,最终完全控制系统。
三、 所以呢?这意味着什么?
这个技术就像给传统的“猜谜”式攻击装上了“倍镜”。
效率的指数级提升:如果能找到8个具有这种特殊空间关系的“qgadget”,那么一次攻击就能覆盖8种可能的内存布局,成功率直接提升8倍。对于原本需要猜256次的ASLR防御,现在可能只需要猜32次。如果能找到16个,就只需要猜16次!
让不可能变为可能:对于远程攻击,每一次尝试都伴随着网络延迟和被发现的风险。将256次尝试减少到16次,可能就是“绝无可能”和“完全可行”之间的区别。这彻底改变了攻防双方的力量对比。
黑客智慧的体现:更重要的是,“量子ROP”完美地诠释了黑客思维的精髓——它不是用更强的力量去硬碰硬,而是去发现和利用系统规则中一个意想不到的、优雅的“漏洞”。ASLR的规则是“随机”,但它的随机化是以“页”为单位进行的,这就创造了一种“对齐”的模式。正是这个模式,被作者巧妙地利用,把纯粹的概率游戏,变成了一场精心计算的、胜率更高的博弈。
结语
《量子ROP》这篇文章用一个生动的比喻,向我们展示了一次精彩的“降维打击”。它告诉我们,在复杂的攻防世界里,最致命的武器,往往不是最强大的那个,而是最出人意料、最能洞察规则并反过来利用规则的那个。它虽然与真实的量子世界无关,却同样充满了颠覆常规的想象力与智慧。
Originally published on the WeChat account 网安志异, 2025-10-25 · original
Comments