去年秋天,透防一个做跨境电商的护软朋友半夜给我打电话,说网站首页被挂了一个菠菜站的透防跳转链接。他用的护软某款开源CMS,版本不算太老,透防但后台登录路径没改,护软密码也是透防弱口令。攻击者没用什么高级0day,护软就是透防拿Burp Suite跑了一遍字典,进去之后传了个webshell。护软他问我:装了WAF怎么还被搞?透防我登服务器一看,WAF规则库半年没更新,护软日志里一堆SQL注入告警,透防全被设置成了“仅记录”。护软
这事儿挺典型。透防很多人以为装个ModSecurity或者上云WAF就万事大吉,实际上web渗透防护软件的核心不在“装没装”,而在“怎么配”和“谁在看”。
市面上的web防护软件大致分三类:基于规则匹配的(ModSecurity、SafeDog)、基于语义分析的(Cloudflare、阿里云WAF)、还有基于RASP的(在应用内部埋点)。规则匹配型最便宜也最容易被绕过——攻击者把SELECT写成SeLeCt,或者用/**/替代空格,老旧的规则集直接瞎掉。语义分析型好一些,但误报率上来了,很多运维为了业务不出错,直接开“宽松模式”,等于把筛子眼儿扩成拳头大。
我自己的做法是:WAF只做第一层粗筛,重点放在RASP和日志联动上。RASP能拿到应用内部的调用栈,比如Java的Runtime.exec()被触发时,不管你怎么编码绕过,最终都得走到这个方法。去年帮另一个客户排查,攻击者用反序列化打Shiro,WAF完全没反应,RASP直接弹了个告警——ProcessBuilder.start()被调用了,参数里带着bash -i。这就比看HTTP流量靠谱得多。
大部分中小团队把WAF日志往ELK里一扔就完事,从来不回头看。我习惯每周抽半小时翻一下拦截日志,重点看三类:一是高频IP(可能是扫描器),二是奇怪User-Agent(比如${ jndi:ldap://}这种Log4j2的探测),三是返回码异常(200但响应体里出现root:x:0:0)。
有次发现一个IP一直在请求/api/v1/export?file=../../etc/passwd,WAF拦了,但攻击者换了个编码%2e%2e%2f就过了。我顺手把这条规则改成了解码后再匹配,顺便把那个IP段拉黑。这种活儿没法自动化,得靠人盯着。
很多防护软件宣传“AI智能学习”“零配置”,我试过几款,学习期一过就开始乱杀。一个正常的上传接口,因为文件内容里带了就被拦了,其实是用户上传的HTML模板。另一个更离谱,把管理员后台的/admin/delete请求当成CSRF攻击给阻断了,因为Referer为空。最后只能加白名单,加着加着白名单比黑名单还长。
我的观点:web渗透防护软件是辅助,不是替代。开发阶段把参数化查询、输出编码、权限校验做扎实,比事后堆一百条WAF规则都管用。运维阶段保持规则更新、定期看日志、对异常行为做基线告警——这三件事做不到,买再贵的软件也是心理安慰。
那个朋友后来换了RASP方案,把后台路径改了,密码加了TOTP。上个月又有人扫他,RASP报了三次Runtime.exec尝试,全被阻断。他给我发了张截图,说这回终于能睡踏实了。我回他:别高兴太早,下周记得看日志。