《OpenShift 4.x HOL教程汇总》
说明:本文已经在 OpenShift 4.15 + RHACS 4.4.3 环境中验证,需要先完成《OpenShift Security (2) - 安装 Red Hat Advanced Cluster Security(RHACS)》
- 本文将在 RHACS 中为 “Log4j” 安全漏洞对应的 “CVE-2021-44228” 配置单独的系统策略,并将策略运用在 build 和 deploy 镜像阶段。
- RHACS 采用的是 “Kubernetes 的 Admission Controller 技术 + 安全策略库” 的机制对使用的镜像进行安全扫描和运行准入。
扫描特定的远程镜像
在 RHACS 的 Dashboard 页面中的 “Images at most risk” 区域点击 “View all” 按钮。
点击页面的 “Manage watches” 按钮,然后在 “Manage watched images” 对话框中的 Image Name 中填入 “docker.io/elastic/logstash:7.13.0”,然后点击 Add image 按钮。确认在对话框中显示成功对镜像扫描,关闭对话框。
在 IMAGES 页面中确认可以找到 “docker.io/elastic/logstash:7.13.0”,其状态为 Inactive,另外还提示 Scanning via watch tag。
进入 “docker.io/elastic/logstash:7.13.0”,可以在其包括的 CVE 列表中看到 “CVE-2021-44228”。
进入 “CVE-2021-44228” 可以查看该 CVE 的描述,确认该漏洞由 Log4j 引起。
点击上图右侧 “2 COMPONENTS”,可以看到和 CVE 2021-44228 相关的 log4j 组件版本和被修复版本。
部署测试应用
执行以下命令在 OpenShift 中运行 “docker.io/elastic/logstash:7.13.0” 镜像,其中带有受漏洞影响的 Log4j 环境。
oc new-project log4shell
oc run log4shell -n log4shell --image=docker.io/elastic/logstash:7.13.0
oc get pod -n log4shell
在 RHACS 中查看安全漏洞
进入 RHACS 控制台,在 Vulnerability Management 中的 “TOP RISKIEST IMAGES” 区域点击 VIEW ALL,可以看到 “docker.io/elastic/logstash:7.13.0” 镜像已处于 Active 状态了,说明该镜像已经在运行了。
查看安全违规
- 在 RHACS 的 Dashborad 中确认有和 “Log4Shell” 相关的 violation 安全违规。
- 通过 RHACS 的菜单进入 Violations 页面,通过 Severity 排名可以看到 Critical 级别的 Log4Shell: log4j Remote Code Execution vulnerability 违规项目。
- 点击上图中包含的 “Log4Shell” 的违规项目,可以看到详细的违规内容和违规策略定义。
安全策略
修改安全策略
- 通过 Policy Management 菜单进入 RHACS 的安全策略管理页面。然后按照策略名称过滤 log4shell 以找到 “Log4Shell: log4j Remote Code Execution vulnerability” 策略。
- 通过 Edit policy 菜单进入编辑策略页面。在 “Policy behavior” 步骤中将 Response method 改为 Inform and enforce,同时打开下方的 Enforce on Build 和 Enforce on Build 选项。最后保存安全策略。
部署镜像,验证安全策略生效
- 先删除掉项目中所有资源。
oc delete all --all -n log4shell
- 然后在 “开发者” 视图中用 “部署镜像” 功能部署 “elastic/logstash:7.13.0”。创建部署后会发现如下图的错误提示,从而无法创建部署。
- 在 RHACS 中的 Policy Management 中使用 Disable policy 菜单关闭 Log4Shell: log4j Remote Code Execution vulnerability 策略。
- 重新执行上面 1-2 步的操作,确认这次可以成功部署 “elastic/logstash:7.13.0”。
- 再在 RHACS 中的 Policy Management 中使用 Enable policy 菜单启用 Log4Shell: log4j Remote Code Execution vulnerability 策略。
- 重新执行上面 1 步的操作。
- 将镜像换成更高的版本 “elastic/logstash:7.17.6” 后再 “创建” 部署,确认可以正常 部署运行 “elastic/logstash:7.17.6”。这说明新的镜像中已经不存在 log4j 的安全漏洞。
演示视频
参考
http://cloud.redhat.com/blog/log4shell-practical-mitigations-and-impact-analysis
https://github.com/giannisalinetti/rhacs-log4shell-mitigation