缓冲区溢出攻击的分析与实时检测


作者:尚明磊,黄 皓


自从1988 年世界上首例利用缓冲区溢出漏洞进行扩散
的Morris 蠕虫病毒问世以来,缓冲区溢出攻击技术在互联网
上已经迅速传开,而且随着人们检测和防护技术的不断提高
也相应地变异出一些更隐蔽、更有针对性的缓冲区溢出攻击
类型。
缓冲区溢出的原因是因为C 语言并不检查缓冲区的边
界。当向一个有限空间的缓冲区中复制了过长的字符串时,
过长的字符串覆盖了相邻的存储单元,引起程序运行失败,
严重的可引起宕机、系统重新启动等后果。如果黑客利用缓
冲区溢出漏洞传入并运行精心编写的溢出字符串,就有可能
取得系统管理员的权限。接着黑客就可以在目标系统中建立
新建管理员账号、植入后门程序以及擦除活动日志,然后长
期控制它而不会被发现。缓冲区溢出是一种编程错误,但却
给网络带来极大的危害。因此能否在危害发生前迅速检测出
缓冲区溢出攻击,对于保护网络安全有着重要的意义。
1 缓冲区溢出的原理
计算机程序在内存中通常分为代码段、数据端和堆栈3
部分。代码段用于存放程序的机器码和只读数据。数据段用
于存放程序中的静态数据。动态数据则通过堆栈来存放。

当程序中进行函数调用时,计算机做如下操作:首先把
参数压入堆栈;然后保存指令寄存器(EIP)中的内容作为返回
地址(RET);第3 个放入堆栈的是栈基地址(EBP);再把当前
的栈指针(ESP)拷贝到EBP,作为新的栈基地址;最后为本
地变量留出一定空间,把ESP 减去适当的数值。下面以一个
具有典型缓冲区溢出漏洞的C 程序为例:
void function(char *str)
{ char buffer[80];
strcpy(buffer,str); }
void main()
{ int t;
char buffer[128];
for(I=0;I<127;I++)
buffer[I]=’A’;
buffer[127]=0;
function(buffer);
print(“This is a test/n”); }
程序是从内存低端向内存高端按顺序执行的,而堆栈的
增长方向与内存的增长方向相反,见表1。
表1 调用子程序function()时,堆栈情景
低地址 ------------------------------------------------------

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
缓冲区溢出攻击是一种常见的网络安全漏洞,它利用了程序中的缓冲区溢漏洞,向缓冲区输入超其容量的数据,从而攻击系统。 首先,为了检测缓冲区溢出攻击,我们可以使用静态分析和动态分析两种方法。静态分析是通过对程序的源代码或二进制代码进行分析,寻找潜在的缓冲区溢漏洞。动态分析则是在程序的执行过程中监控缓冲区的使用情况,如果发现缓冲区溢现象,就进行警报或阻止攻击。 其次,剖析缓冲区溢出攻击意味着研究攻击者利用的具体漏洞和攻击方式。攻击者一般会通过向缓冲区输入过长的数据,覆盖缓冲区之后的重要数据或者修改程序的返回地址,进而注入恶意代码并执行。在剖析过程中,我们需要深入了解攻击者的手法和原理,以便更好地进行防御。 最后,预防缓冲区溢出攻击是非常重要的。首先,编写安全的代码是关键。程序员需要对输入进行合理的验证和范围检查,确保输入数据不会超过缓冲区的容量。其次,使用编程语言或开发框架提供的安全函数。这些安全函数可以自动检测和防止缓冲区溢出攻击。此外,定期更新和修复操作系统和应用程序中的漏洞,以防止攻击者利用已知的漏洞进行攻击。 总之,缓冲区溢出攻击是一种常见但可预防的网络安全威胁。通过检测、剖析和预防,可以有效地保护系统和数据的安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值