塞巴斯蒂安·沃格尔,慕尼黑理工大学;Robert Gawlik和Behrad Garmany,波鸿大学;托马斯·基特尔、乔纳斯·普福和克劳迪娅·埃克特,慕尼黑理工大学;托尔斯滕·霍尔兹,波鸿大学
一般来说,恶意代码利用挂钩在系统内转移控制流。如果没有它们,攻击者将对系统中发生的事件视而不见,从而无法执行恶意活动(例如,隐藏文件或捕获击键)。然而,虽然钩子是现代攻击不可或缺的一部分,但它们同时也是最大的弱点之一:如果找到其中一个钩子,即使是最复杂的攻击也很容易识别。尽管如此,挂钩机制在过去几年中几乎保持不变,并且仍然依赖于持久的修改代码或控制数据以转移控制流。因此,钩子表示系统中的异常永久明显并且可以在许多情况下很容易被检测到,因为近年来的钩子检测机制得到了充分的证明。
在本文中,我们提出了一个新的挂钩概念,我们称之为动态挂钩。这种挂钩机制的目标不是永久修改持久控制数据瞬态控制数据,例如运行时的返回地址。因此,钩子本身将位于非控制数据并在触发之前保持隐藏状态。因此,没有明显的钩子和实际控制流之间的连接发生了变化,这使得动态钩子能够成功避开现有的检测机制。为了实现这个想法,动态钩子利用利用技术在运行时触发漏洞。由于这种方法,动态挂钩不仅可以用于任意修改控制流,还可以用于非控制数据攻击,这使他们比前辈更强大。我们实现了一个原型,该原型利用静态程序切片和符号执行自动提取动态钩子的路径,然后由人类专家用于实现。为了演示这一点,我们使用原型提供的输出为现代Linux和Windows内核实现了动态挂钩的具体示例。
USENIX致力于开放访问我们活动上展示的研究。活动开始后,所有人都可以免费获得论文和会议记录。活动结束后发布的任何视频、音频和/或幻灯片也是免费的,对所有人开放。支持USENIX以及我们对开放获取的承诺。
下载音频