您现在的位置是:百科 >>正文

软件程序漏洞扫描工具

百科7328人已围观

简介去年秋天,一个做后端的朋友半夜给我发消息,说他们线上服务突然开始返回大量500错误。排查到凌晨三点,最后发现是一个第三方库的依赖版本被自动升级了,新版本里有个空指针异常。他说了句话我印象很深:“这玩意 ...

去年秋天,软件一个做后端的程序朋友半夜给我发消息,说他们线上服务突然开始返回大量500错误。漏洞排查到凌晨三点,扫描最后发现是工具一个第三方库的依赖版本被自动升级了,新版本里有个空指针异常。软件他说了句话我印象很深:“这玩意儿要是程序上线前扫一遍,哪至于让我熬到现在。漏洞”

他说的扫描“扫一遍”,就是工具漏洞扫描工具干的事。但很多人对这个东西的软件理解还停留在“装个杀毒软件”的水平,实际上它要复杂得多,程序也笨拙得多。漏洞

它到底在扫什么

漏洞扫描工具的扫描核心工作,其实就两件事:找已知的工具坏东西,和找看起来不对劲的东西。

第一件事靠的是数据库。比如你写Java,用了某个版本的Log4j,扫描工具会拿你的依赖清单去比对CVE漏洞库。Log4j那个著名的远程代码执行漏洞爆出来的时候,所有扫描工具在几小时内就更新了规则。你跑一次扫描,它告诉你:“你用的log4j-core 2.14.1有CVE-2021-44228,赶紧换。”这就是纯粹的匹配工作,没什么玄学。

第二件事就有意思了。工具会去分析你的代码逻辑,看有没有类似SQL拼接、命令拼接、硬编码密码这类模式。比如它发现你写了String sql = "SELECT * FROM users WHERE id = " + userId;,就会标红。但问题是,它不知道这个userId到底是不是用户可控的。所以经常出现一种情况:你扫出来两百个“高危漏洞”,点进去一看,一半是测试代码,另一半是内部工具类,根本走不到线上。误报率高得让人想砸键盘。

静态扫描和动态扫描,差别比想象中大

静态扫描(SAST)是直接读你的源代码或字节码。好处是能覆盖所有分支,连你if(false)里的代码都能翻出来。坏处是它没有运行时上下文,判断全靠猜。我见过一个项目,静态扫描报告说有个路径穿越漏洞,开发查了半天发现那个文件路径是写死在配置文件里的,用户根本碰不到。

动态扫描(DAST)是跑起来之后发请求探测。它像是一个自动化黑客,往你的接口灌各种恶意payload,看响应里有没有数据库报错、有没有命令执行的回显。这个准确率高一些,但覆盖率是个大问题——你不可能把所有URL都穷举完,而且有些漏洞需要特定的登录态、特定的参数组合才能触发。一个只扫了首页的动态扫描报告,基本等于没扫。

现在流行的是IAST,在运行时插桩,结合了两者的特点。但部署起来麻烦,对性能有影响,小团队一般懒得搞。

工具解决不了人的问题

我见过最离谱的情况是:扫描工具报了一个反序列化漏洞,开发看了一眼说“这是误报”,然后直接点了忽略。三个月后,这个漏洞被利用了。事后复盘,那个开发说:“当时扫出来三百多个问题,我哪有时间一个一个看,看着像误报就关了。”

这才是真正的痛点。工具能找出问题,但没法帮你判断优先级。一个项目扫出五百个漏洞,其中可能只有三个是真正能被利用的,但工具不会告诉你哪三个是。它只会按CVSS评分排个序,而CVSS评分在具体业务场景下经常是失真的。

另一个问题是,扫描工具对业务逻辑漏洞几乎无能为力。比如一个电商网站,用户可以把自己的订单ID改成别人的,看到别人的收货地址。这种水平越权漏洞,扫描工具基本扫不出来,因为它不知道“这个订单不属于当前用户”这件事。这需要人去看代码、去理解业务。

所以我现在跟人聊漏洞扫描,都会说:把它当成一个不知疲倦但不太聪明的实习生。它能帮你干很多体力活,比如查依赖、找明显的编码问题,但最终的判断和修复,还是得靠人。别指望买个工具就万事大吉,那和买了健身卡就觉得自己瘦了是一个道理。

那个半夜被叫醒的朋友,后来在CI流程里加了依赖扫描,每次提交代码自动跑一遍。但他也说了,真正让他睡好觉的,是后来团队定了个规矩:任何扫描出来的高危问题,必须有人工确认记录,不能直接忽略。工具是死的,流程和人才是活的。

Tags:

相关文章

  • ssl网站

    百科

    我打开银行网站,地址栏里挂着一把灰色的小锁。点击它,弹出一行字:“此网站的安全证书已被吊销。”我愣了一下,又刷新了三次,锁还是灰的。最终我关掉了页面,改用手机银行办理业务。 这不是我第一次因为SSL证 ...

    【百科】

    阅读更多
  • js脚本代码

    百科

    打开浏览器按下F12,切到Console面板,敲一行 document.title,回车。页面的标题就打印出来了。这是很多人第一次接触JS脚本代码的场景——不需要装任何东西,浏览器自带运行环境,写完就 ...

    【百科】

    阅读更多
  • triplanar节点

    百科

    第一次在Substance Designer里看到Triplanar节点的时候,我盯着那个三向投影的示意图愣了几秒。它不像UVW贴图那样规规矩矩地沿着模型表面走,而是从X、Y、Z三个轴向同时把纹理“砸 ...

    【百科】

    阅读更多


友情链接