作者简介
万绍远,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 进行介绍。
NeuVector 集成了 CVE 漏洞库,每天自动更新,支持对平台(Kubernetes)、主机、容器、镜像仓库进行安全漏洞扫描。
配置自动扫描,当平台漏洞库有更新,或有新的节点和容器加入时,会自动进行扫描。

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


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

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

支持对接多种镜像仓库如 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 开头。
注: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
NeuVector 通过组的方式对容器和主机进行管理,对组进行合规性检查、网络规则、进程和文件访问规则、DLP/WAF 的检测配置。
NeuVector 会自动将当前集群主机加入到 nodes 组,对于集群内容器会自动创建以 nv.开头的组。

NeuVector 的组支持 3 种模式:学习模式、监控模式和保护模式;各个模式实现作用如下:
学习模式
学习和记录容器、主机间网络连接情况和进程执行信息。
自动构建网络规则白名单,保护应用网络正常行为。
为每个服务的容器中运行的进程设定安全基线,并创建进程配置文件规则白名单。
监控模式
NeuVector 监视容器和主机的网络和进程运行情况,遇到非学习模式下记录的行为将在 NeuVector 中进行告警。
保护模式
NeuVector 监视容器和主机的网络和进程运行情况,遇到非学习模式下记录的行为直接拒绝。
新建的容器业务被自动发现默认为学习模式,也可以通过设置将默认模式设置为监控模式或保护模式。
不同组策略冲突情况下,适用的有效模式如下表:

为了保证业务的稳定运行,当出现模式不一致时,有效模式以限制最小的模式运行。
生产环境最佳实践使用路径可以是:
使用场景一: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
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 通知和日志抑制:

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

组名对应的是影响范围,如果为空,表示对全部的组都生效,填写组名可以设置对特定组生效。
配置策略后,在集群去 curl nginx 容器,发现无法访问,在 NeuVector 中查看容器状态为隔离状态。

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

网络流量可视化,可以清晰可见容器集群内的网络连接关系、当前容器连接会话,并且过滤网络连接信息,进行图标展示;能够快速进行网络问题定位。
针对容器可进行网络抓包,让故障无需进入主机获取高权限,就能进行网络问题深入排查。


采集到的数据包可直接下载,通过 Wireshark 进行解包分析。
本次我们主要讲解了 NeuVector 的基础功能,后续将深入介绍 DLP 和 WAF 的配置策略和管理使用。
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
有没有办法快速将表格格式的ruby哈希打印到文件中?如:keyAkeyBkeyC...1232343451253474456...其中散列的值是不同大小的数组。还是使用双循环是唯一的方法?谢谢 最佳答案 试试我写的这个gem(在表中打印散列、ruby对象、ActiveRecord对象):http://github.com/arches/table_print 关于ruby-如何以表格格式快速打印Ruby哈希值?,我们在StackOverflow上找到一个类似的问题:
我在一个ruby文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}
电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion我需要实现具有各种灵活需求的密码安全。这些要求基本上取自Sanspasswordpolicy:Strongpasswordshavethefollowingcharacteristics:Containatleastthreeofthe
安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un
目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一