您现在的位置是:主页 > news > 网站建设xyxdie/网络营销的五大特点

网站建设xyxdie/网络营销的五大特点

admin2025/4/30 16:43:27news

简介网站建设xyxdie,网络营销的五大特点,公司网站设计规范,商城网站建设都有哪些类型Different Is Good: Detecting the Use of Uninitialized Variables Through Differential Replay报告人:jxin本文发表于网络安全顶会CCS 19,作者团队来自阿里巴巴-浙江大学前沿技术联合研究中心网络空间安全实验室(AZFT),其中第一作者是阿里巴巴猎户座安…

网站建设xyxdie,网络营销的五大特点,公司网站设计规范,商城网站建设都有哪些类型Different Is Good: Detecting the Use of Uninitialized Variables Through Differential Replay报告人:jxin本文发表于网络安全顶会CCS 19,作者团队来自阿里巴巴-浙江大学前沿技术联合研究中心网络空间安全实验室(AZFT),其中第一作者是阿里巴巴猎户座安…
69aa6e4a89dff3d01edc6269641350c1.png

Different Is Good: Detecting the Use of Uninitialized Variables Through Differential Replay

报告人:jxin

c12b439a78a382d82b617e67ba6eae6c.png

本文发表于网络安全顶会CCS 19,作者团队来自阿里巴巴-浙江大学前沿技术联合研究中心网络空间安全实验室(AZFT),其中第一作者是阿里巴巴猎户座安全实验室的曹梦晨。本文是国内首次以企业为第一作者在CCS发表论文。

815afea51ffa279f60698f95f2933a9e.gif   一、主要内容    

1. 关注点

        在Windows和Linux等现代操作系统中,变量的值在其未被显式初始化之前是不确定的,这就导致程序中若是不慎使用了未初始化变量,不仅会引发程序错误,而且当未初始化变量跨越不同的权限域时,可能危及系统的安全性。比如说,在内核地址空间布局随机化(KASLR)机制下,如果某块内存中存放着内核对象的地址,但使用那块内存的变量未进行初始化从而泄漏到用户空间,将极大损害KASLR的安全性。攻击者可以根据泄漏的信息进行权限提升。

2. 问题原因

        目前,针对闭源操作系统中未初始化变量的检查较为困难,作者给出了两个方面的原因:一是从静态分析的角度,需要源码,而且现代编译器(gcc, clang等)仅具备简单的检测功能,大多局限于某个函数,对于数组、指针、循环、结构体、联合体等无能为力。二是从动态分析的角度,需要触发点,而且使用未初始化变量这类内存泄漏问题通常并不会造成crash或者其它可以明显感知到的影响。

        对全系统进行动态污点分析是一种理所当然的想法,即在分配栈或堆时设置source,当被赋值时就去除污点标记。如果程序使用了一块带污点的内存,就能确定使用了未初始化变量。但是缺点也显而易见,进行全系统的污点分析会带来极大的开销(实验中有对比评估)。

        目前效果最好的动态分析工具是Bochspwn Reloaded,虽然能够检测出大量的未初始化变量的漏洞,但它为了减小开销,仅对特定类型指令进行污点传播,因此存在着漏报的问题。作者在文中选取了一个Motivation Example来展示该工具的局限性。

         指令01:分配栈上变量,未进行初始化

         指令02:将其中4个字节存入ecx寄存器

         指令03:将ecx的内容存入eax+4的位置,而此时eax指向的是用户空间

f5d3e546b6ac793f9401151e6a9bd038.png

        Bochspwn Reloaded为了避免过高的开销,仅对memory to memory的指令进行污点传播,而不会对memory to reg的指令进行污点传播。当受污染的数据流入寄存器时,标记将丢失,所以污点无法进入ecx,也就无法被Bochspwn Reloaded发现。

其他内存检测工具如MemorySanitizer等,需要基于源码插桩,且仅适用于用户态。

3. 解决方案

        作者的方案是:先采用差分重放技术,在不使用源码的前提下,来检测哪里使用了未初始化的变量,其开销比上述动态分析的方法大幅降低;当定位到未初始化变量的使用后,再利用符号污点分析快速找到未初始化变量的来源,即变量是在哪儿分配的。通过两种技术的结合,来实现对操作系统中未初始化变量漏洞的有效检测。

        作者实现了一款未初始化变量检测原型工具TimePlayer,在Windows7和Windows10的最新版本上测试了7个月,共发现了34个漏洞、85个已修补但未公开漏洞,其中17个被微软确认为0-Day漏洞。

815afea51ffa279f60698f95f2933a9e.gif二、差分重放技术 

        本文重点围绕差分重放技术展开,它旨在定位未初始化变量的使用位置。

        作者使用的是确定性重放功能,在重放时设置了对照实验。思路是:其中实验组不对原程序的执行状态做任何修改,而对照组会在内存分配时,在所有内存中填充一个特定的值,并在之后的重放过程中对内存读写指令进行检查。如果程序运行过程中存在初始化操作,那么填充的值就会被初始化的值覆盖掉,因此在变量使用的时候,实验组与对照组分别从该内存区域中读出的值应该相同;反之,如果程序中未进行初始化,在使用时两次重放过程读出的值就会出现差异。作者便利用这个差异来检测使用未初始化变量的位置。

        结合上面的例子来说明为什么该方法可以发现这个漏洞。通过确定性差分重放,可以观察到两个重放实例的不同内存状态,一个是正常重播实例,另一个是堆栈内存值填充为0xaa的重播实例。如下图所示,当执行到0x83e24501 mov dword ptr [eax + 4], ecx时,对比地址0x021afad8发现存在差异。

1a8ee846f7ac628bdcf62792af55cf2c.png

        在实现上,作者利用了PANDA框架的确定性重放功能。PANDA框架是基于Qemu的开源动态分析平台,它不仅可以在程序运行时记录下内存和寄存器的状态,也能记录下输入事件、硬件中断、DMA事件这些不确定事件,因此它能够在重放过程中确保程序的运行状态完全相同。

        考虑到差分重放会带来较大的开销,作者还通过PANDA框架的剪刀插件,将一次执行记录分割成多个子记录进行并行重放,以此来提高重放效率(实验中有对比评估)。但作者也指出,这么做可能会因为变量声明和使用存在于不同的子记录中而导致漏报。

815afea51ffa279f60698f95f2933a9e.gif三、符号化污点分析

        由于现有的基于数据流的动态污点分析方法难以处理由位运算、逻辑操作以及算术操作所造成的污点标志消除,因此作者采用符号化污点分析来寻找未初始化变量的来源。

        作者将在堆栈上分配内存的指令定义为source,将差分重放中发现的差异点指令定义为sink,基于VEX IR来实现整个符号化污点分析。当通过差分重放技术找到差异点指令后,会回退部分指令(若干个栈帧)重新执行,并进行符号化污点分析。具体来说,作者会在source处给该内存区域分配一个符号表达式,并在后续符号执行的过程中传递污染标记。当到达sink的时候,根据目标内存区域的符号表达式就能很快定位到未初始化变量声明的位置。

34cfe32a9cec795c0e0b7868aab873ee.png

        结合上面的例子:当差分重放到0x83e24501 mov dword ptr [eax + 4], ecx发现差异时,利用stack trace记录的信息,往前回退若干个栈帧开始dump trace;再对trace进行符号化污点分析,遇到sub esp, eax、函数ExAllocatePoolWithTag等栈、堆分配指令时,新建一个符号并打上taint标记;继续执行指令,传递污点标记;若遇到赋值操作,则去除对应符号的污点标记;污点分析到0x83e24501 mov dword ptr [eax + 4], ecx时,查看ecx对应的符号即可知道其是在哪里被分配的。

        此外,作者还提出了两个策略来提高符号化污点分析的效率:一是选择执行,即在符号执行的过程中跳过不涉及被污染内存或寄存器的指令。二是符号表达式包装,考虑到符号表达式的长度会随着执行的过程逐渐增加,为确保符号执行的性能,作者给符号表达式的长度和深度设置了阈值,到达一定门槛时,会将符号表达式进行拆分。

815afea51ffa279f60698f95f2933a9e.gif四、总体实现

cf525e41fbe6d91aef37dd666688a379.png

        TimePlayer的整体架构如上图所示,整个过程就是差分重放和符号化污点分析两种关键技术的组合。按照图中标注的数字顺序概括如下:

        关键技术I:差分重放:

        (1)使用全系统模拟器记录内核态和用户态程序的运行;

        (2)设置实验组和对照组确定性重放;

        (3)对比重放结果,检测到差异点,确定未初始化变量的使用位置;

        关键技术II:符号化污点分析:

        (4)从差异点的指令回退若干个栈帧,利用得到的trace,开始符号化污点分析;

        (5)执行trace,进行污点传播;

        (6)到达检测到差异的指令,确定未初始化变量声明的位置。

815afea51ffa279f60698f95f2933a9e.gif五、实验评估

        1. 效果评估

        在发现新漏洞方面,作者选取了ReactOS测试套件、Firefox、Chrome32位与64位、IE、优酷、用户登录、远程登录共8个测试软件,在32位和64位的Windows 7和Windows 10上进行了7个月的实验,共发现了34个内核信息泄漏的漏洞,其中17个被微软确认并获得CVE编号。

c3fe65be8914dbe4c3508bd6b6c594ec.png

         在与State-of-Art对比方面,作者收集了52个Bochspwn Reloaded之前发布的PoC作为测试用例,在带有这些漏洞的旧版本Windows 7/10上进行复现,来测试两个工具的检测效果。

967785241e30fc66b6734b9f4c2d9f92.png

        TimePlayer共发现了85个漏洞,相比之下Bochspwn Reloaded只发现了67个。在TimePlayer发现的这85个漏洞中,其中55个已有CVE编号,其余30个未编号的,经人工核实属于内核信息泄漏。

        2. 效率评估

        为体现效率,作者实现了一个基于数据流的动态污点分析工具来检测未初始化变量漏洞,并将它与TimePlayer进行比较,结果如下图所示:

35c372fe93af70a7a5039dd72be19be0.png

        TimePlayer在47个小时内发现了34个漏洞,而动态污点分析工具用了66小时只发现了7个漏洞。因此,TimePlayer的效率优于动态污点分析。

        3.性能评估

        差分重放的评估结果如下表所示,以ReactOS测试套件和Chrome64为测试用例,差分重放的耗时远高于Vanilla重放,大约慢22-24倍,而采用并行重放之后,则可以有效降低时间开销。

87b6f96e44ff514467fc921442c3579d.png7eedad2dda3235fef864a74b9209ff59.png

        符号化污点分析的评估结果如下表所示,在5个测试用例中,通过trace执行,符号化污点分析基本都能在1分钟内(表中最后一列)找到未初始化变量的来源。

c1bd26b8e9af60d7f1a441573fa97151.png

815afea51ffa279f60698f95f2933a9e.gif六、总结思考

        本文的思路比较有特点,通过重放对照实验的方法来发现未初始化变量漏洞,再结合符号化污点分析的方法来快速确定内存泄漏的位置。在实现上,通过Qemu和PANDA来进行重放分析的整个过程其实不算复杂,作者在行文中能够结合差分分析的概念总结形成自己的一套技术方法论,值得我们学习借鉴

9d4694393a0c97537685e17a25f65848.png

【论文作者】Mengchen Cao

【论文链接】https://dl.acm.org/doi/pdf/10.1145/3319535.3345654

【论文来源】网络安全顶会CCS 19

【报告人】jxin

【单位】国防科技大学软件安全智能并行分析实验室