当前位置:首页 > 时尚

网络安全漏洞检测技术分为几类

去年某车企的网络OTA服务器被爆出未授权访问漏洞,攻击者能直接刷写刹车控制固件。安全这事闹得挺大,漏洞类但真正让我在意的检测技术是他们安全团队事后复盘时提到的一个细节:从漏洞上线到被发现,中间隔了整整47天。网络这47天里,安全静态代码扫描工具跑过三遍,漏洞类没报警。检测技术为什么?网络因为那是个逻辑漏洞,不是安全缓冲区溢出那种老派玩意儿。

漏洞检测这行当,漏洞类早就不是检测技术装个Nessus扫端口那么简单了。按检测原理和适用场景,网络大致能分成四类,安全但分类这事本身就有模糊地带,漏洞类实际项目里经常混着用。

静态应用安全测试(SAST)——在白盒里找针

SAST工具直接读源码,不运行程序。Fortify、Checkmarx这些老牌选手干的就是这活。原理说白了就是模式匹配加数据流分析,看用户输入有没有经过过滤就进了SQL查询或者系统调用。

这东西的毛病特别明显。我见过一个Java项目,SAST报了2300多个“高危”,开发团队直接摆烂。误报率能到40%以上,尤其是涉及反射、动态代理的代码,工具根本追不明白。但它的优势也无可替代——能定位到具体哪一行代码出的问题。DAST扫出来的漏洞,你还得自己回去翻代码找位置,SAST直接给你行号。

真实场景里,SAST最适合在CI流水线里当门禁。每次提交代码自动跑一遍,新增漏洞直接卡住合并请求。但别指望它发现业务逻辑漏洞,工具不知道你的转账接口本来就不该允许负数金额。

动态应用安全测试(DAST)——黑盒子里扔石头

DAST不碰源码,对着跑起来的应用发请求,看响应里有没有异常。SQL注入、XSS、命令执行这些,它比SAST拿手。因为它是从攻击者视角出发的,能发现配置错误、认证缺陷这类静态分析看不见的问题。

Burp Suite的Scanner模块和Acunetix是这类的代表。但DAST有个致命伤:覆盖率。爬虫爬不到的页面,它就测不了。现代SPA应用大量用JavaScript动态渲染,爬虫经常迷路。我见过一个后台管理系统,DAST扫了一下午只爬到了登录页,因为菜单是登录后通过WebSocket动态加载的。

还有个更现实的问题——DAST扫生产环境可能把数据库打挂。那个著名的“' OR 1=1--” payload,如果后端没做好参数化查询,直接就是全表扫描。所以DAST一般跑在预发布环境,但预发布环境的数据量和生产差着数量级,有些性能相关的漏洞根本触发不了。

交互式应用安全测试(IAST)——插桩在运行时

IAST算是SAST和DAST的杂交品种。在应用里插个agent,运行时监控所有函数调用和输入输出。既能看到数据流,又能拿到运行时上下文。Contrast Security和国内的几家公司都在做。

这东西准确率确实高,因为它直接观察实际执行路径。SAST报的误报,IAST能通过运行时验证过滤掉。但代价是性能开销,agent插进去,应用响应时间涨个15%到30%很正常。而且对语言和框架的适配很挑,冷门框架根本没人做agent。

去年帮一个客户做IAST试点,Java应用插上agent后TPS从1200掉到800。业务部门直接叫停了。技术好不代表能落地,这是安全行业最常见的尴尬。

软件成分分析(SCA)——管好你引的包

Log4j2那个核弹级漏洞出来之后,SCA才算真正被重视起来。SCA不分析你写的代码,它只看你用了哪些第三方库,然后跟漏洞库比对。

听起来简单,做起来全是坑。依赖传递性能把你的依赖树撑到几千个节点,间接依赖的漏洞算谁的?Maven的dependencyManagement能覆盖版本,但Gradle的resolutionStrategy又不一样。还有那些直接把jar包扔lib目录的遗留项目,SCA工具根本识别不出来。

更麻烦的是,SCA报出来的漏洞,很多你根本修不了。比如你用的某个Apache Commons版本有漏洞,但升级后跟Spring Boot版本冲突,整个项目起不来。这时候只能要么等上游更新,要么自己patch源码重新打包。安全团队和开发团队能为此吵上几个礼拜。

这四类技术没有谁替代谁的说法。SAST管代码质量,DAST管运行时暴露面,IAST管精准定位,SCA管供应链。真实的企业安全体系里,它们各管一段,中间靠漏洞管理平台串起来。但工具再多,也解决不了那个根本问题——写代码的人如果不把安全当回事,检测工具永远在追着屁股跑。

分享到: