写点什么

【DevOps 系列】保护你的制品:制品的安全策略与实践

作者:嘉为蓝鲸
  • 2024-12-12
    广东
  • 本文字数:2296 字

    阅读完需:约 8 分钟

在当今这个强调敏捷开发与快速交付的时代,软件交付流程对安全性的重视程度日益提升,漏洞扫描已成为各开发团队不可或缺的关键步骤。借助先进的扫描工具,我们能够自动识别并排查部署制品中潜藏的已知漏洞,从而有效阻止存在风险的组件进入生产环境,为软件的安全稳定保驾护航。


然而,实现安全交付并非仅凭一款扫描工具就能一蹴而就,它还需要一套完善的管理机制来协同作用,确保软件交付的每一个环节都能严格遵循安全标准。接下来,就让我引领大家深入探索这一安全交付的全方位过程。 


01

漏洞扫描的秘密

漏洞扫描是对软件交付制品包进行深入分析,以发现并识别其中可能存在的安全漏洞的重要环节。该扫描技术广泛应用于各种类型的软件包,涵盖了 Docker 容器镜像,Linux 系统下的 RPM 软件包,以及 Maven、Npm 等构建工具所依赖的编译组件和库。


一般的扫描工具都是检查软件包里面的内容,然后基于一个收录了已知漏洞的漏洞数据库进行文件比对。比如漏洞库里面已知某个包的特定几个版本有漏洞,并且制品中包含这个文件信息,扫描工具这时候会提示制品也包含了这个漏洞。

02

漏洞库扫描工具的局限 

然而,此类工具也有它的局限性。例如,它的扫描范围只限于已被漏洞数据库识别的漏洞,并不能发现开发者在源代码中的漏洞,如缓冲区溢出漏洞等。此外,值得注意的是,并非所有漏洞的信息都能被完整地收录到漏洞数据库中。这一现状导致我们难以全面把握哪些漏洞对我们的使用不构成威胁,而哪些看似等级较低的漏洞,实则可能潜藏着巨大的安全风险,对我们的系统构成严重威胁。

那么,对于这种情况,我们应该如何解决呢?

03

如何有效利用漏洞扫描工具 

所以,我们在使用漏洞扫描工具的同时,也需要采取一些额外的步骤来最大化寻找制品包中潜在漏洞的机会。


制品瘦身

在软件安全的世界里,我们都在寻求一种最优的策略,那就是在确保功能和性能的同时,最大限度地减少安全隐患。换句话说,就是我们希望在制品里塞进尽可能多的功能,但又希望让漏洞扫描工具能轻松地检查每一个角落。


这里有一个现实问题:随着制品中代码量与依赖项的增多,漏洞扫描器在解压所有层级并逐一排查漏洞的过程中,所需的时间和资源也随之剧增。当制品涵盖的项目数量庞大时,修复潜在的安全漏洞将变得异常复杂,而重新构建整个制品的过程也将变得异常艰难,充满挑战。


那么我们该如何打破这个困局呢?最有效的方式就是精简制品,让每一个包只包含部署所需的一部分代码和资源。那就意味着不再把多个组件一股脑儿地塞进一个包。这就好比我们把行李打包,如果把行李塞得满满当当,只会让寻找某个物品变得困难。而如果我们事先规划好,将每个物品分类打包,不仅可以轻松找到需要的物品,还省了不少空间。


通俗来说,就像我们在打包 Docker 镜像的时候,不要试图把多个微服务都塞进一个镜像,而是为每一个微服务打造专属的镜像;或者,如果我们在打包 Debian 包的时候,也应该把应用程序前端和逻辑分别打包到不同的包中,而不是混在一起。

这样的策略,不仅可以让我们的制品瘦身成功,降低安全风险,提高扫描效率,更使得我们的工作流程更加清晰高效。这或许就是软件开发中的一种艺术,既要让创造性尽情绽放,又要让规则和秩序得以实现,和谐而高效地共存,才能创造出真正优秀的作品。


早期扫描

同样,软件开发的过程中,我们可以选择在项目部署之前再进行全面的漏洞扫描,或者是在一开始构建包的时候就立即执行扫描。两种方式中,我更推荐后者——早期扫描。


早期扫描展现出两大显著优势。首要的是,它能够让我们在问题规模尚小、修复成本较低的情况下就及时发现漏洞。试想,若是在已经对软件包完成了多轮测试,甚至即将部署之际,才猛然发现存在漏洞而不得不重新构建制品,那么所需重新投入的时间和精力将是极为庞大的。

其次,早期扫描可以阻止有问题的制品上传到制品库中,或者对外开放下载。这样,在开发过程中可以确保引用的都是安全的依赖,将不安全的应用投入生产环境的风险降至最低


并且,虽然我们提前进行了扫描,但在部署前进行最后一次检查依然必不可少。就像我们在烹饪时,尽管已经提前处理好了食材,但在上菜前试一下味道还是很有必要的。这样可以确保我们的软件在投入实际生产的时候是真正无懈可击的。当然,在这个过程中,开发阶段已经完成的扫描也起到了重要的辅助作用,它有助于阻止潜在漏洞在初期阶段就进入持续交付流水线。


漏洞分类

如上所述,当我们的团队识别出某些漏洞的严重程度足以导致程序包无法正常使用时,我们会立即提升这些漏洞的警告级别。通过为扫描器定制漏洞分类策略,我们能够基于对每个漏洞实际安全影响的深入分析,实施有效的风险评估并确定处理优先级。这一流程使我们能够迅速分辨出哪些是阻碍项目进展的关键因素,哪些是相对可以搁置一旁的低风险问题,从而更加高效地管理安全漏洞。 


漏洞数据库

最后就是漏洞数据库的完善程度,一个大而全的漏洞库是漏洞扫描工具的基本盘。


如果我们的漏洞库内容过于匮乏,那么在漏洞扫描时的识别率将大幅度下降。简洁而言,就像你要找一本书,但图书馆的藏书量只有几十本,找到的概率自然要小得多。

一些公开且免费的漏洞库如 CVE、NVD,虽然适用于基本的需求,但其信息的及时性和完整性严重依赖于维护者的更新。在此我们建议,在选择使用这些免费漏洞库的同时,也要有所准备,理性看待其可能存在的局限性。


保持警惕,面对挑战

要在这个科技飞速发展的时代中保持竞争力,我们必须始终保持警惕,时刻准备应对各种可能出现的问题和挑战。安全问题是我们必须要重视和解决的重大问题之一。我们一起用智慧和决心,保护好自己,保护我们的工作,做好安全防护。让我们一起在科技的浪潮中,勇敢地迎接挑战,创造一个更美好、更安全的未来。

用户头像

嘉为蓝鲸

关注

研运至简,无限可为 2020-08-13 加入

蓝鲸智云一级技术合作伙伴,中国领先的研发运营一体化解决方案提供商

评论

发布
暂无评论
【DevOps系列】保护你的制品:制品的安全策略与实践_DevOps_嘉为蓝鲸_InfoQ写作社区