首页 > 范文大全 > 正文

Windows中基于硬件的缓冲区溢出攻击防范技术――DEP

开篇:润墨网以专业的文秘视角,为您筛选了一篇Windows中基于硬件的缓冲区溢出攻击防范技术――DEP范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:DEP是微软公司新推出的一项硬件安全技术,它能够有效地防范缓冲区溢出攻击。本文在简单介绍了windows缓冲区溢出攻击的基础上,对DEP技术的基本原理、软硬件支持情况、使用方法等方面做了较为详细的分析,并指出DEP技术和一般的防病毒软件的区别。

关键词:DEP;缓冲区;溢出攻击;堆栈

中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10665-02

1 引言

缓冲区溢出漏洞是当前计算机和互联网系统中最普遍也是威胁最大的安全漏洞,利用缓冲区溢出漏洞实施的攻击已经成为当前Internet上最普遍、危害最大的一种网络攻击手段。据统计,大约80%的安全事件与缓冲区溢出攻击有关[1]。缓冲区溢出攻击是利用目标程序的缓冲区溢出漏洞,通过往目标程序的缓冲区写入超出其长度的数据,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的[2]。

目前,较为有效的防范缓冲区溢出攻击的措施主要包括[3]:强制程序开发人员书写正确的、安全的代码;通过数组操作检查工具(例如:Compaq C编译器、gcc补丁等)对数组的读写操作进行边界检查来实现对缓冲区的保护,使得缓冲区溢出不可能出现;通过设置缓冲区的堆栈段为不可执行,从而阻止攻击者植入攻击代码(也即ShellCode)。这些措施当中,如果仅仅从软件的层面来进行防范,一方面,由于软件的复杂性和集成度日益提高,其留下的大量漏洞反而会给缓冲区溢出攻击所利用;另一方面,从效率的角度考虑,基于软件的防范措施也已经很难满足现代用户的安全需求。因此,从硬件的层面采取措施来进行缓冲区溢出的防范,已经成为目前业界的一个研发重点。DEP(Data Execute Protection,数据执行保护)技术正是微软公司在其Windows XP SP2、Windows Server 2003 SP1及其更高版本中推出的一项基于硬件的防范缓冲区溢出攻击的安全技术,它是通过设置缓冲区的堆栈段为不可执行来实现的。本文将对这一技术做较为详细的分析研究。

2 缓冲区溢出攻击的基本原理

一个程序在内存中运行时,按照从内存低端到内存高端的方向通常可以分为程序段、数据段和堆栈三个部分,如图1所示:

程序段里存放着程序的机器码和只读数据,数据段里存放着程序中的静态数据,而堆栈中存放着程序的动态数据。缓冲区正是在内存的堆栈上分配的一段连续的内存空间,它是程序运行时用于存放动态数据的空间,它的大小在程序运行时固定申请。

堆栈是一个后进先出(LIFO)的队列,它的生长方向与内存的生长方向正好相反,如图2所示。

当程序中发生函数调用时,计算机的处理器会依次将函数的参数、返回地址及基址寄存器EBP(该寄存器存储的内存地址为函数在参数和返回地址压栈之前的内存地址)压入堆栈中,然后把当前的堆栈指针(ESP)作为新的基地址。如果函数中存在局部变量,则函数会把堆栈指针ESP减去某个值,为需要的动态局部变量腾出所需的内存空间,函数内使用的缓冲区就分配在腾出的这段内存空间上。函数返回时,将会弹出EBP,恢复堆栈到函数调用前的地址;弹出返回地址到指令指针寄存器(EIP)以继续执行原程序。

现在,假设向目标程序的缓冲区写入一个长度超过其长度的数据,输入的数据将占满缓冲区的所有空间,并且超越缓冲区边界延伸到缓冲区以外的空间。而由于堆栈的生长方向与内存的生长方向正好相反,超出缓冲区边界的数据就可能将EBP和返回地址覆盖,造成所谓的缓冲区溢出。一般情况下,缓冲区溢出会导致程序运行失败。但如果覆盖EIP的值刚好是黑客精心设计的一段攻击代码(ShellCode)的内存地址,程序将改变正常的流程而跳转到该攻击代码的位置并开始执行,攻击者就能获取对系统的控制,利用ShellCode实现各种功能,比如,得到一个Shell,监听一个端口,添加一个用户,等等,从而达到攻击的目的。这正是缓冲区溢出攻击的基本原理。

从上面的分析中可以看出,攻击者要达到攻击目的,必须同时完成下面的两个步骤[1]:(1)在程序的适当地址空间里安排攻击代码;(2)设法使程序跳转到该段代码处执行。本文分析的DEP技术,是通过阻止第二个步骤来实现的。

3 缓冲区溢出攻击的防范技术――dep

为了有效的防范缓冲区溢出攻击,提高系统的安全性能,微软公司和包括Intel和AMD在内的处理器制造商展开密切合作,在其推出的Windows XP SP2、Windows Server 2003 SP1及其更高版本的Windows操作系统中支持了DEP这一功能。

3.1 DEP的技术原理

在计算机系统中,系统程序或某些应用软件会被要求在特定的内存区域内运行,这个内存区域如果受到其他程序的破坏,会导致程序出错,甚至系统崩溃。而DEP技术可以有效地防止这类情况发生。当在Windows XP SP2中打开某些有害进程时,如果系统启动了DEP技术,Windows就会自动弹出消息提示框──“为了帮助保护您的计算机,Windows已经关闭了此程序。”下面会附上程序的名称和发行商信息,这就是DEP在发挥作用。

Windows系统中集成的DEP技术也即数据执行保护技术,它是通过在程序执行时将其可执行代码所占用的内存区域自动标记出来,支持DEP的CPU利用NX(No eXecute,不执行)技术识别这些标记出来的区域,如果发现当前执行的代码没有明确标记为可执行(例如程序执行之后,由病毒溢出到代码执行区的那部分代码),则禁止执行,那么病毒和其它利用溢出技术进行的网络攻击行为就无法利用溢出进行破坏了,从而帮助用户保护计算机免受病毒和其他缓冲区溢出攻击的破坏[5]。

这个技术之所以可行是因为几乎没有任何合法程序会在内存的堆栈段中存放执行代码,而缓冲区溢出后执行的代码又是放在堆栈段上的。

3.2 DEP的软硬件支持

要想发挥DEP的保护功能,除了windows操作系统要升级到Windows XP SP2、Windows Server 2003 SP1或者更高版本之外,由于DEP是一项基于硬件的安全技术,所以CPU必须支持DEP技术才行。

目前,32位的CPU处理器不支持DEP技术,支持DEP的CPU有:AMD 阵营的Athlon 64、AMD Opteron;Intel阵营的安腾系列CPU、J系列的P4(采用Prescott核心)。如果CPU不支持DEP,支持DEP的Windows操作系统则会以软件方式进行模拟(当然就没有硬件支持来得好了)。

3.3 DEP的启用和配置

在支持DEP的Windows系统中,打开DEP功能的步骤是:以系统管理员的身份登录系统,然后右击桌面“我的电脑”图标选择“属性”,在“系统属性”对话框中切换到“高级”选项卡,点“性能”下的“设置”按钮打开“性能选项”对话框,切换到“数据执行保护”选项卡下,在这里就会显示关于DEP的信息,如图3所示。在图3中,左边所示的计算机是以软件的方式模拟DEP技术的情况,在该对话框的下方会显示“你的计算机的处理器不支持基于硬件的DEP。但是,Windows可以使用DEP软件帮助保护免受某些类型的攻击。”;而右边所示的计算机由于硬件上支持DEP,因此不需要以软件的方式模拟。

图3 DEP的设置界面

如图3所示,默认情况下系统仅为基本Windows程序和服务启动DEP。要为其它程序和服务启用DEP,可以在图3所示的对话框中选择“为除下列选定程序之外的所有程序和服务启动DEP”单选按钮,如图4所示。

这样,就为除了DEP保护排除列表中的其他所有程序和服务都启用了DEP,这些程序就处于DEP的保护之下,不会导致缓冲区溢出攻击。

如果运行某个程序被DEP关闭了,说明该程序被DEP检测为带有危害性。为了运行该程序,用户可以向该程序的开发商获取与DEP兼容的程序版本;或者通过在图4所示的对话框中点击“添加”按钮,将其添加到DEP保护排除列表中并勾选(这样运行该程序会有缓冲区溢出的危险,因此建议定期检查是否有与DEP兼容的程序更新版本,并在更新程序后重新启用DEP)。例如,图5表示的是将Microsoft Word添加到DEP保护排除列表的情况,这时将不对Microsoft Word启动DEP保护。

3.4 DEP与防病毒软件的区别

DEP同一般的防病毒或防火墙软件不同,它并不是一种防病毒软件,不能阻止有害的程序安装到计算机中,也不具备一般的防病毒软件的检测和查杀功能,而是通过对程序进行监控,确定它们是否能够安全地使用系统内存。所以,确切地说,DEP是一种操作系统底层的安全机制,通过这种安全机制,可以对利用缓冲区漏洞溢出的病毒起防护作用,而不是对所有类型的病毒都具有防护作用。

4 结束语

在缓冲区溢出攻击日益成为网络攻击的主要手段的今天,Windows系统内集成的DEP技术能够有效地防范利用缓冲区溢出漏洞所实施的攻击,大大提高了系统的安全性能。本文通过对DEP技术的相关方面(技术原理、软硬件支持情况、启动和配置方法、与防病毒软件的区别)进行较为详细的分析,对帮助计算机用户认识和提高系统的安全、有效地防范缓冲区溢出攻击起到积极的作用。

参考文献:

[1] 谢恒建, 胡兆阳. 缓冲区溢出攻击的防护技术分析[J]. 微计算机信息, 2005,9-3:11-13.

[2] 胡忠望, 刘卫东. 基于CPU硬件的缓冲区溢出攻击的防范技术[J]. 微电子学与计算机, 2006,7:9-12.

[3] 池瑞楠. Windows缓冲区溢出的深入研究[J]. 电脑编程技术及维护, 2006,9:79-81.

[4] 富宇唐, 国维, 刘显德. 缓冲区溢出的预防与检测技术综述[J]. 计算机工程与应用, 2005,32:149-152.

[5] 大熊. Windows内置的病毒防护――DEP[J]. 电脑爱好者,2005,7:86-87.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。