格式化串读写攻击的利用和动态防御技术

题名

  格式化串读写攻击的利用和动态防御技术

作者

  菏泽学院计算机与信息工程系 山东 菏泽  27400

摘要

  首先给出了格式化串读写越界的定义,然后给出了格式化串攻击的利用,最后提出了一种动态防御格式化串攻击的技术。

关键词

  格式化串;攻击;动态防御;高级攻击

1,格式化串攻击的定义

  格式化串读写越界攻击是通过发生格式化串读写越界窥视进程堆栈布局进而控制程序执行的恶意行为。格式化串攻击主要是利用由于格式化函数的微妙程序设计错误造成的安全的漏洞,通过传递精心编制的含有格式化指令的文本字符串,以使目标程序执行任意命令。格式化字符串漏洞同其他许多安全漏洞一样是由于程序员的懒惰造成的。如代码:printf(“%s”,str);为了节约时间和提高效率,并在源码中少输入6个字节,有时候写成printf(str);此时写虽然程序正确,但可能造成格式化串攻击。

2 格式化串读写越界攻击的利用

2.1 使进程崩溃

  攻击者如果能够构造格式化串,就能利用这个格式化串读写越界漏洞使进程崩溃。构造类似printf(“%s%s%s%s%s%s%s%s%s%s%s%s”)的语句能很容易地产生无效的指针,因为”%s”按堆栈提供的地址去显示相应的内容,使用尽可能多的”%s”就极有可能遇到无效地址,从而使进程遇到无效地址崩溃。

2.2 任意读

  在格式串函数中,”%x”等格式符可以显示对应变量的值,但格式化函数没有机制去检查是否真的有对应的变量存在,也不管对应的变量地址是用户数据还是系统数据。利用该格式化串读写越界漏洞,攻击者如果能够构造格式串,就能实现读内存任意地址的目的。例如构造printf(“%08x%08x%08x%08x\n”);可显示从当前进程栈底向栈顶的部分内容,当输入多个%x时,攻击者甚至能够获取整个进程栈的内容。栈中存放着程序流,局部函数变量等重要信息,攻击者能利用这些信息获得正确的攻击代码的偏移量。攻击者如果能将要读的地址放到合适的栈位置,就能够读任意地址的内容,例如,要显示自0x08204810开始的内容,可以把\x100\x48\x20\x08作为格式化串的开始部分,然后通过构造字符串(通过查看进程栈中内容,决定显示地址和%s间有多少个%s),通过%s显示自0x08204810开始的内容。

2.3 任意写

  在格式化串中,可以包括”%n”等写内存的格式符,而格式化函数没有机制保证要写的地址是当前进程的合法地址。利用该格式化串读写越界漏洞,攻击者如果能够构造格式化串,就能实现写内存任意地址的目的。例如,格式符”%n”将格式串函数在遇到该格式符前已经打印的字符个数写到相应整数指针所指示的地址里,下面的语句将16写到变量printf(“1a2a3a4a5a6a7a8a%n”,&x);利用该技巧构造下面的语句printf(“\x10\x48\x20\x08%08x%08x%08x%08x%n”);%08x格式移动格式化串指针,当移动到按低位字节在前的字节顺序,就是0x08204810。最后的%n格式将0x08204810当着整数指针,因为\x10\x48\x20\x08是4个字符,4个%08x是32个字符,所以36被写到0x08204810。通过构造合适的字符串,就可以构造合适的数字。然而,当数字很大时,要构造的字符串就可能很长,以至于无法实现,改进的办法是在每次写时保证低位字节是相要写的数值,这样每次要写的数值不会超过255,然后将指针向前移动一个字节,通过4次的连续写操作来达到目的,为了精确的定位,还可以使用%u格式符。

2.4 高级攻击

  利用格式化串读写越界漏洞,攻击者能使进程崩溃和读写任意地址。综合利用这些基本技术,还能够实现更复杂的攻击。如覆盖当前执行函数的返回地址,当这个函数执行完毕返回的时候,就可以按照攻击者的意愿改变程序的流程了。使用这种技术的时候需要知道以下两个信息:堆栈中存储函数的返回地址的那个存储单元的地址以及shellcode的首地址。格式化串读写越界攻击覆盖函数返回地址通常有两种选择:1,覆盖邻近的一个函数(调用该函数的函数)的返回地址,这是与普通缓冲区溢出攻击相类似的方法。2,覆盖格式化函数自身的返回地址,该方法具有更高的精确度,即使是在条件较为苛刻的情况下也可以使用。

动态防御技术

  基于进程的格式化串读写越界动态防御技术,基本思想就是在进程运行时系统执行过程中进行格式化串读写越界防御,从运行时系统各组成部分进行防御,程序内存布局,处理机执行,系统调用的处理以及输入输出的控制,都是格式化串读写越界动态防御技术所关心的问题。例如通过监控进程的外界输入,凡是输入内容为格式化参数,都认为会产生格式化串读写越界;通过在处理机执行期间加强对格式化函数的写操作指令进行边界检查,动态防御格式化串写越界;在程序内存布局上,通过开辟另外一段内存来保存起始和终止地址的内容来判断当前内存写入是否发生格式化串读写越界;通过保存紧邻最后一个格式参数之后的内容来比较写入是否发生格式化串读写越界;通过保存紧邻格式化函数输入参数边界之后的数据,当格式化串读写越界发生时恢复被破坏的数据。

4 结论

  通过对格式化串攻击的分析,提出了一种动态防御技术,该技术能够在程序运行过程中动态防御格式化串读写越界攻击。

参考文献

[1]叶焰峰.数组越界的故障模型及其检测方法研究[J].微计算机信息,2007,23卷:145-146.
[2]高传平.数组越界的静态测试分析[J].计算机工程,2006,32 卷:70-71

作者简介

  殷超(1984-),菏泽学院计算机与信息工程系,助教,在读硕士研究生,主要研究方向为软件工程,网络安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值