作者简介
万绍远,CNCF 基金会官方认证 Kubernetes CKA&CKS 工程师,云原生解决方案架构师。对 ceph、Openstack、Kubernetes、prometheus 技术和其他云原生相关技术有较深入的研究。参与设计并实施过多个金融、保险、制造业等多个行业 IaaS 和 PaaS 平台设计和应用云原生改造指导。
前 言
NeuVector 是业界首个端到端的开源容器安全平台,唯一为容器化工作负载提供企业级零信任安全的解决方案。NeuVector 可以提供实时深入的容器网络可视化、东西向容器网络监控、主动隔离和保护、容器主机安全以及容器内部安全,容器管理平台无缝集成并且实现应用级容器安全的自动化,适用于各种云环境、跨云或者本地部署等容器生产环境。
此前,我们介绍了 NeuVector 的安装部署、高可用架构设计和多云安全管理,本篇将演示 NeuVector 的基础功能,主要包括:
- 安全漏洞管理
- 合规性检查和机密性检查
- 策略管理
- 准入控制策略
- 动态安全响应
- 行为监控
项目地址:https://github.com/neuvector/neuvector
本文主要基于 NeuVector 首个开源版 NeuVector:5.0.0-preview.1 进行介绍。
1.安全漏洞管理
NeuVector 集成了 CVE 漏洞库,每天自动更新,支持对平台(Kubernetes)、主机、容器、镜像仓库进行安全漏洞扫描。
配置自动扫描,当平台漏洞库有更新,或有新的节点和容器加入时,会自动进行扫描。
针对不同漏洞,有不同的风险级别提示、对应的组件版本提示和修复版本提示。
针对每个漏洞,NeuVector 可以展示对应的漏洞发布时间、漏洞影响范围、对应的组件影响版本。
对漏洞进行过滤,检测是否已经修复,以及漏洞等级、发布时间等。
1.1. 配置对接镜像仓库漏洞扫描
支持对接多种镜像仓库如 docker-registry(harbor)、JFrog Artifactory、Nexus 等。
以对接 Harbor 为例。配置连接方式,填写连接方式和认证信息,过滤器表示需要扫描的范围,如扫描 uat 项目下全部镜像则 uat/*
,如果需要扫描整个 Harbor 内全部镜像则 * 。测试设置可以验证编写的表达式的关联情况。
2.合规性检查和机密性检查
NeuVector 的合规性审核包括 CIS 基线测试、自定义检查、机密审核以及 PCI、GDPR 和其他法规的行业标准模板扫描。
“类型”表示对应的那个基线标准,如 K.4.1.1 对应 Kubernetes CIS 基线测试,4.1.1 容器对应的基线标准为 D 开头,镜像对应的基线标准为 I 开头。
注:GDPR (General Data Protection Regulation,《通用数据保护条例》)为欧盟条例。
在合规性检查中也会检查是否存在密文泄漏情况。
包括如以下密文泄漏情况:
General Private Keys
General detection of credentials including 'apikey', 'api_key', 'password', 'secret', 'passwd' etc.
General passwords in yaml files including 'password', passwd', 'api_token' etc.
General secrets keys in key/value pairs
Putty Private key
Xml Private key
AWS credentials / IAM
Facebook client secret
Facebook endpoint secret
Facebook app secret
Twitter client Id
Twitter secret key
Github secret
Square product Id
Stripe access key
Slack API token
Slack web hooks
LinkedIn client Id
LinkedIn secret key
Google API key
SendGrid API key
Twilio API key
Heroku API key
MailChimp API key
MailGun API key
3.策略管理
NeuVector 通过组的方式对容器和主机进行管理,对组进行合规性检查、网络规则、进程和文件访问规则、DLP/WAF 的检测配置。
NeuVector 会自动将当前集群主机加入到 nodes 组,对于集群内容器会自动创建以 nv.开头的组。
NeuVector 的组支持 3 种模式:学习模式、监控模式和保护模式;各个模式实现作用如下:
学习模式
学习和记录容器、主机间网络连接情况和进程执行信息。
自动构建网络规则白名单,保护应用网络正常行为。
为每个服务的容器中运行的进程设定安全基线,并创建进程配置文件规则白名单。监控模式
NeuVector 监视容器和主机的网络和进程运行情况,遇到非学习模式下记录的行为将在 NeuVector 中进行告警。保护模式
NeuVector 监视容器和主机的网络和进程运行情况,遇到非学习模式下记录的行为直接拒绝。
新建的容器业务被自动发现默认为学习模式,也可以通过设置将默认模式设置为监控模式或保护模式。
不同组策略冲突情况下,适用的有效模式如下表:
为了保证业务的稳定运行,当出现模式不一致时,有效模式以限制最小的模式运行。
生产环境最佳实践使用路径可以是:
- 上新业务时,先学习模式运行一段时间,进行完整的功能测试和调用测试,得到实际运行此业务的网络连接情况和进程执行情况信息。
- 监控模式运行一段时间,看看有没有额外的特殊情况,进行判断,添加规则。
- 最后全部容器都切换到保护模式,确定最终形态。
3.1. 动态微隔离
使用场景一:POD 间通过网络策略互相隔离
在 Kubernetes 平台中创建四个 Nginx,名称和用途如下:
workload_name:test-web1 image:nginx 用途:web 服务器
workload_name:test-con1 image:nginx 用途:连接客户端 1
workload_name:test-con2 image:nginx 用途:连接客户端 2
workload_name:test-con3 image:nginx 用途:连接客户端 3
创建 workload
kubectl create deployment test-web1 --image=nginx
kubectl expose deployment/test-web1 --port=80 --type=NodePort
kubectl create deployment test-con1 --image=nginx
kubectl create deployment test-con2 --image=nginx
kubectl create deployment test-con3 --image=nginx
此时在 NeuVector 中会自动生成这几个组:
在 test-con1 中通过 curl 访问 test-web1
此时可以正常访问,因为在学习模式下 NeuVector 也会自动添加此访问规则。
将 test-web1 和 test-con2 都设置为监控模式
然后在 test-con2 中 curl 访问 test-web1
此时 test-con2 可以正常访问 test-web1,但在 NeuVector 中会生成告警
同时,相应地,在网络活动拓扑图中也可以看见对应的连接链路变为红色。
将 test-web1 和 test-con2 都设置为保护模式,在通过 test-con2 去 curl test-web1
因为 curl 在学习模式时没有使用,也不是 NeuVector 默认允许的可执行进程,所以进程直接就无法访问了。
将 test-con1 设置为保护模式,此时 test-con1 无法访问外部网络。
可以通过自定义添加网络规则方式开通访问。
在网络规则页,此处规则已经是在学习模式下生成的规则列表。
添加外部访问规则
NeuVector 深度了解应用程序行为,并将分析有效负载,以确定应用程序协议。协议包括:HTTP,HTTPS,SSL,SSH,DNS,DNCP,NTP,TFTP,ECHO,RTSP,SIP,MySQL,Redis,Zookeeper,Cassandra,MongoDB,PostgresSQL,Kafka,Couchbase,ActiveMQ,ElasticSearch,RabbitMQ,Radius,VoltDB,Consul,Syslog,Etcd,Spark,Apache,Nginx,Jetty,NodeJS,Oracle,MSSQL 和 GRPC。
现在 test-con1 的 curl 可以正常访问 www.baidu.com
总结:
除上述策略外,NeuVector 也内置网络威胁检测,能够快速识别常用网络攻击,保护业务容器安全运行。
无论保护模式如何,在“学习和监视”模式下,NeuVector 将发出警报,并且可以在“通知>安全事件”中找到这些威胁。在保护模式下将收到警报和阻止;还可以根据威胁检测创建响应规则。
包含的威胁检测如下:
SYN flood attack
ICMP flood attack
IP Teardrop attack
TCP split handshake attack
PING death attack
DNS flood DDOS attack
Detect SSH version 1, 2 or 3
Detect SSL TLS v1.0
SSL heartbeed attack
Detect HTTP negative content-length buffer overflow
HTTP smugging attack
HTTP Slowloris DDOS attack
TCP small window attack
DNS buffer overflow attack
Detect MySQL access deny
DNS zone transfer attack
ICMP tunneling attack
DNS null type attack
SQL injection attack
Apache Struts RCE attack
DNS tunneling attack
TCP Small MSS attack
Cipher Overflow attack
Kubernetes man-in-the-middle attack per CVE-2020-8554
3.2. 进程管理
NeuVector 支持对容器和主机内进程进行管理,在学习模式下,运行的进程和命令会自动添加到规则中。
此时在 test-con1 中执行 df -h 会发现报错 bash: /bin/df: Operation not permitted在 nv.test-con1.default 组中添加 df 进程规则:
然后再重新执行即可。
进程管理也支持对 node 节点,可以在 node 组中进行限制,约束宿主机进程执行。如限制执行 docker cp 执行,通过学习模式得知是 docker-tar
进程在后端执行,将节点切换到保护模式,限制 docker-tar
进程即可。
这些在节点就无法执行 docker cp
4.准入策略控制
NeuVector 支持与 Kubernetes 准入控制(admission-control)功能对接,实现 UI 配置准入控制规则,对请求进行拦截,对请求的资源对象进行校验。
NeuVector 支持多种准入控制策率配置,如镜像 CVE 漏洞情况限制、部署特权模式、镜像内使用 root 用户、特定标签等。
在策略-准入控制中开启此功能,注意:需要 Kubernetes 集群提前开启 admission-control 功能
NeuVector 准入策略控制支持两种模式:监控模式和保护模式,对应的含义和组的模式一样的。这里我们直接切换到保护模式,添加策略。
添加完后,在 Rancher 中部署特权模式,容器会提示解决,策略生效。
5.动态安全响应
NeuVector 事件响应机制可以将响应规则设置为根据安全事件情况进行动态响应,包括以下事件:漏洞扫描结果、CIS 基准测试、准入控制事件等。
响应动作包括隔离、webhook 通知和日志抑制:
- 隔离模式:对应的容器网络进出流量将全部被切断。
- Webhook 通知:将触发信息通过 webhook 方式进行告警。
- 日志抑制:对触发告警信息进行抑制。
6.行为监控
以 CVE 漏洞配置为例,配置包含 CVE 漏洞名称为 CVE-2020-16156 的容器进入隔离模式。
组名对应的是影响范围,如果为空,表示对全部的组都生效,填写组名可以设置对特定组生效。
配置策略后,在集群去 curl nginx 容器,发现无法访问,在 NeuVector 中查看容器状态为隔离状态。
删除策略时,也可以配置将对应隔离状态容器解除隔离。
注意:
- 隔离操作不适用于为主机事件触发的规则。
- 每个规则可以有多个操作。
6.1. 网络流量可视化
网络流量可视化,可以清晰可见容器集群内的网络连接关系、当前容器连接会话,并且过滤网络连接信息,进行图标展示;能够快速进行网络问题定位。
6.2. POD 流量抓包
针对容器可进行网络抓包,让故障无需进入主机获取高权限,就能进行网络问题深入排查。
采集到的数据包可直接下载,通过 Wireshark 进行解包分析。
总 结
本次我们主要讲解了 NeuVector 的基础功能,后续将深入介绍 DLP 和 WAF 的配置策略和管理使用。