Elasticsearch 未授权访问漏洞

Elasticsearch 未授权访问漏洞(Es未授权访问)

漏洞描述

ElasticSearch 是一款 Java 编写的企业级搜索服务,启动此服务默认开放 HTTP-9200 端口,可被非法操作数据。

复现

访问 IP:9200 显示 You konw,for Search 表示存在此漏洞
在这里插入图片描述
显示登录界面或访问不到的情况 证明不存在此漏洞
在这里插入图片描述

https://github.com/mobz/elasticsearch-head

查询所有 index, type:
localhost:9200/_search?pretty=true 
http://ip:9200/_cat/indices
一般泄漏的文件都会出现在这个页面里面,可访问进行信息搜集
查询某个 index 下所有 type:
localhost:9200/films/_search 
查询某个 index 下, 某个 type 下所有记录:
localhost:9200/films/md/_search?pretty=true 
带参数的查询  
localhost:9200/films/md/_search?q=tag:good 
{"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":1.0,"hits":[{"_index":"film","_type":"md","_id":"2","_score":1.0, "_source" : 
{ "name":"hei yi ren", "tag": "good"}},{"_index":"film","_type":"md","_id":"1","_score":0.30685282, "_source" : 
{ "name":"ma da jia si jia", "tag": "good"}}]}} 
JSON 参数的查询 
注意:query 和 term 关键字)
localhost:9200/film/_search -d '{"query" : { "term": { "tag":"bad"}}}' 

http://localhost:9200/_rvier/_search
查看敏感信息了
http://localhost:9200/_plugin/head/web
管理界面
http://localhost:9200/_cat/indices
http://localhost:9200/_river/_search
查看数据库敏感信息
http://localhost:9200/_nodes
查看节点数据

使用 ElasticHD 工具进行远程连接可视化数据进行信息搜集

修复

1.限制 IP 访问,禁止未授权 IP 访问 ElasticSearch 9200 端口
使用 iptables 等服务器内嵌防火墙对访问 IP 进行限制

2.通过 ES 插件增加访问验证,增加验证后切勿使用弱口令
①shield插件,收费,暂不考虑。
②针对1.7.0版本之前的ElasticSearch,可采用elasticsearch-http-basic插件。
下载地址:https://github.com/Asquera/elasticsearch-http-basic/releases
elasticsearch-http-basic,安装在 plugins 文件夹下,config/elasticsearch.yml 中统一配置:
http.basic.enabled true 
#开关,开启会接管全部HTTP连接
http.basic.user “admin” 
#账号
http.basic.password “admin_pw” 
#密码
http.basic.ipwhitelist [“localhost”, “127.0.0.1”] 
#白名单内的IP访问不需要通过账号和密码,支持IP和主机名,不支持IP区间或正则。
③针对 elasticsearch2.x 以后版本采用 search-guard 插件
https://docs.search-guard.com/6.x-25/search-guard-versions
安装插件执行命令
./bin/elasticsearch-plugin install -b file:///path/search-guard-6-6.2.3-23.0.zip

config/elasticsearch.yml 中统一配置,末尾追
searchguard.ssl.transport.pemcert_filepath: certificates/esnode.pem
searchguard.ssl.transport.pemkey_filepath: certificates/esnode-key.pem
searchguard.ssl.transport.pemtrustedcas_filepath: certificates/root-ca.pem
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.http.enabled: true
searchguard.ssl.http.pemcert_filepath: certificates/esnode.pem
searchguard.ssl.http.pemkey_filepath: certificates/esnode-key.pem
searchguard.ssl.http.pemtrustedcas_filepath: certificates/root-ca.pem
searchguard.allow_unsafe_democertificates: true
searchguard.allow_default_init_sgindex: true
searchguard.authcz.admin_dn:
  - CN=kirk,OU=client,O=client,L=test,C=de
searchguard.enable_snapshot_restore_privilege: true
searchguard.check_snapshot_restore_write_privileges: true
searchguard.restapi.roles_enabled: ["sg_all_access"] 

注:默认弱口令用户admin admin强烈建议修改默认密码
使用默认hash工具,生成hash串
elasticsearch-6.2.3\plugins\search-guard-6\tools
.\hash.bat -p newpwd
新密码生效
sgadmin.bat -cd ..\sgconfig -key ..\..\..\config\certificates\kirk-key.pem -cert ..\..\..\config\certificates\kirk.pem -cacert ..\..\..\config\certificates\root-ca.pem -nhnv -icl
使用 searchbox 获取 jestclient 的方式(basic的方式连接es)

    JestClientFactory factory= new JestClientFactory();
    factory.setHttpClientConfig(new HttpClientCofig.Builder("https://ip:9200").defaultCredentials(username,pwd).sslSockedFactory(getSslSockedFactory()));
    private static SSLConnectionSockedFactory getSslSockedFactory() throws Exception{
    SSLContextBuilder builder= SSLContexts.custom();
    builder.loadTrustMaterial(new Trustrategy(){
    @Override
    public boolean isTrusted(X509Certificate[] chain,String authType){
    return true;
    }
    });
    SSLContext sslcontext=builder.build();
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,new String[]{"TLSv1","TLSv1.1","TLSv1.2"},null,new HostnameVerifier(){
    @Override
    public boolean verify(String arg0,String arg1){
    return true;
    }
    });
    return sslsf ;
    }
nodejs 使用用户名密码 (basic-auth) 连接 es
架设 nginx 反向代理服务器,设置 http basic 认证来实现 elasticsearch 登录认证
使用域名 配置转发
upstream es.nginx.com{
         server 127.0.0.1:9901 weight=1 max_fails=2;
         server 127.0.0.1:9902 weight=1 max_fails=2;
         server 127.0.0.1:9903 weight=1 max_fails=2;
         server 127.0.0.1:9904 weight=1 max_fails=2;
         server 127.0.0.1:9905 weight=1 max_fails=2;
}
location ~* / {
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";

		if ($host ~* es\.nginx\.com) {
			proxy_pass  http://es.nginx.com;
		}
}
配置账号密码访问模式
location ~* / {
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";

		#配置帐号密码
		auth_basic "login";#提示信息
		auth_basic_user_file /usr/local/nginx/conf/vhosts/password/es; #密码文件(填写绝对路径)
		autoindex on;

		if ($host ~* es\.sojson\.com) {
			proxy_pass  http://es.nginx.com;
		}
}
配置密码帐号文件
auth_basic_user_file 选项用于匹配密码文件
将密码按照一定规定进行编写 按照 unsername:passwd 格式填写进入密码文件内
vi /usr/local/nginx/conf/vhosts/password/es
 
关闭外网访问
修改config/elasticsearch.yml 
#network.publish_host: 0.0.0.0
#networt.bind_host: 0.0.0.0
#network.host: 0.0.0.0
#只要配置这个即可
network.host: 127.0.0.1
#network.publish_host: 127.0.0.1
重启  Elasticsearch ,更保险,可再加上 iptables ,加上访问频率限制,防止暴力破解
### 回答1: elasticsearch未授权访问漏洞是指在elasticsearch服务器上,由于未正确配置访问控制,导致攻击者可以通过简单的HTTP请求获取敏感数据或者进行恶意操作的漏洞。这种漏洞可能会导致数据泄露、篡改、删除等安全问题,因此需要及时修复。建议管理员对elasticsearch服务器进行安全加固,限制访问权限,避免出现未授权访问漏洞。 ### 回答2: Elasticsearch是一种流行的开源分布式搜索和分析引擎,具有高性能和可扩展性。然而,由于管理不当和配置错误,可能会导致elasticsearch未授权访问漏洞漏洞,允许恶意攻击者访问敏感数据,并对系统造成损害。 当elasticsearch集群没有正确配置安全性控制时,攻击者可以轻松地通过网络访问elasticsearch集群,然后使用静态或动态的scripting引擎,执行任意代码,包括创建、修改或删除数据。攻击者还可以使用elasticsearch的API执行一些危险操作,例如下达搜索查询,误删除数据,或利用任意文件读取漏洞访问系统文件。 为了避免elasticsearch未授权访问漏洞,需要采取一些安全措施: 1. 配置安全性控制:确保只有授权用户才能访问elasticsearch集群,这可以使用访问控制列表(ACL)来实现。禁用默认的授权模式,并使用X-Pack来加密通信,保护通信机密性。 2. 删除不必要的插件:一些插件可能存在安全漏洞,应该删除不需要的插件,并确保保持最新的安全补丁。 3. 监控日志:监控elasticsearch集群日志,早期检测和响应可能的攻击行为。 4. 更新软件:更新elasticsearch软件,保持最新版本,以便及时修补已知的安全漏洞。 总之,elasticsearch未授权访问漏洞是一种严重的安全漏洞,攻击者可以访问系统中的敏感数据和文件,并且对系统造成严重的损害。为了避免这种漏洞,应该采取安全措施,并优化elasticsearch集群的配置。 ### 回答3: elasticsearch是目前世界上最受欢迎的开源搜索引擎之一,它支持快速的分布式搜索和分析功能。但是,由于其默认配置存在漏洞,攻击者可以通过未授权访问elasticsearch导致数据泄露或文件损坏等安全问题。 elasticsearch未授权访问漏洞的成因是在线上环境中,elasticsearch默认的配置不是禁止外部访问的,只要攻击者可以通过网络访问elasticsearch的IP和端口,就可以执行各种命令。例如,攻击者可以通过浏览器URL或专门的工具(如curl)发送HTTP请求,获取敏感数据、删除索引、修改设置等,通过执行这些操作,攻击者可以轻易地导致数据丢失或系统崩溃等安全问题。 为了防止elasticsearch未授权访问漏洞,需要合理地配置elasticsearch,安全地部署elasticsearch,并定期检查和更新新版本。以下是一些预防措施: 1.禁用外部访问:为elasticsearch配置只在本地使用时可以使用的IP地址,使其只能在服务器上本地访问到,其他IP地址就不能访问。 2.限制访问:为elasticsearch配置访问授权规则,只允许特定的客户端或IP地址进行访问操作。 3.强身鉴定:开启elasticsearch的身份认证机制,例如使用用户名和密码进行身份验证,可以避免未经授权的访问。 4.安装热更新:对于已知问题,elasticsearch通常会及时发布新版本,以修补漏洞和增强安全性能。安装最新版的elasticsearch可以有效地提高安全性。 总之,任何系统都存在潜在的安全风险,我们需要定期更新、监控、维护这些先进的技术,以保护我们的系统和数据免受数据泄露、文件损坏等安全问题的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴龙振翅飞翔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值