一、前言
5月12日,一場(chǎng)全球性互聯(lián)網(wǎng)災(zāi)難悄然而至,一款名為WannaCRY的PC端惡意勒索軟件利用NSA泄漏的危險(xiǎn)漏洞“永恒之藍(lán)”,給100多個(gè)國(guó)家和地區(qū)10萬臺(tái)電腦造成了巨大的損失。到2017年為止,全球手機(jī)用戶總量已經(jīng)突破50億,而作為占比超過50%的android系統(tǒng)中,同樣有許許多多類似WannaCRY的勒索軟件正在危害我們的財(cái)產(chǎn)安全。
接下來,以一款主流的Android端惡意鎖屏勒索應(yīng)用為例,使用廈門安勝網(wǎng)絡(luò)科技有限公司自主研發(fā)的宙斯眼安全檢測(cè)系統(tǒng)進(jìn)行自動(dòng)分析,結(jié)合人工分析的方式,深入剖析勒索應(yīng)用的惡意行為。知己知彼,才能更好的防患于未來。
二、運(yùn)行特征
這是一款偽裝成”秒贊大師”的鎖屏勒索惡意應(yīng)用

第一次點(diǎn)擊啟動(dòng)之后,主界面會(huì)彈出誘騙激活設(shè)備管理員權(quán)限的對(duì)話框


當(dāng)你點(diǎn)擊激活后,恭喜你,你的屏幕將被鎖定,無法進(jìn)入手機(jī)的主界面,除非聯(lián)系勒索者獲得解密密碼

那么,接下來我們一起來分析下這款勒索軟件的實(shí)現(xiàn)原理,并且破解出它的解鎖密碼
三、準(zhǔn)備工作
1. 分析工具:JEB/Android killer
JEB是一款收費(fèi)的Android應(yīng)用程序反編譯工具,解析能力強(qiáng),兼容性高。
Android Killer是一款免費(fèi)的android應(yīng)用程序反編譯工具,集Apk反編譯、Apk打包、Apk簽名,編碼互轉(zhuǎn),ADB通信等特色功能于一身。
可根據(jù)個(gè)人的習(xí)慣選擇工具,這里將使用jeb進(jìn)行分析
2. 分析環(huán)境:android模擬器
主要用于惡意應(yīng)用的運(yùn)行時(shí)分析,可使用android原生的模擬器,也可使用第三方如genymotion、天天模擬器等
四、流程分析
應(yīng)用整體運(yùn)行流程圖如下

接下來,我們對(duì)整個(gè)流程進(jìn)行詳細(xì)的分析
1. 入口點(diǎn)
首先,我們使用jeb打開要分析的apk

其中左邊為該應(yīng)用反編譯出來的類列表,右邊為AndroidManifest.xml清單文件的內(nèi)容

我們可以發(fā)現(xiàn),應(yīng)用的入口類為com.bugzapk.b,接下來我們分析下b類的執(zhí)行邏輯,b類對(duì)應(yīng)的界面如下,該界面只有一個(gè)按鈕

我們找到這個(gè)按鈕的點(diǎn)擊事件

發(fā)現(xiàn)點(diǎn)擊之后跳轉(zhuǎn)到com.bugzapk.z類中
2. root權(quán)限
我們繼續(xù)分析com.bugzapk.z類,首先分析入口函數(shù)onCreate

在入口處做了一些界面相關(guān)的初始化工作,重點(diǎn)在于這個(gè)100000000線程

我們可以看到,該應(yīng)用首先會(huì)嘗試將system分區(qū)mount為可寫狀態(tài),再將應(yīng)用挪入固件中,并且重啟手機(jī)。如果你的手機(jī)有root過,并且給予了root權(quán)限,你將無法再通過普通的方式來卸載這個(gè)應(yīng)用,就連刷機(jī)都無法清除。

當(dāng)獲取root權(quán)限失敗后,將會(huì)誘導(dǎo)你激活設(shè)備管理員權(quán)限。

當(dāng)你點(diǎn)擊確定后,會(huì)跳轉(zhuǎn)到com.bugzapk.c界面
3. 訪問網(wǎng)絡(luò)獲取PIN碼
分析com.bugzapk.c類的入口函數(shù)oncreate

啟動(dòng)后,首先會(huì)運(yùn)行100000000這個(gè)線程

這個(gè)線程會(huì)先解密字符串得到一個(gè)鏈接,并調(diào)用get方法訪問網(wǎng)絡(luò)獲得一個(gè)字符串,接下來我們分析下加密的算法,這里進(jìn)行了三層解密:decrypt->解密->decoder

這個(gè)decrypt函數(shù)首先將16進(jìn)制字符串轉(zhuǎn)換成字節(jié),再將字節(jié)進(jìn)行AES解密

解密函數(shù)中有一個(gè)簡(jiǎn)單的字典,進(jìn)行字符串替換。

decoder函數(shù)會(huì)對(duì)字節(jié)進(jìn)行異或,得到最終的url。

根據(jù)這三個(gè)函數(shù),我們可編寫對(duì)應(yīng)的解密算法解出url的值。
接下來我們打開瀏覽器訪問這個(gè)url

我們發(fā)現(xiàn)返回了一大段的字符串,

最終,程序會(huì)調(diào)用正則表達(dá)式函數(shù),并進(jìn)行解密,我們調(diào)用對(duì)應(yīng)的解密算法,可計(jì)算出pin值為7531

4. 激活設(shè)備管理員并且設(shè)置PIN碼
com.bugzapk.c界面只有一個(gè)激活按鈕

點(diǎn)擊后會(huì)調(diào)用系統(tǒng)的api申請(qǐng)?jiān)O(shè)備管理員權(quán)限,并且調(diào)用resetPassword函數(shù)將PIN碼修改為上一步獲取的值7531

Android中的設(shè)備管理員權(quán)限可以對(duì)手機(jī)進(jìn)行鎖屏,防止應(yīng)用被卸載等
獲取權(quán)限后,會(huì)調(diào)用鎖屏函數(shù),將屏幕鎖定

并且跳轉(zhuǎn)到com.bugzapk.g頁(yè)面

5. 上傳手機(jī)型號(hào)/釣魚頁(yè)面
com.bugzapk.g界面啟動(dòng)后會(huì)自動(dòng)上傳手機(jī)型號(hào)

并且彈出釣魚頁(yè)面誘導(dǎo)你輸入QQ賬號(hào)密碼

當(dāng)你輸入完點(diǎn)擊登陸后,跳轉(zhuǎn)到com.bugzapk.h頁(yè)面

6. 鎖屏主頁(yè)面
終于進(jìn)入我們最重要的密碼輸入界面com.bugzapk.h了,首先分析密鑰獲取邏輯

其中c為要訪問的域名,get函數(shù)訪問域名。通過解密算法可得到url為

打開瀏覽器,訪問頁(yè)面返回如下字符串

獲得數(shù)值后,使用正則表達(dá)式提取出37598這個(gè)密碼
并且賦給pass這個(gè)成員變量,如果網(wǎng)絡(luò)無法訪問的情況下,將會(huì)使用本地的密鑰

通過執(zhí)行對(duì)應(yīng)的解密算法,可解得本地密碼值為8810

接下來我們來分析解鎖函數(shù)js的邏輯

如果輸入的密碼值為654321,則將PIN碼更改為654312

如果輸入的密碼值為4321,則將PIN碼修改為4312

如果輸入的密碼值為上面分析出來的密碼值,將會(huì)跳轉(zhuǎn)到com.bugzapk.i界面
7. 鎖屏主頁(yè)面2
鎖屏主頁(yè)面1的密碼正確后,將會(huì)進(jìn)入第二個(gè)頁(yè)面com.bugzapk.i

我們直接查看點(diǎn)擊確定按鈕后的解鎖邏輯

輸入4951密碼后,頁(yè)面會(huì)跳轉(zhuǎn)會(huì)上一個(gè)界面

輸入997998后,界面的文字會(huì)做一些改變

正確的密碼值為l.x(v17,v9)這個(gè)解密函數(shù),我們執(zhí)行對(duì)應(yīng)的解密函數(shù)得到正確的密碼為2415

密碼輸入正確后,跳轉(zhuǎn)到最后的PIN碼界面
8. PIN碼界面

com.bugzapk.d界面直接顯示系統(tǒng)的PIN碼輸入頁(yè)面,輸入之前計(jì)算得到的PIN碼即可解鎖成功,進(jìn)入手機(jī),至此整體流程結(jié)束
五、修復(fù)方法參考
如果你的手機(jī)也被這種勒索病毒鎖屏了該怎么辦呢,你可以嘗試以下幾種方法:
1. 如果你有基本的android開發(fā)經(jīng)驗(yàn)和逆向知識(shí),你可以嘗試直接分析勒索軟件的解密算法得到正確的密碼,一般這種軟件的邏輯和算法都不會(huì)太復(fù)雜
2. 如果你的手機(jī)開啟了USB調(diào)試模式,可以進(jìn)入adb shell環(huán)境,并且擁有root權(quán)限,你可以嘗試使用命令直接刪除密碼文件,刪除后重啟即可直接進(jìn)入手機(jī)界面
adb shell rm /data/system/access_control.key
adb shell rm /data/system/password.key
adb shell rm /data/system/gesture.key
3. 如果手機(jī)有刷過第三方的recovery,你可以重啟進(jìn)入recovery模式,直接將該軟件刪除,或者執(zhí)行第2步的命令刪除密碼。如果手機(jī)上的數(shù)據(jù)不重要的話,可以直接執(zhí)行雙wipe清除手機(jī)上的所有數(shù)據(jù)(勒索軟件在固件將無效)。
4. 刷機(jī),刷入新的系統(tǒng)。
5. 聯(lián)系勒索者得到密碼
注意:以上方法僅供參考,其中2/3/4方法有可能造成手機(jī)重要數(shù)據(jù)丟失、系統(tǒng)無法正常使用,請(qǐng)慎重操作。
現(xiàn)在市面上流傳的移動(dòng)設(shè)備勒索病毒種類繁多,其中許多病毒制作較為簡(jiǎn)單,解鎖密碼都是直接明文寫在字符串中。你可以嘗試使用宙斯眼對(duì)病毒進(jìn)行分析,從生成的分析報(bào)告中可以得到許多有效的信息,甚至直接獲取到解鎖密碼。
“宙斯眼”是一款專業(yè)的移動(dòng)終端安全檢測(cè)設(shè)備,采用公司自主研發(fā)的分析引擎,通過對(duì)APP反編譯靜態(tài)代碼行為分析及動(dòng)態(tài)行為分析,并匹配海量的特征庫(kù),實(shí)現(xiàn)快速對(duì)APP的安全進(jìn)行檢測(cè),定位惡意APP并生成專業(yè)的檢測(cè)報(bào)告。
六、建議
最后,在給大家以下幾點(diǎn)建議:
1. 不要從非官方的渠道下載應(yīng)用,防止應(yīng)用被人為修改,加入了惡意代碼
2. 對(duì)于別人發(fā)過來的apk下載鏈接,要慎重點(diǎn)擊下載
3. 不要貪小便宜,去安裝那些搶紅包/游戲輔助之類的插件,大部分都是木馬病毒
4. 對(duì)于新安裝的應(yīng)用,如果有彈出申請(qǐng)?jiān)O(shè)備管理員權(quán)限或者root權(quán)限的對(duì)話框,請(qǐng)一律點(diǎn)擊拒絕,除非你確定這個(gè)應(yīng)用沒有問題
5. 沒有必要的情況下,請(qǐng)不要root你的手機(jī)
|