游客发表
一个系统里能被人利用来干坏事的漏洞叫啥缺陷,中文叫“漏洞”,漏洞叫啥英文叫 vulnerability。漏洞叫啥这词儿听着挺学术,漏洞叫啥其实意思很直白——这地方本来该拦住人的漏洞叫啥,结果没拦住。漏洞叫啥
但漏洞跟漏洞不一样。漏洞叫啥有些漏洞是漏洞叫啥程序员写代码时手滑打错一个字,比如把 == 写成 =,漏洞叫啥逻辑直接歪掉。漏洞叫啥有些漏洞是漏洞叫啥设计的时候就没想到,比如早期互联网协议压根没考虑过有人会伪造源地址发数据包。漏洞叫啥还有些漏洞更冤——代码本身没写错,漏洞叫啥但两个模块凑一块儿产生了化学反应,漏洞叫啥谁都没预料到。漏洞叫啥
我印象最深的是 2014 年的 Heartbleed。OpenSSL 是互联网上用得最广的加密库之一,几乎大半个 HTTPS 都靠它撑着。结果有人在读心跳包的时候,忘了检查长度字段。攻击者只要发一个“我说我有多长但实际上没这么长”的请求,服务器就会老老实实把内存里的东西吐出来——可能是密钥,可能是用户密码,可能是别人的会话数据。就这么一个边界检查没做,全球几十万台服务器裸奔。修复方式呢?加几行长度校验代码。几行代码,捅出这么大的篓子。
漏洞这东西有个特点:你不去找它,它也在那儿。而且往往藏在最不起眼的角落。缓冲区溢出、整数溢出、竞态条件、权限提升、SQL 注入、跨站脚本……名字听着五花八门,本质都是“系统以为输入是 A,结果来了个 B,然后它就懵了”。
SQL 注入就是个典型。假设一个登录页面,后台拼接 SQL 语句大概是 SELECT * FROM users WHERE name = '输入' AND password = '输入'。正常输入没事。但如果你在用户名框里填 ' OR 1=1 --,拼接出来就变成了 SELECT * FROM users WHERE name = '' OR 1=1 --' AND password = ''。逻辑被改写了,密码验证直接绕过。这种漏洞在 2000 年代遍地都是,现在少了,但没绝迹。每次看到新闻说某网站被拖库,八成还是这类老问题。
也有那种“不是漏洞的漏洞”。比如某个接口没做频率限制,攻击者可以无限次尝试密码。严格说代码没 bug,功能也正常,但就是能被暴力破解。这种叫逻辑漏洞,扫描器扫不出来,得靠人琢磨业务流程。渗透测试工程师最值钱的本事,往往就是发现这类问题——工具查不出来的东西,靠脑子。
漏洞还有个尴尬的地方:发现它的人未必是好人。安全研究员找到了会报给厂商,厂商修了发补丁,这叫负责任披露。但黑产找到了就直接卖,或者自己用。零日漏洞之所以叫零日,就是因为厂商还没补丁,攻击已经开始了。一个能远程执行代码的零日,在黑市上能卖几十万甚至上百万美元。这价格说明什么?说明它真能撬开很多东西。
普通人其实不用记那么多漏洞类型。就记住一点:任何需要输入的地方,都是潜在的攻击入口。你填的表单、你点的链接、你扫的二维码、你插的 U 盘——背后都可能藏着一段精心构造的数据,等着某个没做检查的系统把它当成正常指令执行。
漏洞叫啥不重要。重要的是它一直在那儿,等着被发现,或者被利用。
友情链接