0x00 前言
docker镜像是属于整个云原生的重要基石之一,如果从镜像开始就没有安全性的话,那么整个云原生也就没有任何的安全性可言。所以镜像检测技术就成为了一个比较重要的点,本篇将通过研究docker镜像工具来整体分析风险以及应对方案。
市面上的产品分为三种,一种是检查中间件的,一种是检查容器本身的,还有一种是检查容器基线的。当然还有工具就是集成了所有工具的内容。基本的接入方式,就是在DevSecOps的时候,在准备镜像环境的时候就通过检测工具的接口来进行检查,在做出拉取镜像的时候就出发检查,然后根据检测结果来对应是否可以通过CI/CD的自动构建流程。
0x01 Clair
Clair是一款对容器漏洞进行静态扫描的安全性工具,由quay开发和维护。
主要的工作原理是根据cve等漏洞库为特征来扫描容器的每一个层来对比是否存在漏洞。
0x02 Anchore Engine
Anchore Engine是一款开源的扫描和容器分析工具,可以通过Jenkins等直接参与CI/CD构建过程。
Anchore Engine可从仓库下载镜像,然后对镜像进行安全扫描、分析。其分为社区版本和商业版本,社区版本只提供CLI接口,商业版本还提供WEB页面及更多的支持。
https://www.srcmini.com/56184.html
0x03 OpenSCAP
OpenSCAP类似于Clair,依赖cve漏洞库进行漏洞扫描,并且这款工具可以对镜像进行基线以及合规性的检查。
https://blog.csdn.net/weixin_43902588/article/details/117793517
0x04 问脉( VeinMind )
长亭研制的一款开源容器安全检测工具,支持多种扫描内容,不限于漏洞,以及后门容器的检测,并且兼容Jenkins,以及Gitlab CI等DevOps自动化构建,如果是有时间的话,可以先研究一下这一款工具的使用。
https://github.com/chaitin/veinmind-tools
补充知识
docker
Docker 是一种开源的云应用程序平台,它可以帮助开发者在容器化的环境中构建、打包、运行和共享应用程序。它利用操作系统级别的虚拟化技术,将应用程序和其依赖项作为容器打包在一起,使其可以在不同环境中运行且保持一致。Docker 可以简化应用程序的部署、管理和扩展,提高了开发效率和代码的可移植性。
k8s
Kubernetes (k8s) 是一个开源的容器编排平台,最初由 Google 发起,用于管理和运行容器化的应用程序。它提供了容器的自动部署、伸缩、负载均衡、资源调度等功能,使得应用程序的部署和管理更加简单、高效和可靠。Kubernetes 旨在帮助开发者和运维人员更好地管理容器化应用,追求可移植性、可扩展性和自动化的部署和管理。
DevOps
DevOps是一种开发和运营(Operations)方法论,旨在通过协作和自动化来提高软件交付的速度和质量,同时降低其成本和风险。DevOps强调跨职能团队的协作和消除组织内外的孤立,以便更快地推出新的软件产品和服务,同时也能够更轻松和稳定地进行操作。
在DevOps中,开发人员、测试人员和运营人员通常会一起合作,以创建一个自动化的软件交付管道。这个管道包括构建、测试、部署和监控等过程,以确保软件能够快速、高质量地交付到生产环境中。DevOps还鼓励使用持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)等自动化工具和流程来支持这个管道。
DevSecOps
DevSecOps指的是将安全性考虑融入到DevOps工作流程中的方法论和实践。它旨在通过整合安全工具、流程和实践,集成应用程序安全性的核心概念和最佳实践,以提高IT系统安全性。
在DevSecOps中,安全性是软件开发生命周期(SDLC)的一个关键输入,并贯穿整个软件开发过程。开发人员、安全团队和运维人员通过自动化和协作,共同保障应用程序的安全性。
DevSecOps的主要目标是确保应用程序的安全性,以及缩短漏洞和威胁的修补时间。它通过以下几个步骤来实现这些目标:
-
整合安全测试和漏洞扫描工具到CI/CD流程中,以自动化安全性检查。
-
在代码仓库中编写安全测试用例,以确保代码符合安全性最佳实践。
-
建立自动化的安全扫描和弱点检查流程,对生产环境进行常规检查。
-
持续监测漏洞、威胁和恶意行为,并及时修补它们。
DevSecOps是一种适合当前快速增长的软件开发需求的方法,它能够确保应用程序的安全性并为业务创造更多的价值。
CI/CD
CI/CD是指持续集成(Continuous Integration)和持续交付(Continuous Delivery)的缩写。它是一种软件开发流程,旨在通过自动化软件构建、测试、部署和交付来改进开发速度、质量和可靠性。
持续集成是指将所有的开发人员的代码合并至同一代码库,并在每次代码提交时自动执行构建、测试和代码质量检查,以确保代码的稳定性和可靠性。
持续交付是指将代码部署至生产环境的一系列自动化流程,其目的是通过重复性、规范化的开发流程提高软件交付的速度和质量。
CI/CD可以帮助开发团队更快、更安全、更可靠地构建和部署软件,同时可以减少手动操作和人为错误的风险,使开发周期更加高效和可靠。
Jenkins
Jenkins是一个开源的自动化部署工具,它可以用于构建、测试和部署软件。Jenkins被广泛应用于持续集成和持续交付,它可以帮助开发团队更快地交付软件,并保证软件的质量。
Jenkins的特点包括:
-
开源免费:Jenkins是免费的开源软件,可以轻松地进行安装和使用。
-
可扩展性强:Jenkins有大量的插件和可扩展的API,可以轻松地扩展其功能。
-
多平台支持:Jenkins可以在Windows、Linux和Mac OS X等多个平台上运行。
-
易于配置和使用:Jenkins提供了直观的Web界面,可以轻松地配置和使用。
-
支持多种工具和编程语言:Jenkins支持多种工具和编程语言,包括Java、Ruby、Python、Perl等。
-
支持分布式构建:Jenkins可以将构建任务分布到多台机器上执行,以提高效率和速度。
总之,Jenkins是一个非常强大和灵活的自动化部署工具,可以帮助开发团队更好地管理和交付软件。