资讯专栏INFORMATION COLUMN

Elasticsearch安全漏洞修复

IT那活儿 / 750人阅读
Elasticsearch安全漏洞修复

点击上方“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.p12
mv 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/config
scp -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: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.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 interactive
Initiating 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]y
Enter 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那活儿微信公众号(上海新炬王翦团队)


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129674.html

相关文章

  • Rancher 2.2.4发布,CVE修复,项目监控回归!

    摘要:大会上,研发经理还将现场即将发布的中容器的功能及使用还有等的现场交流。点击了解详情及在线报名啦年月日,发布了全新版本,该版本修复了近期发现的两个安全漏洞和,项目级别的监控功能也在此版本回归,还有一系列功能与优化。 6月20日,北京,由Rancher Labs主办的【2019企业容器创新大会】限免报名已开启!全天18场演讲,特邀中国人寿、中国联通、平安科技、新东方、阿里云、百度云等著名企...

    沈建明 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<