火絨威脅情報中心近期監(jiān)測到一款專門鎖定瀏覽器主頁的應用正加速蔓延。經(jīng)溯源,該源頭指向搜狗輸入法。據(jù)悉,搜狗輸入法通過 Shiply 終端基礎發(fā)布通用模塊,向云端請求控制配置。
在下發(fā)這些云控配置中,會結合用戶畫像:例如所在地區(qū)、時間等諸多維度進行精準推送。由于 Shiply 平臺本身具備灰度發(fā)布能力,據(jù)此推測,攻擊者很可能先通過小范圍灰度測試驗證效果,再進行大規(guī)模傳播。
其推廣模塊會首先檢測用戶設備上的殺毒軟件,隨后通過篡改配置文件的方式,強制修改 Edge 與 Chrome 兩款主流瀏覽器的主頁及默認搜索引擎設置。目前,火絨安全產(chǎn)品可對上述推廣模塊進行攔截與查殺。
內存查殺圖 流程圖
1、樣本分析 本文提及的搜狗輸入法版本為 15.7.0.2192。
1.1、云控配置獲取與推廣模塊下載 配置拉取源頭: 搜狗輸入法將會借助 SGBizLauncher.exe 程序附加參數(shù) -lappid=configupdate 進行拉取云控配置,該SGBizLauncher.exe 程序會被輸入法組件 SogouPY.ime 執(zhí)行,執(zhí)行間隔為六個小時一次。此輸入法組件為 DLL 文件,將會通過用戶切換至搜狗輸入法時被加載。
六個小時間隔配置拉取
設置 Shiply SDK 參數(shù): 在SGBizLauncher.exe 程序中,將通過 Shiply SDK 拉取配置。在此之前,需設置 APPID、APPKEY、BundleID、應用版本等參數(shù),測試后發(fā)現(xiàn)其中 APPID 與 APPKEY 為關鍵參數(shù),其將會決定拉取的配置。
設置 APPID、APPKEY 等參數(shù)
Shiply 發(fā)布平臺設置云控配置: 搜狗輸入法會借助 Shiply 發(fā)布平臺設置云控配置,此發(fā)布平臺可以通過規(guī)定時間、地區(qū)、應用版本號等條件來進行精準下發(fā)云控配置,且具備灰度發(fā)布等放量策略,可先進行小范圍測試。對此次事件進行評估,亦是由于灰度發(fā)布或精準下發(fā)所致,故而未涉及更多用戶。
Shiply 平臺中測試設置云控下發(fā)條件
平臺云控配置與本地拉取后數(shù)據(jù)庫對應關系: 下圖為 Shiply 平臺所創(chuàng)建的云控配置,其中創(chuàng)建 smart_task_config_1 與 beacon_main_switch_1 配置鍵和相對應的配置值,在本地獲取上述云控配置時,Shiply SDK 會將這些配置存儲于指定的數(shù)據(jù)庫文件中。該數(shù)據(jù)庫具體路徑為: C:\ProgramData\SogouInput\SGBizConfig\{APPID_SYSTEMID___}.db,此數(shù)據(jù)庫為 SQLite 數(shù)據(jù)庫。
Shiply 平臺測試云控配置與本地拉取后數(shù)據(jù)庫對應關系
上圖為分析測試場景下的云控配置與本地數(shù)據(jù)庫對應關系圖,下圖為搜狗輸入法真實用戶場景下的云控配置對應的數(shù)據(jù)庫圖,其中 smart_task_config_1 所對應的 JSON 數(shù)據(jù)內包含推廣模塊下載地址。
搜狗輸入法真實下發(fā)的云控配置對應的數(shù)據(jù)庫圖
隨后從云控配置(JSON 數(shù)據(jù))中提取數(shù)據(jù)后,將數(shù)據(jù)存儲至注冊表 SOFTWARE\SogouInput.store.user\search_suggestion 項中的 smart_task_config 和 smart_task_supports 鍵。其中,前者為提取的配置,后者為經(jīng)加密處理的 allowed_p 字段,此字段代表允許的進程,即執(zhí)行該任務的進程必須與 allowed_p 字段的值相符。
取出數(shù)據(jù)并將數(shù)據(jù)存儲至注冊表
任務云控配置
此時搜狗輸入法 IME 組件被加載至 explorer.exe 進程時,將會調用 ImeInquire 函數(shù),隨后便開始檢查是否開啟搜索候選與搜索推薦。若二者之中有一項處于開啟狀態(tài),便會進入解析云控配置的邏輯流程。從中能夠看出,相關按鈕是針對搜索候選和推薦的,不應與修改瀏覽器主頁存在關聯(lián)。
云控任務執(zhí)行相關開關
搜狗輸入法將讀取 search_suggestion 注冊表中 smart_task_supports 的值,以獲取支持的進程名列表,并與當前進程名進行比對。若匹配則會繼續(xù)運行進程。
匹配指定進程名列表
為了防止多次運行,它會創(chuàng)建互斥體 Local\\smart_task_dispatch_{被加密的進程名}。
創(chuàng)建互斥體
進入任務前判斷階段:
1. 首先,讀取 HKEY_CURRENT_USER\SOFTWARE\SystemTask 項中的 task__{allowed_p} 鍵。若該鍵存在,則讀取其中的 let_{上次任務執(zhí)行時間} 和 remain_{剩余任務執(zhí)行次數(shù)},以供后續(xù)檢測使用。
2. 檢查當前時間段是否在 allowed_t(允許執(zhí)行任務時間段)內,根據(jù)云控配置(0-28800;43200-50400;75600-86400)所示,時間段分別為21:00-次日8:00、12:00-14:00,估測是規(guī)避工作時間,避免被技術人員復現(xiàn)該現(xiàn)象。
3. 借助 GetLastInputInfo 函數(shù)檢測用戶無操作時間是否超過 no_active_s(無操作時間)的情況。
4. 時間為隨機數(shù)并除以 100 來獲取余數(shù),來判斷該余數(shù)是否> probalility(概率)。
5. 檢測剩余執(zhí)行任務次數(shù)是否>0。
6. 檢測當前時間與上次任務執(zhí)行時間的間隔是否> during_s(任務執(zhí)行間隔)。
7. 最后將任務信息保存至注冊表,并開始執(zhí)行任務。
任務前判斷階段
任務信息保存至注冊表: 首先會將云端配置中的七個關鍵參數(shù)以下劃線的方式連接:task_body_md5、version、durings_s、cycle_c_s、count、probalility、no_active_s,對它們進行MD5 哈希計算,得出 MD5 值。隨后再將 allowed_p、MD5 值、let_{當前時間}、during_{durings}、remain_{剩余任務執(zhí)行次數(shù)}(該值每次任務執(zhí)行時都減 1)通過分號連接,并將該字符串寫入至注冊表 HKEY_CURRENT_USER\SOFTWARE\SystemTask 項 task__{allowed_p} 鍵中。
任務信息保存至注冊表
下載推廣模塊: 任務開始后首先解密 task_body64 字段值(該解密算法采用的是 AES 算法并搭配非標準密鑰流),獲取到下載鏈接 https:// ime.gtimg.com/pc/brspgc hange20250811x64_a.dat 并開始下載,下載完畢后,運用 MD5 算法計算所得 MD5 值,并與 task_body_md5 進行比對,以確認二者是否一致。
下載并計算 MD5 值
解密推廣模塊: 下載到的 brspgchange20250811x64_a.dat 文件經(jīng)過加密處理,其解密需運用云控配置中的 key(98c0b113a40fe1790d9e116d75dcfcff) 與字符串 "secret" 異或出新的 key,隨后以該新的 key 為密鑰,采用 AES 算法 CBC 模式進行解密。
異或出新的密鑰再采用 AES 算法解密
試圖下載新的推廣模塊: 因下載鏈接有一定的規(guī)律,嘗試將日期改成 9 月 10 日(即brspgchange20250910),發(fā)現(xiàn)可以下載并且密鑰與上次云控配置中的密鑰一致,推測此推廣模式將會長期持續(xù),新的推廣模塊將會在下文《推廣模塊分析》中介紹。
加載推廣模塊并調用入口點和 cgbp 導出函數(shù): 隨后,將解密后的推廣模塊以手動加載的方式載入內存。在完成檢查 PE 頭、進行 Section 映射、開展重定位處理、修復導入表以及修改 Section 權限等操作之后,會調用模塊入口點以進行初始化。之后,通過遍歷導出函數(shù)的方式獲取 cgbp 導出函數(shù)地址,并調用該函數(shù),由此進入推廣模塊的主要邏輯。
手動加載并調用入口點 遍歷導出函數(shù)并執(zhí)行 cgbp 函數(shù)
1.2、推廣模塊分析 檢測并規(guī)避殺毒軟件: 借助函數(shù)OpenMutexW 與 Process32NextW 檢測本計算機中是否存在360或火絨的互斥體、進程名,若不存在則繼續(xù)推廣。
檢測互斥體與進程名
檢測相應瀏覽器是否存在: 以 Chrome 瀏覽器為例,將依次檢測多個路徑下的主程序 chrome.exe 是否存在,檢測配置文件 Secure Preferences 和 Preferences 是否存在,注冊表中是否有 Google Chrome 等方式。
檢測相應進程是否存在: 以 Chrome 瀏覽器為例,檢測 chrome.exe 進程是否存在,僅當該進程不存在時才會進行修改操作。這是由于在 chrome.exe 處于開啟狀態(tài)時對配置文件進行修改,修改內容不會被保存。原因在于,關閉 chrome.exe 進程時,系統(tǒng)會將配置數(shù)據(jù)重新寫入配置文件,進而導致配置被重置。
修改默認搜索引擎: 通過寫入 Preferences 與 Secure Preferences 配置文件的方式將 template_url_data 中 url 設置為 https:// baidu.wenxin9.com/? word= {searchTerms}&type=0002&ie={inputEncoding}。之后用戶再次搜索內容時先跳轉到 https:// baidu.wenxin9.com/? word= 搜索內容&type=0002&ie=UTF-8,最終跳轉至 www.baidu.com/s?tn=75144485_10_dg這類帶有來源標識的鏈接并從中獲利。
檢測與修改配置
修改的內容
修改后表現(xiàn)
macs和super_mac 配置項的修改原因與邏輯: mac值是為驗證時所用,一旦配置的mac 值與寫入的 mac值不一致,則會重置配置文件。
1. 計算 Unicode 編碼的安全標識符(SID)的 SHA1 哈希值,取名為 SID_SHA1。
2. 利用 GetSystemDirectoryW 函數(shù),獲取系統(tǒng)路徑并傳遞參數(shù)于 GetVolumeInformationW 函數(shù)中,獲取卷序列號(VolumeSerialNumber),取名為 VOL_ID。
3. 計算 SID_SHA1 + VOLID 的 CRC8校驗碼,以 {SID_SHA1}{VOL_ID}{CRC8} 的形式組合成 19字節(jié)的機器碼,取名為 MACHINE_ID。
4. 以 {MACHINE_ID}{字段路徑}{字段值} 的形式組合并計算其 HMAC-SHA256 哈希值,使用的密鑰為 e748f336d85ea5f9dcdf25d8f347a65b4cdf667600f02df6724a2af18a212d26b788a25086910cf3a90313696871f3dc05823730c91df8ba5c4fd9c884b505a8,該密鑰為固定值。
5. 最終計算出來的哈希值就是 macs 中的多個字段或 super_mac 字段的值。
哈希值計算動態(tài)調試截圖和源碼
新版推廣模塊功能區(qū)別: 舊版本推廣模塊僅具備修改默認搜索引擎這一功能。通過靜態(tài)分析可知,雖存在修改主頁的代碼,但并未調用。與之不同的是,新版本推廣模塊會調用修改主頁的函數(shù)。此時,若打開 Chrome 瀏覽器,將會跳轉至 http:// page.wenxin9.com ,隨后再跳轉至導航頁。在導航頁內點擊百度鏈接,鏈接均帶有來源標識參數(shù)。
新版推廣模塊多出來的功能 跳轉至導航頁頁面
1.3、其他推廣 搜狗輸入法還有其他很多推廣手段,這里只提及較打擾使用體驗的桌面右下角彈窗。
彈窗推廣 彈窗初期: 搜狗輸入法的彈窗是系統(tǒng)彈窗,該彈窗是通過搜狗輸入法組件 biz_helper.exe 程序傳遞參數(shù)type=systoast 啟動以試圖彈窗。彈窗初期可以通過點擊彈窗中的“…”選擇《關閉搜狗輸入法的所有通知》或《轉到通知設置》進入系統(tǒng)通知設置中關閉搜狗輸入法彈窗通知,從而關閉彈窗。
彈窗設置變灰或消失: 但用戶反饋該方法只能滿足初期的訴求,一段時間后發(fā)現(xiàn)彈窗中“…”后兩個按鈕都變成灰色,導致進入系統(tǒng)通知設置,也無法關閉搜狗輸入法相關選項。
隱藏通知設置中搜狗輸入法項
隱藏原理: 通過設置搜狗輸入法注冊表 HKEY_CLASSES_ROOT\AppUserModelId\http:// Sogou.Ime.SysToast.Biz 項中 ShowInSettings 鍵值為 0 的方式,達成按鈕呈灰色不可點擊且在通知設置中不顯示的效果。
設置隱藏
搜狗輸入法設置中取消勾選: 用戶發(fā)現(xiàn)通過搜狗輸入法設置中取消勾選《桌面右下角推薦》選項,想以此操作來消滅彈窗。然而一部分用戶又發(fā)現(xiàn)該《桌面右下角推薦》選項也消失了,但在分析過程中并未成功復現(xiàn),估測該行為可能是通過云控下發(fā)時針對部分目標用戶精準投放所導致。
網(wǎng)上用戶吐槽時的拍照與截圖
彈窗開關: 至此可以統(tǒng)計出避免彈窗的方法總共有以下三種。
href="">1. 全局通知開關:Windows系統(tǒng)自帶設置中全局通知開關,將開關數(shù)據(jù)存儲于注冊表 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications 項 ToastEnabled 鍵值中。
href="">2. 局部搜狗輸入法通知開關:系統(tǒng)自帶設置中局部通知開關,將開關數(shù)據(jù)存儲于注冊表 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings\http:// Sogou.Ime.SysToast.Biz 項 Enabled 鍵值中。
href="">3. 搜狗輸入法自帶開關:搜狗輸入法設置中《桌面右下角推薦》選項,該選項數(shù)據(jù)將會存儲于注冊表 HKEY_CURRENT_USER\SOFTWARE\SogouInput.store.user 項 systoast_enable 鍵值中。
三種開關相關注冊表鍵值
云控配置忽略開關: 然而發(fā)現(xiàn)搜狗輸入法會根據(jù)云控下發(fā)的配置(systoast_general_config_1)忽略全局通知開關(ignore_sglb_switch)、局部搜狗通知開關(ignore_sys_switch)、搜狗輸入法設置開關(ignore_ime_switch)等,并無視用戶所配置的開關,其中實測發(fā)現(xiàn)若關閉系統(tǒng)中開關,則無法彈出窗口。
另外,分析時獲取到的云控配置中并未包含 ignore_ime_switch 字段,意味著當前云控配置下搜狗輸入法提供的彈窗開關是有效的。
云控配置忽略開關
建議: 在使用過程中,若需關閉彈窗,可采用以下方法。這些方法大多源自網(wǎng)絡上受彈窗困擾的用戶。不過由于不同時期、不同用戶畫像等云控配置存在差異或其他因素,可能導致關閉彈窗的操作無法正常生效。
1. 可關閉全局系統(tǒng)通知開關。若不想全局關閉,可通過將注冊表值 ShowInSettings 修改為 1,以顯示搜狗輸入法通知選項,隨后進行關閉操作。
2. 若上述方法無效,可關閉設置中的《桌面右下角推薦》。若無法看到《桌面右下角推薦》,需先點擊搜狗輸入法的“幫助反饋”,找到“廣告與搜索候選”,進入后查看關閉方法。之后,再次打開搜狗設置,點擊“高級”,將頁面拉至最下方,此時“桌面右下角推薦”的關閉選項才會出現(xiàn)。(此方案源自 B 站某用戶評論)
2、附錄 HASH: ?
閱讀原文:https://zhuanlan.zhihu.com/p/1952446290664359825
該文章在 2025/9/26 14:17:37 編輯過