用于恶意软件检测的对应用的通用拆包的制作方法_3

文档序号:9291694阅读:来源:国知局
控制被转移到0EP之前捕捉到恶意软件是任何通用拆包解决方案的目标。 为了实现这一点,以受控方式执行拆包代码,并按规律的间隔来扫描可执行文件的存储器 空间并将其对照签名进行比较。
[0039] 可以利用硬件辅助的虚拟化来实现受控执行。如上文所讨论的那样,以最高的特 权等级执行的VMM 420能以页面级别的粒度来为0S页面访问设置读取/写入/执行(R/W/ X)访问保护。针对0S访问对0S页面设置存储器保护的该机制可用于设置对经打包的可执 行文件的区段以及其相关联的存储器的保护。每当页面访问许可违规发生时,VMM 420获 取对执行的控制,并可以试探性地校验0EP转移是否将发生或充分的拆包是否已发生。此 亥IJ,可以执行对照恶意软件签名的扫描,或可以执行其他恶意软件检测技术。
[0040] 为作出关于向0EP转移的试探性判断,通用拆包过程需要按关键间隔来控制对二 进制文件的执行。可按如下方式定义这些关键间隔可将二进制文件加载时间定义为目标经 打包的可执行二进制文件被加载到存储器中且还未开始执行的时间。入口点执行违规时间 定义为将对执行的控制转移到经打包的二进制文件的入口点的时间。可将写入违规时间定 义为尝试对由VMM 420标记为可执行且可读取的(但不是可写入的)页面写入的时间。可 将页面执行违规时间定义为尝试执行来自由VMM 420标记为可读取且可写入(但不是可执 行)的页面的指令的时间。
[0041] 参考图6A,图600演示了用于控制自解压可执行文件的执行的方法。在二进制加 载时间605处,解析经打包的可执行二进制文件的头部中的所有区段。在610处,在二进制 头部中将区段标记为可执行与可写入(RWX)的情况下,使用VMM 420在与存储器中的该区 段相关联的页面上分配读取与执行(R_X)的许可。对于这些页面,去除了写入许可。"RWX" 和"R_X"是表示一个或多个读取、写入和执行许可的设置的符号的示例。如果这些区段的页 面尝试在未来某时刻执行且不被写入到其上,则不应当引发标记。然而,如果来自这些区段 中的一个区段的页面在被写入到其上之后执行,则存在它是正在被执行的原始的未打包代 码的可能性。这是因为在拆包期间可能已将原始代码写入到存储器页面(即,写入访问), 且后续的执行可指示原始的可执行文件正在执行。在已对文件打包多次的情形中,写入可 以是将拆包代码的下一层写入到存储器页面中,由此后续的执行将不是对原始的可执行文 件的执行,而是对拆包代码的迭代的执行。在任一种情况下,此时段呈现了可以执行恶意软 件扫描的时间点。如此,对这些页面中的任何页面的写入访问生成"vmexit",且控制被转移 到 VMM 420。
[0042] vmexit是将控制从0S 430转移到VMM 420的硬件辅助的虚拟化机制。当控制与 VMM 420在一起时,可以记录与拆包器代码的执行有关的处理器寄存器状态、栈指针和其他 状态。一旦记录了这些状态并执行了其他任务(例如,建立试探性数据、扫描),则可以将控 制往回传递到生成vmexit的0S 430或可以将控制传递到错误处理例程。
[0043] 在615处,可以标识包含自解压可执行文件的入口点的页面,并且应当将对于该 页面的许可设置为只读(R_)。在已由VMM 420设置了页面存储器中的所有许可之后,在 620处,将控制返回到OS 430。如625处所示,对入口点的执行将在入口点执行违规时生成 vmexit,并且VMM 420将获得控制。相应地,此刻可将表示执行的开始的栈指针值和栈内容 记录在通用拆包器422的试探法统计数据428中。在执行的开始时的状态对于建立试探法 是有用的,因为该状态是原始的未打包的程序所预期的状态。每当在违规时间之后将控制 传递到VMM 420时,如630处所示,还可基于由试探法引擎424进行的试探法分析,由扫描 器426来执行对存储器的扫描。在635处,在二进制头部中将区段标记为可写入与可执行 (RWX)的情况下,分配读取与执行但无写入(R_X)的许可。在改变了页面许可之后,可将控 制返回到OS 430。
[0044] 当自解压可执行文件的拆包器存根开始执行时,可能存在个页面访问违规,这些 访问违规中的每一个都导致将控制传递到VMM 420。在这些次数中的每一次,可以收集试探 法统计信息428 (625),可以执行扫描(630),并可以调整许可且将控制返回到0S (635)。下 文中将更详细地讨论违规以及基于违规的动作的示例。在某些情形中,当控制位于VMM 420 处时,通用拆包器422可以通过扫描来确定识别了用于对反经迭代打包的可执行文件的打 包迭代的已知打包算法。如果是,则通用拆包器422可以通过由其自身而不是由受控执行 对内容进行拆包来继续进行。如果后续的拆包迭代是无法识别的,则通用拆包器422可以 返回到对可执行文件的受控执行。
[0045] 图6B示出了演示在可执行文件的执行期间的状态图650。状态1 (655)表示上文 已描述的二进制加载时间。当在二进制加载时间设置了许可并记录了状态之后,入口点执 行违规时间时的vmexit导致进入状态2 (660),在该时刻记录映像入口点状态。控制被返回 到0S,执行通常在状态3(665)继续。
[0046] 在写入违规时间,进入状态5 (675),并且VMM 420将控制转移到通用拆包器422。 通用拆包器422更新其内部登记试探法统计数据428。这可包括正在被写入的特定区段的 的页面的数量,该特定页面已经被写入的次数等。通用拆包器422还使该特定页面对0S 430是可写入(+W)的,但去除执行(-X)访问。在状态6(680)处,基于试探法,通用拆包器 422的试探法引擎424可以在存储器中触发对恶意软件签名的扫描。如果没有发现签名或 如果基于试探法没有扫描被执行,则通用拆包器422确定拆包仍未完成,并将控制传递到 0S 430,并且执行在状态3 (665)处继续。如果发现了恶意软件签名,则如向状态7 (685)的 转换处所示,可以强制终止对可执行文件的执行。
[0047] 类似地,在页面执行违规时间,进入状态4 (670),并且VMM 420将控制转移到通用 拆包器422。通用拆包器422更新其内部登记试探法统计数据428,其可包括已违背执行访 问许可的特定区段的页面的数量、特定页面已违背执行访问许可的次数等。通用拆包器422 还使特定页面对于0S 430是可执行(+X)的,但是去除写入(-W)访问。可以在状态6(680) 处执行扫描,并且执行可以在状态3(665)处继续或在状态7(685)处终止。
[0048] 可以在每个页面违规时间执行对于签名的扫描,但是可以使用试探法来优化并节 省处理资源以避免每当页面违规发生时都进行扫描。例如,在每一个页面执行违规时间,可 以使用的一个试探法法将会将栈指针和栈内容与它们的原始值进行比较。如果栈指针值等 于在入口点执行违规时间(即,状态2(660))时记录的栈指针值,并且栈内容也相同,则存 在0EP即将执行的可能性。返回到它们的原始入口点执行违规时间的栈指针和栈内容的值 可以指示拆包器过程已运行完成并且应当执行扫描。
[0049] 另一试探法可以对从其中诱捕了页面执行违规的区段定位。如果该区段的所有页 面都已被写入,并且这是在写入之后来自该区段的第一个执行违规,则很有可能已由拆包 器存根对该区段中的所有页面拆包,并且控制正在被转移到0EP。此刻,应当执行扫描。在 另一情形中,如果还没有对特定部分的所有页面写入,并且从该区段诱捕了第一个执行违 规,则仍存在对该区段完全拆包的概率,并且应当执行扫描。可以使用其他技术来识别可执 行文件的拆包的完成。
[0050] 还可以在页面写入违规时间使用试探法。如果在写入违规时来源于其的写入违规 的页面是正在被写入的特定区段的最后页面,则存在完全对该区段拆包的高概率。此刻,应 当执行扫描。
[0051] 以上示例试探法基于对其中控制可能正被传递到经拆包的二进制文件的0EP的 情形的标识。根据需要,可以采用其他试探法。例如,可以至少部分地基于其他打包器的特 定特性(诸如,打包器代码的签名、其他打包器的执行特性等)来建立额外的试探法。上文 所描述的试探法可以与这些其他的试探法相结合,或其他试探法可以替换上文所描述的示 例试探法。在需要新试探法来标识某些打包器的情况下,对新试探法机制的更新将可能比 为反病毒程序写入新拆包器更迅速且更高效。
[0052] 如上文所解释的那样,在二进制文件被完全拆包之后但是在该二进制文件已开始 执行之前,优选地执行将病毒签名与该二进制文件进行比较。按此方法,二进制可执行文件 不会通过打包进程而是误导性的以及被隐藏的,并可以直接在存储器中将该二进制可执行 文件与病毒签名文件进行比较,同时在执行完恶意软件扫描之前防止该二进制文件执行。 此外,可附加于或替代签名扫描来执行其他恶意软件检测技术。概括地说,允许拆包代码的 执行,但是在经解压缩的经拆包的二进制文件开始原始入口点的执行之前,防止或中断执 行。
[0053] 图7示出了用于确定原始入口点的执行的开始的试探法法以及后续对其执行的 阻止的示例。在图7中,示出了试探法的四个状态710、720、730和740。每一个状态示出 在执行期间的某时刻对于存储器页面访问的给定集合为0S存储器页面P1、P2、P3、P4和P5 设置的许可。如下文将详细地描述的那样,执行的进展导致状态的变化。存储器页面P1-P4 形成虚拟代码段125,而页面P5形成打包器代码段130。在此示例中,打包器代码段130仅 占据一个页面,即,页面P5。来自页面P5的拆包器存根将会将代码拆包为页面P1-P4。由 二进制头部120 (在图6B中未示出)定义针对页面P1-P5的许可。
[0054] 在初始状态710处,以与二进制头部中的定义不同的方式来设置针对这些页面的 许可。如此,虽然二进制头部指定包含可执行拆包器存根的页面P5应当具有执行与写入许 可,但是在初始状态710处,将页面P5设置为允许读取与写入许可,但不允许执行许可。相 应地,在初始状态660处,页面P5被表示为"RW_",并且执行将触发vmexit。类似地,虽然页 面P1-P4在二进制头部中被定义为具有读取、写入与执行许可,但是在初始状态660处,页 面P1-P4被设置为允许读取与执行许可,但不允许写入许可。相应地,在初始状态660处, 页面P1-P4被表示为"R_X"。
[0055] 当页面P5中的代码第一次尝试执行时将触发vmexit,因为页面P5没有被设置执 行许可。如果将多个页面设置为写入访问,则可将那些页面中触发vmexit的第一个页面标 识为入口点执行违规时间。在此示例中,在页面P5是仅有的此类页面的情况下,执行存储 在页面P5中的任何地方
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1