供应链安全-镜像 Trivy kubesec

开头语

写在前面:如有问题,以你为准,

目前24年应届生,各位大佬轻喷,部分资料与图片来自网络

内容较长,页面右上角目录方便跳转

Dockerfile 文件优化

  • 减少镜像层:一次RUN指令形成新的一层,尽量Shll命令都写在一行,减少镜像层。
  • 多阶段构建: 多阶段构建能够帮助我们大幅减少最终镜像的大小,而无需费力减少中间层和文件的数量
  • 清理无用文件:清理对应的残留数据,例如yu缓存。
  • 清理无用的软件包:基础镜像默认会带一些dbug工具,可以删除掉,仅保留应用程序所需软件,防止黑客利用。
  • 利用构建缓存: 构建镜像时,Docker 会逐步执行 Dockerfile 中的指令,并按照指定的顺序执行每个指令。在检查每条指令时,Docker 会在其缓存中查找可以重用的现有镜像,而不是创建新的(重复)镜像
  • 选择最小的基础镜像:例如alpine
  • 使用非root用户运行:USER指令指定普通用户

减少镜像层

可以通过下面查看镜像层构建

[root@master gvisor]# docker history busybox:1.30
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
64f5d945efcc   4 years ago   /bin/sh -c #(nop)  CMD ["sh"]                   0B
<missing>      4 years ago   /bin/sh -c #(nop) ADD file:e36dd1822f36a8169…   1.2MB

每跑一次RUN指令都是会导致多一层,所以尽量将多个要执行命令写在一个RUN里面

# 第一种方式
RUN ls && mkdir test && cd test
# 第二种方式
RUN ls && \mkdir test && \cd test

清理无用数据

可以构建镜像是加上如下命令

yum clean all && rm -rf /var/cache/yum/*

Trivy 镜像漏洞扫描工具

Trivy: 是一种用于容器镜像、文件系统、Git仓库的漏洞扫描工具。发现目标软件存在的漏洞。

Trivy: 易于使用,只需安装二进制文件即可进行扫描,方便集成CI系统。

https://github.com/aquasecurity/trivy
  • ArtifactDeatil 结构和 各类Analyzer 实现
  • trivy-db 的软件包漏洞列表
  • defsec 的配置检测规则

这些资源都可以活用于镜像安全的各类实施上。下面的源码分析内容建议结合 trivy 源码阅读,可以更好地理解一些细节

实操示例

[root@master images-security]# trivy image nginx:1.17.1
2023-11-14T02:26:55.898-0500    INFO    Need to update DB
2023-11-14T02:26:55.898-0500    INFO    DB Repository: ghcr.io/aquasecurity/trivy-db
2023-11-14T02:26:55.898-0500    INFO    Downloading DB...
1.01 MiB / 40.75 MiB [->______________________________________________________________________] 2.48% 435.31 KiB p/s ETA 1m33s
# 正在下载数据库,会因为网络问题下载不了
# trivy image --download-db-only 仅下载漏洞数据库
# trivy image nginx:1.17.1 --skip-db-update 跳过数据库下载,但是第一次不给跳过
# ERROR   The first run cannot skip downloading DB

Trivy 默认是每隔十二个小时就会更新一次漏洞库,离线情况下或者网络不好时可能就会更新失败;如果你想要获取最新的漏洞库就可以用这种方法手动去更新一下

漏洞数据库分为两个版本

version1 :有时候漏洞库真的下不下来 - 简书

Releases · aquasecurity/trivy-db · GitHub

version2:镜像安全扫描工具Trivy深入实践 - 知乎

Package trivy-db · GitHub

通过国外机器来下载

mkdir db
trivy --cache-dir ./db image --download-db-only
tar -cf ./db.tar.gz -C ./db/db metadata.json trivy.db

通过winscp或者软件拿到本地 /root/.cache/trivy

[root@master trivy]# tree
.
├── db
│   ├── metadata.json
│   └── trivy.db
├── fanal
│   └── fanal.db
└── java-db├── metadata.json└── trivy-java.db

db等文件详细解析:镜像安全扫描工具Trivy深入实践 - 知乎

漏洞检测

[root@master trivy]# trivy image nginx:1.17.1 --skip-db-update --skip-java-db-update
2023-11-15T02:10:00.448-0500    INFO    Vulnerability scanning is enabled
2023-11-15T02:10:00.448-0500    INFO    Secret scanning is enabled
2023-11-15T02:10:00.448-0500    INFO    If your scanning is slow, please try '--scanners vuln' to disable secret scanning
2023-11-15T02:10:00.448-0500    INFO    Please see also https://aquasecurity.github.io/trivy/v0.46/docs/scanner/secret/#recommendation for faster secret detection
2023-11-15T02:10:26.595-0500    INFO    Detected OS: debian
2023-11-15T02:10:26.595-0500    INFO    Detecting Debian vulnerabilities...
2023-11-15T02:10:26.625-0500    INFO    Number of language-specific files: 0
2023-11-15T02:10:26.685-0500    WARN    This OS version is no longer supported by the distribution: debian 9.9
2023-11-15T02:10:26.685-0500    WARN    The vulnerability detection may be insufficient because security updates are not providednginx:1.17.1 (debian 9.9)Total: 204 (UNKNOWN: 7, LOW: 40, MEDIUM: 52, HIGH: 74, CRITICAL: 31)┌────────────────────────┬──────────────────┬──────────┬──────────────┬────────────────────────┬────────────────────────┬──────────────────────────────────────────────────────────────┐
│        Library         │  Vulnerability   │ Severity │    Status    │   Installed Version    │     Fixed Version      │                            Title                             │
├────────────────────────┼──────────────────┼──────────┼──────────────┼────────────────────────┼────────────────────────┼──────────────────────────────────────────────────────────────┤
│ apt                    │ CVE-2020-27350   │ MEDIUM   │ fixed        │ 1.4.9                  │ 1.4.11                 │ apt: integer overflows and underflows while parsing .deb     │
│                        │                  │          │              │                        │                        │ packages                                                     │
│                        │                  │          │              │                        │                        │ https://avd.aquasec.com/nvd/cve-2020-27350                   │
│                        ├──────────────────┤          │              │                        ├────────────────────────┼──────────────────────────────────────────────────────────────┤
│                        │ CVE-2020-3810    │          │              │                        │ 1.4.10                 │ Missing input validation in the ar/tar implementations of    │
│                        │                  │          │              │                        │                        │ APT before v ......                                          │
│                        │                  │          │              │                        │                        │ https://avd.aquasec.com/nvd/cve-2020-3810                    │

漏洞解析

CVE-2016-2779 漏洞编号(可以进行通过编号去修复漏洞)

HIGH 级别

1:2.29.2-1+deb9u1 目前的版本

Title 其中网址打开就是漏洞介绍和修复方式

常用命令

# 跳过拉取漏洞数据库
--skip-update=true
# 查看命令帮助
trivy -h
# 容器镜像扫描
trivy image nginx
trivy image -i nginx.tar
# 打印指定 (高危,严重)
trivy image -s HIGH,nginx
trivy image -s HIGH,CRITICAL nginx
# JSON 格式输出并保存到文件
trivy image nginx -f json -o ./output.jsontrivy image nginx:1.18.0
trivy image --severity CRITICAL nginx:1.18.0
trivy image --severity CRITICAL, HIGH nginx:1.18.0
trivy image --ignore-unfixed nginx:1.18.0# Scanning image tarball
docker save nginx:1.18.0 > nginx.tar
trivy image --input archive.tar# Scan and output results to file
trivy image --output python_alpine.txt python:3.10.0a4-alpine
trivy image --severity HIGH --output /root/python.txt python:3.10.0a4-alpine# Scan image tarball
trivy image --input alpine.tar --format json --output /root/alpine.json

kubesec 检测yaml文件安全配置

kubesec:是一个针对K8s资源清单文件进行安全配置评估的工具,根据安全配置

https://kubesec.io/ 
https://github.com/controlplaneio/kubesec

注:因为网络问题,所以手动下载检测文件

通过容器更方便,避免网络问题

命令示例

kubesec scan -h
# --schema-location 是本地json检测文件
主要是因为网络问题,所以建议自行下载后通过这个参数指定
[root@master kubesec]# kubesec scan deploy.yaml --schema-location deployment-apps-v1.json
[{"object": "Deployment/web.default","valid": true,"fileName": "deploy.yaml","message": "Passed with a score of 0 points","score": 0,"scoring": {"advise": [{"id": "ApparmorAny","selector": ".metadata .annotations .\"container.apparmor.security.beta.kubernetes.io/nginx\"","reason": "Well defined AppArmor policies may provide greater protection from unknown threats. WARNING: NOT PRODUCTION READY","points": 3},{"id": "ServiceAccountName","selector": ".spec .serviceAccountName","reason": "Service accounts restrict Kubernetes API access and should be configured with least privilege","points": 3},

上图就是让你配置apparmor 和 SA

通过容器调用检测

开启一个容器,并将本地要检测的yaml传入返回结果

[root@master opa]# docker run -d -p 8080:8080 kubesec/kubesec http 8080
Unable to find image 'kubesec/kubesec:latest' locally
latest: Pulling from kubesec/kubesec
5843afab3874: Pull complete
0e12e15a6490: Pull complete
5a1816831e29: Pull complete
0e871d09ee04: Pull complete
c94217ef84fb: Pull complete
9412ea52a867: Pull complete
Digest: sha256:e8b73f2f8fd00508c0c7523600c43fe79300692b0a1f6f4eaf9cf1c1f341cb35
Status: Downloaded newer image for kubesec/kubesec:latest
b9d416dd87d7d738bdaf905faab99ad796bfa7210f01ed7b12dda731d2935bb1
curl -sSX POST --data-binary @deploy.yaml http://0.0.0.0:8080/scan

@deploy.yaml 为当前目录下的要检测的yaml文件

网络问题

185.199.111.133 raw.githubusercontent.com
[root@master kubesec]# kubectl create deploy web --image=nginx --dry-run=client -o yaml > deploy.yaml
[root@master kubesec]# kubesec scan deploy.yaml
[{"object": "Deployment/web.default","valid": false,"fileName": "deploy.yaml","message": "failed downloading schema at https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master-standalone-strict/deployment-apps-v1.json: Get \"https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master-standalone-strict/deployment-apps-v1.json\": dial tcp 0.0.0.0:443: connect: connection refused","score": 0,"scoring": {}}
]
wget https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master-standalone-strict/deployment-apps-v1.jsonkubesec scan deploy.yaml --schema-location deployment-apps-v1.json

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能图像生成的道德利弊

目录 一、我们应该关注人工智能图像吗&#xff1f;二、利用人工智能增强创造力的积极作用三、版权和剽窃问题四、对就业和劳动力动态的影响五、无意识的偏见和影响六、负责任地前行 人工智能&#xff08;AI&#xff09;发展迅速&#xff0c;尤其是近年来。据估计&#xff0c;超…

Flutter 监听前台和后台切换的状态

一 前后台的切换状态监听 混入 WidgetsBindingObserver 这个类&#xff0c;这里提供提供了程序状态的一些监听 二 添加监听和销毁监听 overridevoid initState() {super.initState();//2.页面初始化的时候&#xff0c;添加一个状态的监听者WidgetsBinding.instance.addObserver…

服务器宕机怎么办?怎么预防宕机?

相信不少用户会听到或者在文章中提到电脑宕机或者服务器宕机&#xff0c;不少用户对宕机的意思不太理解。那么服务器宕机是什么意思&#xff1f; 宕机属于计算机的术语&#xff0c;指电脑或者服务器不能正常工作。口语中我们简单的把停掉机器叫做down机&#xff0c;转换为汉字是…

【conda】conda 版本控制和环境迁移/安装conda加速工具mamba /conda常用指令/Anaconda配置

【conda】安装conda加速工具mamba /conda常用指令/Anaconda配置 0. conda 版本控制和环境迁移1. 安装conda加速工具mamba2. conda install version3. [Anaconda 镜像](https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/)使用帮助4. error deal 0. conda 版本控制和环境迁移…

抖去推账号矩阵+无人直播+文案引流系统开发搭建--开源

核心技术 1. AI自动直播&#xff1a; 智能系统通过丰富可定制的文案库&#xff0c; 拥有有料有趣的灵魂。不仅能自动语音讲解内容&#xff0c;还可以在直播中和用户灵活互动。直播中可将团购商品同话术自动上下架。 2. AI剪辑 可一键智能批量成片&#xff0c;也可跟着模板剪…

「PyMuPDF 专栏 」PyMuPDF创建PDF、拆分PDF

文章目录 一、本章前言二、使用PyMuPDF创建PDF文档1、实例代码2、过程详解①. 安装PyMuPDF②. 导入PyMuPDF模块③. 创建一个新的PDF文档④. 添加页面和内容⑤. 保存文档 三、使用PyMuPDF拆分PDF文档1、实例代码2、过程解析①. 导入模块②. 定义函数③. 打开源PDF文件④. 遍历页…

大数据Doris(五十二):SQL函数之数学函数

文章目录 SQL函数之数学函数 一、abs(double a)

基于Java SSM框架实现班级同学录管理系统项目【项目源码】

基于java的SSM框架实现高校校园点餐系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写&#xff0c;受到很多的追捧&#xff0c;“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架&#xff0c;通常更简单的数据源。Spring…

洁净室气流流型可视化验证试验 气流流型检测仪

了解和掌握洁净室气流流型的特点和规律是确保洁净室的性能和产品质量的重要基础。在选择气流流型时需要综合考虑各种因素&#xff0c;以达到最佳的空气净化效果。同时&#xff0c;需要定期进行气流流型的检测和验证&#xff0c;以及洁净室的清洁和维护工作&#xff0c;以确保其…

php 常量与变量

目录 1.php 基础语法 2.常量 3.变量 4.变量命名规则 5.单引号双引号的区别 1.php 基础语法 <?php header("Content-Type: text/html; charsetutf-8"); //utf-8编码&#xff0c;支持中文 //代码处 ?> 如果没配utf-8 ,中文就会乱码&#xff0c;如下 2.常量…

自动驾驶轨迹预测

目录 神经网络轨迹预测综述&#xff1a; 比较新的轨迹预测网络 Uber&#xff1a;LaneRCNN[5] Google&#xff1a;VectorNet[6] Huawei&#xff1a;HOME[7] Waymo&#xff1a;TNT[8] Aptive&#xff1a;Covernet[9] NEC&#xff1a;R2P2[10] 商汤&#xff1a;TPNet[11]…

浅谈安科瑞直流表在孟加拉某能源公司的应用

摘要&#xff1a;本文介绍了安科瑞直流电表在孟加拉某能源公司的应用。主要用于光伏直流柜内&#xff0c;配合分流器对汇流箱的输出电流电压等进行测量&#xff0c;并采集配电现场的开关信号&#xff0c;装置带有RS485接口可以把测量和采集的数据和设备状态上传。 Abstract: T…

【服务器数据恢复】Raid5热备盘同步失败导致lvm结构损坏的数据恢复案例

服务器数据恢复环境&#xff1a; 两组由4块磁盘组建的raid5磁盘阵列&#xff0c;两组raid5阵列划分为lun并组成了lvm结构&#xff0c;ext3文件系统。 服务器故障&#xff1a; 一组raid5阵列中的一块硬盘离线&#xff0c;热备盘自动上线并开始同步数据。在热备盘完成同步之前&am…

精进单元测试技能——Pytest断言的艺术

本篇文章主要是阐述Pytest在断言方面的应用。让大家能够了解和掌握Pytest针对断言设计了多种功能以适应在不同测试场景上使用。 了解断言的基础 在Pytest中&#xff0c;断言是通过 assert 语句来实现的。简单的断言通常用于验证预期值和实际值是否相等&#xff0c;例如&#xf…

Python从入门到网络爬虫(读写Excel详解)

前言 Python操作Excel的模块有很多&#xff0c;并且各有优劣&#xff0c;不同模块支持的操作和文件类型也有不同。最常用的Excel处理库有xlrd、xlwt、xlutils、xlwings、openpyxl、pandas&#xff0c;下面是各个模块的支持情况&#xff1a; 工具名称.xls.xlsx获取文件内容写入…

java常用应用程序编程接口(API)——String概述及使用案例

前言&#xff1a; 开始学到api的String&#xff0c;整理下心得。打好基础&#xff0c;daydayup! API&#xff1a; API是什么&#xff1f; API&#xff08;Application Programming Interface&#xff09;又名应用程序编程接口。是别人编好的程序的合集。 为什么要使用API&…

5分钟搭建开源运维监控工具Uptime Kuma并实现无公网IP远程访问

文章目录 **主要功能**一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务&#xff0c;如何安装Docker详见&#xff1a; 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址访问…

数组中元素的插入和查找算法探究

数组的查找 线性查找 概念 线性查找也叫顺序查找&#xff0c;这是最基本的一种查找方法&#xff0c;从给定的值中进行搜索&#xff0c;从一端开始逐一检查每个元素&#xff0c;直到找到所需元素的过程。 元素序列的排列可以有序&#xff0c;也可以无序。 代码实现 public cl…

JVM,Java堆区、新生代、老年代,创建对象的内存分配,分代垃圾收集思想、堆区产生的错误

JVM堆区 堆&#xff08;Heap&#xff09;堆区的组成&#xff1a;新生代老年代堆空间的大小设置创建对象的内存分配堆区的分代垃圾收集思想堆区产生的错误 堆&#xff08;Heap&#xff09; ​ Heap堆区&#xff0c;用于存放对象实例和数组的内存区域 ​ Heap堆区&#xff0c;是…

Vue2:通过props给组件传数据

一、业务场景 我们在使用Vue组件时&#xff0c;常常会复用Vue组件&#xff0c;那么&#xff0c;问题来了&#xff0c;复用的时候&#xff0c;业务数据不相同&#xff0c;怎么办了&#xff1f; 这里我们就需要学习新的属性&#xff1a;props来实现这个功能。 这样&#xff0c;组…