云原生安全平台NeuVector基础使用

概述

上一篇NeuVector文章主要以安装部署为主,本篇将实际结合NeuVector的基础功能进行操作演示,主要包含对于NeuVector安全漏洞管理、合规性和机密性检查、策略管理、准入控制策略、动态安全响应和行为监控。本篇文档适用版本为以NeuVector首个开源版NeuVector:5.0.0-preview.1为主

安全漏洞管理

集成CVE漏洞库,每天自动更新,支持对平台(Kubernetes)、主机、容器、镜像仓库进行安全漏洞扫描。

配置自动扫描,当平台漏洞库有更新或有新的节点和容器加入时会自动进行扫描。

针对不同漏洞有不同风险级别,以及对应的组件版本和修复版本提示

每个漏洞可以展示对应的漏洞发布时间、漏洞影响范围、对应的组件影响版本。

对漏洞进行过滤,是否已经修复,漏洞等级、发布时间等

配置对接镜像仓库扫描

支持对接多种镜像仓库如(docker-registry(harbor)、JFrog Artifactory、Nexus等)

以对接Harbor为例,配置连接方式,填写连接方式和认证信息,过滤器表示你需要扫描的范围如扫描uat项目下全部镜像则uat/*,如果需要扫描整个Harbor内全部镜像则*。测试设置可以验证编写的表达式的关联情况。

合规性检查和机密性检查

NeuVector的合规性审核包括 CIS 基线测试、自定义检查、机密审核以及 PCI、GDPR 和其他法规的行业标准模板扫描。

类型这表示对应的那个基线标准如K.4.1.1对应Kubernetes CIS基线测试4.1.1
容器对应的基线标准为D开头的,镜像对应的基线标准为I开头

注:《通用数据保护条例》(General Data Protection Regulation,简称GDPR)为欧洲联盟的条例

在合规性检查中也会检查是否存在密文泄漏情况

包括如

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

策略管理

在NeuVector中通过组的方式对容器和主机进行管理。通过对组进行合规性检查、网络规则、进程和文件访问规则、DLP/WAF的检测配置。

NeuVector会自动将当前集群主机加入到nodes组,对于集群内容器会自动创建以nv.开头的组

NeuVector的组支持3种模式,学习模式、监控模式、保护模式。各个模式实现作用如下。
学习模式:
学习和记录容器、主机间网络连接情况和进程执行信息。
自动构建网络规则白名单,保护应用网络正常行为。
为每个服务的容器中运行的进程设定安全基线,并创建进程配置文件规则白名单

监控模式:
NeuVector监视容器和主机网络和进程运行情况,遇到非学习模式下记录的行为将在NeuVector中进行告警。

保护模式:

NeuVector监视容器和主机网络和进程运行情况,遇到非学习模式下记录的行为直接拒绝。

新建的容器业务被自动发现默认为学习模式,也可以通过设置将默认模式设置为监控模式或保护模式。

不同组下策略冲突情况下,适用的有效模式如下表:

源组模式 目的组模式 有效模式
学习模式 监控模式 学习模式
学习模式 保护模式 学习模式
监控模式 学习模式 学习模式
监控模式 保护模式 监控模式
保护模式 学习模式 学习模式
保护模式 监控模式 监控模式

为了保证业务的稳定运行,当出现模式不一致时,有效模式以限制最小的模式运行。

生产环境最佳实践使用:
使用路径可以是:1、上新业务时先学习模式运行一段时间,进行完整的功能测试和调用测试得到实际运行此业务的网络连接情况和进程执行情况信息。2、监控模式运行一段时间,看看有没有额外的特殊情况,进行判断添加规则。3、最后全部容器都切换到保护模式确定最终形态。

动态微隔离

使用场景一: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也内置网络威胁检测,能够快速识别常用网络攻击,保护业务容器安全运行。

无论保护模式如何。在”学习和监视”模式下,将发出警报,并且可以在”通知”->安全事件中找到这些威胁。在保护模式下,这些将收到警报和阻止。还可以根据威胁检测创建响应规则。

包含的威胁检测如下:

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

进程管理

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

准入策略控制

NeuVector支持与Kubernetes准入控制(admission-control)功能对接,实现UI配置准入控制规则,对请求进行拦截,用于对请求的资源对象进行校验。
NeuVector支持多种准入控制策率配置如镜像CVE漏洞情况限制、部署特权模式、镜像内使用root用户、特定标签等。

在策略-准入控制中开启此功能,注意:需要Kubernetes集群提前开启admission-control功能

NeuVector准入策略控制,支持两种模式,监控模式和保护模式,对应含义和组的模式一样的。这里我们直接切换到保护模式,添加策略。

添加完后,在Rancher中部署特权模式容器会提示解决,策略生效。

动态安全响应

NeuVector事件响应机制可以配置响应规则根据安全事件情况进行动态响应,包括以下事件:漏洞扫描结果、CIS基准测试、准入控制事件等。

响应动作包括隔离、webhook通知、日志抑制

隔离模式:对应的容器网络进出流量将全部被切断。
webhook通知:将触发信息通过webhook方式进行告警。
日志抑制:对触发告警信息进行抑制。

以CVE漏洞配置为例,配置包含CVE漏洞名称为CVE-2020-16156的容器进入隔离模式。

组名对应的是影响范围,如果为空,表示对全部的组都生效,填写组名可以设置对特定组生效。

配置策略后,在集群去curl nginx容器,发现无法访问,在NeuVector中查看容器状态为隔离状态。

删除策略时,也可以配置将对应隔离状态容器解除隔离。

注意:
1、隔离操作不适用于为主机事件触发的规则
2、每个规则可以有多个操作。

行为监控

网络流量可视化

网络流量可视化,可以清晰可见容器集群内网络连接关系,当前容器连接会话并且可以过滤网络连接信息,进行图标展示。能够快速进行网络问题定位。

流量抓包

针对容器可进行网络抓包,方便故障不需要进入主机获取高权限,就能使进行网络问题深入排查。

采集到的数据包可直接下载通过Wireshark进行解包分析。