一次對個人服務器入侵事件的調查
這一切還要從我收到的通知郵件:“Your server is sending spam”說起。首先要說的是,這臺服務器是用來運行之前項目的靜態網站,并不保存關鍵信息。由于不經常使用,即使有Joomla和WordPress這樣的高危程序,我都懶得忘記定期更新了。這可能就是導致被入侵的原因。
1 通知郵件
經過一夜的狂歡聚會后,我收到了服務器提供商OVH的通知郵件,郵件告知我的服務器成為了垃圾郵件發送源,其中還提及了一些細節:
KenaGard是我之前創建的公司,現在已經不運行了,但是基于Joomla的公司網站www.kenagard.com仍然可以訪問,并且使用的還是老版本的Joomla!我想問題有可能就出在Joomla上。
Joomla的問題
我立即進入網站目錄查看可疑情況:
最后兩行是我之前執行過的合法操作,之后的操作就不得而知了,我想我的服務器已經變成瑞士奶酪了!
入侵行為可能發生于2016-02-25、2016-02-29、2016-08-21三個時間點的操作。
探究入侵操作
2016-08-21的入侵操作中包含了文件jtemplate.php:

該PHP文件是經過加密的代碼,經過UnPHP解密之后可以看到部分信息:

實際上,上述代碼的功能如下:

Base64和str_rot13為加密混淆函數,起到逃避安全軟件和迷惑分析的作用。assert函數在這里,它被當成一個提權命令來使用,用來上傳攻擊載荷和其它黑客工具。PHP一句話木馬!
探究入侵深度
在該網站設置中,只有www-data用戶組才能執行php代碼文件。而且,我發現很難通過apt方式來安裝軟件,所以想要更新系統也變成了一件幾乎不可能的事了!現在,好像整個服務器已經不屬于我的了!另外,我很難發現攻擊者的提權操作痕跡,所以,只能通過日期和ps aux命令來查看系統異常。
另外,我還發現了第四條關于WordPress的異常操作,雖然不能確定攻擊者意圖,但是看上去仍屬于入侵操作。而且網站系統內每個目錄文件夾內都有類似文件:logo_img.php, images/mbaig/emkwg.php, dir32.php, .htaccess。
其中某個文件不僅用來執行遠程代碼,還向遠程地址4lmbkpqrklqv.net發送信息,經查詢,域名4lmbkpqrklqv.net歸屬一位烏克蘭人Nikolay Pohomov所有。
2 解決方法
啊,在那分鐘,我真想砸了這臺機器!升級Joomla,升級WordPress, 格式化,重裝….,天哪,饒了我吧,我哪有這么多時間。所以我決定采取一些保守的安全解決對策。
停止向外發送垃圾郵件
ps aux命令顯示了很多垃圾郵件發送進程,使用以下命令來終止:
- ps aux|grep -v grep|grep sendmail|awk {print $2} | xargs kill -9
清空郵件發送隊列
- rm /var/spool/mqueue/*
禁止CMS系統POST數據提交
因為該系統網站已經停止更新了,所以禁止POST方式,能簡單阻塞攻擊者提交的數據。在nginx中簡單進行以下配置:

最后,別忘記服務重啟命令service nginx reload。
清除攻擊者后門
禁止POST方式不能完全堵塞攻擊者通道,你必須清除攻擊者在系統上留下的相關黑客工具和文件。
3 其它信息
通過日志分析,發現進行jtemplate.php操作的IP為烏克蘭IP185.93.187.66,但是,貌似這個IP沒有提交過POST數據。

另外,我還發現一個可能屬于Amazon的可疑IP的操作:

因此,我決定把目錄/administrator (Joomla!) 和/wp-admin (WordPress)用以下方式做限制訪問。最后,別忘記重啟命令service nginx reload

4 總結
由于我不是專業的安全人士,對于這些經常不更新的老舊系統,我能想到唯一防止黑客攻擊的方法可能就是使用Docker了。
以下是網友對我這篇博客的一些評論:
你的服務器已經被入侵了,所以請別用家庭電腦遠程連接來處理這類安全事件
在重裝系統過程中使用默認配置
可以使用惡意程序檢測工具Linux Malware Detects和腳本ctimer.php
在防火墻上開啟僅系統所需的端口