您现在的位置是:首页 > 文章详情

Linux 6.2 为 AArch64 实现动态 ShadowCallStack 支持

日期:2022-11-16点击:357

使用 Clang 构建的 Linux 内核在 5.8 版本中已支持 ShadowCallStack (SCS)。ShadowCallStack 是一种 LLVM 插桩模式,可将函数的返回地址保存到非叶函数的函数 prolog 中单独分配的 ShadowCallStack,并从函数 epilog 中的 ShadowCallStack 加载返回地址,从而防止返回地址覆盖(比如堆栈缓冲区溢出)。返回地址也存储在常规堆栈中,以便与展开程序兼容,但除此之外就没有用处。这样可以确保攻击行为(修改常规堆栈上的返回地址)不会对程序控制流造成任何影响。

在 aarch64 上,此插桩机制使用x18寄存器来引用 ShadowCallStack,这意味着不必将对 ShadowCallStack 的引用存储在内存中。因此,实现的运行时可避免将 ShadowCallStack 地址暴露给能够读取任意内存的攻击者 。

目前尚处于开发阶段的 Linux 6.2 正在实现动态 ShadowCallStack,以避免 SCS 在支持指针身份认证 (PAC) 的处理器上的开销。

正如上文所提到的,ShadowCallStack 对于防止返回地址覆盖(比如堆栈缓冲区溢出)很有用。但是在具有指针身份验证的 AArch64 处理器上,很难证明 SCS 的有用性。因此对于 Linux 6.2,计划启用动态 SCS 支持,允许它在启动时进行启用/禁用。此项动态 SCS 支持特性是在启动/运行时通过代码修补完成的。

因此,对于那些由于其他硬件保护已经到位而不想为其 AArch64 SoC 提供此安全功能的用户来说,不需要禁用 SCS 的替代内核构建。通过 Clang 为 ARM64 实现动态 SCS 支持的代码如果没有出现任何问题,将在下个月提交到 Linux 6.2 合并窗口。

原文链接:https://www.oschina.net/news/217892/dynamic-shadow-call-stack-6-2
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章