《OpenShift 4.x HOL教程汇总》
说明:本文已经在 OpenShift 4.11 + RHACS 3.71.0 环境中验证,需要先完成《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 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” 区域可以看到 “docker.io/elastic/logstash:7.13.0” 镜像。
然后点击上图 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”。在点击 “创建” 后会看到部署运行的 Pod 数量会从 1 减到 0。
- 另外还可以在“部署详情”页面中的“事件”里看到 Pod 从 1 减到 0 的原因说明。
- 在 RHACS 的 Violations 中找到 Log4Shell: log4j Remote Code Execution vulnerability 违规项目,确认其中 Enforcement 部分也说明了当发现 Deployment 中有该项安全违规,就将 replicas 的数量缩至 0。
- 将镜像换成更高的版本 “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