一、概论 Apache Log4j 2 被披露出存在严重代码执行漏洞,目前官方已发布正式安全公告及版本,漏洞编号:CVE-2021-44228,漏洞被利用可导致服务器被入侵等危害。 公司 ES 使用 Log4j 2 组件,存在安全问题,升级 ES 镜像中的 Log4j 2 版本解决该问题。 1.1 原理 java 项目只用替换编译出来的 jar 包就可以。 /maven2/org/apache/logging/log4j/log4j-api/2.16.0/ 2.3 创建镜像目录结构 新建 static 目录,将下载的 jar 放入 static 文件夹 2.4 编写新镜像 dockerfile 编写 Dockerfile,替换原 es 镜像中的 jar。 log4j-api-*.jar 2.5 打新镜像 打包镜像,镜像 tag 自定义 docker build .
之前介绍过Harbor,从安装部署到简单使用,今天这里就不再重复介绍了,有需要的可以跳转到'Harbor 功能强大的企业级私有仓库'查看,今天主要介绍Harbor的安全功能——镜像漏洞扫描 Harbor 自动进行扫描,通过定义部署安全级别,阻止某些安全级别的镜像,上传到Harbor,这部分配置在项目配置中 ? 新建项目,在项目中的配置管理里面进行漏洞扫描的配置,分别配置是否阻止潜在漏洞镜像,按照危害级别进行阻止,勾选自动扫描镜像,即在镜像上传的时候进行扫描,我们勾选,上传镜像测试 ? ,有时候有一些CVE我们想要忽略,就是这个CVE代号的漏洞,不在我们考虑的安全范围内,我们可以通过设置CVE白名单来进行忽略 CVE白名单分两种,一种是项目白名单,一种是系统白名单,在项目中的配置管理中进行配置 项目白名单,就直接在项目中进行配置,添加cve对应的cveid,并设置过期时间即可 系统白名单,需要在系统管理——配置管理——系统设置——部署安全性中进行添加 ?
镜像安全扫描是确保云原生环境安全非常重要和基础的一个环节,通过镜像安全扫描可以检测容器镜像中的漏洞,避免攻击者植入恶意代码,快速响应漏洞,从而降低安全风险。 本文分享两个比较常用的镜像安全扫描工具,它们可以帮助我们识别容器镜像中的漏洞和弱点。 1、Trivy Trivy是一个全面的多功能安全扫描器,支持在容器镜像、Kubernetes、代码存储库、AWS中查找漏洞、错误配置、敏感信息和密钥、SBOM等。 github项目地址: https://github.com/chaitin/veinmind-tools.git (1)安装 veinmind-runner,使用平行容器启动脚本扫描本地镜像。 /run.sh scan image nginx:latest (2)下载单一工具veinmind-backdoor,扫描本地镜像中的后门。
前言容器镜像安全是云原生应用交付安全的重要一环,对上传的容器镜像进行及时安全扫描,并基于扫描结果选择阻断应用部署,可有效降低生产环境漏洞风险。 容器安全面临的风险有:镜像风险、镜像仓库风险、编排工具风险,小德今天就跟大家聊一聊镜像风险中的镜像扫描。 镜像扫描是什么? 镜像扫描就是遍历所有镜像中的文件系统,逐个检查软件包(Package)是否包含安全漏洞。例如,假设定义了“高”的阀值,如果发现某镜像内含有危险程度为“高”的安全漏洞,将拒绝所有对该镜像的拉取请求。 市场上容器规模根据目前权威的市场调查数据显示,72% 客户的容器规模为 100 个以上,4% 客户的容器规模超 5000 个,部署小规模容器的客户已经相当普遍,容器使用率迎来新增长。 伴随着容器的流行,它也成为黑客攻击的对象,容器安全受到重视。在容器安全方面,镜像安全是保护容器安全的基础,镜像扫描是解决镜像安全问题的基础手段。针对镜像风险问题,有效提升镜像扫描能力是关键。
题图摄于北京奥林匹克公园 编者注:继上次《Docker镜像详谈(3): 镜像内容存放在哪里?》文章之后,本周介绍镜像json文件的作用,以及动态容器和静态镜像的深层关系。 经过本系列对于 Docker 镜像的镜像,大家应该已经清楚 Docker 镜像的存储、以及 Docker 镜像的内容。 Docker 镜像的内容,应该说包含两部分,除了镜像层中的文件之外,还包括一层镜像的 json 文件。镜像层文件的理解较为简单,但是 Docker 镜像的 json 文件理解起来就会稍显复杂。 Dockerfile 中以上举例的4类命令,通过分析,我们得出初步的结论:Dockerfile的部分命令各自包含一类动态信息,这类信息不属于 Docker 镜像层中的文件内容。 上图中,我们展现了 ubuntu:14.04 镜像中 4 个镜像层的具体情况,特别分析了镜像 8251da35e7a7 和 e5855facec0b。
镜像是什么? 2. Docker镜像的特点 3. 容器和镜像的转换----Docker镜像的 Commit操作 一. 镜像是什么? Union文件系统是Docker镜像的基础, 镜像可以通过分层来进行集成, 基于基础镜像(没有父镜像), 可以制作各种具体的应用镜像. 那为什么tomcat镜像要比centos的镜像大呢? 原因是tomcat不是一个单独的镜像, 它包含了运行环境. 也就是说, tomcat镜像里面, 不仅仅是有tomcat镜像包, 它还包含了tomcat的运行环境. 所以, 可以看到tomcat下载的时候, 他会下载很多其他的镜像. 这就是镜像的分层 4. 容器和镜像的转换----Docker镜像的Commit操作 镜像运行, 生成容器, 容器运行生成镜像 容器, 一定是工作在前台的守护进程**** 什么意思呢?
但是,我们还是需要采取专门针对Docker部署的安全措施。因此,以下列出了确保容器平台上托管的应用程序安全的三个基本步骤。 让我们从最重要的开始。 1. 但是,此方法无法解决映像本身的潜在安全缺陷。因此,最好在Dockerfile中指定一个非root用户,以便您的容器始终安全运行。 私有注册中心可以让您获得更完善的镜像的管理方式,并且通常提供更高级的功能,可以帮助确保库存安全。 例如: l 复杂的镜像扫描工具,用于识别威胁和未修补的漏洞。 相比之下,诸如Docker Hub之类的公共注册表一般仅提供基本服务-您必须信任镜像发布者,而镜像发布者可能未遵循相同的高安全标准。 /app"] 验证镜像完整性 改善容器安全状况的另一种方法是在将镜像从Docker Hub中拉出之前进行验证。 Docker守护程序默认在不检查其完整性的情况下拉取Docker映像。
关于 Flux 项目谈安全的博客系列的下一篇文章将介绍我们如何以及为什么要为 Flux CLI 及其所有控制器镜像使用签名,以及你可以在工作流中做些什么来验证镜像来源。 自 Flux 0.26 以来,我们的安全文档添加了以下内容: The Flux CLI and the controllers' images are signed using Sigstore[1] 我们很高兴向你介绍这一点,并鼓励你在工作流程中使用它,以使你的集群更加安全。但是,让我们把上面这一节所说的全部内容都分解一下。 为什么要在一开始就签署发布工件? /VtWB5b9 TNMea7Ix/stJ5TfcLLeABLE4BNJOsQ4vnBHJ -----END CERTIFICATE----- 这里复制的证书是 这只是我们为确保你们的安全而采取的又一项措施。
这是因为官方镜像是一直在维护的,有任何新的 bug,或者版本更新,都会进行修复再以原来的标签发布,这样可以确保任何使用这个标签的用户可以获得更安全、更稳定的镜像。 Deleted: sha256:1333ecc582459bac54e1437335c0816bc17634e131ea0cc48daa27d32c75eab3 Deleted: sha256:4fc455b921edf9c4aea207c51ab39b10b06540c8b4825ba57b3feed1668fa7c7 IMAGE ID CREATED SIZE node slim sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228 6e0c4c8e3913 3 weeks ago 214 MB $ docker image rm node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228 Untagged: node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228 Untagged 和 Deleted
2 运行镜像 2.1 本地端口映射启动 apt安装或者下载源码安装qemu启动镜像:进入到build目录,执行如下命令,使用映射本地端口方式启动bmc(访问bmc的ip地127.0.0.1) (该方式可以指定bmc的ip地址,请参考:qemu网络通信),启动镜像后需要进入bmc配置IP地址。 登录BMC:用户名:root 密码:0penBmc (数字零) 结束qemu:Ctrl + a 再按x 4 访问BMC管理页面 打开浏览器输入如下地址:(如果以网桥方式启动,进入bmc系统后输入udhcp https://192.168.122.51/ 如果是本地端口映射启动输入如下地址: https://localhost:2443/ 在登录时会有安全提示,点击show advanced->Proceed (phosphor-webui软件包社区也已经停止了维护和更新) 2、添加方式无外乎是给变量添加值,以添加需要的软件包到镜像,更多请参考:配置文件介绍、应用软件管理。
后来,研究加密摘要系统的时候——Docker用这套系统来对镜像进行安全加固——我才有机会更深入的发现,逻辑上整个与镜像安全相关的部分具有一系列系统性问题。 而C语言不是一门内存安全的语言。这意味着C程序的恶意输入,在这里也就是Docker镜像的XZ Utils解包程序,潜在地存在可能会执行任意代码的风险。 要改进Docker镜像下载系统的安全问题,我认为应当有以下措施: 摒弃tarsum并且真正对镜像本身进行验证 出于安全原因tarsum应当被摒弃,同时,镜像在完整下载后、其他步骤开始前,就对镜像的加密签名进行验证 这个问题不仅仅是生态问题,还是一个终端用户的安全问题。针对第三方仓库的全方位、去中心化的安全模型既必须又迫切。我希望Docker公司在重新设计他们的安全模型和镜像认证系统时能采纳这一点。 结论 Docker用户应当意识到负责下载镜像的代码是非常不安全的。用户们应当只下载那些出处没有问题的镜像。
主机操作系统为Centos7.3,内网环境下使用docker pull,直接从本地镜像仓库下载镜像。 本地镜像仓库的搭建方法多样,这里不做记录。 我的本地镜像仓库的地址为master.example.com:5000。 配置docker的启动参数。 执行: # systemctl status docker ? 我的docker本地镜像仓库中有tomcat:8.5.16。内网环境下测试执行: # docker pull tomcat:8.5.16 ? 可以看出,这里在执行docker pull的时候不需要带上本地镜像仓库的地址,直接会自动从本地镜像仓库拉取。
报错记录: Step 4/9 : RUN pip3 install -r /var/www/codo-admin/doc/requirements.txt —> [Warning] IPv4 forwarding cryptography (from -r /var/www/codo-admin/doc/requirements.txt (line 1)) WARNING: Retrying (Retry(total=4, www/codo-admin/doc/requirements.txt (line 1)) 这个是由于本地没有开启路由转发的缘故 解决办法: vim /etc/sysctl.conf net.ipv4.
看完掌握以下内容: commit 镜像 原理 了解什么是容器数据卷 如何使用数据卷 附带 MySQL 安装实战 了解具名和匿名挂载 ? 一、commit 镜像 docker commit 提交容器成为一个新的副本 # 命令和git 原理类似 docker commit -m="提交的描述信息" -a="作者" 容器Id 目标镜像名 /bin/bash root@e0ecc9f999de:/usr/local/tomcat# #发现默认的tomcat是 没有webapps应用的,镜像的原因,阿里云官方镜像默认webapp下是没有文件的 ,我们以后就是使用我们修改过的镜像即 #添加 [root@192 ~]# docker commit -m="添加了webapps中的内容" -a="大数据老哥" 3992bb6e4b6c tomcat02 #具名挂载 [root@192 data]# docker run -d -P --name nginx02 -v juming_nginx:/etc/nginx nginx bd6c725b4a822d404ad5021dc4b446b0f742520854644d82c841f37e58e92503
Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像;镜像名称是ubuntu:18.04 ,将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像。 中间层镜像;docker image ls列表中只会显示顶层镜像;docker image ls -a显示包括中间层镜像在内的所有镜像;2.5 列出部分镜像docker image ls其实就比如linux 3 删除镜像3.1 docker image rm删除本地镜像,使用docker image rm;格式为: docker image rm [选项] <镜像1> [<镜像2> ...]3.2 可以使用 3941d3b032a8168d53508410a67baad120a563df67a7959565a30a1cb2114731Deleted: sha256:b7e0fa7bfe7f9796f1268cca2e65a8bfb1e010277652cee9a9c9d077a83db3c4noamanelson 3941d3b032a8168d53508410a67baad120a563df67a7959565a30a1cb2114731Deleted: sha256:b7e0fa7bfe7f9796f1268cca2e65a8bfb1e010277652cee9a9c9d077a83db3c4noamanelson
其中有一项工作是为不同的工具来构建 Docker 镜像,让他们都运行在 Docker 中(实际上,是兼容 Docker image 的其他 sandbox 系统,没有直接用 Docker)。 支持的工具越来越多,为了节省资源,Build 的 Docker image 就越小越好,文件越少,其实启动速度也会略微快一些,也会更安全一些。 Docker 运行的时候,从最下层的文件系统开始,merge 两层,得到新的 fs 然后再 merge 上一层,然后再 merge 最上一层,最后得到最终的 directory,然后用 chroot[4] 这种方法特别适合一些静态编译的编程语言,比如 golang 和 rust. 4技巧4:检查构建产物 这是最有用的一个技巧了。
之前按照https://zhuanlan.zhihu.com/p/680690436文章安装lean4非常方便,但是现在发现这个文章已经失效了,而且那个glean看起来就是个鸡肋,怎么都是安装不了,里面安装方法还有个问题就是上海交大的那个源地址变了 elan-init.exe下载后会有个powershell脚本进行安装,如果选择default安装,可以看到在C:\Users\用户名\.elan生成一些文件,而且打开查看有部分文件明显是lean4里面的东西 不难想到这个就是为了安装lean4而已,其实你可以不用elan-init.exe安装 可见上面2个exe都是辅助工具,其实你懂背后安装原理只是为了照顾初学者让他们更快安装上lean4 可见其实都是可以手动下载文件进行解决 ,希望能帮到安装lean4的困扰的童鞋。
CentOS7.9安全加固镜像制作流程梳理 1、先准备一台CentOS7.9虚拟机 准备虚拟机用于后面脚本的优化 ? (图片可放大查看) 确定好分区方案 ? (图片可放大查看) 3、YUM软件源配置 YUM源及EPEL源设置 4、常用软件包的安装 例如vim lrzsz bash-completion net-tools wget git ? ,需要初始环境作为沙盘来进行反复测试与验证加固脚本 5、编写安全加固脚本 脚本需要从诸如账号管理,口令策略,授权管理,服务管理,配置管理,网络管理,权限管理等多个角度提高CentOS Linux的安全性 例如SSH的一些安全加固项 ? (图片可放大查看) 6、借助云厂商的基线检查自动化工具进行验证 上传安全加固脚本并执行 ? (图片可放大查看) ? 2)删除相关基线检查自动化工具 3)删除加固脚本 等等清理操作,总之保证制作镜像前环境是干净的 8、关闭虚拟机制作镜像 关闭虚拟机制作镜像 ?
---- 作者:Matt Farina 当试图决定使用哪些制品时,了解一些关于制品安全性的信息是很有用的。 : img1 image: repo/img1:1.0.0 - name: img2 image: repo/img2:2.0.0 你可以在Helm 支持的注释文档[4] 它是如何工作的 安全报告是使用Trivy[5]和定期扫描生成的。扫描仪检查未扫描的镜像。7 天前最后一次扫描的镜像会被重新扫描,即使没有更改包。这将使报告显示新发现的 CVE 的检测。 有些镜像无法被扫描,比如在一个 scratch 容器中使用二进制文件的镜像,或者使用 latest 标记的镜像。在这些情况下,将不显示报告。 你可以在文档中了解有关安全报告[6]的更多信息。 community-operators/starboard-operator [3] tavern: https://artifacthub.io/packages/helm/buttahtoast/tavern [4]
,通常4-5个月就可以达到10w左右,通过假冒常用基础软件镜像是攻击云原生软件供应链的重要环节之一。 图4 供应链恶意镜像种类比例 从上面的数据可以看出,这些传播量如此巨大的恶意镜像,实际上就是以基础镜像的理念来进行传播,攻击者通过构建一个适用于大众需求的基础镜像,通过吸引用户去下载,从而达到了快速大规模扩散安全风险的目的 规模达到一定量级之后,就会变成一个复杂的森林,每一棵树的度将会非常大,深度很有可能达到4、5甚至更大。 从上述数据可以看出,这些基础镜像覆盖范围非常广,一旦出现安全问题,其影响的镜像数量也将非常巨大。 4.基础镜像的安全治理 保证基础镜像的安全性,是容器镜像安全治理中最基础、也是最重要的一个环节。 6.参考文献 https://mp.weixin.qq.com/s/k8YYgxO4nXYhgY_lr7zgBg https://mp.weixin.qq.com/s/oynjO8Q3IgZJt21HwxxMgA