暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

三种常见开源软件认证漏洞

IT那活儿 2023-09-13
667

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


ES认证漏洞
Elasticsearch往往大量的数据,如果安全不过关,那么就会有严重的数据安全隐患。Elasticsearch 的安全认证方式有不少,如http-basic,search guard,shield等,本文讲的是使用Xpack进行安全认证。
  • 关于http-basic也实验过,使用的是elasticSearch-http-basic提供了针对ES HTTP连接的IP白名单、密码权限和信任代理功能。可以安装elasticsearch-http-basic包,但是在Github上目前发布的是已经是7年前的版本了。而且对应es的版本也只是支持到es6.x,所以排除了http-basic这个插件包。
  • 在本文中测试用到的ES版本是7.8,使用X-Pack进行安全认证

1.1 XPack介绍
X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。ES7.0+之后,默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。自6.8以及7.1+版本之后,基础级安全永久免费。
1.2 相关安全配置介绍
1.2.1 xpack.security.enabled
默认为true,启用节点上ES的XPACK安全功能,相当于总开关
1.2.2 xpack.security.http.ssl
这个是用来开启https的,以及对应的设置,整体配置项如下:
xpack.security.http.ssl: enabled: false 【开启还是关闭】
verification_mode: certificate 【如下】
full:它验证所提供的证书是否由受信任的权威机构(CA)签名,并验证服务器的主机名(或IP地址)是否与证书中识别的名称匹配。】
certificate:它验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。】
none:它不执行服务器证书的验证。】
truststore.path: certs/elastic-certificates.p12 【信任存储库文件的存放位置】
keystore.path: certs/elastic-certificates.p12 【密钥存储库文件的存放位置】

1.2.3 xpack.security.transport.ssl
这个是传输层的认证设置,整体配置项如下:
xpack.security.transport.ssl: enabled: true 【开启还是关闭】
verification_mode: certificate 【如下】
full:它验证所提供的证书是否由受信任的权威机构(CA)签名,并验证服务器的主机名(或IP地址)是否与证书中识别的名称匹配。】
certificate:它验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。】
none:它不执行服务器证书的验证。】
keystore.path: certs/elastic-certificates.p12 【信任存储库文件的存放位置】
truststore.path: certs/elastic-certificates.p12 【密钥存储库文件的存放位置】

1.3 ES集群认证配置
命令操作都是在ES安装根目录下执行的
1.3.1 创建证书
1)创建一个证书颁发机构
提示命名文件:直接回车,默认文件名elastic-stack-ca.p12文件 提示输入密码:可以直接回车,也可以输入密码进行设置(如果这里设置密码的话,下面在给keystore和truststore设置的时候要输入密码,较为繁琐)
./bin/elasticsearch-certutil ca
生成如下文件:
elastic-stack-ca.p12
2)为节点生成证书和私钥
提示命名文件,直接回车,默认文件名elastic-certificates.p12文件 提示输入密码:可以直接回车,也可以输入密码进行设置。
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
这里使用3.1.1创建的elastic-stack-ca.p12文件。
3)config目录下创建certs目录
mkdir config/certs
4)将文件拷贝到certs目录下
mv elastic-certificates.p12 config/certs/
1.3.2 给keystore和truststore设置密码
keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息truststore是放信任证书的一个storetruststore和keystore的性质是一样的,都是存在key的一个仓库,区别在于,truststore存放的是只包含公钥的数字证书,代表了可以信任的证书,而keystore是包含私钥的。
如果在创建证书的过程中加了密码,需要输入这个密码。每个节点都需要。执行如下:
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

这样就会在config目录下生成keystore文件了。
1.3.3 修改配置文件并重启
在config/elasticsearch.yml文件中设置并重启:
xpack.security.enabled: true

xpack.security.http.ssl:
enabled: false
verification_mode: certificate
truststore.path: certs/elastic-certificates.p12
keystore.path: certs/elastic-certificates.p12

xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/elastic-certificates.p12
truststore.path: certs/elastic-certificates.p12

1.3.4 创建用户密码
集群中的节点都按照上面的方式完成配置并启动后,就可以设置账号密码了,有4种方式:
1)自动创建密码
./bin/elasticsearch-setup-passwords auto
2)手动输入密码
./bin/elasticsearch-setup-passwords interactive
3)重置用户密码(随机密码)
./bin/elasticsearch-reset-password -u elastic
4)重置用户密码(指定密码)
./bin/elasticsearch-reset-password -u elastic -i <password>
这里我们设置的密码是testpasswd,也就是user:elastic的密码。
1.4 认证验证场景
这里说明一下:xpack.security.http.ssl的enable为true 就会是https,为false就是http,这里是关掉了。
访问验证:
当执行curl去访问es api的时候也会提示需要进行认证。
但是加上账户密码认证授权就可以访问了:

curl --user elastic:testpasswd localhost:9200


zookeeper认证漏洞

  • 漏洞名称:Apache Zookeeper 未授权访问漏洞【原理扫描】
  • 风险等级:高
  • 高可利用:否
  • CVE编号 -
  • 端口(服务) :2181(zookeeper)
  • 风险描述
    ZooKeeper是一个高性能的分布式数据一致性解决方案,它将复杂的,容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给客户使用。ZooKeeper默认开启在2181端口,在未进行任何访问控制情况下,攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。
  • 风险影响:攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。
  • 解决方案
    1)禁止把Zookeeper直接暴露在公网。
    2)绑定指定IP访问。
    3)添加访问控制,根据情况选择对应方式(认证用户,用户名密码)。
  • 议类型:tcp。
方法一:通过iptables对zookeeper的访问控制权限
iptables临时限制方法:
1)封2181端口
iptables -I INPUT -p tcp --dport 2181 -j DROP
2)指定服务器IP 开启2181访问
iptables -I INPUT -s 10.xx.xx.208 -p tcp --dport 2181 -j ACCEPT
iptables -I INPUT -s 10.xx.xx.209 -p tcp --dport 2181 -j ACCEPT

3)进行保存
Centos6.xservice iptables save
Centos7.xiptables-save

方法二:设置指定ip访问
1)登陆zookeeper:./zkCli.sh -server :(ps:需cd到zookeeper的bin目录下执行)
2)查看当前权限:getAcl (ps:默认为’world,'anyone)
3)添加可访问IP:setAcl ip:192.168.1.xx:cdrwa,ip:192.168.1.xx:cdrwa
  • 查看是否正常添加:getAcl /
  • 未授权也可以连接,但是查看节点时会报错,如果不把127.0.0.1加上去,localhost都不行,必须填可访问IP,才能访问。
退回方法:
  • 使用之前设置的IP进行访问:./zkCli.sh -server :
  • 设置为所有人可访问:setAcl / world:anyone:cdrwa
方法三:设置zookeeper节点ACL权限控制
1)登陆zookeeper
查看zookeeper节点:ls /
2)增加一个认证用户:addauth digest 用户名:密码明文(eg.addauth digest test:test123)
3)给zookeeper节点追加操作权限:setAcl /zookeeper auth:test:test123:cdrwa(ps:/zookeeper为第二步所查到的)
4)查看Acl设置:getAcl /zookeeper

Ps:方法三设置后需要在程序端进行相应配置,且设置后还是可以通过ls /查看所有的节点,但无法进一步操作配置权限的节点。


Nacos认证漏洞

Nacos动态域名和配置服务,英文缩写是Dynamic Naming and Configuration Service, 取的Naming的前两个字母,Configuration的前2个字母,以及Service的首字母组成的。大多数的企业在使用微服务架构的时候,基本上都会选择nacos作为注册中心和配置中心。

nacos其实是阿里开源的一个项目,存在漏洞是在所难免的,本文介绍以下两个nacos认证方面的漏洞。

3.1 开启鉴权

3.1.1 背景
nacos 因为默认token固定,容易被利用.
  • 具体的问题为: QVD-2023-6271。
  • 漏洞描述:开源服务管理平台 Nacos 中存在身份认证绕过,在默认配置下未token.secret.key 进行修改,导致远程者可以绕 过密钥认证进入后台,造成系统受控等后果。
  • 影响版本:0.1.0 <= Nacos <= 2.2.01.2.3.4.5.6.7.
3.1.2 解决方法
1)修改默认密钥
默认密钥的修改:
echo "thisisthenacosnewtestpasskeyinfo" |base64
根据得出的结果修改配置文件/nacos/conf/application.properties内的:
nacos.core.auth.default.token.secret.key=
修改为 base64的数值, 注意要求是不能低于32位长度。
2)打开授权认证
nacos.core.auth.system.type=nacos nacos.core.auth.enabled=true
3.1.3 springboot设置
修改配置文件:
nacos:
discovery:
server-addr: 127.0.0.1:8848
username: nacos
password: YourPassword

3.2 认证绕过

nacos的认证绕过安全漏洞,在nacos开启了鉴权后,依然能绕过鉴权访问任何http接口。
在默认情况下,nacos需要通过修改application.properties配置文件或添加JVM启动变量-Dnacos.core.auth.enabled=true即可开启鉴权功能 。
但在开启鉴权后,仍然可以在某种情况下绕过认证,调用任何接口,通过该漏洞,可以绕过鉴权,调用添加用户接口,添加新用户:
(POST https://127.0.0.1:8848/nacos/v1/auth/users?username=test&password=test),
然后使用新添加的用户登录console,访问、修改、添加数据。
修复方法:升级到nacos1.4.1或以上。

END


本文作者:事业二部(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论