开发者学堂课程【容器安全与 Palo Alto Networks 解决方案 :容器的漏洞扫描(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/628/detail/9882
容器的漏洞扫描(二)
五、演示内容
镜像的漏洞扫描
阻止有问题的镜像生成容器
//接下来就开始进行演示,第一个内容,就是我们怎么样对镜像进行进行扫描,一个,会通过 Twistlock 会自动地对所有容器的镜像进行扫描或者在 K8S 集群里面的所有的镜像请扫描。同时第二个方法,就是通过 Twistcli 这个命令行的方式,基本上是面对开放人员。能够在开发的过程中,就对这个镜像进行一些扫描,这是两个不同的方法。
第二个演示内容,就是怎么样对这些漏洞进行策略保护。比如说去阻止一些有漏洞的或者有问题的这些镜像生成容器。
//首先,这个是安装在那个 ACK 阿里云上面的容器的集群。上面的这个 Twistlock 的 console,第一页,也是经常会看的,就是整个容器的一个视图,每一个都代表是一个 pod。比如说在这个比如说 engine 上有个2。可以点击就可以看到,就是说。这个二就代表他有两个 pod,分别运行在两个不同的 host。因为现在是这一集群就两个 host。然后可以看到它相关的 servicename、space that。
然后 image ID 是多少。在这个地方,可以很清楚的看到,它的 veliability。有17个 criticalrisk 和25个 hiderisk 就非常详细,可以看出有多少 veliability。
//然后,runtime event,目前有没有一些在运行的时候,有没有一些新的一些报警会产生,在 veliability 可以点个链接进去,会去显示看,在这个 engines 的镜像里有多少 veliability,比如会根据优先级高和低进行排序,Critical 有哪些,然后,它会有详细的描述,点开可以看到。
这个 critical 的里面,它涉及到哪些 cve,然后每个 CVE 情况是描述在这然后,是三个月以前发现这个漏洞。所以也是比较重要的这样一个问题。然后,会显示,在哪个版本。
可以把这个cve的漏洞给修补掉,也会有非常详细的漏洞所关于的容易和复杂程度是非常简单的,然后,是最近的一个漏洞。攻击的一个方向,是从网络开始进行攻击。最下面的是比较重要的,它是可以修复的。很快的就可以知道每一个 veliability 镜像的的情况,当然在这里也可以看到的 complex 的问题。
比如说这个镜像,里面默认是用 root 进行运行。这是比较重要的一个安全的隐患,然后,可以看到。每一个 layer,在 Bill 的这个 imgine 的时候有这么多的 layer。
//可以看到具体的这样一个命令,比如说设置了一些命令环境参数然后,安装安装包。会自动定义倒在安装包的一个内容。整个安装包的大小是53兆,然后可以大致的点开来,它有这么多。这里有个比较大的比较快的一个 summary。
//然后,可以点一下 veliability 的 cve,点击会连接到一个第三方的网站可以看到问题究竟在哪。这个版本是有漏洞的这样一个版本。在以下的版本里面,就把这个问题给修复了。
//在这上面也可以去看一些比较详细的一些内容,比如说这些链接,都可以点击查看,关于这个漏洞的一些详细的说明。
//包括在这个容器里面,它所运行的一些进程。或者运行过 layer,进程都会在这个容器里面产生,会进行记录,包括安装包,在这个维度,比如说在这个 package。在整个 package 里面。有多少的那个已知 veliability 的 cve 版本。
方便开发的人员,很快的去定位这些问题。然后,在这个也可以用 host 维度,这个容器运行在哪两个host上面,所以正分布运行在两个 host,如果有更多的副本,然后有更多的 host 的集群的话,会有个比较想起那个显示。
//雷达的一个视图。接下来查看 veliability 的一个界面,第一个是设置策略的地方。在下面 monitor 还有一个本能 veliability,这是显示整个一个大的一个视图,就刚才讲了有三个不同的维度。有 contains 这维度, host 维度,包括 image 维度,然后,在这上面有趋势图。
critical 的这些问题,发展的一个趋势是什么,比如说在 host 这块。比如说打了很多的补丁,突然就下降了,但是,在这个非接触的这个层面,会有一个比较大的一个增加,比如说在第十天的,是过去30天的这样一个日志和趋势图。会有一个比较大的一个增加。
点上不同的颜色就是有各自的一个显示。
六、代码演示
//首先,进到 Twistlock,找到 Linux 的目录,因为是 Linux 的系统,可以看到一个推送的 Twistlic 可执行文件,输入 token,然后第二步,需要把 console 的地址给 HTTPS,然后需要把镜像写成 nginxi1.7.9。就会有镜像扫描的一个结果。首先有四个 high,三个 media ,这个是总结的叙述,支持加上一个的 details 的参数,运行后,就会有非常详细的内容,比如说在哪个版本里面可以fix。所以也可以看到包括 complex 的问题究竟是在哪,这也是非常简单,开发人员也可以,把这个做一个自动化扫描的这样一个步骤,也非常容易去集成。做这镜像仓库的这个扫描,首先在这个镜像仓库,做一个和阿里云的一个镜像仓库的配置,首先默认有很多的不同的镜像仓库,但是阿里云是最好集成的,因为它是默认就是用的 docker 标准,国际标准是非常相似的这样一个结构,所以只要选中 docker registry2 ,就可以了。
然后,需要把这个 registry 的地址填上去,然后,知道镜像仓库的地址。然后,比如说哪些不希望去进行扫描,或者使用 tag,加一些标签进行扫描,然后需要把镜像仓库的一些内容,增加一个 username pass,如果没有的话,直接把 username password 加进去就行了。
选完以后,有一个 OS 的 version,是 Linux 的这样一个操作系统。然后 Staner 会用这个 defender 的容器,进行做scan 的 job ,可以去指定在某哪几台 host 上面进行这个镜像的扫描,因为如果不想扫描,会对整个容器或者说主机的性能有任何的开销。然后,在这里的话,也可以去限制,最少保证两个 Defender,会对这个镜像仓库进行扫描,然后,最多不超过五个,这是默认的一些建议,当然也可以手动的去改。当然扫描的速度也是非常的快。需要的是上传一个新的镜像,然后进行扫描。
首先,需要把本地的一个 nginxi1.7.9,刚才用CPI已经扫描过的镜像继续把它上传上去,先要打个标签。打完标签了以后,可以把刚才的这个镜像把它上传上去。
开始上传了,上传完了以后,按一下 scan,可以看到其实已经扫描完成,刚上上传的镜像,可以看一下扫描速度还是非常快的。说完镜像扫描了以后,可以来做一下,比如说在这个 vulnerability 的这样一个策略。比如说在这里可以设一些策略,先加一条,比如说 block。
Vulnerable image。
设的策略,首先,希望高的时候才会去让镜像提高。但是,什么时候会阻止这个镜像生成,当有 critical 的这样一个问题的时候,才会 block。不做任何的限制,所以对所有的 image 都会有效,包括在所有 host 上面都会有效。在这个 advance 的时候,希望就是 apply。只有当 fix 是是存在的时候,才会进行。然后,在 output 的时候,希望能够有一些详细报告,或者说也可以加一些 CVE 的 exception,某些 CVE 已知,但是想去除它。但是并不希望,这些CVE 能会影响镜像的。这也是给用户的一些比较大的一些自由度,然后,这里也可以加一个 image,比如说加一个message 消息,告诉开发人员,当他或者他运行这个容器的时候,如果被 block 的时候。可以知道,究竟是什么原因。
//去生产一个 image 的这样的容器,已经 deploy 完成了。进到的雷达图里面去看一下。很快它自动的就把刚刚生成的这个容器,就显示。有一个问题是 veliability 是 Hide。所以我现在要去,这个镜像的话。需要把这个 Brown 的策略改成高,现在策略做完了以后,先要把这个之前那个容器停掉,然后重新试着一样的来运行。
首先,delete deployment,现在被删除了。试着再去之前的一个命令,希望去拉起来这样一个容器。那现在的话,K8S 创建任务已经完成了,但是 get pod 时候,nginx1 趁着 deployment,它会有一个。
Error or run container error,报错。可以进去看一下究竟是报了一个什么错。
//解决这个问题。然后这下面有一个比较详细的,究竟它的一个 hard CVE 问题在哪。不然的话,它就显示有一个hide。
//所以整个镜像没有成功的拉起来,这也是希望做的。那这个安全团队,能对整个 K8S 集群,就有比较高的管控,能够在第一步镜像的漏洞就能阻止它,生成新的容器,以保证所有的能够在 campus 集群里面运行容器,都是安全的。
//因为这个 K8S 它最终的话,会去通过 docker 去拉起成整个镜像。所以在这里,它会产生一个日志。去试着从这个镜像创建容器。然后 block 是刚才设的 changeblock 的 rule。
//然后,下面有整个报错的原因。所以这个 response,是把他 block 掉了,所以,在这一块儿,也可以通过一个报错。可以来看到之前这个发生的这样一个问题。