格式化串读写越界防御虚拟机的研究

2015-09-09 11:47黄玉文
电脑知识与技术 2015年16期
关键词:虚拟机

摘要:针对现有格式化串读写越界防御存在的问题,设计一种能够防御格式化串读写越界的虚拟机。通过分析格式化串读写越界防御虚拟机的行为,提出一种新的格式化串读写越界防御模型,给出了格式化串读写越界防御虚拟机的概要设计和详细设计。实验表明,该防御虚拟机能够加载和执行用户程序, 能控制程序的执行流程,记录越界发生时进程内的内容,并提供保护、检测、响应和恢复功能。

关键词:格式化串;读写越界防御;虚拟机

中图分类号:TP309.1 文献标识码:A 文章编号:1009-3044(2015)03-0026-04

Research of Reading-writing-cross-border Defense Virtual Machine for Format String

HUANG Yu-wen

(College of Computer Science and Information Engineering,HeZe University,Heze 274015, China)

Abstract: Aim to the probelems of reading-writing-cross-border defense for format string, design a virtual machine that can defense reading-writing-cross-border action for the formatted string. By analyzing the reading-writing-cross-border action of the formatted string, puts forward a new kind of reading-writing-cross-border defense model for format string, and gives the summary and detailed design the reading-writing-cross-border defense virtual machines. Experiments show that the defense virtual machine can load and execute the user programs, and can control the execution process, record the content of the cross-border occurs within a process, and provide the function of the protection, the detection, the response and the recovery.

Key words:format string;reading-writing-cross-border defense;virtual machine

1 研究背景

1999年9月, Tymm Twillman发现第一个格式化串读写越界漏洞,当时没有引起重视。2000 年6月, BugTraq公开发布wu-ftpd2.6.0软件的格式串读写越界漏洞,格式串读写越界漏洞的危害开始逐渐被引起重视[1]。截止到2013年10月,中国国家安全漏洞库网站已发布格式化串读写越界漏洞362个,Common Vulnerabilities and Exposures(CVE)网站已发布格式化读写越界漏洞740个。格式化读写越界漏洞出现的历史虽然比较短,但攻击者可以利用这些漏洞进行远程攻击,并可以往任意地址写任意内容,格式化串读写越界攻击是非常致命的[2]。

现有格式化读写越界防御方法包含静态和动态两种方式,静态防御方法不执行源程序,通过词法分析方式检测格式化串读写漏洞的存在,常用的静态检测工具有Pscan和Cqual等[3]。动态防御方法在程序运行中进行,常用的动态防御工具有Libformat、FormatGuard、Whitelists[4]和FormatShield[5]等。静态防御方法对源程序进行检测,而很多时候源程序无法获取,并且静态防御方法存在较多误报。现有动态防御方法在程序运行过程中检测到错误,但并不能阻止程序的执行。针对现有格式化串读写越界防御存在的问题,本文设计一种能够防御格式化串读写越界的虚拟机,虚拟机在程序的执行过程中,通过时刻检测、控制部分关键指令来防御格式化串读写越界。当读写越界发生时,能控制程序的执行流程,记录越界发生时进程内的内容,并提供保护、检测、响应和恢复功能。

2 格式化串读写越界防御虚拟机的行为

格式化串读写越界防御虚拟机系统的总体行为是其若干有序活动组成的若干有序子集,按彼此关系构造出来的从系统输入到输出的所有映射。

定义 2-1格式化串是指含有格式化参数的字符串。记为:

[format_string:=(αβ)?]

其中,[format_string]表示格式化串, [α]代表普通字符串, [β]代表格式化参数。格式化参数以%作为起始点,以格式字符作为终结点,起始点和终结点之间可以含有格式说明符号。

定义2-2 格式化串读活动是将外部数据流由格式化函数影射到进程内存的变量列表空间中。记为:

[δread:out_data×fuction→memory]

其中,[δread]表示格式化串读活动, [out_data]代表外部数据流,[fuction]表示通过格式化函数进行的操作, [memory]代表正在运行的进程内存区域。

定义 2-3格式化串写活动是将进程内存的变量列表空间中的数据由格式化函数影射到外部数据流中。记为:

[δwrite:memory×fuction→out_data]

其中,[δwrite]表示格式化串写活动。

定义 24 格式化串读写越界行为是指当执行格式化串读写操作时数据超过内存地址边界,从而影射相邻内存块的活动。记为:

[ψsrwover:=(memory,out_data,?srwover,ξsrwover)]

[ψsrwover_act:δread:out_data×fuction→memoryδwrite:memory×fuction→out_data]

[?srwover:={δread,δwrite,δtrue_act,δnormal_act}]

[ξsrwover:=δread,δtrue_act,δread,δnormal_act,δwrite,δtrue_act,δwrite,δnormal_act]

[ψsrwover]代表格式化串读写越界行为,[ψsrwover_act]代表格式化串读写越界活动的映射关系,[?srwover]是格式化串读写越界的基本活动,[ξsrwover]活动之间的关系,[δtrue_act]代表正常活动,[δnormal_act]代表越界活动。

定义2-5程序加载行为是指分析文件、管理内存布局、内存映像和指令地址重定位四个活动集合及其活动序列。记为:

[ψload:=dfovm_load, file,?load,ξload]

[ψload_act: dfovm_load, file→process,heap]

[?load:=δanalysis,δmanager,δimagine,δrelocate]

[ξload:=δanalysis?δmanager?δimage?δrelocate]

[ψload]代表程序加载行为,[ψload_act]代表程序加载活动的映射关系,[?load]代表程序的加载活动集合,[ξsrwover]活动之间的关系,[δanalysis]代表分析文件活动,[δmanager]代表管理内存布局活动,[δimagine]代表内存映像活动,[δrelocate]代表地址重定位活动。

定义2-6指令执行行为是将用户程序的目标状态映射为机器的行为状态,是取指令、识别指令和解析指令3个活动集合及其活动序列。记为:

[ψrun:=dfovm_cpu,heap_code,?run,ξrun]

[ψrun_act:{dfovm_cpu,heap_code}→{dfovm,action}]

[?run:=δfetch,δrecognize,δinterpret]

[ξrun:=δfetch?δrecognize?δinprect]

[ψrun]代表指令执行行为,[ψrun_act]代表指令执行活动的映射关系,[?run]代表指令执行行为活动集合, [ξrun]活动之间的关系,[δfetch]代表取指令活动,[δrecognize]代表识别指令活动,[δinprect]代表解析指令活动。

定义2-7 系统调用行为是装载动态库、获取引用函数和释放动态库活动的集合及其活动序列。记为:

[ψsyscall::=file,lib_function,?syscall,ξsyscall]

[ψSyscall_act:file,lib_function→dfovm,action]

[?syscall=δloadlib,δgetpro,δfreelib]

[ξsyscall:=δloadlib?δgetpro?δfreelib]

[ψsyscall]代表系统调用行为,[ψSyscall_act]代表系统调用活动的映射关系,[?syscall]代表系统调用活动集合, [ξsyscall]代表活动之间的关系,[δloadlib]代表装载动态库活动,[δgetpro]代表获取引用函数活动,[δfreelib]代表释放动态库活动。

定义2-8:格式化串读写越界防御行为是指在格式化串读写越界过程中对进程中堆栈信息的保护、检测、响应和恢复活动的集合及其活动序列。记为:

[ψdefend?=over_action,measure,?defend,ξdefend]

[ψdefend_act:{dfovm,over_action}→measure]

[?defend:=δprotect,δdetect,δrespond,δrecover]

[ξdefend:=φprotect?δdetect?δrespond?δrecover]

[ψdefend]代表系统调用行为,[ψdefend_act]代表系统调用活动的映射关系,[?defend]代表系统调用活动集合, [ξdefend]代表活动之间的关系,[φprotect]代表保护活动,[δdetect]代表检测活动,[δrespond]代表响应活动,[δrecover]代表恢复活动。

定义 2-9:格式化串读写越界防御虚拟机系统的行为是虚拟机加载用户程序、执行用户程序、进行系统调用和防御格式化串读写越界的活动集合及其活动序列。记为:

[ψdfovm:=dfovm,file,?dfovm,ξdfovm]

[ψdefovm_act:defovm,file→over_action,mersure]

[?dfovm:=δload,δrun,δsyscall,δdefend]

[ξdfovm=δload?δrun?δcallsys?δdefend]

[ψdfovm]代表格式化串读写越界防御虚拟机系统的行为,[ψdefovm_act]代表防御虚拟机系统活动的映射关系,[?dfovm]代表防御虚拟机系统活动集合, [ξdfovm]代表活动之间的关系,[δload]代表加载用户程序活动,[δrun]代表执行用户程序活动,[δcallsys]代表进行系统调用活动,[δdefend]代表防御格式化串读写越界的活动。

3系统模型

格式化串读写越界防御虚拟机从初始化状态开始,经过保护状态、检测状态、运行状态、判定状态和相应状态,最后到达恢复状态。格式化串读写越界防御虚拟机的系统模型如图1所示。

图1 格式化串读写越界防御虚拟机的系统模型

相应状态设置三类响应,分别对读出错、写出错和系统调用出错进行相应。恢复状态从存储文件中取出保存的数据信息,能够使系统恢复到格式化串读写越界之前的状态。

4 格式化串读写越界虚拟机的概要设计

4.1 设计目标

格式化串读写越界防御虚拟机设计目标可以通过格式化串读写越界防御虚拟机用例图来描述。格式化串读写越界防御虚拟机用例图如图2所示。

1) 虚拟机能够加载用户程序并为用户程序提供所需的运行时环境。如设置程序运行时所需的文本段、数据段、堆栈段等,并初始化运行环境。

2) 虚拟机和正常机器一样对程序进行执行,对指令进行分析和执行,并且虚拟机能够进行系统调用。

3) 能够检测、防御格式化串读写越界行为,能够记录格式化串读写越界发生时内存中的内容,为防御者提供第一手资料。当虚拟机检测到发生格式化串读写越界时,虚拟机能够为防御者提供相应的选择处理,是继续执行用户程序还是终止程序的运行。

图 2 格式化串读写越界防御虚拟机用例图

4.2虚拟机的基本体系结构

根据系统的设计目标和虚拟机系统要达到的功能,设计虚拟机的基本体系结构如图3所示:

图3 格式化读写越界防御虚拟机的基本体系结构

该虚拟机采用模块化设计,利用操作系统提供的功能,建立运行文件的虚拟平台,并在进程执行过程中进行格式化串读写越界防御。装载器模块负责加载程序,创建进程运行时内存空间, 为程序正常运行建立必要的初始环境,并且重定位指令,把指令首地址交付给虚拟cpu负责识别和解释。虚拟CPU模块:是虚拟机的核心,主要仿真真实的CPU对程序的机器指令码进行取指、译码和解释执行,并且在指令的执行过程中完成格式化串读写越界的防御。当用户地址超出正文段范围时,系统调用模块完成系统函数的调用。防御模块负责当虚拟机检测到格式化读写越界发生时,起到防御越界攻击的功能。

4.3系统程序流程图

根据系统的设计目标,设计规划格式化串读写越界防御虚拟机系统的程序流程图,如图4所示。

图 4 虚拟机的系统程序流程图

5 详细设计

虚拟机在指令运行过程中,通过时刻检测、控制关键指令的执行以及验证地址信息的完整性动态检测和防御格式化串读写越界。

5.1程序加载模块设计算法

程序加载模块通过两次加载实现,第一次操作系统把虚拟机程序加载到其内存空间,第二次虚拟机加载用户所要执行程序到虚拟机的内存。虚拟机加载用户程序的算法如下:

1)分析文件结构,计算文本段、数据段所占有空间,申请内存空间,如果需要内存超出操作系统提供的内存,则退出虚拟机的运行,并做日志记录。

2)划分文本段、数据段、构造堆/栈,把文本段设置可读、可执行、不可写,数据段设置可读、可写,不可执行,堆和栈段设置可读可写,不可执行;为各段内存空间设置边界寄存器,以防虚拟机在执行读写期间发生异常;

3)把文件中的数据和指令写到设置好的数据段和文本段中。

4)虚拟机重定位程序映像指令地址,对正文段的指令进行重新定位,并把结果保存在正文段。

5)将程序首指令地址赋于虚拟机的IP寄存器;

5.2 指令运行模块设计算法

指令运行模块负责对用户程序中的指令运行情况,该模块通过监测关键指令的运行来判断是否发生格式化串读写越界,并把指令执行的结果和出错情况写进日志记录文件中。指令执行模块首先进行指令识别,并把识别的信息保存到指令结构体变量中,以供指令解释时用到,指令执行算法描述主要包括以下几个步骤:

1) 首先取出虚拟机IP寄存器的值,并获取各种常用寄存器的数值。

2) 根据IP值从文本段中取出当前指令,并放到结构体变量中。

3)进行操作码的判断,从内存中取出的操作码和存储文件中预定义的二进制编码比较,判断属于那个功能指令。

4)进行指令操作数判定,依据具体的指令,判断源操作数和目的操作数,并判断该操作数的寻址方式。确定源和目的操作数操作数的基址、变址和比例因子;判断该指令的长度。

5)对指令进行解释并进行格式化串读写越界的判定。指令解释首先根据操作码,识别出来该指令属于指令编码中的那个变化形式,如果该指令操作中含有地址信息,还要保存地址信息,用于判断格式化串读写越界的发生,按照指令本身的含义进行解释并做日志记录。在解释的过程中加入判断格式化串读写越界发生的条件和显示读写越界发生时的结果,进行格式化串读写越界防御。在解释过程中,如果发生系统调用,还会执行系统调用算法。在指令解释过程中,并把出错信息写进日志记录中。

6) 根据指令的长度,IP=IP+n。

5.3系统调用模块设计

当跳转指令的执行地址跳出用户程序正文段的范围时,则判定发生系统调用,系统调用模块就负责执行用户程序涉及到系统调用,具体设计如下:

1) 首先装载所调用的动态库。

2) 获取所调用的动态库函数。

3) 释放所调用的动态库。

5.4防御和日志模块设计

指令运行期间,格式化串读写越界防御虚拟机把运行过程中出现的读写越界信息记录到日志。格式化串读写越界防御虚拟机利用日志判定中下一步的操作,如果判定是属于格式化读写越界错误,则根据标志位判断是否允许用户干涉虚拟机的运行情况:终止程序还是继续按照发生读写越界前的地址状态正确运行。继续执行所获取的地址信息是从预先保存的地址列表中取出,该地址列表也是判断读写越界的参考点。

6格式化串读写越界防御虚拟机系统验证

图5 虚拟机申请内存情况

然后验证虚拟机的指令执行功能,包括格式化函数调用情况,近call指令执行情况和远call指令执行情况。当调用格式化函数时,指令的执行结果如图6所示。

图 6 格式化函数调用情况

图 7 读写越界时的执行结果

最后验证读写越界防御功能和日志功能。当发生格式化串读写越界的时候,虚拟机暂停,有用户程序负责选择下一步的执行结果,是继续执行还是终止程序的运行。格式化串读写越界时的执行结果如图7所示。

DFOVM和其余格式化读写越界检测工具的比较结果如图8所示。

从上述比较结果可以看出,DFOVM不仅不需要程序源代码,而且还能控制程序执行流程,并具有日志和恢复功能。

7 结论

根据验证虚拟机的加载功能的运行结果和测试记录,虚拟机 DFOVM系统达到了内存申请、程序映象Image及指令重定位功能,程序加载功能达到了系统的设计目标。根据验证虚拟机DFOVM的运行结果和测试记录,DFOVM能够做到读取指令、分析指令、识别指令和运行指令等功能。DFOVM能够通过检测关键指令来判断溢出并能检测到格式化读写越界的发生,能够达到保护、检测、响应和恢复功能,虚拟机DFOVM达到了系统的设计目标。

参考文献:

[1] S T TESO. Exploiting Format String Vuluerabilities [EB/OL].[2001-09-01/2008-09-10]. http://crypto.stanford.edu/cs155/papers/formatstring-1.2.pdf.

[2] 匡春光,王春雷,何蓉晖.一种格式化字符串脆弱性动态检测技术[J].微电子学与计算机, 2012,29(2):107-110.

[3] 黄玉文,刘春英,李肖坚. 基于可执行文件的缓冲区溢出检测模型[J].计算机工程,2010,36(2):130-134.

[4] Kohli P,Bruhadeshwar B. Formatshield: A Binary Rewriting defense against rormat string Atacks[C]. Proceedings of the 13th Astralasian conference on information Seeurity and Privaey,Darlinghurst,2008.

[5] Ringenburg F,Grossman D. Preventing format string attacks via automatic and efficient dynamic checking[C]. New York:Proceedings of the 12th ACM conference on computer and communications security, 2005.

猜你喜欢
虚拟机
基于VMware的计算机网络课程虚拟实验平台搭建
虚拟机技术在计算机安全技术实验教学中的应用
还原卡与虚拟机技术在计算机实验室中的使用对比陈治
虚拟机技术在计算机组装课堂中的应用
虚拟机服务器在教学实践中的探索研究
浅谈计算机系统虚拟化网络设置方案
任务驱动教学法在《网络应用服务管理》教学中的应用
虚拟机局域网组建技术应用初探
虚拟机在中职企业网搭建中的应用
虚拟机多平台服务器研究应用