APP下载

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

2015-03-23王建宇

河南科技 2015年22期
关键词:格式化越界攻击者

王建宇

(黑龙江省计算机软件研究中心,黑龙江 哈尔滨 150028)

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

王建宇

(黑龙江省计算机软件研究中心,黑龙江哈尔滨150028)

本文基于对格式化串读写越界的定义较深入地探讨了格式化串攻击的利用,并基于此提出对格式化串攻击进行动态防御的技术,对于提高格式化串的安全性具有一定的借鉴意义。

格式化串;动态防御技术;信息安全

1 格式化串攻击

格式化串读写越界攻击主要是利用产生格式化串读写越界对进程堆栈布局进行窥视,对程序执行进而恶意控制的行为。主要采用因设计的格式化函数程序中存在的错误而导致安全漏洞,利用对精心编制的含有格式化指令的文本字符串进行传递,使任意命令由目标程序进行执行的过程被称为格式化串攻击。格式化字符串漏洞与很多安全漏洞相同,都是因程序员不细心而引起。如程序中printf("%s",str),为提高效率并使执行时间得到一定程度的节约,在源码中就有时编写为printf(str),少编写6字节字符。这样编写的程序尽管没有错误,但容易产生格式化串攻击。

2 格式化串读写越界攻击的不利后果

2.1导致进程发生崩溃

攻击者若对格式化串进行构造,就可利用其存在的读写越界漏洞引起进程的崩溃。编制如printf("%s%s%s%s%s%s%s %s%s%s%s")的程序代码就容易形成无效指针,由于“%s”将根据堆栈地址对相应内容进行显示,应用较多的“%s”就将引起遇到无效地址的可能性,进而使进程因无效地址而发生崩溃。

2.2任意读

"%x"等格式符在格式串函数中可以对应变量值进行显示,但格式化函数不存在对其对应变量存在性的检查机制,也不论对应变量地址是何种类型。攻击者若对格式串进行构造,对该格式化串读写越界漏洞进行利用,就可对内存任意地址进行读取。比如printf ("%08x%08x%08x%08x "),能够从当前进程栈底向栈顶显示内容,在输入%x较多时,攻击者甚至可实现对进程栈内容的全部获取。程序流、局部函数变量等重要信息存放于栈中,攻击者通过这些信息非法得到的攻击代码偏移值都是正确的。若将读取地址置于栈中的合适位置,就可实现对任意地址内容的读取。如自0x07504612开始要显示相应内容,可将x12x46x50x07作为开始的格式化串,再采取对进程栈中内容查看方法确定显示地址和%s间存在%x的数量,利用构造字符串通过%s将0x07504612开始的内容进行显示。

2.3任意写

"%n"等向内存写入的格式符都位于格式化串中,而格式化函数不存在确保写入地址为当前进程的合法地址的而有效机制。攻击者对格式化串读写越界漏洞进行利益,若可对格式化串进行构造,就可以向内存任意地址进行写入。如格式符"%n"在遇到该格式符前将格式串函数的字符打印个数向对应整数指针地址中写入。以下程序将16向printf("1a2a3a4a5a6a7a8a%n",&x)写入,利用这种方法对程序printf ("x12x46x50x07%07x%07x%07x%07x%n")进 行 构造,%07x格式移动格式化串指针,当移至根据低位字节在前的顺序,即0x07504612。0x0750 4612被最后的%n格式视为整数指针,由于x12x46x50x07是4个字符,4个%07x为32字符,因此写入到0x07504612地址中的内容就是36。利用对字符串的构造,还能构造数字。但数字较大时,就要构造很长的字符串,导致难以实现。改进方法主要是在每次写入时确保低位字节的数值就是想要的内容,每次写入数值都不能大于255,再向前移动指针一字节,利用连续4次写入操作实现这个效果。为提高定位的精确性,格式符还能利用%u。

2.4受到高级攻击

攻击者对格式化串读写越界漏洞的利用,可导致进程崩溃并对任意地址进行读写,利用以上的基本技术还能增加攻击的复杂性。如对返回当前执行函数的地址进行覆盖,在执行完函数返回时,可根据攻击者意愿对程序流程进行改变。该技术应了解堆栈中返回存储函数地址的存储单元地址及shellcode首地址,格式化串读写越界对覆盖函数返回地址进行攻击,一般会采取两种方法:一是对调用该函数的函数返回地址进行覆盖,这类似于攻击普通缓冲区溢出。二是对格式化函数返回地址进行覆盖,该方法精确度更高,即便是在比较苛刻的条件下也能进行应用。

3 动态防御技术

动态防御技术是以进程格式化串读写越界为基础,其主要思想是在运行进程过程中,执行程序防御格式化串读写越界,在运行过程中防御系统各部分内容。利用执行处理机过程中对写入格式化函数指令加强边界检查,实现对格式化串写越界的动态防御。在布局程序内存方面,利用将另外一段内存的开辟对起始终止地址中的内容进行保存,确定写入当前内存的内容是否产生格式化串读写越界。利用对紧邻最后格式参数后的保存内容对写入是否产生格式化串读写越界进行比较,根据对输入参数边界后的紧邻格式化函数保存数据,当发生格式化串读写越界时可将被破坏数据进行恢复。

4 结语

综上所述,本文利用分析格式化串攻击的原因及不利后果,提出动态防御技术,使其在运行程序过程中对产生的格式化串读写越界攻击进行动态防御,以提高程序运行的安全性。

[1] 叶焰峰.数组越界的故障模型及其检测方法研究[J],微计算机信息,2013.15

[2] 高传平.数组越界的静态测试分析[J],计算机工程,2014.10

[3] 潘勇慧.浅谈计算机病毒的特点及防御技术[J],硅谷,2014.8

[4] 闵锐,杨楚华.防火墙协同防御技术研究[J],计算机安全,2013.11

TP393.08

A

1003-5168(2015)11-006-01

王建宇(1977—),男,助理研究员,主要从事应用技术研究工作。

猜你喜欢

格式化越界攻击者
机动能力受限的目标-攻击-防御定性微分对策
现代人守则:昏死之前请把手机格式化
正面迎接批判
格式化
阵列方向图综合中PSO算法粒子越界处理研究
没有炊烟的城市(选章)
有限次重复博弈下的网络攻击行为研究
越界婚姻的伦理窘境:评史密斯《南街》
越界先锋:从文艺规训到文化批判——论周宪文艺思想与治学理念