應用日活增長背後的黑產狂歡——安卓拉活病毒研究
前言
近期,騰訊安全反詐騙實驗室通過TRP-AI反病毒引擎發現了數個以應用拉活為獲利手段的黑產團伙,通過惡意程式碼下發拉活子包擅自嘗試啟動或喚醒使用者手機中的正常應用,執行應用“拉活”操作,目標包括了電商、新聞、視訊、瀏覽器等類別的各大知名應用。
一、病毒解構
1.1 市場競爭滋生黑產盈利渠道
騰訊安全專家指出,DAU(DailyActive User)日活躍使用者數,常用於反映網站、應用或網路遊戲等的運營情況。移動網際網路競爭激烈的現在,已很難從正規渠道獲取到新流量,這些黑產團伙利用獲得的黑產流量,通過技術手段篡改應用渠道活躍資訊,將黑產流量轉換成應用渠道流量,最終從中牟利。應用開發商投入的大量的渠道推廣費用被黑產截流,造成巨大的損失。
流量轉換示意圖
1.2 黑產對抗經驗豐富
該類惡意家族具有以下對抗特徵:
1、 雲端隱匿
匿名雲端下發子包以及任務執行,防止追溯;
2、 反逆向分析
關鍵惡意程式碼多次加密轉換、自動刪除關鍵檔案等手段防止被逆向分析;
3、 執行環境對抗
檢測殺軟、ip資料、安裝列表、機型資料等資訊進行對抗;
1.3 已知的拉活方式
1、 URLScheme技術,這是運用最多的方式,通過Intent機制的URI傳送URL Scheme,從而啟動特定應用進行拉活; 2、 直接使用startActivity函式啟動特定應用的特定Activity; 3、 直接使用startService啟動特定應用的特定Service;
1.4 目標知名應用
目前已經發現的拉活目標涵蓋了電商、新聞、視訊等類別的各大知名應用,不完全統計拉活目標應用在30個以上,目標面廣泛。
1.5 三大家族
目前已知的拉活子包可以分成三大家族:cmder、QService、Sensor:
二、影響面分析
根據騰訊反詐騙實驗室安全大資料引擎的資料顯示,這三個家族近一個月影響的使用者量如下圖所示:
三個家族在總量中佔比如下:
三、cmder家族
3.1 特點
cmder家族的影響使用者較小,子包內容本身也很少,基本上,cmder家族的每一個拉活子包只對應一個目標應用,子包不具備其他惡意功能。
cmder家族的拉活子包主要使用了URL Scheme進行喚醒指定應用的操作:
部分收集到的拉活子包:
3.2 技術手段
捕獲到的拉活子包樣本均使用了URL Scheme來進行應用拉活,程式碼如下圖所示,將URL Scheme傳入Intent啟動:
紅框部分就是一個標準的URL Scheme。
頭部的snssdk143標誌著這是今日頭條的scheme,這串URL Scheme通過uri資訊包含在Intent中啟動,一旦手機中存在今日頭條應用,今日頭條的Intent Filter就可以通過scheme頭部的資訊過濾到這個Intent,啟動特定的Activity處理後面的引數,執行各種操作,拉活的目的也就達到了。
cmder家族中除了拉活之外還有一個特例:
拉活子包中有一個針對支付寶的,其URLScheme本質上並不是拉活,而是直接啟動支付寶打開了黑產分子支付寶分享的“天天領紅包”二維碼,從而達到盈利的效果。
URL Scheme資訊:
alipays://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode= ofollow,noindex" target="_blank">https://qr.alipay.com/c1x07288n03sjhxkdzneza2?_s=web-other
3.3 涉及應用的渠道資訊
觀察可以發現這批單功能拉活子包傳輸的資訊中包含了一些渠道資訊,如前文中拉活頭條的URL Scheme中,就包含click_schema_jaw09這樣的類似身份識別的欄位,現將這些資訊整理如下:
應用 | 渠道資訊 |
---|---|
映客 | inkewname=shuqixiaomowuliaoshiguang_201807 source_url=huoqiangshou06 |
西瓜視訊 | gd_label=click_schema_jaw51 gd_label=click_schema_hxhg18 |
uc 瀏覽器 | src_ch=juaiwan22 |
淘寶 | spm=2014.ugdhh.2075675568.1204-671 spm=2014.ugdhh.2075675568.1203-671 spm=2014.ugdhh.2075675568.1201-671 spm=2014.ugdhh.2075675568.1197-671 spm=2014.ugdhh.2075675568.1193-671 spm=2014.ugdhh.2075675568.1188-671 spm=2014.ugdhh.3907731441.1162-278 |
搜狐新聞 | channelId=13557 |
今日頭條 | gd_label=click_schema_jaw09 gd_label=click_schema_hxhg20 |
火山小視訊 | gd_label=click_schema_xdxd10 |
抖音短視訊 | gd_label=click_schema_hxhg6 |
支付寶 | qrcode= https://qr.alipay.com/c1x07288n03sjhxkdzneza2 |
優酷 | refer=youkushijiebei_operation.liuxiao.liux_qudao05_006000_6nEZFr_18061126 |
啟動新浪微博的URL Scheme為sinaweibo://browser/?url= http://f.swiftcn.io/wbs/98/letu0028 ,後面swiftcn.io是Swift中文網的域名,完整url無法開啟,也無法判斷是否構成渠道資訊。
啟動東方頭條的URL Scheme為com.songheng.eastnews://wireless:80/wakeuphome?wakeUpType=51,同樣無法判斷何處為渠道資訊,可能wakeUpType單獨指向這個拉活渠道。
3.4 拉活子包下發流程
母包從伺服器獲取下發應用列表:
抓取到的應用列表中單個應用的資訊如下圖所示:
然後執行pm install安裝應用以及am start啟動。
這裡下發的應用除了拉活子包之外,目前還發現了一些正常安全應用和一些惡意推廣、廣告彈窗的應用,具體如下:
正常應用:
sha1 | 包名 | 軟體名 |
---|---|---|
e250728bdc98e608cb33372ea248329c35fce56d | com.sohu.newsclient | 搜狐新聞 |
79568ba9d67cbaa9ab4539cb17ade0f395e9527e | com.book2345.reader | 七貓精品小說 |
93125824932c1299c39403cbeb2107990388df84 | tv.yilan.gaoshou.aphone | 高手 |
4970714854dfe3fca6f214741c6faee15acc6ca1 | com.douban.radio | 豆瓣 FM |
12b8b2ddaa75c7880d2fa4a5efa5f2a27f8a00a3 | com.qihoo.cleandroid_cn | 360 清理大師 |
ecab8e793a6c107fb5062c056fb58cae7c3e81b1 | com.qihoo.appstore | 安全市場 |
6339a35b598a2c419e19f7bcbd33eb9eb6550454 | com.qihoo.browser | 360 瀏覽器 |
35120a28186d66409d0881f017599532d42676b0 | com.jd.jrapp | 京東金融 |
8ea1ae3029be26f880155c774b79037fcad62e97 | com.alibaba.wireless | 阿里巴巴 |
惡意應用:
sha1 | 包名 | 軟體名 |
---|---|---|
f79a2f6cc4e10f86cecaadd26a843fbbdc4bc31d | com.yaha.tot | 搜尋服務 |
db9ff0f965fca8b43dd41b2ca04cb4c0703a8847 | com.yaha.tot | 搜尋服務 |
e1cda3881bab8708ea48032bf0edc6e1e3d604da | com.menz.ernza | ernza |
aaf1c47e96a8eb7a2344425ecbff0e0e6b8069af | com.haoo.app.tw | Hoo |
ea20204a47cd2285e7a6cb55267cfa663bbeda33 | com.qihoo.loak | 天天特價 |
e80c8dbacd21511d1278411d805b102738f71e74 | com.mm.invoker | 系統通知 |
36af2fb930545c20aec6dde6583c4ddd650690df | cn.ban.checkin | tools |
7b18025925861e730a2fcc81c3455deb0183165d | com.letbun.app.zh | LetBun |
ce76079496bc2e9f6e6e69340992df6ace5caa20 | com.android.phonedevices | V3DTorVieweServer |
4f4d3d71c20d2c280e01646a050e636eb7db780b | com.android.phonedevices | phonedevices |
355157c55cf99425e399eea0fdafc50e33a632fc | com.android.phonedevicers | V3DTourViewers |
4a8ad3006031f064e04a36226179946c9eb5ad7a | com.android.phonedevices | V3DTourViewers |
f836f5b9b0a6528b8359d0f91adff7621ce1cce9 | com.android.phonedevices | V3DTourViewers |
f3a1535d5a24245f986db405693ada4340fbcc64 | com.android.phonedevices | V3DTourViewers |
3.5 c&c伺服器整理
整體執行流程中主要涉及以下幾個域名,目前分析看來其內部api功能是一致的,主要包含了:獲取子包、獲取Root元件、下發應用列表等功能。
域名 | API | 功能 |
---|---|---|
http://hc.z ***.today:8082/ http://hg.hi ****88.today/ http://hc.su ***i.top/ http://gp.su ***i.top/ http://www.goo ****.software/ http://val.szch ***.top:8080/ | /cr/sv/getGoFile | 獲取start.bat子包 |
/cr/sv/getEPList | 上傳機型資料,返回對應Root包 | |
/cr/sv/pcApks | 上傳使用者安裝應用資訊 | |
/cr/sv/getRecord | 獲取雲端log | |
/spdumread/service/rtLogRecord | 上傳log,記錄Root進度 | |
/gpfile/pfiles/ | 下發apk儲存路徑 |
四、QService家族
4.1 特點
QService家族是目前發現的影響面最廣的拉活子包家族,與cmder家族相同,子包本身也僅有拉活功能,不同的是採取了從雲端獲取加密後的拉活任務列表,然後本地解析後執行的方式,這種方式相比於cmder頻繁地開發新的拉活子包更加簡便高效。
同時QService使用了最豐富的拉活方式,startActivity、startService以及URL Scheme;執行拉活的時間、間隔以及方式都在雲端下發的任務中給出了詳細的定義。
4.2 技術手段
QService家族從雲端獲取的資料解密後為json,部分資料擷取如下:
json中各引數的解釋見下表:
startTime | 任務開始時間(小時) |
---|---|
endTime | 任務結束時間(小時) |
intervalTime | 執行間隔時間(分鐘) |
screenState | 是否檢查螢幕開啟狀態,0為不檢查 |
type | 拉活方式,0為startActivity;1為startService;2為URL Scheme |
pkg | 目標應用包名 |
link | type為0時,link為指定的Activity; type為1時,link為指定的Service; type為2時,link為URL Scheme的值 |
執行任務的關鍵程式碼如下:
1、 根據screenState的值判斷是否需要判斷螢幕狀態:
2、 開始時間、結束時間、間隔時間是否滿足需求的判斷:
3、 記錄執行時間,根據type執行任務:
type為0時為使用startActivity啟動目標應用的特定Activity;type為1時為使用startService啟動目標應用的特定Service;type為2時則是與cmder家族相同的URL Scheme。
4.3 涉及應用的渠道資訊
同樣的,QService家族使用的URL Scheme涉及的渠道資訊也整理如下:
可以看到QService家族也利用了支付寶的天天搶紅包進行盈利,此外還有一些直接啟動Activity或Service的拉活任務,因此無法直接獲取到渠道資訊。
4.4 c&c伺服器整理
QService執行流程中訪問的雲端為:
http://xgaxp.jkw ***m.com/p/lwdeplik.zip
http://vbxcf.xzh ***j.cn/html/waeiksaz.zip
下載的檔案經解密後即為下發任務。
五、Sensor家族
5.1 特點
Sensor家族雖然使用者量相比於QService家族並不多,但功能比起QService來說則更加強大,他們自研開發了一種指令碼語言,拉活子包則是對應的指令碼直譯器,執行雲端下發的自研指令碼,在指令碼中包含了大量的拉活任務以及應用推廣任務。
Sensor家族的拉活行為同樣是靠URL Scheme實現,但由於是雲端下發指令碼,不排除更新為其他方式的可能性。
此外,Sensor家族也是目前發現的對抗最多的拉活子包,雲端下發、加密不必說,指令碼中還包含了ip檢測、殺軟檢測等對抗。
目前抓取的指令碼執行流程如下:
5.2 自研指令碼語言
Sensor家族背後的黑產團伙自研的指令碼語言實現了多達70個功能函式,同時支援了所有常用的運算子(包括邏輯運算),指令碼中包含明顯的控制結構。
函式表和解釋如下:
Function | Explain |
---|---|
abs(double n) | 求絕對值 |
log(String str) | 使用Android.Util.Log進行log |
max(double a,double b) | 求二者最大值 |
min(double a,double b) | 求二者最小值 |
parseHexString(String hex) | hex轉String |
putVar(String name,double value) | 將鍵值對存入hashtable |
delVar(String name) | 刪除指定鍵值對 |
clearVars() | 刪除所有鍵值對 |
random() | 隨機數 |
currentTimeMillis() | 取系統時間 |
defined(String name) | 檢測是否存在鍵 |
increase(String tag) | 指定tag計數+1,上報伺服器 |
install(String apk) | 安裝指定apk |
ipBelongsTo(String address…) | ip所在地 |
ipMatched(String ip…) | ip匹配(如192.168.1.*) |
isDownloaded(String file…) | 檢測檔案是否存在 |
isOnline() | 檢測網路 |
isScreenOn() | 檢測螢幕是否開啟 |
isWifiOnline() | 檢測是否在Wifi環境下 |
macMatched(String mac…) | mac地址匹配 |
manufacturerContains(String keywords…) | 供應商欄位是否包含keywords |
modelContains(String keywords…) | model欄位是否包含keywords |
packageExists(String package…) | 是否安裝指定應用 |
pathContains(String path) | 當前包下是否包含路徑 |
privAppExists() | 是否存在預裝應用路徑 |
putTag(String key,double value) | 將鍵值對存入hashtable,不同於putVar |
getTag(String key) | 獲取指定鍵值 |
removeTag(String key) | 刪除指定鍵值對 |
removeAutoExecCmd(String cmd) | 刪除自動執行命令 |
removeAutoStartActivity(String package,String activity) | 刪除自動執行startActivity |
removeAutoStartService(String package,String service) | 刪除自動執行startService |
rooted() | 檢測是否root |
setCommandUrl(String url) | 設定c&c伺服器地址 |
setStandbyServerUrl1(String url) | 設定備用c&c伺服器地址1 |
setStandbyServerUrl2(String url) | 設定備用c&c伺服器地址2 |
setDebugEnabled(int enabled) | 設定是否開啟debug |
setInterval(long interval) | 設定執行間隔 |
setLogEnabled(int enabled) | 設定是否開啟log |
signatureEquals(String signature) | 判斷簽名 |
startActivity(String package,String activity) | 執行指定Activity |
startService(String package,String service) | 執行指定Service |
stop(String package) | 停止指定應用 |
submit(String event,String extra) | 上報裝置資訊以及指定extra |
suexec(String cmd…) | 命令列執行命令 |
uidMatched(String uid…) | 匹配指定uid |
uninstall(String package) | 刪除指定應用 |
unzip(String file) | 解壓指定檔案 |
waitForNetwork() | 等待聯網 |
autoExecCmd(String cmd,String increaseTag,int type,int startHour,int endHour) | 設定自動執行命令 |
autoStartActivity(String package,String activity,String increaseTag,int type,int startHour,int endHour) | 設定自動執行startActivity |
autoStartService(String package,String service,String increaseTag,int type,int startHour,int endHour) | 設定自動執行startService |
boardContains(String keywords…) | board欄位是否包含keywords |
copy(String file,String newPath) | 複製指定檔案到指定路徑 |
count(String tag) | 對指定tag的計數 |
delete(String name) | 刪除指定檔案 |
deviceContains(String keywords…) | device欄位是否包含keywords |
download(String url,String name,int wifiOnly) | 下載檔案並儲存 |
fileExists(String path…) | 檔案是否存在 |
getApiLevel() | 獲取ApiLevel |
getWeeks(String date) | 獲取星期 |
getDays(String date) | 獲取天數 |
getHours() | 獲取當前小時 |
getFirstInstallTime() | 獲取第一次安裝時間 |
getProviderCode() | 獲取運營商程式碼 |
getRealTime() | 獲取當前時間 |
getVersion() | 獲取當前版本 |
iccidMatched(String iccid…) | iccid匹配 |
imeiMatched(String imei…) | imei匹配 |
imsiMatched(String imsi…) | imsi匹配 |
inKeyguardRestrictedInputMode() | 判斷是否鎖屏 |
這些函式中有明顯可以用來對抗的函式,如ipMatched、stop、packageExists等,事實上下發的指令碼也是這樣做的:在執行拉活操作之前,指令碼會先判斷是否存在殺軟,如果存在則關閉殺軟;同時通過ipMatched函式禁止掉了騰訊雲等ip地址。
被ban的ip如下:
180.153.228.*,183.232.175.*,183.3.234.*,183.60.163.*,183.61.51.*
在檢測到這些ip之後,指令碼將log資訊“forbidden”,記錄forbidden欄位為TRUE,然後通過submit函式上傳了forbidden:cloud antivirus資訊,然後結束執行。
5.3 任務執行流程
在執行具體任務之前,指令碼首先判斷了執行條件:
先判斷是否為新一天以及母包應用是否安裝,是的話就會重置pushCount為1000000,初始化計數用的變數;然後如果是測試模式或者未達到指定的pushCount,則開始執行任務。
接下來指令碼判斷了是否安裝主流殺軟,有則關閉。
當以上執行環境檢測完畢之後,使用increase函式將計數用的變數加1,代表進行了一次拉活,同時increase函式內建的邏輯將記錄上傳至伺服器。
Line"/>
最後使用URL Scheme執行拉活任務。
5.4 涉及應用的渠道資訊
Sensor子包中的渠道資訊整理如下:
應用 | 渠道資訊 |
---|---|
今日頭條 | gd_label=click_schema_aguya15 |
抖音短視訊 | gd_label=click_schema_jaw55 |
今日頭條極速版 | gd_label=click_schema_aguya29 |
西瓜視訊 | gd_label=click_schema_aguya25 |
火山小視訊 | gd_label=click_schema_aguya39 |
淘寶 | spm=2014.ugdhh.3915747229.1194-189 |
優酷 | refer=home1808_operation.anne.hxl_qudao85_005000_jQRvyq_18080201 |
指令碼中除了執行拉活任務之外,還有一些下載安裝推廣其他應用的任務,這部分的資訊整理如下:
六、總結
拉活子包不可能憑空出現,為防範成為黑產控制下的刷量拉活工具,安卓手機使用者需要提高安全意識,養成良好的使用習慣,我們建議:
1. 通過正規應用市場或官方下載應用; 2. 不要輕易開啟不明連結,謹慎對待來源不明的安裝包、檔案; 3. 養成良好的生活習慣,不下載安裝“色情類”的應用; 4. 使用騰訊手機管家等手機安全軟體進行實時防護。
*本文作者:騰訊手機管家,轉載請註明來自FreeBuf.COM