.
3 结束语
以上描述了攻击者如何利用缓冲区溢出机制编写恶意代码,进行缓冲区溢出攻击.针对这些特征及攻击手段,防御的主要方向有以下几方面.
(1)既然C库函数中的某些函数是存在漏洞的,也了解到哪些类型的函数存在这种漏洞及存在漏洞的原因,就应在编程期间有意识的避免这样程序的出现,可以在这些C库函数的基础上做一下安全的改进或者干脆就用其他安全的库函数代替.如:strncpy就可以完全代替strcpy函数;可以用strncat代替strcat;用snprintf代替sprintf,,
(2)着重注意检查边界是否越界,并及时改正.
(3)注意随时监测外部输入的数据:(A)如果数据中有较多的无意义指令NOP,AAA等,要注意,提高防范缓冲区溢出攻击的警惕,确定遭遇攻击时的防范手段.如给出异常信息等.(B)如果数据中有连续且重复的内存地址时也同样要提高警惕,对于异常信息给出异常处理.
随着科技水平的不断提高,攻击和防范的手段都在不断的改进.关于网络安全方面一向是先遭到攻击再找出相应的解决办法.其实最好的防范手段就是不断地了解攻击的方法,在被攻击之前做好防御工作,使攻击者无从下手.
图2 恶意代码的结构
由于攻击者没办法精确地掌握被缓冲程序堆栈中Shellcode的具体位置,所以为加快攻击速度,加强攻击准确性,会在Shellcode前面加一段较长的无意义操作指令(sledge),这样即便被改变后的EIP不能确切地指向Shellcode的位置,也可以通过加长sledge段来确保EIP指到Shellcode前面,确保程序最终会无误的执行到Shellcode代码.图2为恶意代码的结构,其中:
11NNN,(sledge)是一段无实际意义,用来占位的指令如NOP,还有许多指令可以代替NOP.诸如:AAA,AAS,CLC,CLD,CMC等指令.
21Shellcode是完成攻击的主要执行部分.执行后可以得到一个系统Shell.如果存在漏洞的程序是以root为权限运行的,那么攻击者就会得到有root权限的shell,则被攻击主机将完全被攻击者控制.
Shellcode中含有一系列系统调用,如:exec(),system(),socket(),setuid(),open(),,.通过这些系统调用,攻击者可以修改权限,获得shell等等.
31RARA,即为攻击者希望能够覆盖EIP准备好的返回地址.为了提高命中率,这一段通常连续且重复.
参考文献:
[1] 程琼,李王旬.C语言程序设计中的缓冲区溢出问题
[J].安徽教育学院学报,2005,23(3):47.
[2] 尚明磊,黄皓.缓冲区溢出攻击的分析与实时监测
[J].计算机工程,2005,31(12):36.
[3] 谭浩强.C程序设计[M].2版.北京:清华大学出
版社,1999:143.
[4] 牛连强,张起栋.关于C语言中若干问题的探讨
[J].沈阳工业大学学报,1998,20(3):45.
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新经管营销C语言源程序的缓冲区溢出漏洞分析及解决方案(4)全文阅读和word下载服务。
相关推荐: