写点什么

增强的恶意软件检测

  • 2010-06-24
  • 本文字数:7407 字

    阅读完需:约 24 分钟

摘要:最近几年,出现在恶意软件领域中值得注意的新事态是黑客利用被攻破的平台获得金钱利益,主要有如下 3 种方式:(1) 出售盗取的信息,(2) 使用平台的资源进行非法或者未经授权的活动,或者 (3) 绑架平台内的信息以勒索赎金。攻击者在平台中可以捞取的好处越多,平台中未能检测出的恶意软件也就越多,那些能骗过传统安全代理的恶意软件已经再度泛滥。这种类型的恶意软件被称为匿踪恶意软件 (stealth malware)。研究人员和工业界发现了云计算的新用途:恶意软件检测。在这篇文章里,我们简要描述了这些新用途,并指出其不足之处。我们提出了一个基于云计算的架构,它能扩展现有解决方案的可用范围,并且我们还提供了一个基于现有 Intel 平台的原型。我们在此仔细分析了这个增强现有架构可靠性的新固件。这种基于平台的新工具有助于安全提供商对抗恶意软件的威胁。

简介

在过去三年间,恶意软件编写与开发者为达到其利用系统漏洞获取经济利益的新目标,对其产品进行了升级换代。在经济利益驱动下,能隐藏自身于平台中的恶意软件得到了很大发展。某些恶意软件甚至会从受侵害的计算机中清除容易露出马脚的同类,以免受其牵累而被发现。

恶意软件在全球范围内造成的损失每年超过百亿美元:仅在 2006 年就有 143 亿美元 [1]。

在与恶意软件的斗争中,IT 安全面临多方面的挑战。其中最重要的是恶意软件样本的急剧增长。Panda Security 报告说,在 2008 年每天平均检测到 35,000 个恶意软件样本,全年合计超过 1500 万个样本。McAfee 公司报告说他们收集的恶意软件样本数量从 2008 年 3 月的 1000 万个增加到了 2009 年 3 月的 2000 万个 [3]。样本数量的急剧增长意味着没有客户能及时更新已知恶意软件列表。此外,这也意味着安全代理需要花费更多资源来检查文件,以对抗铺天盖地而来的恶意软件特征码。在某些情况下,安全代理会消耗掉 50-60% 的 CPU 资源。

恶意软件现在已经泛滥成灾,学术界与工业界一致认为应用云计算来检测恶意软件的时机已经到来 [5,6]。现在已经有很多种可以使用的云计算解决方案模型。图 1 显示一种基于云计算、用于防病毒服务的通用系统架构。第一种模型是服务模型,在主机上运行轻量级的进程以收集相关样本(例如文件),然后将其传送到网络服务上。而网络服务则会进行分析,以鉴定样本是否包含有恶意软件,如果确认此样本已经中毒,就直接指示主机上的轻量级进程将其隔离。在另外一种方式中,主机代理仅仅维护已知恶意软件特征码的一个子集以及一个常用软件应用列表。

图 1:基于云的防病毒服务(来源:Intel 公司,2009)

恶意软件检测从云计算中受益良多。以云计算为中心会减少客户端占用的存储空间与计算资源,并能简化特征码文件的管理。此外,无论何时,只要以前未能成功鉴别出的恶意软件样本出现在云中,安全提供商就能使用非常复杂并且计算密集的启发式搜索方法将这一恶意软件的危害剖析得清清楚楚。

然而,云计算却不能使主机代理免遭恶意软件的伤害。为防止或检测到遭到禁用、破坏的代理,主机代理需要采用特别的方法与途径。在 [[7, 8, 9, 10, 11, 和 12] 中提出了很多方法为主机代理提供更安全的保护。其中一些方法集中在使用虚拟技术为安全代理提供隔离的运行环境。在这篇文章里,我们仔细分析了一些平台功能特性,它们能用来隔离主机代理以应对来自各方面不同威胁。

文章组织方式

开篇讨论对主机代理的威胁。然后勾画出一个基于增强型云计算、用于恶意软件检测的通用架构。接下来描述了用来增强计算解决方案的 Intel 平台技术,最后用前面讨论的方法对对威胁进行了分析。

主机代理面临的威胁

正如只能在主机运行的恶意软件检测系统必须得到真实可靠的信息才能有效工作,平台上的主机代理也必须为云服务提供真实可靠的信息才能确保发挥其防病毒作用。如果恶意软件能利用系统中的漏洞(例如,浏览器插件中的缓冲溢出),然后破坏主机代理,它就能在未被发现的情况下安然运行。

可以使用多种方式破坏主机代理:

  • 窜改主机代理。修改主机代理的可执行属性,使之不能再对恶意软件样本构成威胁。此类窜改可以简单到不再发送文件到云服务,也可以复杂到允许恶意软件的代理过滤发送到云服务的文件。
  • 禁用主机代理。恶意软件修改系统配置,或者使主机代理下次系统启动时不再运行,或者立即中止主机代理的运行。
  • 输入过滤。恶意软件在系统 API 中设置钩子 (hook),并插入恶意代码,从而过滤提供给主机代理的信息。众所周知的钩入点 (hook points) 包括引入表 ( import table) 和系统调用参考表 (system call table)。然而,还存在有更多钩入点 (hook points);Wang 及其他人员在 Red Hat Fedora core 中找到了 41 个可能用来进行文件隐藏的内核钩入点 (hook points)[10, 13]。

在最近几年,恶意软件发展的重点在于使用更具破坏性的方式攻破系统安全。其中一种由暗影行者 (Shadow Walker) 使用的方法是在中断描述符表 (interrupt descriptor table ,IDT)、页面出错处理程序 ( page-fault handler ) 中设置钩子。当处理器读取内存中的内容作为数据时会返回恶意软件所指定的值,而当处理器读取内存中内容作为代码时会返回其他值。另外一种安全研究人员提出的方式是安装恶意虚拟机监视程序 (VMM) 来超劫持 (hyperjack) 操作系统 (OS)。VMM 使得研究者能对系统一览无余,却不需要对 OS 进行任何修改或者挂钩 (hooking)。

增强基于云的恶意软件检测

在图 2 中描述了一个系统架构,用以增强基于云的防病毒服务。

图 2:基于云的防病毒增强型解决方案(来源:Intel 公司,2009)

通过在主机环境中隔离出主机代理,并提供对诸如外存和内存等平台资源的直接访问,主机上的恶意软件不能再直接攻击或者操纵主机代理。恶意软件不得不转而攻击主机代理分区。由于主机代理分区不需要支持多用途计算,它能以更加健壮的解决方案配置得更加安全。下面描述了相关架构组件:

  • 隔离的主机代理环境。主机代理被包含在隔离的运行环境中。主机能利用此环境提供的接口发送请求。它提供直接访问主机外存、主机访问;磁盘 I/O 请求能直接交付给此环境。
  • 隔离的主机代理。主机代理包含安全、经过授权的通道,用来连接到防病毒云。主机代理监控主机磁盘 I/O,如有需要,经由安全通道发送文件到防病毒云网络服务进行分析。主机代理包含文件系统操作功能,负责访问主机文件系统,并且代理能定期扫描物理磁盘以发现哪些文件被更改;然后发送被更改的文件到防病毒云网络服务。
  • 增强型磁盘驱动。增强型磁盘驱动用来通过文件系统将磁盘 I/O 请求从主分区转发到运行在安全容器内的主机代理,以进行下一步处理。
  • 原生磁盘驱动。原生磁盘驱动用来从被隔离的分区中访问主机磁盘硬件。

图 3 描述了怎样扩展防病毒云服务,使其有能力提供内核匿踪攻击 (Rookit) 检测,还有在磁盘 / 文件上扫描恶意软件。架构组件描述如下:

图 3:基于云的内核匿踪攻击 (Rookit) 检测 (来源:Intel 公司,2009)

  • 内核匿踪攻击 (rootkit) 检测程序。本地内核匿踪攻击 (rootkit) 检测程序,运行在客户端隔离分区,向运行在防病毒云中的内核匿踪攻击 (rootkit) 检测应用暴露出安全的远程接口。用这种方法,匿踪攻击 (rootkit) 应用程序能访问核心内存页,并在内核内存区域内执行基本哈希 (hash) 比较操作,以进行完整性检查。完整性确认操作在远程服务器端执行。内核哈希值也会保存在防病毒云服务器上,在需要时提供给客户端 PC 的内核匿踪攻击 (rootkit) 检测程序。
  • 原生内存驱动。原生内存驱动运行在隔离的分区上,用以确保能够安全访问系统内存区,主机 OS 的内核内存位于系统内存区中。

远程内存完整检查操作会产生两个问题:安全与网络延时。我们使用下面三种方式来解决网络安全问题:提供客户端 PC 与防病毒云服务间的安全通道、提供内存哈希比较接口并限制远程内存访问。由于绝大多数进行内存完整检查的核心内存区驻留在客户端平台的不可分页 (nonpageable) 内存,内存验证时的网络延时问题就显得不是太严重。

通过检测诸如引入表挂钩、内存代码与静态数据修改、IDT、系统调用参考表以及直接内核对象窜改等常用攻击方法,内核匿踪攻击 (rootkit) 检测程序有助于缓解未知威胁或者内存内 (in-memory) 威胁。

对抗匿踪恶意软件的原型架构

我们开发出两个系统原型,用来检验系统设计。原型 1 基于 Intel®管理引擎 (Intel®ME),原型 2 基于虚拟机监视程序 (virtual machine monitor,VMM),两者都与主机 OS 隔离。因为这两种方式都与主机 OS 互相隔离,攻击者更难破坏其运行环境。

原型 1:基于 Intel® 管理引擎

自从 Intel® 主动管理技术 (Intel® AMT) [16, 17] 及运行 Intel® vPro™ 技术的平台面世以来,平台中就包含了一个嵌入式微控制器,称为 Intel ME。Intel ME 是一个集成设备,独立安装在 PCI 总线中。Intel ME 集成了多种硬件引擎,比如总线控制器、加密加速器、DMA 引擎等等。Intel ME 运行的固件 (firmware) 由实时操作系统 (real-time operating system ,RTOS)、操纵硬件的驱动程序以及管理应用程序组成。在我们的原型中,我们利用 DMA 引擎访问内存区。

我们首先实现一个代理来扫描固件中的内存。这个代理是传统的基于黑名单的扫描代理。因为 Intel ME 在计算能力与存储空间两方面的共同限制,我们只能在 Intel ME 固件中实现一个功能受限的扫描代理。能安全存放的黑名单的长度限制在 192KB,扫描操作的频率也不能太高。由于这些限制,我们只好在主机 OS 中实现了一个主机代理,其功能是扫描基于黑名单的内存。在此原型中,我们向 Intel ME 代理中加入完整性检查固件,以检验其主机代理的完整性。此外,Intel ME 带外 ( out-of-band ,OOB) 接口能与远程防病毒云服务进行通讯,如果主机代理在运行时被修改,就会通知防病毒云上的软件。Intel ME 在其存储区域内保存主机代理的哈希值,并且定期验证主机代理运行时映像的完整性。在我们的论文《实时内核匿踪攻击 (Rootkit) 检测》(Runtime Kernel Rootkit Detection) [9] 中,我们描述了用来验证主机代理运行时完整性的清单(manifest )产生进程以及 3 阶段 (3-phase ) 算法。对于此原型,我们使用 Intel ME 度量主机代理的完整性:进程执行所需时间在毫秒级。我们打算进一步研究事件驱动、主机代理扫描等方法,以解决定时攻击问题。图 4 显示了我们的原型架构:

图 4:Intel®管理引擎架构(来源:Intel 公司,2009)

原型 2:基于虚拟机监视程序 (Virtual Machine Monitor)

在这里,我们的第二种有原型中,我们用虚拟机 (virtual machine,VM) 作为隔离环境,并且扩展我们的第一个原型来度量虚拟机监视程序 (VMM) 的完整性。

为理解我们为何选择 VMM 作为隔离环境,让我们首先来了解一下使用硬件虚拟的基于虚拟的系统。我们在平台上使用 Intel® Virtualization Technology (Intel® VT)。虚拟是指一种将处理器或者芯片组的物理资源到分割到不同 VM 上,并在 OS 下插入比 VM 更高权限的执行程序的技术。这个执行程序就是 VMM。在 IA-32 的 Intel® Virtualization Technology (Intel® VT)、 Intel® 64 和 Intel® Architecture (Intel® VT-x) 中,称这一权限级别为 VMX-root 模式。将控制转换到 VMM 称为 VMExit,将控制转换到 VM 称为 VMEntry。通过使用 VMCALL 指令,VM 能显式地、强制地进行 VMExit。在 VMX non-root 模式下运行的客户 OS 进行关键 OS 操作时必定会产生一个 VMExit。这使得 VMM 能强制执行隔离策略。通过增加一个轻量级 VMM 到 [9] 中所描述的原型,我们增强了其功能。为能拦截换页事件以及对数据结构的改动,我们利用 VMM 监控所需的系统事件,并可以在需要时建立影子页 (shadow page) 表。系统组件、清单生成以及完整性验证算法的细节在 [9] 中详细讨论。我们在研究原型中加入了 Intel ME 固件,用其来验证 VMM 自身的完整性 [11]。在图 5 显示了此架构。

图 5:虚拟化环境架构(来源:Intel 公司,2009)

第二种原型的的关键架构组件基于深视技术 (Deep Watch),详见 [11],它是由位于 Intel ME 固件中的完整性验证模块和防病毒云服务中的 VMM 完整性应用服务组成。 在 BIOS 系统管理中断 (system management interrupt,SMI) 处理程序提供的简单支持下,能得到处理器状态和寄存器信息,然后 Intel ME 能从这些信息中为 VMM 重建虚拟内存页表。系统管理模式 (System management mode,SMM) 是一种能达成特定目标的操作模式,此模式能管理全系统范围内的功能,例如电源管理、系统硬件控制,甚至私有 OEM 设计代码。SMM 带来的主要好处是提供了明确的并且使用简便的独立处理器环境,此环境对 OS 或者执行程序及软件应用都是透明的。当通过 SMI 调用 SMM(SMI 处理器),处理器保存当前处理器的状态(处理器上下文 context),然后转换到隔离的、存放在系统管理 RAM(system management RAM ,SMRAM)中的操作环境。这个处理器状态被收集到 SMI 处理程序,并通过硬件接口传送到 Intel ME。Intel ME 中存放的处理器状态可以用来重新构建内存页表,以验证 VMM 的实现完整性。此外,Intel ME 可以传送所有信息(处理器状态和内存页)到防病毒云服务。远程防病毒服务就能验证 VMM 的实时完整性,也就克服了 Intel ME 的计算能力限制。我们还建立了一个类似研究原型通过 PCI DMA 设备来度量主机 OS 驱动器的完整性,详见 [12]。

威胁分析

我们假设攻击者已经完全能访问及控制 OS,包括内核,并能插入、修改或者删除内核驱动程序;然而,我们假设攻击者不能修改 Intel ME 固件或者 SMRAM。我们的假设意味着攻击范围十分广泛,从简单用户攻击到各种修改关键内核数据结构的攻击,其目的是破坏用户 OS 或者 VMM 本身。这种类型的攻击例子包括有在导入表、IDT 或者系统调用参考表中挂钩、内核代码及静态数据修改,以及直接内核对象窜改。想大致了解内核匿踪攻击 (rootkit) 技术请参考 [18]。

下面是我们在原型 1 中解决的不同攻击方式的威胁:

  • 主机代理的威胁。Intel ME 中的内核匿踪攻击 (rootkit) 检测程序有效防止 了内核代码修改、导入表、IDT 以及系统调用参考表挂钩。Intel ME 使用 OOB 接口通过其 DMA 接口只读访问内存,确保匿踪攻击 (rootkit) 检测程序能得到一个全面而且未经篡改的内存视图。
  • 未知内核攻击。如果 Intel ME 中的内核匿踪攻击 (rootkit) 检测程序检测到任何可疑行为或者模式,它就会通知防病毒云服务器进行更加细致地扫描。

在原型 2 中,除了原型 1 所能解决的威胁以外,我们还解决了 VMM 攻击。

  • 对主机代理的威胁。VMM 保护主机代理不受恶意软件的攻击。
  • 未知内核攻击。主机代理,经我们的内核匿踪攻击 (rootkit) 检测程序加强后,可以检测任何可疑行为或者模式。
  • VMM 攻击。被破坏的 VMM 可以通过 Intel ME 中的直接内存访问以及实时内存匿踪攻击 (rootkit) 检测 (Runtime Kernel Rootkit Detection ,RKRD) 甄别出来。

总结

在这篇文章中,我们解释了学术界与工业界共同提议采用云计算对抗病毒的缘起。我们仔细研究了基于云的防病毒服务所面临的威胁,首要风险直指运行在客户端上的主机代理,它用于向防病毒云引擎输送数据。我们然后提供一些基于平台的功能特性,基于 Intel 架构,能用来减少恶意软件对主机代理的危害。我们研究了结合了 Intel 虚拟技术及 Intel 芯片组技术的原型,这些技术包括有 Intel ME,能有效减少防病毒云环境中对主机代理的大部分威胁。因此,这些技术的新应用能为我们的终端用户提供更加有效的防病毒云服务。

参考

[1] “The Economic Impact of Viruses, Spyware, Adware, Botnets and other Malicious Code.” Computer Economics, 2007 Malware Report.

[2] Annual Report PandaLabs 2008. At http://www.pandasecurity.com

[3] F. Paget. “Avert Passes Milestone: 20 Million Malware Samples.” March ;10, 2009. At http://www.avertlabs.com

[4] T. Watson. “Antivirus Vendors Push Toward Cloud Computing.” Dark Reading, September 17, 2008. At http://www.darkreading.com

[5] J. Oberheide et al. “Cloud AV: N-Version Anti-virus in the Network Cloud.” In Proceedings of the 17th Usenix Security Symposium, pages 91-206, July 2008.

[6] McAfee, Inc. “Artermis Technology—Always–on, Real–Time Protection.” Whitepaper, 2008. At http://www.mcafee.com

[7] N. Petroni Jr. et al. ”Copilot–a coprocessor–based kernel runtime integrity monitor.” In Proceedings of the 13th Usenix Security Symposium, pages 179-194, August 2004.

[8] VMware, Inc. “VMsafe Security Technology.” A set of web pages. At http://www.vmware.com

[9] S. Grover et al. “RKRD: Runtime Kernel Rootkit Detection.” SECRYPT, 2008. To be published by Springer.

[10] X. Zhao et al. “Towards Protecting Sensitive Files in a Compromised System.” In Proceedings of the Third IEEE international Security in Storage Workshop, December 13, 2005.

[11] Y. Bulygin et al. “Chipset based detection and removal of virtualization malware.” Black Hat USA, 2008.

[12] R. Sahita et al. “OS Independent Run-Time System Integrity Services.“ Intel Corporation 2005. Whitepaper. At http://www.intel.com

[13] Z. Wang et al. “Countering Persistent Kernel Rootkits Through Systematic Hook Discovery.” 11th International Symposium on Recent Advances in Intrusion Detection (RAID), Boston, MA, September 15–17, 2008.

[14] S. Sparks and J. Butler. ”Shadow Walker: Raising the bar for rootkit detection.” Black Hat Japan, 2005.

[15] J. Rutkowska. “Subverting Vista Kernel for fun and profit.” Black Hat USA, 2006.

[16] Intel Corporation. “Built-in Manageability and Proactive Security.” Whitepaper, 2006. At http://www.intel.com

[17] O. Levy et al. “Advance Security Features of Intel® vPro Technology.” Intel Technology Journal, Volume 12, Issue 04, December 2008.

[18] Skape and Skywing. “A Catalog of Windows Local Kernel-mode Backdoor Techniques.” Uniformed Journal, Volume 8, September 2007. At http://www.uniformed.org


感谢曹云飞对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2010-06-24 02:052933

评论

发布
暂无评论
发现更多内容

[Pulsar] Acknowledgement原理

Zike Yang

Apache Pulsar 12月日更

常见序列化算法学习笔记二

风翱

序列化 12月日更

Prometheus Exporter (二十八)RabbitMQ Exporter

耳东@Erdong

RabbitMQ Prometheus 28天写作 exporter 12月日更

通过淘宝数据学习爬虫,python scrapy requests与response对象

梦想橡皮擦

12月日更

0 基础实现简单的Kotlin ListView

阿策小和尚

28天写作 Android 小菜鸟 12月日更

一文带你从零认识什么是XLA

华为云开发者联盟

深度学习 tensorflow PyTorch 深度学习编译器 XLA

Go 语言快速入门指南:第六篇 与数据为舞之映射

宇宙之一粟

哈希表 字典 映射 签约计划第二季 12月日更

Linux学习教程从入门到精通:条件判断和流程控制语句If

侠盗安全

Linux 运维 运维工程师 云计算架构师

iOS开发:dSYM文件分析

三掌柜

28天写作 28 12月日更 12月

从0开始学VUE - 踩坑记录

恒生LIGHT云社区

JavaScript Vue 前端

面向WEB开发的Docker(三):安装Docker

devpoint

Docker 12月日更

io_uring vs epoll ,谁在网络编程领域更胜一筹?

OpenAnolis小助手

网络编程

常用邮箱申请渠道【小程序专题2】

坚果

小程序 28天写作 12月日更 邮箱

给弟弟的信第14封|人到年纪,自己就是屋檐

大菠萝

28天写作

让数据大白于天下:GCC插件实现代码分析和安全审计

华为云开发者联盟

数据结构 安全审计 GCC 代码分析 安全分析

实用机器学习笔记十五:卷积神经网络

打工人!

深度学习 算法 学习笔记 卷积神经网络 12月日更

一本用户体验时代的产品生存指南!

博文视点Broadview

结构化思维 - 感悟

搬砖的周狮傅

感悟 结构化思维

架构实战营第二周作业

Jude

「架构实战营」

React进阶(六):组件生命周期

No Silver Bullet

React 生命周期管理 12月日更

高性能云网关,打通云内外业务互通的任督二脉

华为云开发者联盟

网关 云平台 华为云Stack 云网关 L2BR/L3G

红颜更胜儿郎 | 尚硅谷微信支付实战教程发布

编程江湖

前端教程 微信支付开发

面试官:StringBuilder与TextWriter有什么区别

喵叔

28天写作 12月日更

【LeetCode】把二叉搜索树转换为累加树Java题解

Albert

算法 LeetCode 12月日更

以 Kubernetes 的方式来安装运行极狐GitLab Runner

极狐GitLab

Kubernetes runner 极狐GitLab

带你了解几种二进制代码相似度比较技术

华为云开发者联盟

二进制 源代码 二进制代码 二进制代码比较 安全审计

尚硅谷微信支付实战教程发布!

@零度

微信支付

每一天

Nydia

Java并发编程实战系列(15)-原子遍历与非阻塞同步机制

JavaEdge

12月日更

Android技术分享| 【自习室】自定义View代替通知动画(完)

anyRTC开发者

android 音视频 WebRTC 视频通话 自定义view

中科柏诚本地生活赋能金融机构应对内卷危机

联营汇聚

增强的恶意软件检测_安全_and Yuriy Bulygin_InfoQ精选文章