Elasticsearch 多个高危漏洞及加固(Part 1)

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二最流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。但是Elasticsearch的不安全使用也带来了一些问题:默认安装完毕后Elasticsearch,可以使用9200端口通告web的方式访问查看数据信息。

具体漏洞详情如下:

Elasticsearch远程命令执行(CVE-2014-3120)

漏洞介绍:

Elasticsearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。Elasticsearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码。

Elasticsearch Groovy任意命令执行漏洞

漏洞介绍:

影响版本为1.3.0-1.3.7以及1.4.0-1.4。漏洞原因是elasticsearch使用groovy作为脚本语言,虽然加入了沙盒进行控制,危险的代码会被拦截,但是由于沙盒限制的不严格,通过黑白名单来判断,导致可以绕过,实现远程代码执行。

Elasticsearch未授权访问

漏洞介绍:

Elasticsearch在安装了river之后可以同步多种数据库数据(包括关系型的MySQL、MongoDB等)。http://localhost:9200/cat/indices里面的indices包含了_river一般就是安装了river了。通过 泄露的 http://localhost:9200/_rvier/_search 可以查看敏感信息。

1.漏洞成因与危害

由于Elasticsearch的HTTP连接没有提供任何的权限控制措施,一旦部署在公共网络就容易有数据泄露的风险。

2.Elasticsearch加固方案

网络访问控制(强烈推荐)

建议禁止Elasticsearch 9200端口服务发布到互联网上,使用阿里云安全组防火墙或本地操作系统防火墙对访问源IP进行控制。

Elasticsearch提供很多的安全插件供用户方便安装使用,在这里推荐2插款插件:

绑定访问源IP

进入config目录,修改elasticsearch.yml配置文件以下参数:

network.bind_host: 192.168.0.1
设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。
network.publish_host: 192.168.0.1
设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
network.host: 192.168.0.1
这个参数是用来同时设置bind_host和publish_host上面两个参数。
修改默认端口

进入config目录,修改elasticsearch.yml配置文件以下参数:

ransport.tcp.port: 9300
设置节点间交互的tcp端口,默认是9300。
transport.tcp.compress: true
设置是否压缩tcp传输时的数据,默认为false,不压缩。
http.port: 9200
设置对外服务的http端口,默认为9200。
关闭http访问

进入config目录,修改elasticsearch.yml配置文件以下参数:

http.enabled: false
是否使用http协议对外提供服务,默认为true,开启。