当前位置: 首页 > 科技观察

还记得被劫持挂马的经历:Elasticsearch的远程执行漏洞

时间:2023-03-22 12:29:22 科技观察

原因:公司使用Ucloud的云托管服务。今天早上突然得知某服务器出口流量暴增,短时间内出包量达到100个。一万个,而且都是UDP类型。第一感觉就是:咦,难道是被黑了,被当成肉鸡了!探索:马上登录对应服务器,先用iftop查看流量状态,可以看到出口流量吓人,1分钟累计流量700M,查看两个IP地址,一个在United国,另一家是浙江电信;快速查看正在运行的进程,找出可疑进程,发现了一些东西:[.ECC6DFE919A382]这个进程还想伪装成系统进程,极其可疑,而且/tmp/freeBSD也是一个很奇怪的东西,而且UID498对应用户是elasticsearch。记得昨天部署了Elasticsearch+Logstash来实现日志统计系统。肯定是ES有bug。继续查看原因,怀疑/tmp/freeBSD是挂马的程序。可惜已经被删除,无法查看。原因:罪魁祸首已经找到,具体原因还需要详细排查,所以现在最重要的是解决问题,赶紧杀掉相关进程。再次查看iftop,发现流量迅速下降,进一步印证了我们的判断;接下来需要查明被劫马的原因和具体的劫持方式,以免后患,通过外部搜索引擎很快定位到问题原因,就是“Elasticsearch远程任意代码执行”漏洞:ElasticSearch具有脚本执行(scripting)功能,可以方便的对查询到的数据进行再处理;ElasticSearch使用的脚本引擎是MVEL,没有任何保护和沙盒封装,任何代码都可以直接执行。;在ElasticSearch1.2之前的版本中,默认配置是开启动态脚本功能,用户可以通过http请求直接执行任意代码。;其实官方对这个漏洞很清楚,在文档中是这样解释的:首先,你不应该以root用户运行Elasticsearch,因为这会允许脚本访问你的服务器或在你的服务器上做任何事情,没有限制。其次,你不应该直接将Elasticsearch暴露给用户,而是在两者之间有一个代理应用程序。终于找到原因了,解决一下。解决方法:方法一:手动关闭ES远程脚本执行功能,即在每个ES节点的配置文件elasticsearch.yml中添加如下一行script.disable_dynamic:true然后重启ES即可;方法二:也可以将ES升级到1.2或以上版本,因为远程执行脚本的功能在ES1.2版本已经默认关闭,但需要考虑与Logstash的兼容性问题;后续:根据官方资料,为了保证ES的安全,不能以root身份启动ES,可以考虑使用代理(负载均衡器也可以),开放非9200端口(比如9300),并转发到内网9200端口,可以有效防止小人恶意端口扫描;因为已经挂了一次,所以在重新启用ES之前,需要全面检查被入侵的主机是否有其他隐患,其中涉及到web安全扫描的内容已经出来了,我暂时是新手,而且还不太懂,希望有经验的前辈多多指教!博客链接:http://xxrenzhe.blog.51cto.com/4036116/1532469