时尚

漏洞产生的原因有哪些

时间:2010-12-5 17:23:32  作者:热点   来源:热点  查看:  评论:0
内容摘要:2017年5月,WannaCry勒索病毒横扫全球150多个国家,医院、工厂、政府机构瞬间瘫痪。事后调查发现,攻击者利用的只是一个早在3月就被微软修复的漏洞——但全球仍有大量系统没有打补丁。这暴露了一个

2017年5月,漏洞WannaCry勒索病毒横扫全球150多个国家,产生医院、漏洞工厂、产生政府机构瞬间瘫痪。漏洞事后调查发现,产生攻击者利用的漏洞只是一个早在3月就被微软修复的漏洞——但全球仍有大量系统没有打补丁。这暴露了一个残酷的产生事实:多数漏洞并非黑客天才般的代码突破,而是漏洞源于人类自身最普通的疏忽。

代码是产生人写的,人就会犯错。漏洞缓冲区溢出是产生最经典的例子——程序员分配了一块固定大小的内存,却没检查输入数据是漏洞否超出边界。攻击者往里面塞入超长数据,产生多余部分溢出到相邻内存,漏洞恰好覆盖了程序执行流程的关键地址。C语言里这类问题尤其多,因为程序员要手动管理内存。我见过一位有十年经验的开发者,照样在字符串拷贝时忘了加长度限制。不是技术不行,而是人脑天然不擅长追踪所有边界条件。

逻辑错误比内存问题更隐蔽。比如某个支付系统,开发者只校验了前端提交的金额是否为正数,却忘了后端也要校验。攻击者抓包把金额改成负数,系统反而给账户加钱。这类漏洞没有复杂的汇编指令,纯粹是设计时少想了一步。更讽刺的是,很多逻辑漏洞在代码评审时就能发现,但团队往往因为赶进度而跳过评审——时间压力成了漏洞的温床。

配置错误占的比例远超想象。默认密码没改、调试接口没关、云存储权限设为公开——这些不是代码问题,是运维疏忽。2019年某知名社交平台泄露5.4亿条用户记录,原因就是第三方合作商的数据库没设密码。技术人员都知道要配防火墙,但实际操作中,为了图省事把安全组规则设为0.0.0.0/0的例子比比皆是。安全永远在便利性面前让步,这是人性。

第三方依赖是个大坑。现代软件几乎都引用开源库,而很多库的维护者只有一个人。Log4j漏洞爆发时,全球无数企业连夜排查,因为那个Java日志库被嵌入了上百万个项目里。你没法控制上游代码质量,只能被动等修复。更糟的是,很多团队根本不记录自己用了哪些依赖,出了事只能满世界搜索。

还有一类漏洞源于业务逻辑与安全机制的脱节。比如验证码设计得过于简单,被脚本批量绕过;或者密码重置流程里,回答安全问题就能直接改密码,而安全问题答案往往能在社交媒体上找到。这些不是技术难点,而是设计者没站在攻击者角度思考过。

归根结底,漏洞是复杂系统必然的副产品。人脑处理复杂度的极限远低于代码规模的膨胀速度。每增加一个功能、每引入一个新框架、每多一次快捷操作,都在为漏洞积累概率。哪怕是顶级安全团队,也只能降低风险而非消除风险——因为写代码的人,终究不是机器。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap