论文部分内容阅读
运行中随机化是针对基于内存信息泄露的代码复用攻击提出的一种防御方法。在程序运行过程中触发随机化操作,使攻击者难以获得有效的内存布局信息用于组织攻击。现有的运行中随机化方法TASR使用write/read操作配对出现作为运行中随机化的触发条件。然而,触发条件过于宽泛,使得没有风险的write操作也会触发运行中随机化,导致程序性能下降,I/0密集型程序所受影响尤为严重。因此,本文研究内存信息泄露的运行中随机化防御方法,细化运行中随机化触发条件,以避免不必要且耗时的随机化操作,提高运行中随机化方法的有效性。本文主要的研究工作如下:(1)分析、总结了不同类型的内存布局信息泄露以及基于随机化的防御方法的原理,重点分析了现有运行中随机化方法存在的运行开销问题以及其随机化触发条件不合理的原因。TASR的运行中随机化触发条件为write/read操作配对出现,因此善意的write操作也会触发运行中随机化,造成程序性能损失。(2)为细化运行中随机化触发条件,定义了安全敏感区域的概念,并以write操作访问安全敏感区域作为随机化操作的触发条件,同时给出了程序安全敏感区域的分析、提取方法,以及程序运行中检查方法。安全敏感区域是包含有助于攻击者分析程序内存布局信息的内存区域,对其进行write操作访问可使攻击者获得内存布局相关信息,因此为有风险的内存访问操作。通过分析目标文件的元数据以及监控装载/卸载过程能获得安全敏感区域的范围,而对write操作访问目标进行检查,判断是否与安全敏感区域相交来区分有、无风险的操作,以此细化随机化的触发条件。(3)通过分析目标文件的段表和节表来提取安全敏感区域的信息,以及对装载/卸载操作相关的系统调用进行监控,来确定安全敏感区域的最终位置。然后对输入/输出相关的系统调用进行监控来判断是否要触发运行中随机化,以此实现了改进方法的原型系统。理论分析表明,改进方法可保持与原方法相同的安全性。以Nginx网络服务器作为I/O密集型程序样本,进行了服务能力实验。实验结果表明,改进方法能显著降低原方法对I/O密集型程序造成的额外开销。