|
去年冬天,数据一个做电商的库漏朋友半夜给我打电话,说后台数据库响应慢得像蜗牛,洞扫订单表查一条记录要等三秒。数据他以为是库漏服务器扛不住了,加了内存、洞扫升了CPU,数据问题照旧。库漏我让他跑一遍漏洞扫描,洞扫结果出来他自己都愣了——一个三年前就该打的数据补丁没打,攻击者利用这个漏洞在数据库里埋了触发器,库漏每次查询都偷偷往外发数据。洞扫这事儿不新鲜,数据但每次遇到都让人后背发凉。库漏 数据库漏洞扫描,洞扫说白了就是拿工具去“戳”你的库,看哪里能捅进去。它跟网络扫描不是一回事。网络扫描看的是端口开没开、服务版本老不老,数据库扫描得钻进SQL层,去试权限配置、存储过程、默认账户、补丁级别这些东西。你拿Nmap扫3306端口,它告诉你MySQL在跑,但不会告诉你root账户是不是空密码,也不会告诉你那个自定义函数里藏着提权路径。 我见过太多团队把扫描当形式。装个开源工具,跑一遍,导出PDF,归档,完事。报告里几十个“中危”没人看,因为业务催着上线,谁有空管什么“建议禁用匿名访问”。可攻击者不挑食,中危组合起来就是一条完整的入侵链。比如Oracle里一个默认的scott/tiger账户没锁,加上一个权限过大的PL/SQL包,再配上一个没限制的UTL_HTTP调用,直接就能从数据库里往外发HTTP请求,把数据带出去。单独看每个点都不致命,串起来就是灾难。 扫描工具的选择也有讲究。商业的像Imperva、Qualys,规则库全,但贵,而且对国产数据库支持一般。开源的像sqlmap、Nessus的数据库插件,灵活但误报多。我自己的习惯是先用Nessus做一轮资产发现和基础漏洞匹配,再用sqlmap针对具体注入点做深度验证。别指望一个工具包打天下。有次客户用的是达梦数据库,商业扫描器直接报“不支持的数据库类型”,最后是手工写SQL脚本去查系统表才找到问题。 扫描频率这事得看场景。互联网暴露面的库,每周一次不算多。内网核心库,每月一次加变更后即时扫描。但别在业务高峰期跑,我吃过亏。有回下午三点对生产库做全量扫描,扫描器发的畸形包直接把连接池打满了,业务断了二十分钟。后来学乖了,扫描前先看连接数,挑凌晨低峰期,并且限制扫描线程数。 真正有价值的不是扫描报告本身,而是修复闭环。我见过一个团队,扫描报告里“弱口令”这一项连续六个月出现,每次都说“已通知DBA”,但DBA说“这账户是给旧系统用的,不能改”。最后是安全团队直接找CTO拍板,把旧系统下线,问题才解决。技术问题背后往往是流程问题、权责问题。扫描器只能告诉你“这里有个洞”,填洞得靠人。 还有一点,别忽略配置基线。很多漏洞不是代码写出来的,是配出来的。比如MongoDB默认不认证,Redis默认绑0.0.0.0,这些在扫描器里可能只算“信息泄露”,但真被利用了就是拖库。我习惯在扫描任务里加一条:检查所有数据库的监听地址和认证开关。这条比什么CVE都实在。 最后说个扎心的观察。大部分数据库被攻破,不是因为漏洞太新,而是因为补丁太旧。扫描器能帮你找到旧补丁,但打不打,什么时候打,打完怎么验证,这些事扫描器管不了。它就是个手电筒,照出黑暗里的东西。至于你是转身跑开还是走过去把东西捡起来,那是你自己的事。 |