WordPress

WordPress 網站效能異常、帳單變貴?挖礦程式徵兆與防護一次看懂

多數人一聽到「網站被駭」,腦中浮現的畫面通常是首頁被改得面目全非,或是搜尋結果旁忽然多了一行警告紅字。但有一種入侵手法反其道而行——得手之後做的第一件事,是讓網站看起來完全正常,因為它要的不是曝光,而是運算力本身。這種手法叫做 cryptojacking(挖礦綁架),駭客未經同意,借用網站主機或訪客裝置的運算資源去解一連串密碼學計算題,換取虛擬貨幣報酬。

虛擬貨幣要運作,每一筆交易寫進區塊鏈前得先有人拿運算力解出一道驗證題,解出來的人能拿到一筆虛擬貨幣當報酬,這個過程就是挖礦(cryptomining)。挖礦本身合法,也是虛擬貨幣網路能運轉下去的一環,cryptojacking 的問題在於把這份運算工作,未經同意塞給別人的裝置去做。駭客最常鎖定門羅幣(Monero),因為它對大規模專用礦機(ASIC)有抵抗力、交易隱私性也高,適合想藏身分的攻擊者。

對經營 WordPress 網站的人來說,這件事不能只當成技術八卦看。它不像多數入侵那樣留得下明顯痕跡,反而更容易被誤會成單純的效能問題,一路拖到帳單變貴才被發現。

挖礦程式是什麼?

美國國土安全部資安暨基礎設施安全局(CISA)給 cryptojacking 的定義很直接,說的是惡意攻擊者利用網頁、軟體或作業系統的漏洞,劫持受害裝置與系統的處理能力,藉此偷偷安裝挖礦軟體。CISA 同時把挖礦(cryptomining)講清楚,用運算力解密碼學問題來驗證交易、換取虛擬貨幣報酬,這是虛擬貨幣網路正常運作的機制之一;cryptojacking 要處理的不是這個機制本身,而是它被誰、用誰的資源在執行。

學術研究把技術細節講得更白。Aponte-Novoa 等人 2022 年發表在《Sensors》期刊的研究指出,cryptojacking 是在受害者電腦上進行的非法、未經授權的挖礦活動,利用的就是受害者電腦的運算力去換取虛擬貨幣;而網站端的挖礦只需要一段 JavaScript,不需要在受害裝置安裝任何程式,訪客只要載入被植入的頁面,挖礦程式就直接在瀏覽器裡跑起來。

Konoth 等人 2018 年在 ACM 電腦與通訊安全研討會(ACM CCS)發表的研究,把網站在訪客不知情下跑瀏覽器挖礦的情境歸納成三種:站方自己裝上礦機、卻沒告知訪客,藉此偷偷變現;站方不知情,礦機是跟著廣告或第三方服務一起被載進來;以及網站被入侵之後,攻擊者自己把礦機裝上去。第一種至少站方是知情的;第三種才是多數 WordPress 站主真正該擔心的情境,駭客拿到網站的某個入口,不聲不響把挖礦程式塞進去。

跟改版置入廣告的被駭手法相比,挖礦攻擊幾乎不留痕跡

多數人對「網站被駭」的想像,停留在頁面跑版、忽然冒出賭博或成人廣告、被搜尋引擎標記為不安全網站,這些被駭手法的共通點是站方跟訪客都看得出來哪裡不對勁。挖礦攻擊完全相反,它刻意讓網站外觀維持正常,唯一被偷走的是運算資源,而且症狀分散在兩端:站方可能只覺得主機忽然變貴、變慢;訪客可能只覺得自己的電腦或手機忽然發燙、風扇狂轉,兩邊都不容易直接聯想到「網站被駭」。

傳統被駭與挖礦攻擊的對照圖。改版、置入廣告、釣魚會讓頁面明顯異常,站方與訪客一眼看得出;挖礦攻擊刻意讓網站外觀維持正常,只偷走運算資源,站方端覺得主機變貴變慢、訪客端覺得裝置發燙,幾乎不留痕跡。
傳統被駭讓網站明顯異常,挖礦攻擊卻刻意維持正常,只偷走運算資源。

CISA 把 cryptojacking 分成非持續型(non-persistent)與持續型(persistent)兩種。非持續型通常只在使用者瀏覽某個網頁、或瀏覽器還開著的時候才運作;持續型則就算使用者已經離開來源網站,挖礦程式仍會繼續執行。無論哪一種,CISA 列出的後果都指向系統與網路效能降低,以及用電量增加、系統當機,跟改版、置入廣告那種一眼就看得出來的受害型態,完全是兩種感受。

相較於改版(defacement)、釣魚這類傳統網站攻擊,cryptojacking 攻擊對網站經營者來說,往往是沒有症狀的。這也是中文資源很少寫這個角度的原因,多數被駭教學預設駭客要的是曝光或流量,但 cryptojacking 要的單純是運算力,動機跟行為模式都不一樣,自然也不會留下同一套痕跡。

挖礦程式同時榨取的主機資源與訪客瀏覽器算力

挖礦程式入侵 WordPress 網站後,實際上有兩種偷資源的方式,而且可能同時出現在同一次入侵裡。CISA 的說明點出其中一種:惡意攻擊者可能在網站裡植入挖礦用的 JavaScript 程式碼,透過訪客的瀏覽器去利用他們的處理能力挖礦,鎖定的是每一位訪客的運算力,而不是網站主機本身。另一種則是直接裝在主機或後台背景執行的挖礦程式,吃的是網站主機的 CPU。

這兩種型態的差別,也決定了你會先從哪裡發現異狀。主機端的挖礦,站方通常先從帳單或資源用量儀表板看出端倪;瀏覽器端的挖礦,受害的是訪客,症狀會出現在訪客自己的裝置上。

挖礦程式偷資源的兩種型態對照圖。主機端直接裝在主機或後台背景執行、吃網站主機 CPU、屬持續型,站方通常從主機帳單發現;訪客瀏覽器端靠一段 JavaScript 借用每位訪客的算力、屬非持續型,關掉分頁即停止,症狀出現在訪客裝置上。
主機端吃網站主機 CPU、屬持續型;訪客端靠 JavaScript 借用訪客算力、關分頁即停。

主機端的挖礦,安裝在後台默默佔用運算資源

駭客一旦拿到 WordPress 主機或後台的存取權限,最直接的做法是在伺服器端跑一支挖礦程式或背景程序,不需要任何訪客瀏覽器配合。這種型態對應 CISA 定義的持續型 cryptojacking,程式一旦裝上去就會 24 小時持續佔用主機 CPU,直到被清除為止。CISA 也指出,這種主機資源被獨占(monopolized)的狀況,除了讓系統效能變差,還可能造成當機,以及因為系統停機與用電量增加而產生的財務損失。

也因為主機端挖礦是持續、背景執行的,站方通常不是靠肉眼看出來的,而是先從主機帳單、資源用量儀表板這類間接指標發現異狀。

瀏覽器端的挖礦,靠一段 JavaScript 偷用訪客算力

瀏覽器端的挖礦,靠的是一段被植入網頁的 JavaScript。過去最知名的服務是 Coinhive,已經在 2019 年關站,但同類技術與其他挖礦腳本供應商並沒有跟著消失。運作邏輯很單純,訪客載入被植入的頁面,瀏覽器就在背景默默執行挖礦運算,關掉分頁,資源占用也跟著停止,這正好對應前面提到的非持續型 cryptojacking,也是它比置入廣告更難被察覺的原因之一。

要提醒的是,不能只靠比對舊的 Coinhive 網域黑名單來判斷網站乾不乾淨。《Sensors》期刊的研究指出,攻擊者能透過混淆程式碼(obfuscation)或更換網域,規避那些依賴固定特徵比對的偵測方式,這正是純黑名單式防護的侷限。Konoth 等人的研究也發現,在他們偵測到、使用已知挖礦服務的網站裡,Coinhive 佔了多數,而且研究資料集裡的挖礦網站全都在挖門羅幣。

外掛漏洞、弱密碼帳號是挖礦程式混入網站的常見破口

挖礦程式不會憑空出現在一個正常運作的 WordPress 網站上,一定是先有某種入侵管道,讓駭客拿到能寫入程式碼的權限。WordPress 官方的《Hardening WordPress》文件把針對 WordPress 網站最常見的攻擊歸納成兩大類:第一類是送出經過精心設計的 HTTP 請求,鎖定過期外掛、舊版軟體的已知漏洞;第二類是用暴力破解的方式猜密碼,試圖闖進後台。這兩條路徑不是 cryptojacking 專屬的入侵管道,但同樣是它混進 WordPress 網站最常見的破口。

第一種情況下,駭客不需要登入後台,直接利用漏洞把挖礦程式碼寫進網站檔案;第二種情況下,駭客登入後台之後,通常會直接透過內建的佈景主題或外掛檔案編輯器,把挖礦程式碼貼進去。這個編輯器原本是給開發者微調程式碼用的,一旦帳號被攻破,反而變成最方便的入侵工具。

一旦挖礦程式碼混進來,常見的藏匿位置包括佈景主題的 functions.php、頁尾 footer.php 或頁首 header.php,也可能偽裝成外掛檔案,清除挖礦程式碼時這幾個位置都要優先檢查。WordPress 官方也建議,外掛與佈景主題只從 WordPress.org 官方目錄或信譽良好的來源取得,來路不明的來源正是這類攻擊最容易得手的地方。

訪客端可以自行檢查的挖礦徵兆與免費防護工具

如果你是一般瀏覽者,不一定是網站的管理者,要判斷自己正在瀏覽的網站是不是正在偷挖礦,最直接的徵兆通常出現在裝置本身:電腦或手機忽然發燙、風扇狂轉,開著某個分頁時系統明顯變慢,而且一關掉那個分頁,運作立刻恢復正常。CISA 的建議也是先認得裝置正常時的 CPU 使用狀況,留意有沒有持續偏高的異常,處理速度明顯下滑時就要追查原因。

想進一步確認,TWCERT/CC(台灣電腦網路危機處理暨協調中心)的建議是打開瀏覽器的開發者工具,例如 Chrome 可以按 F12 開啟,檢查網頁裡有沒有可疑的挖礦程式碼。不過如前面提過的,挖礦腳本供應商會換、程式碼也可能被刻意混淆,單靠肉眼比對特定網址或程式碼片段不見得可靠,只能當成初步線索。

比較省力的做法,是安裝專門阻擋挖礦程式執行的瀏覽器外掛。TWCERT/CC 具體列出的例子包括 AdBlock Plus、AntiMiner、MinerBlock、No Coin,這幾款外掛能攔阻已知的挖礦程式碼執行。TWCERT/CC 也提醒,如果真的發現某個網站被植入挖礦程式,應該立即通報 TWCERT/CC,讓官方單位介入處理,而不只是自己關掉分頁了事。

網站管理者能觀察到的主機效能和帳單異常

多數 WordPress 站主不會天天打開瀏覽器開發者工具檢查自己的網站,真正先注意到異狀的,往往是主機端傳來的訊號。CISA 列出 cryptojacking 造成的後果裡,有兩項特別對應站方會先看到的線索:一是頻寬與 CPU 資源被獨占,導致系統與網路效能降低;二是因為系統停機、加上用電量增加而產生的財務損失。

翻成站方比較容易對照的說法,前者對應到網站整體載入速度變慢、卻抓不到具體原因的狀況,外掛都更新過、快取也清過,速度還是拉不起來;後者則對應到主機資源用量儀表板忽然飆高、共享主機商發信警告網站佔用過多 CPU 甚至即將被停權,或是 VPS、雲端主機按用量計費的月費帳單忽然變貴。這些看起來像效能問題的狀況,其實都值得往 cryptojacking 的方向懷疑,尤其是在你確定沒有做過流量暴增的行銷活動、也沒有新增什麼吃資源的功能的情況下。

挖礦攻擊徵兆的兩端分類圖。訪客端會裝置忽然發燙、風扇狂轉,開著某分頁時系統變慢、關掉立刻恢復,可按 F12 檢查或安裝阻擋挖礦的瀏覽器外掛;網站管理者端則是速度變慢卻抓不到原因、資源用量儀表板飆高、主機商警告 CPU 過高、月費帳單忽然變貴。
訪客端看裝置發燙、開分頁變慢;站方端看效能異常、CPU 用量與帳單。

清除挖礦程式碼要從常見的植入位置逐一排查

確認網站可能中招之後,清除的核心思路是先鎖定常見藏匿位置,逐一比對有沒有陌生程式碼。前面提過的佈景主題 functions.php、footer.php、header.php,以及偽裝成外掛檔案、甚至偽裝成快取或分析工具的程式碼,都是要優先檢查的地方。

排查完常見位置,下一步是做檔案完整性比對,把現在網站上的檔案跟官方原始版本或一份確定乾淨的備份逐一比對差異。WordPress 官方文件提到,做檔案監控時可以只盯.php 這類可執行的檔案類型,不用把每一種檔案都列入比對範圍,可以降低雜訊、更快找到真正被竄改的地方;也可以另外搭配網頁式的完整性監控服務,從外部偵測網站有沒有被植入惡意程式。最後再跑一次全站的惡意程式掃描收尾,確認沒有漏網之魚。

現代的惡意程式掃描器判斷這是不是挖礦程式,不再只靠比對已知的程式碼特徵。《Sensors》期刊的研究測試了多項用來訓練機器學習分類模型的特徵,發現在所有特徵裡,處理器使用率跟網站是否遭 cryptojacking 感染的正相關最高。傳統只靠固定程式碼特徵比對的掃描方式,很容易被程式碼混淆或更換網域繞過,這也是近年掃描技術轉向用 CPU、網路流量這類行為模式,搭配機器學習模型做偵測的原因。

TWCERT/CC 對站方的建議很直接,網站管理者一旦發現網站被植入挖礦程式,應該移除挖礦程式,並全面檢查與強化系統的安全性。也就是說,清除只是第一步,接下來要處理的是為什麼會被入侵這個根本問題。另外要提醒的是,如果後台的佈景主題或外掛編輯器曾經被駭客拿去改過程式碼,清乾淨之後應該直接關掉這個編輯器功能,避免同樣的入侵路徑重演。

長期防護的基本功是持續更新與嚴格權限控管

清乾淨之後,重點是別讓同樣的破口再被利用一次。WordPress 官方的《Hardening WordPress》文件把長期防護的基本功寫得很具體,可以照著做:

  1. 外掛與佈景主題只從 WordPress.org 官方目錄或信譽良好的來源安裝,不要為了省一筆授權費去下載來路不明的破解版。
  2. 讓 WordPress 核心、外掛、佈景主題保持在最新版本,漏洞一旦被公開,舊版本就是現成的攻擊入口,這正是前面提過的常見破口之一。
  3. 在 wp-config.php 裡加上define( 'DISALLOW_FILE_EDIT', true );這一行,移除所有使用者透過後台編輯佈景主題或外掛檔案的能力。這是攻擊者拿到後台權限之後最常用的第一個工具,關掉它能直接斷這條路。
  4. 把檔案權限鎖到最小必要範圍,目錄設 755、檔案設 644 是常見的參考值。
  5. 用防火牆(WAF)類的外掛或服務,在請求進到 WordPress 之前先過濾掉可疑流量。
  6. 定期備份,並保留一份確定乾淨的版本,萬一真的中招,能有東西可以拿來比對、還原。

TWCERT/CC 的防護建議也呼應了部分做法,網站管理者應該隱藏網站伺服器、網頁開發框架等系統資訊,避免開啟未使用的通訊埠,並定期更新防毒軟體、作業系統與應用程式,降低網站被攻擊利用的風險。CISA 提出的一般性防護建議,像是保持軟體與作業系統更新、檢查系統權限政策、套用應用程式允許清單,放進 WordPress 的情境裡,對應的正是上面提到的更新與權限控管,兩者缺一不可。

歐盟和台灣官方資安機構都將挖礦攻擊列為長期觀測對象

這不是被誇大的威脅,看國際與台灣官方資安機構怎麼持續追蹤這個議題就知道。ENISA(歐盟網路安全局)2020 年發布過一份《ENISA Threat Landscape – Cryptojacking》專篇報告,把這類攻擊定義為未經授權使用裝置資源挖掘虛擬貨幣,並指出攻擊目標已從個人電腦、手機,擴大到雲端基礎設施;隔年的年度威脅報告也仍把 cryptojacking 列為重點威脅之一。

台灣這邊,TWCERT/CC《網頁挖礦程式的防範》這份公告最早發布於 2019 年,2021 年 8 月又更新過一次,顯示台灣官方資安應變單位持續把這件事列為需要對一般網站經營者與使用者宣導的威脅類型,不是曇花一現的話題。

ENISA 那份專篇報告也記錄了後續發展,Coinhive 關站後,網頁挖礦活動一度大幅下滑,但其他挖礦程式很快遞補上來,攻擊者也轉向運算力更強的伺服器與雲端基礎設施。這說明 cryptojacking 並沒有隨著 Coinhive 在 2019 年關站就完全消失,只是換了供應商繼續存在。

對經營 WordPress 網站的人來說,cryptojacking 不是一個已經過氣的威脅,而是被國際與國內官方持續追蹤的一類攻擊。它不會像改版或置入廣告那樣主動暴露自己,唯一會留下的線索,就是主機帳單、資源用量,還有訪客裝置忽然發燙這些容易被忽略的小事。把外掛與核心保持更新、關掉不必要的檔案編輯權限、留意帳單有沒有異常波動,是不需要額外預算、隨時都能開始做的第一步。

常見問答

本區問答由 AI 依文章內容自動整理,僅供快速參考,正式內容仍以全文為準。

網站被植入挖礦程式為什麼很難發現?

網站被植入挖礦程式後,外觀會刻意維持正常,因為駭客要的不是曝光而是運算力。症狀分散在兩端,站方可能只覺得主機變貴、變慢,訪客只覺得裝置發燙、風扇狂轉,兩邊都不容易聯想到網站被駭。

挖礦程式通常怎麼混進 WordPress 網站?

挖礦程式最常透過過期外掛或舊版軟體的已知漏洞,或是用暴力破解、外洩密碼猜中後台帳號,混進 WordPress 網站。駭客登入後台後,通常會直接用內建的佈景主題或外掛檔案編輯器把挖礦程式碼貼進去。

怎麼判斷正在瀏覽的網站藏有挖礦程式?

瀏覽網站時電腦或手機忽然發燙、風扇狂轉、系統明顯變慢,而且一關掉那個分頁就恢復正常,就是網站藏有挖礦程式的常見徵兆。一般使用者也可以安裝 No Coin、MinerBlock 這類能攔阻挖礦程式碼的瀏覽器外掛。

WordPress 網站的挖礦程式碼通常藏在哪裡?

WordPress 網站的挖礦程式碼常藏在佈景主題的 functions.php、footer.php 或 header.php,也可能偽裝成外掛檔案。排查完這些位置,再把網站檔案跟原始版本或乾淨備份做完整性比對,最後跑一次全站掃描。

怎麼避免 WordPress 網站再被植入挖礦程式?

WordPress 網站的長期防護基本功,是讓核心、外掛與佈景主題保持最新版本,並只從 WordPress.org 或信譽良好的來源安裝。也建議在 wp-config.php 加上 DISALLOW_FILE_EDIT 關掉後台檔案編輯器。

資料來源
  1. Defending Against Illicit Cryptocurrency Mining Activity — CISA
  2. On Detecting Cryptojacking on Websites: Revisiting the Use of Classifiers — MDPI Sensors
  3. MineSweeper: An In-depth Look into Drive-by Cryptocurrency Mining and Its Defense — ACM
  4. Hardening WordPress — WordPress
  5. 網頁挖礦程式的防範 — TWCERT/CC
  6. ENISA Threat Landscape - Cryptojacking — ENISA
  7. ENISA Threat Landscape 2021 — ENISA