扫描安全漏洞
去年秋天,扫描我帮一家做跨境电商的安全小公司看服务器。他们的漏洞技术负责人说,网站最近老是扫描被谷歌标记“可能含有恶意内容”,流量掉了四成。安全我登上服务器,漏洞第一眼就发现 `/tmp` 目录里塞满了乱码文件名的扫描脚本。这不是安全什么高级攻击,就是漏洞典型的未修复漏洞被扫描器逮住了。 扫描安全漏洞这件事,扫描很多人以为就是安全装个 Nessus 或者 OpenVAS,点一下“开始扫描”,漏洞然后等报告。扫描实际上,安全真正的漏洞漏洞扫描从你写第一行代码就开始了。那家公司的问题出在一个两年前上线的优惠券接口——开发时为了方便测试,留了一个 `debug=true` 的参数,能直接返回数据库连接信息。上线后忘了删。扫描器每天在互联网上扫几十亿个 IP,这种参数就像黑夜里的萤火虫。 我见过最离谱的案例是一个政府下属单位的内部系统。他们觉得内网绝对安全,所有服务器都不打补丁。结果一台打印机被实习生插了 U 盘,U 盘里带着勒索病毒,病毒在内网横向移动时,顺手扫到了那台三年没更新的 Windows Server 2008。漏洞利用代码是现成的,攻击者甚至不需要自己写。扫描安全漏洞,本质上是跟攻击者抢时间。你扫得慢,人家已经进来了。 那怎么扫才有效?我自己的习惯是分三层。第一层,用自动化工具跑一遍已知漏洞库,比如 CVE 列表。这层最省事,但只能覆盖 30% 的问题。第二层,手工验证那些工具报出来的“疑似”漏洞。工具会误报,也会漏报。我曾经遇到一个 SQL 注入,自动化工具没扫出来,因为参数经过了 base64 编码。手动解码后再拼接到查询里,漏洞才暴露。第三层,看业务逻辑。比如一个修改密码的接口,正常流程需要旧密码,但如果你直接发新密码,服务器也接受——这不是工具能扫出来的,得靠人脑去猜。 扫描的频率也很关键。很多公司一年扫一次,为了应付等保测评。这跟不扫差不多。攻击者每天都会扫描你的资产,你至少得每周扫一次核心业务。新漏洞从公布到被利用,平均时间不到 72 小时。去年 Log4j 那个漏洞,从爆出到全网扫描只用了几个小时。你等一周再扫,数据早没了。 还有一点容易被忽略:扫描器本身也会带来风险。有些扫描器会发送大量畸形请求,可能把老旧的服务打挂。我见过一个客户,用某商业扫描器扫生产环境,结果把一台交换机的管理界面扫崩了,整个机房断网两小时。所以扫描前一定要确认目标能不能承受,最好在测试环境先跑一遍。 最后说个真实数据。我统计过自己经手的 47 个中小型项目,平均每个项目存在 12 个中高危漏洞。其中 8 个是配置错误,比如开放了不必要的端口、用了弱口令、没关目录浏览。这些漏洞不需要什么高深技术,一个刚入行的运维花半小时就能修。但没人去扫,没人去修,直到被勒索或者被挂马。 扫描安全漏洞不是买一个工具就完事。它更像打扫房间——你得定期扫,仔细扫,还要知道哪些角落容易积灰。工具能帮你找到大部分灰尘,但沙发底下那枚硬币,得你自己伸手去摸。