zpoline:一种基于二进制重写的系统调用钩子机制

作者:

靖国神社、坂崎Hajime和Pierre-Louis Aublin,IIJ研究实验室;石黑一郎,河西大学

获得最佳论文奖!

摘要:

本文介绍了用于x86-64 CPU的系统调用挂钩机制zpoline。zpoline采用二进制重写,具有七个优点:1)低挂接开销,2)彻底挂接,3)不覆盖不应修改的指令,4)不需要更改内核,也不需要额外的内核模块,5)不需要用户空间程序的源代码,6)它不依赖于经过特殊修改的标准库,7)它可以用于系统调用仿真。以前的机制都没有同时实现这些目标。

这项工作解决的主要挑战是,很难用jmp/call替换syscall/sysenter来跳转到任意钩子函数,因为syscall和sycenter是两个字节的指令,通常需要更多字节来指定任意钩子功能地址。

zpoline通过一种新颖的二进制重写策略和特殊的蹦床代码解决了这个问题;简而言之,它将syscall/sysenter替换为一条双字节callq*%rax指令,并在虚拟地址0处实例化蹦床代码。我们确认了zpoline在主要的类UNIX系统上的功能:Linux、FreeBSD、NetBSD和DragonFly BSD。我们的实验表明,zpoline的开销比现有机制低28.1~761.0倍,现有机制可以确保在不覆盖不应修改的指令的情况下进行穷举挂接,与最小开销情况相比,Redis和zpoline绑定的用户空间网络堆栈的性能仅降低5.2%,而现有机制的性能降低了72.3%至98.8%。

USENIX ATC’23 Open Access赞助商
阿卜杜拉国王科技大学

开放存取媒体

USENIX致力于开放访问我们活动上展示的研究。活动开始后,所有人都可以免费获得论文和会议记录。活动结束后发布的任何视频、音频和/或幻灯片也是免费的,对所有人开放。支持USENIX以及我们对开放存取的承诺。

此内容可用于:

BibTeX公司
@进行中{288689,
author={靖国神社(Kenichi Yasukata)、田崎百美(Hajime Tazaki)、奥布林(Pierre-Louis Aublin)和石黑一郎(Kenta Ishiguro)},
title={zpoline:基于二进制重写的系统调用挂钩机制},
booktitle={2023 USENIX年度技术会议(USENIXATC 23)},
年份={2023},
isbn={978-1-939133-35-9},
地址={马萨诸塞州波士顿},
页数={293--300},
url={https://www.usenix.org/conference/atc23/presentation/yasukata},
publisher={USENIX协会},
月=七月
}

演示文稿视频