【軟體供應鏈上游出包,開發老手都難防】挖礦綁架臺灣曝光第一例,遭害苦主保哥現身說法



9月19日,保哥(多奇數位創意技術總監黃保翕)在臉書上,公開了自家網站所用聊天外掛工具遭植入Coinhive程式的消息,是臺灣網站遭挖礦綁架事件曝光的第一例。

「自己很難主動察覺,」人稱保哥的多奇數位創意技術總監黃保翕坦言,若不是朋友一則抱怨訊息,才讓開發經驗豐富的保哥驚覺,經營了10年的部落格竟然藏了Coinhive挖礦程式。關鍵竟是,他3個月前剛啟用的第三方外掛套件,遭有心人士植入了Coinhive挖礦程式,連帶讓他的部落格成了幫兇,殃及所有部落格訪客,一度成了挖礦綁架的受害者。

9月下旬有一天,一位瀏覽部落格的用戶,向黃保翕反應,只要開啟他的部落格The Will Will Web,瀏覽器的CPU使用率,就會衝破50%,甚至滿載,可是一離開保哥的部落格,CPU使用率馬上又會下降。

接到消息後,黃保翕開始確認CPU用量,果不其然,只有當電腦連上自己的部落格時,瀏覽器的CPU使用率就會飆高,於是,他開始清查自家網站的原始碼,試圖找出問題,花了大約10分鐘,終於找到了問題。

原來是3個月前,黃保翕在個人部落格中,增加了一個第三方提供的外掛,就是KeyReply網站釋出的Live Chat Widget(聊天外掛小工具)。在KeyReply官方釋出的程式碼中,竟然就藏了幾行呼叫Coinhive挖礦程式的JavaScript指令。

KeyReply聊天小工具是一個國外部落格常用的聊天外掛工具,因為介面簡潔,支援多種即時聊天平臺,再加上這是免費工具,因而吸引了不少關注,在臺灣也有不少文章來推薦這款KeyReply聊天小工具。

黃保翕表示,過去很少在自己的部落格中,嵌入第三方JavaScript程式碼,頂多只裝了來自Google、臉書和噗浪的外掛程式。直到3個月前,他在某個電商平臺網站上,看見KeyReply聊天小工具的介紹,當下覺得方便且美觀,才開始使用,但是沒想到自己的網站因此遭殃。發現問題之後,黃保翕馬上將KeyReply聊天小工具移除,並於9月19日在個人臉書發文,說明這起事件經過。

隔天9月20日上午,KeyReply技術長徐夢翔從朋友得知了保哥在臉書上的發文,也才發覺自家聊天小工具被植入了Coinhive挖礦程式。

徐夢翔連忙檢查原始碼才發現,他發布到CDN上的聊天小工具Javascript程式碼中,最末段,出現了兩行沒有看過的程式碼,會連接到Coinhive的網站,「最初開發的版本中,並沒有加入這兩行程式碼。」他解釋。

KeyReply發現問題後,先暫停服務,也下架相關套件,修正後才重新發布新版本,並再次檢查文件的完整性,也更改了伺服器密碼,並重新設定CloudFlare的CDN,目前該外掛程式已恢復正常版本。不過,他也不清楚,何時開始遭人植入了Coin這兩行Coinhive挖礦程式碼。

徐夢翔表示,當初為了解決自己開發網站的問題,需要一個可以連接到聊天App的功能,市面上的程式都需註冊,因此自行開發了KeyReply聊天外掛小工具,也免費釋出,但沒有特別推廣,也有一段時間沒有關注此套件,現在將會持續注意該套件的程式安全性。

為何不易發現網站遭植Coinhive挖礦程式?

利用現成成熟的JavaScript框架,來加快和簡化網頁程式的開發速度,已是前端開發者的通用基本作法,但是,一般開發者對於這些外掛嵌入的JavaScript程式碼,很少進一步審視其原始碼,甚至對於知名的套件,因為多數人已採用的信任度,往往自己也直接套用。

像在這次事件中,保哥三個月前開始使用KeyReply聊天外掛小工具,但Coinhive在9月14日釋出了挖礦程式,沒幾天,惡意人士就竄改了CDN上的聊天小工具程式碼,暗中植入了挖礦程式碼,而保哥則是到9月19日前後時察覺,才對外公開了遭波及的經驗。

這種因為軟體供應鏈上游出包,遭人植入問題程式碼的情況,在下游開使用者,就算是保哥這樣經驗老到的開發者,一時也很難自行發現。

因為,一般開發者,不會也不需要定期檢視所用的外掛程式碼,來源是否出問題了。更遑論,這次出問題的不是官方原始碼出錯,而是儲存原始碼的副本遭人從中植入問題程式碼,連官方自己都沒有察覺,釋出在CDN上分流的副本遭加料,對下游開發者更是難以預防。

再加上Coinhive這類挖礦程式,消耗的是網頁訪客的CPU,而非網站開發者的環境,程式碼遭加料變質,只有第一線使用者,最快感受到效能降低,難怪保哥大嘆,就連他也很難主動發現,得等到訪客抱怨,一查才知道出問題。

自己很難主動察覺,網頁開發人員要預防自家網站遭暗藏了挖礦程式,凡是要使用外掛程式時,就需要特別小心。—多奇數位創意技術總監 黃保翕


如何發現網頁暗藏Coinhive挖礦程式?

黃保翕表示,Coinhive挖礦程式,一開始會先動態下載一段挖礦JavaScript腳本程式,之後開始在瀏覽器的背景執行多個執行緒,而且這些執行緒並不在網頁分頁中,而是在瀏覽器中執行。

所以,一旦開發人員發現連上自己的網頁時,電腦CPU用量遽增,要查看自家網頁是否藏有挖礦程式,可以在Chrome瀏覽器中,按下F12打開Chrome瀏覽器開發工具,查看JavaScript、HTML 與階層式樣式表(CSS),以及追蹤網頁或網路的效能問題。

在Chrome瀏覽器開發工具的Network分頁中,可以檢視檢查頁面載入時間、對 AJAX 要求的回應,以及載入和執行網頁與應用程式的所有網路活動,但是,由於Coinhive挖礦程式,是透過加密過的瀏覽器與伺服器互動通訊技術WebSocket連線,因此,無法在Network查看程式傳送給伺服器的資料。

而在Application分頁中,則可看到正在執行的背景程式,但是,黃保翕指出,Coinhive挖礦程式,並非以Service Workers的方式執行,而是要在Sources分頁中,才可以看到網頁執行了幾個WebAssembly程式,點選打開這些wsam程式後,就能發現網頁的程式碼中含有Coinhive程式,Coinhive程式將挖礦程式下載到瀏覽器後開始執行,因此,黃保翕表示,即使不容易找到Coinhive程式碼,但是,開發人員還是可以追蹤到Coinhive的執行程式。

對一般網頁使用者而言,黃保翕認為,要防範自己連上藏有Coinhive的網站,較為困難,因為一般使用者不了解網頁技術,只會覺得自己的電腦變慢了,目前挖礦程式對電腦無害,只是會增加CPU使用率,若使用者介意,將網頁關掉就能立刻解決問題。

再者,一般人使用瀏覽器時,常會開啟20~30個分頁,黃保翕認為,挖礦程式執行緒為數不多時,一般使用者更不會有太大的影響。

《全文請見iThome(https://www.ithome.com.tw/news/117998)》