网络安全教程 田园 第3章 网络病毒的典型入侵机制

网络安全教程 田园 第3章 网络病毒的典型入侵机制

ID:43767661

大小:689.50 KB

页数:37页

时间:2019-10-14

网络安全教程 田园 第3章 网络病毒的典型入侵机制_第1页
网络安全教程 田园 第3章 网络病毒的典型入侵机制_第2页
网络安全教程 田园 第3章 网络病毒的典型入侵机制_第3页
网络安全教程 田园 第3章 网络病毒的典型入侵机制_第4页
网络安全教程 田园 第3章 网络病毒的典型入侵机制_第5页
资源描述:

《网络安全教程 田园 第3章 网络病毒的典型入侵机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第3章网络病毒的典型入侵机制3.1栈溢出攻击3.2单字节栈溢出攻击3.3堆溢出攻击3.4小结及进一步学习的指南3.1栈溢出攻击栈溢出攻击是第一代溢出攻击技术,也称为Morris代码注入。先看下面一段C语言程序,这一函数将来自外部的一串字节复制到其局部数组buffer中,你能看出什么问题吗?#defineMAX_BUFFER_SIZE256voidroutine(char*p)/*p[]是来自外部的字符串*/{intx,y,u,v;charbuffer[MAX_BUFFER_SIZE];/*将输入字符串填入buff

2、er:*/strcpy(buffer,p);…………return;}strcpy(buffer,p)将数组p[]的内容逐字节复制到数组buffer[],但没有检查p[]的实际长度是否超过buffer[]的容量,即MAX_BUFFER_SIZE!设想运行期间p[]承载的是来自外部的网络消息,而且该消息(有意或无意)确实超过了上界MAX_BUFFER_SIZE,这将导致数组buffer的溢出。图3-1栈溢出攻击图3-1栈溢出攻击(续)3.2单字节栈溢出攻击看下面的C语言程序,#defineMAX_BUFFER_SIZ

3、E256voidroutine(char*p)/*p[]是来自外部的字符串*/{charbuffer[MAX_BUFFER_SIZE];inti,n;/*将输入字符串填入buffer:*/n=strlen(p)<=MAX_BUFFER_SIZE?strlen(p):MAX_BUFFER_SIZE;for(i=0;i<=n;i++)buffer[i]=p[i];……}for循环在计算数组上界时错误地多计算了一个字节,结果在运行期间可能实际向栈帧写入257个字节,即溢出一个字节。仔细观察图3-3(a)中“父栈帧”地址

4、项的位置和含义,不难发现一条间接的攻击途径。为解释这一攻击,需要先解释一下,“Little-Endian”机器和“Big-Endian”机器的区别。如图3-2所示,详细描述了单字节溢出攻击。图3-2Little-Endian和Big-Endian机器的区别图3-3Little-Endian机器上的单字节溢出攻击细心的读者会注意到,成功实施这一攻击的关键在于能够成功伪造出父函数的栈帧。父函数的栈帧记录的是父函数在调用函数routine之前的临时状态,routine返回后其父函数需要从这一瞬间状态继续向后执行。如果父

5、栈帧伪造不当导致父函数执行发生错误,不能正常结束而返回,则攻击者将达不到执行病毒代码的目的。3.3堆溢出攻击堆(heap)在进程运行期间由操作系统动态分配并映射成为进程空间的一部分。堆溢出攻击技术,目的仍然是通过溢出篡改合法数据,再通过这一篡改改变当前进程的执行流。#defineMAX_BUFFER_SIZE256intmain(intargc,char**argv){{inti=0,ch;FILE*f;staticcharbuffer[MAX_BUFFER_SIZE];staticchar*szFilename

6、="c:\procfile.txt";ch=getchar();while(ch!=EOF){/*可能导致buffer[]溢出*/buffer[i]=ch;ch=getchar();i++;}f=fopen(szFilename,"w+b");fputs(buffer,f);……fclose(f);}以上程序中的变量buffer[]和szFilename在进程空间中的布局如图3-4(a)所示。根据程序,buffer[]由来自程序输入流的字节顺序填充,如果攻击者炮制的输入流超长而且恰好改写了紧邻buffer[]的

7、堆变量szFilename,这意味着该程序将打开一个攻击者指定的文件进行I/O操作。如果这是一个特权进程,攻击者将有机会存取操作一个本来没有权限存取的敏感文件。利用堆溢出攻击还有可能篡改进程空间中的函数地址以改变进程流程。看下面的C语言程序。#defineMAX_BUFFER_SIZE256intCallBack(constchar*szTemp){……}intmain(intargc,char**argv){{staticcharbuffer[MAX_BUFFER_SIZE];staticint(*funcpt

8、r)(constchar*);/*函数指针*/funcptr=(int(*)(constchar*))CallBack;strcpy(buffer,argv[1]);/*Sizeunchecked!*/(int)(*funcptr)(argv[2]);……}图3-4堆溢出攻击的例子:篡改变量值以上程序没有检查argv[1]是否超出长度,从而使攻击者有可能通过溢出来篡改函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。