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

Elasticsearch安全漏洞修复

IT那活儿 2022-01-29
3178

点击上方“IT那活儿”,关注后了解更多精彩内容!!

版本信息

Elasticsearch 7.5.1、java version 1.8.0_101、Red Hat 7.5

漏洞名称

Elasticsearch 未授权访问

漏洞描述

通常情况下Elasticsearch 未对敏感信息进行过滤,通过curl IP:PORT的方式导致任意用户可读取敏感信息。

修复方案

添加用户认证,提高信息安全性。

修复步骤

1. 创建TLS证书,并传输到各节点
如下操作在其中一个node节点执行即可,生成完证书传到集群其他节点即可。
注:此次以3个节点为例:xxx.xxx.xxx.104 xxx.xxx.xxx.106 xxx.xxx.xxx.107
切换到elasticsearch目录:
cd /home/shsnc/snc_product/elasticsearch
执行下面两条命令,都是一路回车即可,不需要给密钥添加密码:
./bin/elasticsearch-certutil ca./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
证书创建完成之后默认在elasticsearch目录下,统一放到config/certs目录:
cd config
# 创建certs目录:
mkdir certs
# 回到elasticsearch目录:
cd /home/shsnc/snc_product/elasticsearch
ls elastic-*
# 会有以下两个文件:
elastic-certificates.p12 elastic-stack-ca.p12mv elastic-* config/certs
# 在另外两个节点创建certs目录,把elastic-certificates.p12  elastic-stack-ca.p12这两个文件拷贝到另外两个节点的certs目录:
scp -r config/certs xxx.xxx.xxx.106:/home/shsnc/snc_product/elasticsearch/configscp -r config/certs xxx.xxx.xxx.107:/home/shsnc/snc_product/elasticsearch/config


2. 开启X-pack验证

配置文件目录:
/home/shsnc/snc_product/elasticsearch/config。
# 配置文件名称:elasticsearch.yml
删除 xpack.security.enabled: false这一行。
# 三台机器增加配置文件如下:
http.cors.allow-headers: Authorizationxpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
3. 重启集群
重启三台elasticsearch:
cd /home/shsnc/snc_product/elasticsearch/sh elasticsearch.sh restart
4. 为ES内置的账户创建密码
ES中内置了几个管理其他集成组件的账号即:apm_system, beats_system, elastic,  kibana, logstash_system, remote_monitoring_user,使用之前,首先需要添加一下密码。
# 执行命令,只需在104主机执行即可:
/home/shsnc/snc_product/elasticsearch/bin/elasticsearch-setup-passwords interactiveInitiating the setup of passwords for reserved users elastic,kibana,logstash_system,beats_system.You will be prompted to enter passwords as the process progresses.Please confirm that you would like to continue [y/N]yEnter password for [elastic]:Reenter password for [elastic]:Enter password for [kibana]:Reenter password for [kibana]:Enter password for [logstash_system]:Reenter password for [logstash_system]:Enter password for [beats_system]:Reenter password for [beats_system]:
# 六个账户的密码保持一致,现场操作切勿使用弱口令。
5. 更新涉及Elasticsearch的微服务
微服务配置文件中已有Elasticsearch认证的配置,直接修改配置,重启服务即可。
有用到es的微服务(可能有差异,具体按现场为主,这里以base-resource-center服务为例)。
# 需要更新base-resource-center.jar 和lib目录。
# 进入base-resource-center目录:
cd /home/shsnc/snc_product/product/base-resource-center/config


# 编辑配置文件application.properties,修改下面的密码行即可:


resource.elasticsearch.username=elastic #认证用户名resource.elasticsearch.password=123456 #用户密码
# 重启104和107 两台的base-resource-center服务:
cd /home/shsnc/snc_product/product/sh jar.sh -restart base-resource-center
6. 认证测试
服务正常启动后,执行curl ip:port的方式访问集群,已无法访问到集群任何信息,返回值如下:
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
#需添加用户认证选项方可进行访问,格式如下:
#curl --user 用户:密码 IP:端口curl --user elastic:123456 xxx.xxx.xxx.106:9200{"name" : "es_node0","cluster_name" : "xxxxx","cluster_uuid" : "RZXFBcnYSSe9lF5Wc-J2bB","version" : {"number" : "7.5.1","build_flavor" : "default","build_type" : "tar","build_hash" : "3ad9ty3a93c95vb0cdc024651cf95d67e1e18d36","build_date" : "2020-12-16T22:57:37.835892Z","build_snapshot" : false,"lucene_version" : "8.3.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"}
返回以上信息即说明认证通过。

结  语

默认情况下,当我们搭建好Elasticsearch集群后,我们通过http://localhost:9200就可以直接访问到Elasticsearch集群的一些信息,这显然是不安全的。
在同一个局域网中,如果我们启动了多个Elasticsearch节点,且集群的名字相同,那么他们可能会自动加入集群,这同样是不安全的。
因此Elasticsearch自带的插件x-pack就可以解决上述的要求,通过TLS加密和基于角色的访问控制来确保Elasticsearch各节点的安全通信。

END


本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)


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

评论