当前位置:首页 > 知识

基于网络的漏洞扫描器由什么组成

一个基于网络的基于漏洞扫描器,说白了就是网络三块东西拼起来的:一个会问问题的“探针”,一个存答案的漏洞扫“账本”,还有一个能看懂答案的描器“裁判”。缺了任何一块,组成它都只是基于个摆设。

先说说探针。网络这玩意儿本质上是漏洞扫个网络客户端,但它不干正常浏览器的描器活儿。它专门往目标系统发各种精心构造的组成请求——超长字符串、畸形数据包、基于诡异的网络HTTP头,甚至直接尝试登录接口的漏洞扫弱密码。我见过一个扫描器对着一台旧路由器发了几千个探测包,描器最后就靠一个“OPTIONS”请求里藏着的组成版本号,挖出了那个积灰五年的漏洞。探针的厉害之处不在数量,而在它懂“怎么问才不惹人注意”。真正好的探针会模拟真实用户的访问节奏,慢悠悠地试探,而不是像机关枪一样扫射——那样早被防火墙拦了。

账本部分,业内叫“漏洞库”或“插件库”,但我觉得账本更贴切。这里头存的不是漏洞的CVE编号那么简单,而是每个漏洞的“指纹”——比如某个特定版本的Apache服务器,在收到某个特殊编码的URL时,返回的报错页面会多一个空格。这种细节,没有实测过根本写不出来。所以漏洞库的质量直接决定扫描器的水平,有些商业产品的库里有十几万条规则,但真正能在实战中派上用场的,可能就几千条。我见过最尴尬的场面,是扫描器对着一个全新的国产OA系统报了三百多个“高危漏洞”,结果全是误报——因为它的账本里压根没有这个系统的正常行为模式。

裁判是最容易被低估的部分。它得把探针拿回来的海量响应,跟账本里的指纹做比对,然后判断“这是漏洞”还是“这只是一次正常的异常响应”。这里头全是坑。比如有些老系统对畸形请求会直接返回500错误,但正常用户永远不会触发这个路径——裁判要是死板地认为“500就是漏洞”,那整个报告就废了。好的裁判会做“上下文分析”:看这个响应是发生在登录前还是登录后,是主站还是子目录,甚至要结合响应时间来推测目标是不是真的处理了那个畸形输入。有个真实案例,某银行内网扫描时发现一个“疑似SQL注入点”,裁判通过分析响应延迟的毫秒级差异,判断出那其实是数据库连接池的正常波动,硬是把一个误报压了下去——要是交给机械的规则引擎,这单子早就炸了。

这三块东西怎么配合,也很有讲究。探针先跑一轮“资产发现”,摸清目标开了哪些端口、跑了什么服务,然后把清单交给账本去匹配可能有用的漏洞规则,最后裁判对每个候选漏洞做验证。整个过程像流水线,但任何一环卡住都会出问题。我见过最蠢的设计,是探针把所有请求一股脑全发出去,结果目标服务器直接宕机——那还扫个屁。所以真正成熟的扫描器,会在探针里加“限速器”和“断点续扫”,就像老练的锁匠,撬锁之前先得试探主人是不是在家。

说到底,扫描器不是魔法盒子。它的上限取决于漏洞库的积累深度,下限取决于裁判的智能程度,而探针只是那个跑腿的。你要是拿它去扫一个从未被研究过的新协议,再贵的扫描器也只会对着空气挥拳头。但反过来,只要这三块配合得当,它能在几分钟内完成一个安全工程师干一整天的活儿——前提是,你得知道它的短板在哪,别指望它替你思考。

分享到: