轉自:http://xxrenzhe.blog.51cto.com/4036116/1532469
起因:
公司使用的是Ucloud的雲主機服務,今天上午突然被告知有一台伺服器的出口流量激增,對外發包量短時間内達到了100萬,而且都是UDP類型的,第一感覺就是:诶呀,莫不是被黑了,被當殭屍電腦了呀!
探究:
立馬登入對應的伺服器,首先使用iftop檢視流量狀況
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauIjMyk0S49FeDNzYJFUQBxmQuhXb3VGWQFTbvl2S39CXzczLcJDNvwVMw00LcJDMzZWe39CXt92Yu8GdjFTNuMzcvw1LcpDc0RHaiojIsJye.jpg)
可以看出出口流量好吓人,1分鐘内累計700M流量,查了一下這2個IP位址,一個是在美國,一個是在浙江電信;
趕緊檢視正在運作的程序,找出疑似程序,還真有所發現:
懷疑/tmp/freeBSD就是被挂馬的程式,可惜已經被删除了,無法檢視了
原因:
罪魁禍首查出來了,細緻的原因還需要詳查,是以現在最重要的就是解決問題,迅速kill掉相關程序,再次檢視iftop發現流量迅速回落了,更加證明了我們的判斷;
接下來就需要查找被劫持挂馬的原因和具體的劫持方式,以絕後患,而通過外部搜尋引擎也是很快就定位了問題的原因,就是“Elasticsearch遠端任意代碼執行”漏洞:
- ElasticSearch有腳本執行(scripting)的功能,可以很友善地對查詢出來的資料再加工處理; ElasticSearch用的腳本引擎是MVEL,這個引擎沒有做任何的防護,或者沙盒包裝,是以直接可以執行任意代碼。;
- 而在ElasticSearch 1.2之前的版本裡,預設配置是打開動态腳本功能的,是以使用者可以直接通過http請求,執行任意代碼。;
- 其實官方是清楚這個漏洞的,在文檔裡有說明:
- First, you should not run Elasticsearch as the root user, as this would allow a script to access or do anything on your server, without limitations. Second, you should not expose Elasticsearch directly to users, but instead have a proxy application inbetween.
終于找到原因,那就解決吧
解決方案:
法一:手動關閉ES遠端執行腳本的功能,即在每一個ES節點的配置檔案elasticsearch.yml中添加如下一行即可
1 | |
然後重新開機ES即可;
法二:更新ES至1.2版本以上也可,因為在ES1.2版本中已預設關閉了遠端執行腳本的功能,但需考慮與Logstash的相容性問題;
後續: