您现在的位置是:百科 >>正文
黑客利用软件实现中的缓冲区溢出的漏洞
百科5人已围观
简介2010年,伊朗核设施里的离心机一批批报废。操作员看着监控屏幕上的数据发懵——设备运转正常,温度压力都在阈值内,可铀浓缩效率就是往下掉。后来查出来,是Stuxnet病毒在作祟。它钻进西门子工控系统,篡 ...
2010年,黑客缓冲伊朗核设施里的利用漏洞离心机一批批报废。操作员看着监控屏幕上的软件数据发懵——设备运转正常,温度压力都在阈值内,实现可铀浓缩效率就是区溢往下掉。后来查出来,黑客缓冲是利用漏洞Stuxnet病毒在作祟。它钻进西门子工控系统,软件篡改离心机转速,实现让它们一会儿狂转一会儿骤停,区溢金属疲劳到直接散架。黑客缓冲这个病毒怎么进去的利用漏洞?答案藏在Windows系统的一个缓冲区溢出漏洞里。
缓冲区,软件说白了就是实现程序在内存里划出的一块临时区域,用来存用户输入的区溢数据。比如你登录网站,输入用户名,程序会先开个32字节的小盒子,把你的名字放进去。正常情况没问题。可要是你输入了200个字节呢?多出来的168个字节没地方去,就会溢出到相邻的内存空间。那地方可能存着程序返回地址、函数指针,或者别的关键数据。攻击者精心构造这串超长输入,覆盖掉返回地址,让程序跳转到他们指定的代码上执行。这就是缓冲区溢出。
听起来像天方夜谭?1996年,一个叫Aleph One的人在《Phrack》杂志上发了篇《Smashing The Stack For Fun And Profit》,手把手教人怎么利用栈溢出。文章里有个例子:一段不到20行的C代码,输入特定字符串就能拿到root shell。那时候Linux内核才2.0版本,很多服务程序连基本的边界检查都不做。邮件服务器、FTP、telnet,随便找个监听端口的程序,都可能被溢出打穿。
为什么这种漏洞反复出现?写代码的人图省事。C语言里的strcpy、sprintf、gets这些函数,压根不检查目标缓冲区大小。程序员觉得“用户不会输入那么长的东西”,或者“这个字段前端已经限制长度了”。前端限制?抓个包直接改POST请求,浏览器那点校验形同虚设。2003年冲击波蠕虫爆发,就是因为Windows的RPC服务里有个DCOM接口没做长度检查。蠕虫在内存里疯狂复制自己,把整个网络堵死。微软后来发了补丁,可全球还是有几十万台机器中招。
攻击者怎么知道该覆盖哪些字节?他们用模式字符串——比如“Aa0Aa1Aa2...”这种递增序列,输入进去看程序崩溃时EIP寄存器里的值。如果EIP变成了“41326741”,那说明偏移量是2674字节。接着把shellcode放在缓冲区开头,返回地址指向那片区域。现代系统有ASLR和DEP,地址随机化加上数据不可执行,难度大了不少。可攻击者也有办法:用ROP链把现有代码片段拼起来,绕过DEP;或者先泄露一个内存地址,算出基址再打。
我见过一个真实案例。某企业内网有个老旧的打印管理软件,运行在Windows Server 2003上。安全团队扫描发现它监听TCP 515端口,用LPR协议。发一个超过1024字节的打印任务名,服务直接崩掉。用Immunity Debugger附加进程,构造特定字符串,两小时内就拿到了SYSTEM权限。厂商早就不维护这个版本了,补丁?不存在的。最后只能把这台机器从网络里摘出来,单独放个VLAN。
缓冲区溢出不是历史遗迹。2021年,Pwn2Own大赛上还有选手用溢出漏洞攻破路由器。物联网设备更糟——固件里的二进制程序往往编译于十年前,连栈保护都没开。你家里的智能摄像头、NAS、甚至扫地机器人,都可能带着这种漏洞。攻击者不需要多高深的技术,一个Python脚本加上pwntools库,远程就能打。
怎么防?写代码的用安全函数,比如strncpy替代strcpy,或者干脆用Rust、Go这种内存安全语言。系统层面开ASLR、DEP、Stack Canary。运维的勤打补丁,别让老服务裸奔。可现实是,遗留系统动不了,厂商停止支持,业务部门嫌升级麻烦。漏洞就这么留着,像颗没拔引信的地雷。
Tags:
上一篇:php漏洞怎么修复
下一篇:板娘小薇sans审判
相关文章
dnf地下城与生活钓鱼种类
百科《dnf地下城与生活钓鱼种类》 钓鱼系统上线那会儿,我蹲在赫顿玛尔后街的河边整整一下午。旁边一个红眼老哥连竿上了三条鳗鱼,我这边浮标纹丝不动。后来才发现,他站在河湾拐角的深水区,我傻乎乎杵在浅滩——这 ...
【百科】
阅读更多补单网站平台
百科老周在义乌做小商品批发,去年冬天接了个急单,客户要三万件圣诞挂件,七天交货。他店铺刚开三个月,权重低,自然搜索根本排不上号。运营给他出了个主意:找补单平台,三天刷两百单,把关键词顶上去。老周照做了,单 ...
【百科】
阅读更多下载nessus漏洞评估
百科Nessus 的安装包在 Tenable 官网就能下,但很多人卡在第一步——找不到那个下载按钮。页面设计得不算复杂,可如果你用的是社区版Nessus Essentials),入口藏得有点深。直接搜“N ...
【百科】
阅读更多