长期以来,修补软件漏洞是维护部署代码安全的重要内容。如今,随着传统应用转向云原生容器化部署,打补丁的过程发生了巨大的变化。
01 漏洞扫描器并非100%靠谱
众所周知,漏洞是一个软件中的已知缺陷,攻击者可以利用它来进行某种恶意的活动。一般来说,一个软件越复杂,就越有可能存在缺陷。随着软件种类和数量的不断增多,软件漏洞已无处不在。比如Shellshock、Meltdown和Heartbleed,它们都曾是漏洞界中的“当红巨星”,但它们只是每年被报告的海量漏洞中的很小一部分。
目前,大多数应用程序使用第三方库,这些库通常使用特定语言的软件包管理器进行安装。例如,Node.js使用npm,Python使用pip,Java使用Maven等等,这些第三方软件包本身也是潜在漏洞的来源。
从某种意义上讲,部署任何软件都很可能会引入一些漏洞,而且存在着系统被攻击的风险。为了管理这种风险,用户需要找出存在哪些漏洞,评估它们的严重性,对它们进行优先排序,并按照一定的流程来修复或缓解这些问题。
目前,业界有着许多的漏洞扫描器。从Trivy、Clair和Anchore等开源软件到JFrog、Palo Alto和Aqua等公司的商业解决方案。许多容器镜像仓库解决方案,如Docker Trusted Registry 和CNCF项目Harbor,以及主要公有云提供的镜像仓库,都将扫描作为一项内置功能。
然而,即使扫描器不断更新换代,但使用不同的扫描器得到的结果也会有很大的不同。用户很可能在扫描器中发现由于扫描器错误或扫描器读取的安全公告数据中的缺陷而出现误报或者漏报的情况,扫描器也并非100%靠谱。
02 镜像扫描需要覆盖开发和运