从系统整体看 漏洞包括哪些方面
一个系统被攻破,从系往往不是统整体因为某个地方做得不够好,而是漏洞因为漏掉了一个本以为“没人会去碰”的角落。2021年Log4j漏洞爆发时,包括无数企业的从系安全团队连夜加班,问题不在防火墙,统整体不在WAF,漏洞甚至不在代码逻辑本身——而是包括一个日志库在拼接字符串时,顺手把用户输入当成了可执行代码。从系这就是统整体系统漏洞的典型面貌:它不在你盯着的地方,而在你忽略的漏洞层级。 从系统整体来看,包括漏洞至少横跨五个层面,从系而且它们之间经常互相掩护。统整体 SQL注入、XSS、命令执行,这些老面孔至今没消失。原因很简单——开发者写代码时关注的是“功能跑通”,不是“输入是否恶意”。我见过一个内部管理系统,登录接口用了参数化查询,看起来很规范;但同一个项目里,导出报表的功能直接把用户填的日期拼进了SQL。攻击者不需要攻破登录,只要在日期框里塞一段语句,整张用户表就出去了。代码层的漏洞有个特点:修复成本最低,但发现成本最高,因为它藏在业务逻辑的缝隙里。 Redis未授权访问、Elasticsearch裸奔、S3存储桶公开可写——这些事年年上新闻,年年有人中招。不是技术难,是默认配置太“方便”。装完Redis,默认绑定0.0.0.0,没有密码;开发者觉得“内网嘛,没事”。结果攻击者从一台被攻陷的办公电脑跳进来,直接写SSH公钥。配置漏洞的可怕之处在于:它不需要你写错任何代码,只需要你“什么都没做”。 现代系统很少从零写起。npm、pip、Maven,一个项目拉几百个包是常态。问题在于,你根本不知道第137个依赖的作者上周是不是把账号卖了。event-stream事件、ua-parser-js投毒、node-ipc的“抗议性破坏”——这些都不是黑客攻破了什么,而是供应链上游主动或被动地变成了攻击入口。更麻烦的是,很多依赖你甚至没直接引用,是“依赖的依赖”。你以为自己只装了A,实际上A带了B,B带了C,C里面藏着后门。 一个电商系统,优惠券可以叠加使用。开发觉得没问题,产品经理觉得是卖点。但没人想过:用户能不能用A券买B券,再用B券买C券,循环套利?这类漏洞没有恶意代码,没有异常请求,所有操作都在业务规则之内。设计层的漏洞本质上是“规则本身有洞”。你没法用WAF拦,因为请求完全合法;你没法用代码扫描发现,因为代码没写错。只能靠人去推演:这个流程,如果用户不按常理出牌,会发生什么? 钓鱼邮件、弱密码、U盘乱插、把生产环境密码写在便签上贴显示器——这些事听起来像段子,但渗透测试里一抓一个准。技术漏洞可以打补丁,人的习惯很难。我见过一个团队,花了三个月做了零信任架构,结果运维图省事,在跳板机上留了一个反向隧道,密码是“admin123”。攻击者没碰零信任系统一根手指,直接从隧道进去了。 这五个层面不是并列关系,而是互相咬合的。代码层的漏洞可能被配置层的限制缓解,依赖层的后门可能被设计层的鉴权挡住,人的疏忽可能让所有技术防护归零。看系统漏洞,不能只盯着扫描器报告上的红色条目,得顺着数据流、权限流、信任流走一遍——哪里假设了“不会有人这么干”,哪里就大概率有洞。代码层:最容易被看见,漏洞也最容易被写错
配置层:默认值就是最大的敌人
依赖层:你信任的第三方,可能正在背叛你
设计层:逻辑漏洞最难防,因为它“符合需求”
人的层面:最灵活的组件,也是最薄弱的环节
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-