WordPress被駭植入廣告,網站掃毒、解毒完整記錄

去年底在例行檢查維護的網站,發現其中一個網站前台顯示內容是正常的,但是進入網站後台卻出現一個國外的廣告,這時就注意到網站一定是被植入了惡意程式,通常遇到了先不要慌張只需要按照下面的步驟就能解決大部分的問題!
這邊處理的方法是沒有備份檔案單純將網站的惡意代碼做清除,如果平時有做備份只需要將中毒前的備份檔透過還原的方式,然後再參考下面修補漏洞的環節做修補即可。

掃描中毒範圍

首先當網站出現疑似中毒我們要找出中毒的原因,這邊我們會使用 Sucuri Malware 這兩套工具進行雙重檢查。

Sucuri掃毒工具

Sucuri 是一間專注在網路安全的公司,在2017年被GoDaddy收購。
我們會使用他線上免費掃描工具初步檢查網站是否有中毒,線上掃描連結

在網頁中填入網址後點選 Scan Website

結果很快就會出來,很明顯出現了一個名為 404javascript.js 的問題,但是詳細資訊並沒有提供

Malware掃毒工具

這時我們會借用Malware 找出惡意代碼的關鍵字細節和特徵,線上掃描連結
Malware 也是一間專注在網路安全的公司,跟Sucuri比較起來雖然掃描的速度會比較慢,但是它提供的資料更詳細更方便我們清除。

一樣填入網址並點選Secan URL,這時需要花一點時間等待掃描

點選Go To Report取得掃描結果

這邊告知我們中了一個特徵為fJ488L的惡意軟體,關鍵字是「shop.r10s.jp」

點選 Signature:fJ488L 可以查看這個惡意軟體被發現的時間和造成的影響

清除中毒檔案

這邊通常有兩種辦法,第一種是使用未中毒前的備份將檔案作還原、第二種是逐一清除,但是我們這邊因為中毒已經有一段時間連備份的資料都是被感染的,所以會使用第二種方式處理。

了解架構

在處理前我們要先了解WordPress的架構,方便我們往後遇到問題時能快速處理常見的問題!

public_html 資料夾是網站根目錄、存放所有網站的程式碼和檔案,當有人要訪問該網站時您希望顯示這些文件。

wp-config.php 是一個重要的 WordPress 核心文件,裡面主要都是設定有關的 例如資料庫的名稱和帳號密碼、WP_DEBUG和WordPress MU等功能,這支程式只有當我們將網站安裝好之後才會出現,是 wp-config-sample.php這支程式為模板所生成的。

wp-adminwp-includes 資料夾是WordPress的核心,是 WordPress 控制台正常執行所需的所有程式碼,而我們不會去調整到裡面的任何資料。

wp-content 資料夾裡面主要會有plugins(外掛)、themes(佈景主題)和uplads(上傳),其中plugins是所有的外掛安裝後檔案都會存放在這邊,themes是管理網頁版型存放的區域,uplads是所有上傳的圖片、影音存放的地方。

大方向處理

當我們瞭解完WordPress架構後,就知道wp-content和wp-config.php存放著重要的資料所以先將它們透過FTP下載到本機端做備份,接著刪除 public_html 裡面所有的檔案,最後到WordPress官網下載最新版本 直接將public_html 裡的程式更換成乾淨的版本。

同時將public_html 同一層的其他資料夾內所有檔案也一並刪除,因為惡意感染可能會感染到這些資料夾

處理細節

接著我們要處理wp-content和wp-config.php這兩個檔案,首先wp-config.php可以參考這篇「WordPress 安全性設定(一) 初始安裝階段篇」更換裡面的金鑰,然後資料庫的密碼最好也更換。
而wp-content裡面,除了uplads(上傳)的部分我們先不要更動,themes(佈景主題)和plugins(外掛)等其他檔案一樣全部刪除並等後續重新下載安裝比較不容易有殘留的惡意程式。

當我們進入到wp-content裡面的資料夾時會看到名稱是2020、2021、2022的資料夾,這是我們上傳圖片或影音時WordPress自動幫我們生成的,這個我們放到最後處理,其他的檔案一樣直接刪除。

最後我們依序進入2020、2021、2022的資料夾,將裡面不屬於我們當時所上傳的影音全部刪除就告一段落。

資料還原

最後我們只剩下wp-config.php和wp-content裡的upload,我們要將它透過FTP上傳到原先的路徑這樣網站才能正常運作。

接著進入網站前後台確認網站是能執行的,如果出現 Database Update Required 是因為版本變動過大,直接點選Update WordPress Database 將資料庫的資料進行更新

然後檢查使用者帳號、文章、分類、標籤、頁面和留言是否有奇怪的資料或帳號,這些資料是殘留在資料庫中的我們可以直接進行刪除,刪除完可以搭配以下外掛將資料庫清除已寫入的檔案。

【WP-Optimize】WordPress優化外掛,清除資料庫無用資料表

資料庫清理

這個步驟會牽涉到資料保存的問題一般用戶不建議操作,如果要操作請務必先做好備份或是請專業人士協助!

SQL Injection 是歷年來發生頻率很高的漏洞,在現在的WordPress核心系統比較少見,但是使用第三方的佈景主題或是外掛就會提高發生的機率。
通常 SQL Injection 是被注入JavaScript腳本,所以我們使用搜尋功能在檢查資料庫時可以使用關鍵字「script」進行檢查和加以刪除。

驗收處理結果

最後使用Malware 測試問題是否已修復,這次出現了 Signature: Ca5BCL 這個惡意軟體,關鍵字是「https://goodcarequality.su/」

但是我們不都已經把檔案全砍光只保留圖檔嗎,怎麼還有惡意程式呢?
這時我們可以借助FileSeek 透過關鍵字將資料夾內指定關鍵字找出來加以刪除。

FileSeek 使用教學可以參考這一篇,FileSeek免費檔案、文字內容搜尋工具

當問題處理完成後再一次使用Malware 測試問題是否已經全部修復,最後出現如下圖代表網站已經沒有惡意程式了,接下來要進行下一個環節。

使用 Sucuri 檢查結果,未發現惡意軟體、網站未列入黑名單。
要注意 Sucuri 的掃描的結果不是即時的,需要在網站完成清除6小時後再進行掃描結果才會是正確的,否則會一直出現在處理前的舊資訊。

修補漏洞

原則上漏洞發生的原因大部分是出在plugins(外掛)、themes(佈景主題)版本太舊或是出現漏洞沒有即時更新,所以建議要開啟WordPress系統和外掛自動更新或是定期到官網查看最新版本,再懶惰一點的請加入WordPress社團至少有熱心團友會提醒。
推薦社團: WordPress Taiwan Community 台灣社群WordPress 社群生態普查與研習 – 網站迷谷

如果開發者超過一年沒有更新或是安裝人數太少的外掛也建議移除不要使用。

後續預防

俗話說預防勝於治療,但是太多人只會架設網站卻不會維護,導致發生問題時救援的費用其實遠超過當初架設成本!
最簡單的方式就是勤備份和定時更新,詳細教學可以參考我先前寫的兩篇文章來進行預防降低損失。

WordPress 安全性設定(六) 網站監控

WordPress 安全性設定(七) 備援機制

關於作者 碼農Roy

曾經北漂的工程師,現在專注於.Net Core、WordPress開發


發佈留言