CET & Shadow Stack
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
CET 是一种在硬件级别实现的安全特性,旨在阻止常见的控制流劫持攻击,如 返回导向编程 (ROP) 和 跳转导向编程 (JOP)。这些类型的攻击操纵程序的执行流,以执行恶意代码或以某种方式将无害代码片段链接在一起,从而执行恶意操作。
CET 引入了两个主要特性:间接分支跟踪 (IBT) 和 影子栈。
IBT 确保间接跳转和调用仅指向有效目标,这些目标被明确标记为间接分支的合法目的地。这是通过使用一种新的指令集来实现的,该指令集标记有效目标,从而防止攻击者将控制流转移到任意位置。
影子栈 是一种提供返回地址完整性的机制。它保持一个安全的、隐藏的返回地址副本,与常规调用栈分开。当函数返回时,返回地址会与影子栈进行验证,从而防止攻击者覆盖栈上的返回地址以劫持控制流。
影子栈 是一个 专门用于存储返回地址的栈。它与常规栈一起工作,但受到保护并隐藏于正常程序执行之外,使攻击者难以篡改。影子栈的主要目标是确保对常规栈上返回地址的任何修改在使用之前都能被检测到,从而有效减轻 ROP 攻击。
ROP 和 JOP 攻击 依赖于通过利用允许覆盖指针或栈上返回地址的漏洞来劫持应用程序的控制流。通过将流指向现有代码小工具或返回导向编程小工具的序列,攻击者可以执行任意代码。
CET 的 IBT 特性通过确保间接分支只能跳转到明确标记为有效目标的地址,使这些攻击变得更加困难。这使得攻击者无法执行分散在二进制文件中的任意小工具。
另一方面,影子栈 确保即使攻击者能够覆盖常规栈上的返回地址,在从函数返回时,与影子栈中存储的安全副本进行比较时也会检测到 不一致。如果地址不匹配,程序可以终止或采取其他安全措施,从而防止攻击成功。
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)