記一次 Confluence 被攻擊事件


故事開始

 

4 月 14 日,星期天,天氣不好,呆在家玩 LOL,正 Happy 的時候同事打電話給我,說 Confluence 看文檔的時候掛了,報錯:502。

一尋思,不就掛了嗎,小意思,重啟唄,於是切出游戲,遠程上服務器重服務后繼續玩游戲。

結果沒幾分鍾,又發消息過來,Confluence 再次掛掉。我 X,這就有點 B 了狗了。

 

 

故障排除

 

故障發生之時的第一感覺就是 Confluence 資源不夠?但仔細一想,也沒有兩個人在使用啊。於是查看了一下進程:

Confluence 本該只有兩個進程運行,現在只剩下一個本身的,而 Confluence 的用戶卻運行了一堆亂七八糟的進程。

使用 top 命令查看系統資源占用:

有一個進程巨特么占用 CPU,但是 COMMAND 卻沒有。通過 PID 可以看出,這個進程就是之前的 /boot/vmlinuz

網上去搜索相關進程的信息,說什么內核進程。當時想,難道內核出 BUG 了?這可咋整,不會需要升級內核吧。

出於懶,先將應用啟動起來,讓別人先用着吧。可就在這時,神奇的一幕發生了,我 X,服務居然啟動不起來了。

再次通過 ps 查看進程,發現又出現了一些奇怪的進程正在執行:

一個 curl 一個 wget,而特么的操作都是去一個 51 的 IP 下載文件,百度這個 IP:

眉頭一皺,漸漸的意識到這件事情並不這么簡單,這是在搞事情啊。

 

出於本能,第一步要做的事情,就是找出這些文件,先刪除,並且不讓他再去下載。

於是我將 curl 和 wget 改為只有 root 用戶能夠使用。

chmod 700 /usr/bin/wget
chmod 700 /usr/bin/curl

然后便是查定時任務,因為之前有過被攻擊的經驗,這些 B 都喜歡在你機器上面添加定時任務。

su - confluence
crontab -l

果然,在定時任務里面有一條 curl 操作,每隔 5 分鍾搞一次,還用了 base64 編碼。

把這些都刪除,順便去下載了那個腳本,發現他在 /tmp 目錄下存放了很多文件,直接全部給他先刪除。

然后滿心歡喜的啟動 Confluence。成功跑起來了。心里還有點小得意。

 

本以為故事到這里就應該告一段落了,然鵝,這才剛剛開始。

在接下來的一天里,Confluence 一直處於不穩定狀態,時不時就掛掉。有時十幾分鍾,有時半個小時,問題來了,會不會是這台機器的原因?

那還能咋整,遷移唄。於是在一台新的機器上重啟部署好服務,將數據重新導入,一且順順利利。但沒過多久,服務器再度出現上面的症狀。

這時心里一萬頭草泥馬奔涌而過。用之前的方法處理,但又一個新的問題誕生了。同時,一個新的域名出現在了我的世界。

pastebin.com

經過一番了解,這是一個可以用戶匿名發布純文本的網站,發布完成以后,文件可以生成一個鏈接~~~~

於是,接下來的戰斗都圍繞着類似於這樣的地址做斗爭:

https://pastebin.com/raw/B5BTS5fm

打開網站,將文件里面 base64 部分解密:

而最終斗爭方法包括但不限於修改 curl,wget 權限,修改 DNS 解析等等等等。

127.0.0.1   pastebin.com

 

結果一番折騰,並沒有什么卵用,Confluence 還是隔一段時間就掛掉。為此還專門寫了個定時任務讓他檢測重啟。

#!/bin/bash

#################################################################
# 作者:Dylan <1214966109@qq.com>
# 日期:2019-04-15
# 作用:Confluence 狀態檢測
#################################################################

#################################################################
# Confluence 狀態檢查
#################################################################
SERVICE_STATUS=$(ps aux | grep "/opt/atlassian/confluence/confluence-6.9" | grep -v grep | wc -l)
if [[ ${SERVICE_STATUS} -ne 2 ]]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') confluence is not running!\n" >>/tmp/confluence_restart.log
    echo "$(date '+%Y-%m-%d %H:%M:%S') confluence restart!\n" >>/tmp/confluence_restart.log
    /etc/init.d/confluence restart &
fi

日志里面似乎也沒啥實質性的東西。全是類似於以下錯誤,這說明是從程序內部發起的,這可咋整:

org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'https://pastebin.com/raw/B5BTS5fm'
.........................
java.lang.RuntimeException: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
.........................

我把這些地址都讓他不能使用了,總不會出亂子吧,不能訪問就不能訪問唄。

再后來,通過 JAVA 同事點醒,說的是這樣的請求失敗會造成程序阻塞。我 X,難道這就是方向了?

於是百度關鍵詞,最終在兩篇文章中看到了類似的問題。

一篇是漏洞說明:

https://yq.aliyun.com/articles/698490

一篇是問題解決:

https://yq.aliyun.com/articles/698056

 

 

最終辦法

 

widgetconnector-xxx.jar 3.1.4 之前的版本存在該漏洞,所以我們可以換成官網新的:

https://packages.atlassian.com/maven-public/com/atlassian/confluence/extra/widgetconnector/widgetconnector/3.1.4/widgetconnector-3.1.4.jar

 刪除舊版本的 jar 包,換成新版本,具體目錄:

confluence安裝目錄/confluence/WEB-INF/atlassian-bundled-plugins/

然后重啟 confluence,為了更安全,我們可以配合之前的修改 curl 和 wget 權限,修改 DNS 解析使用。

 

 

事件小結

 

這一次故障解決過程其實相當漫長 2- 3 天,在發現問題上面會走很多彎路。所以希望能夠幫到有心人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM