封面

🔸概述

約莫在台灣時間 2017/05/12,世界各地的 Chrome 陸陸續續跳出廣告視窗,巴哈姆特、PTT 都有人回報類似的事件,自己的 Chrome 瀏覽器跳出「mobifoth」、「newtabtv」等網站,造成人心惶惶,搭上最近很紅的勒索軟體傳聞,大家都害怕這個跳窗會讓自己的電腦被綁架。那到底是發生甚麼事呢?該怎麼處理?我將從 coder 的角度來分析這次的事件。

🔸經過

本來小弟我在使用朋友的電腦時,發現會莫名跳出視窗,身為一個 programmer 這一點都不會驚訝,想必不是瀏覽器被綁架,就是 Chrome extension(擴充功能) 有問題,經過開發過 extension 的經驗,這種跳窗大概就是某個擴充功能造成的,所以我第一件事情當然先把跳窗的主機位址拿去 Google,發現在巴哈PTT 皆有災情傳出,果然是 extension 導致的,而且是好用的「Unseen」(註1)。

🔸尋找來源

第一件事情當然是找出 extension 的位置,如果是 windows 的用戶,會在「<disk>:/Users/<user>/AppData/Local/Google/Chrome/User Data/Default(如果Chrome只有一個使用者的話)\Extensions」中,我們的目標 unseen 的 extension ID 是「iicapmagmhahddefgokbabbgieiogjop」,

擴充功能的位置

所以進去之後,搜索關鍵字「mobifoth」,結果卻沒有任何發現,另外也發現一點,這個擴充功能並沒有在近期更新,但是卻在最近才爆發,看來它的跳窗廣告有可能不是寫在 code 中,所以我們打開開發人員模式,在擴充功能的背景頁面中找尋有沒有載入外部代碼的痕跡,果然在 background 中發現,會從 unseen 自己的網站中載入,

devtool

我們直接打開這段腳本,Bingo!除了最上面一段看似很正常的部分,底下有三段是被混淆且最小化過的代碼,那我們來進行一下人工反混淆。

bingo

🔸分析

第一步驟當然是先 beatufy 一下,這樣我們才好辯讀,處理之後,我們第一眼在第三段看到了兩個關鍵字,「eval」與「atob」,前者是可以直接執行處於字串的 script,後者是將 base64 解碼,

eval atob

那我們將它們解碼過後,又是一個 Bingo!馬上就找到我們要的 mobifoth 網址,

找到目標

🔸解決辦法

  1. 只要在 Chrome 右上角「更多工具」→「擴充功能」,找到「unseen」把它刪除掉就行了。然後可以考慮換裝另一款
  2. 去把作者的 server hack 掉,把惡意代碼移除。
  3. 把 code 抓下來,自己重包一份。

🔸結論與心得

此次事件估計有兩種可能兇手

  1. 作者本人
  2. 有心駭客

因為惡意代碼存在於作者自己擁有的伺服器,所以不是作者自己放的,就是有駭客看準這款擴充功能會載入外面代碼,所以針對伺服器攻擊,至於到底是為了什麼,這點我也推斷有幾個原因

  1. 放廣告賺錢
  2. 蒐集使用者個資或使用習慣
  3. 強迫廣告自家產品

這種事件防不勝防,Google 方在審核 extension 上架時並不如 Firefox 的 plugin 嚴謹,通常申請後一個小時左右就會開放上架,而且不會對 code 做多嚴謹的檢查,我們時常可以發現許多內含惡意代碼的產品;而 Firefox 的機制就做得很好,我都申請了好幾天了卻遲遲還沒有消息,潮蚌蚌~ ((誤,不過卻真的會對內容作人工審核,我就曾經收到過 reject,內容也不太像罐頭訊息,我可以感受得到審核人員真摯的感情,希望他也能感受到我滿滿的無奈 (X。

回到主題,這沒有太有效的解決辦法,從外部載入 script 本身就有安全風險,在設計程式上通常要避免,優良的 programmer 遇到需要從外部引入資料,最好的方式是撈取「資料」而非「代碼」,它原本的設計是這樣的

1
2
3
4
5
6
7
var facebookUrls = [
'*://0-edge-chat.facebook.com/*',
'*://1-edge-chat.facebook.com/*',
//中間略
'*://www.messenger.com/chat/*',
'*://www.messenger.com/ajax/presence/*'
];

其實稍微看一下,目的就只是要取得 facebook 的幾個網域,所以我們應該要用這種方式抓資料才更為恰當安全,否則我們可以合理懷疑作者不是腦袋有洞就是心懷不軌。萬一有洞還有可能被植入惡意代碼,災情會更加慘重。

1
2
3
4
5
6
[
"*://0-edge-chat.facebook.com/*",
"*://1-edge-chat.facebook.com/*",
"*://www.messenger.com/chat/*",
"*://www.messenger.com/ajax/presence/*"
]

最後附上稍微反混淆過的 code,有興趣的可以拆來看看它是怎麼撰寫的

code

🔸2017/06/19 更新

此擴充功能已經被Chrome官方標示為惡意軟體,並且被下架了,每個用戶的擴充也都被強制停用,而且無法啟用,可喜可賀可喜可賀。

beenRemoved

🔸備註

  1. unseen 這個套件是用來讓使用者在閱讀 FB 或 Messenger 訊息時不會已讀,個人很愛用XD