根据Sysdig2023云原生安全和使用报告,87%的容器镜像存在高危或严重漏洞。由于镜像的复用,漏洞经常会在企业内部产生规模性的影响。虽然漏洞不可避免,但风险也需要收敛,自然也给镜像风险的修复带来巨大的挑战。
Copa是一个基于Go编写的命令行工具,基于Buildkit构建,可以根据像Trivy这样的流行容器镜像扫描工具的漏洞扫描结果,直接修复容器镜像。
项目地址:
https://github.com/project-copacetic/copacetic
从容器镜像扫描器(Trivy)生成的漏洞报告中解析所需的更新包。(可以写新适配器来支持更多报告格式)
使用apt、apk等包管理工具获取并处理所需的更新包。(可以写新的适配器来支持更多的包管理器)
最后,使用buildkit将生成的更新二进制文件应用到容器镜像中。
从原理可以看出Copacetic项目不支持打包后的应用漏洞修复。
安装Copa
1.准备一台Linux服务器,提前安装好Docker、Buildkit、Trivy
2.安装Copa工具
wget https://github.com/project-copacetic/copacetic/releases/download/v0.1.0/copa_0.1.0_linux_amd64.tar.gz
tar -zxvf copa_0.1.0_linux_amd64.tar.gz
sudo mv copa /usr/local/bin/
docker pull mcr.microsoft.com/oss/nginx/nginx:1.21.6
trivy image --vuln-type os --ignore-unfixed -f json -o nginx.1.21.6.json mcr.microsoft.com/oss/nginx/nginx:1.21.6
sudo buildkitd &
sudo copa patch -i mcr.microsoft.com/oss/nginx/nginx:1.21.6 -r nginx.1.21.6.json -t 1.21.6-patched
Patch前,Trivy检测出172个OS漏洞
trivy image --vuln-type os --ignore-unfixed mcr.microsoft.com/oss/nginx/nginx:1.21.6
Patch后,Trivy检测未检出OS漏洞
trivy image --vuln-type os --ignore-unfixed mcr.microsoft.com/oss/nginx/nginx:1.21.6-patched
可以发现Copa打完补丁后,原镜像基础上增加了一层镜像,大小增加了42MB。
优点:
辅助镜像发布者以外用户给容器镜像打补丁(DevSecOps工程师);
降低重新分发补丁镜像的存储和传输成本;
缩短容器镜像修复时间;
降低容器镜像打补丁的复杂性;
缺点:
依赖容器镜像漏扫报告,存在误报、漏报可能(付费/闭源系统);
依赖包管理器打补丁,测试中出现存在补丁包失效、密钥过期的情况;
依赖Buildkit,不支持windows容器;