渗透测试和漏洞扫描的区别
漏洞扫描器跑完一轮,渗透报告里躺着三百多个CVE编号。测试渗透测试员看了一眼,和漏说:“这些我都不关心,洞扫我关心的区别是那个没打补丁的Tomcat管理后台,弱口令admin/admin能不能直接部署war包。渗透”这就是测试区别的起点——一个在数漏洞,一个在想怎么用漏洞。和漏 漏洞扫描本质上是洞扫自动化匹配。工具拿着已知漏洞的区别指纹库,挨个端口、渗透挨个服务去比对。测试你装了个Apache 2.4.49,和漏它立刻标红:CVE-2021-41773,洞扫路径穿越。区别快,批量,能覆盖几千台主机。但它不知道这台Apache前面挂了WAF,不知道那个路径穿越的payload被规则拦了,更不知道这台机器在内网里其实连不上。扫描器只负责“可能存在”,不负责“实际能打”。 渗透测试是另一回事。我接过一个项目,扫描报告说某台服务器有SSH弱口令,客户觉得改个密码就完了。实际上去测的时候,发现那个弱口令只是入口。登录之后,sudo配置里有个NOPASSWD的脚本,脚本里调用了可写的配置文件,配置文件里能注入命令——一路提权到root。扫描器永远看不到这条链,因为它不登录,不交互,不思考“然后呢”。 扫描器像金属探测器,走到哪儿响到哪儿。渗透测试像小偷踩点,看窗户锁没锁、保安几点换班、后门有没有监控死角。前者告诉你“这里有金属”,后者告诉你“我能从这儿进去,拿完东西还能原路出来”。 有个客户问我:那我们只做渗透测试不就行了?不行。渗透测试有范围、有时间、有人力限制。你不可能让一个测试员把上千台主机全手动摸一遍。扫描器半小时跑完的资产,人得跑半个月。正确做法是扫描器先铺面,找出可疑目标,渗透测试员再针对高价值目标做深度利用。扫描是撒网,渗透是钓鱼。 另一个常见误解:扫描器报的漏洞越多越好。我见过一份报告,同一个CVE在八十台机器上重复出现,客户以为天塌了。实际上那八十台都是测试环境,没数据没权限,打下来也没意义。渗透测试员会先问:哪个系统有真实用户数据?哪个系统能通到核心数据库?然后只打那几个。扫描器没有“业务重要性”这个概念,它只有“技术存在性”。 工具本身也在变。Nessus、OpenVAS这类传统扫描器,现在也加了“利用验证”功能——比如发个无害的payload确认漏洞真的存在。但这仍然不是渗透测试。验证一个漏洞存在,和利用这个漏洞做横向移动、权限维持、数据窃取,中间隔着几十个决策点。渗透测试员的脑子里一直在跑一棵攻击树:这个入口能到哪?需要什么权限?会不会触发告警?有没有备用路径? 价格也能说明问题。一次全内网扫描,几千块到几万块,按IP数量算。一次渗透测试,几万到几十万,按人天算。贵在哪?贵在人的判断。扫描器不会告诉你“这个漏洞虽然CVSS 9.8,但实际利用需要重启服务,业务不允许,所以放弃”。人会。 最后说个真事。某次扫描报告里有个“Apache Struts2远程代码执行”,高危。客户催着修。渗透测试员看了一眼,说不用急——那台机器是Struts2,但版本是2.3.15,而且只跑了一个静态展示页面,没有任何用户输入点。扫描器只认版本号,不认实际配置。后来果然,那个漏洞根本触发不了。扫描器会撒谎,渗透测试员不会——他得真打进去才算数。 所以别把两者混为一谈。扫描是体检报告,渗透是实战演习。体检报告说“你血脂偏高”,实战演习说“我能从你厨房窗户翻进去,打开保险柜,再原路返回”。你需要哪个,取决于你想防谁。