使用 AVX512IFMA 优化 kCTF PoW,团队创下最快记录赢得 51,000 美元奖金
2025年5月,威廉·刘(William Liu)和萨维·迪卡诺萨(Savy Dicanosa)发现并开发了Linux包调度器中的一个use-after-free漏洞,希望将其提交给谷歌的kernelCTF竞赛以获得51,000美元的悬赏金。然而,找到漏洞并编写攻击代码只是第一步,真正的挑战在于优化“工作量证明”(Proof of Work,PoW),以便在提交窗口开启后能够快速完成连接和攻击。 为了缩短提交时间,威廉和萨維研究了之前的获胜团队如何在不到一秒的时间内解决PoW。他们发现了一些线索,指出这些团队可能使用了现场可编程门阵列(Field-Programmable Gate Arrays,FPGAs)。FPGAs是一种专门设计的硬件,可以执行特定任务非常快,但价格昂贵且难以编程。 意识到常规方法已无法进一步提高速度,威廉在5月13日联系了我,寻求优化PoW的建议。我们的目标是在5月16日5:00 UTC的提交窗口打开时,尽快完成所有步骤,包括连接到服务器、解决PoW、运行攻击代码和提交标志(flag)。 优化策略 初步改进 首先,我在C++中实现了1280位模幂运算的优化,利用Mersenne数的特性简化了计算过程。这个版本的代码在M1 MacBook Pro上运行只需1.9秒,比其他类似的优化实现快得多。通过静态链接GMP库,威廉在Intel Ice Lake笔记本上的运行时间降低到了1.4秒。 使用AVX512IFMA优化 为了进一步提升性能,我们决定使用Intel的AVX512指令集扩展,特别是AVX512IFMA(Integer Fused Multiply-Add),该扩展专为大整数运算而设计。通过将1280位整数分解为52位段存储在64位字中,我们可以利用四个512位向量寄存器来存储和处理这些段。通过优化乘法累加操作,我们显著降低了计算时间: 平方计算优化:我们将整数平方分解为两个部分,并优化了低半和高半的乘法操作。 累积优化:引入了14个累积寄存器,分别用于低半和高半的累积,以充分利用指令的吞吐量。 寄存器分配优化:使用内联汇编强制多路广播指令使用内存操作数,避免了寄存器不足导致的溢出。 最终的优化代码在租用的Zen 5 Google Cloud服务器上运行时间缩短到了0.21秒。 提交过程 5月16日4:30 AM PST,我的队友们开始准备最后的提交。我们在荷兰租用了地理上最接近Google提交服务器的Zen 5服务器,以最小化网络延迟。在5:00 UTC,服务器成功连接到kernelCTF,解除了PoW,运行了萨維优化的攻击代码,并提交了标志。整个过程仅用了3.6秒,创下了kernelCTF提交的最短时间纪录。 结果与反响 我们的团队赢得了这笔悬赏金,核心成员威廉和萨维为发现和利用这一漏洞做出了巨大贡献。这次胜利展示了我们对程序优化的深刻理解和实践能力。值得一提的是,我们的队友包括布赖斯·卡萨杰(Bryce Casaje)和Larry Yuan,他们分别负责优化表单提交和辅助开发。 行业评价 行业专家普遍认为,我们的优化策略不仅具有技术上的创新,而且在实际应用中表现出了极高的效率。此次胜利也突显了团队合作的重要性,每个成员都发挥了其独特的技能。不过,也有人指出kernelCTF的PoW机制存在一定的不合理性,因为专业团队可以通过定制硬件(如FPGAs)获得优势,从而不公平地影响比赛结果。最终,kernelCTF组织者宣布将在5月28日后取消PoW机制,以确保竞赛更加公平,让所有参赛者处于同一起跑线上。 公司背景 Crusaders of Rust是一支由网络安全和逆向工程专家组成的团队。他们在漏洞挖掘和攻击技术方面有着丰富的经验,多次成功提交重要漏洞并获得悬赏。这次的成功再次证明了他们在该领域的卓越能力。