1. 程式人生 > >[Android病毒分析]木馬病毒之DroidKongFu病毒

[Android病毒分析]木馬病毒之DroidKongFu病毒

木馬病毒之DroidKongFu病毒

一、 樣本概況

1.1 樣本資訊

檔名稱:Cut The Rope Unlock.apk
檔案型別:application/jar
樣本包名:com.tebs3.cuttherope
樣本大小:88.1KB
MD5:45F86E5027495DC33D168F4F4704779C
SHA1:6564C212E42C61C7C0E622ABB96D1FD0F7980014
病毒行為:有廣告、誘導使用者下載惡意廣告軟體,釋放病毒檔案。
檔名稱:evil.bin
檔案型別:elf
樣本大小:26.4KB
MD5:562F6B581DF7B8610251293CEE3C7F7B
SHA1: 45361BB3335D6C2AA23496799592C5AC392950EA
病毒行為:篡改系統檔案、連線遠端伺服器。

1.2 測試環境及工具

測試環境:夜神模擬器 V_3.8.3.1
工具:Jeb、AndroidKiller、IDAPro

1.3 分析目標

1、病毒執行的具體方式
2、查殺病毒

二、具體行為分析

用AndroidKiller開啟樣本檔案,有兩個活動,一個廣播,兩個服務。有兩個敏感的許可權,第一個是讀取手機狀態和身份,第二個訪問目前所在的地理位置。
在這裡插入圖片描述
開啟Jeb進行反編譯,分析MainActivity的OnCreate方法。首先定義了三個監聽器。

第一個,首先檢查手機有沒有被root,如果已經root判斷com.zeptolab.ctr這個程序有沒有在執行。如果沒有,執行su命令,切換成超級管理員許可權,然後執行rechteBearbeitenUndUeberschreiben這個函式,跟進去發現是個檔案拷貝函式,將Assets檔案下的CtrApp.xml檔案,讀取到data/data/com.zeptolab.ctr/shared_prefs/CtrApp.xml。
在這裡插入圖片描述


第二個是開啟一個活動,因為病毒檔案捆綁在一款名為“Cut The Rope Unlock”的遊戲解鎖軟體中,所以第二個是開啟相應的功能。

第三個是訪問一個指定的網頁:http:\\www.facebook.com/otothel.apps。
在這裡插入圖片描述
接下來新建了一個NewAd類的物件,根據名稱可猜測是與廣告有關。然後呼叫startAd方法。跟進去看發現,startAd新建了一個g類的物件並呼叫了start方法。跟蹤g類可以看到他繼承了Thread類,可知這是一個執行緒,主要分析它的run函式。
在這裡插入圖片描述
1、 NewAd.a(this.a)該函式其實就是訪問了NewAd類的a成員,該成員變數是一個boolean型別,為false。所以if裡面的語句會執行。
2、 再分析b方法,實質上呼叫了NewAd的a方法,點進去發現是訪問了一個網址http://dd.phonego8.com:7500/ad/nadp.php?v=1.5&id=all,然後呼叫相應的方法。最後返回結果true。

在這裡插入圖片描述
3、然後呼叫Sleep方法睡眠5秒。
回到MainActivity接著分析。新建了一個f類的物件。在初始化過程中呼叫了2個方法。
第一個方法:主要是互毆dId和userId兩個鍵值,dId的值來源於AndroidManifest.xml中的元資料ad.imadpush.com,它的值固定是100001,userId的值是通過GetDeviceId獲取到的,它們共同寫入到jmuser.xml中。
在這裡插入圖片描述
在這裡插入圖片描述
第二個方法:主要是啟動了一個全域性定時器,物件是ReceiverAlarm,週期是360000毫秒。在ReceiverAlarm的OnReceive方法中只開啟了一個名為AlarmService的服務。
在這裡插入圖片描述
分析AlarmService服務,在onStart方法中,先獲取了兩個鍵值,獲取系統服務通知,最後呼叫AsyncTask的execute來向用戶傳送通知,誘騙使用者安裝廣告軟體。
在這裡插入圖片描述
再次回到MainActivity中進行分析。最後是開啟了一個名為UpdateCheck服務,該服務載入了名為“vadgo”的動態連結庫,然後在OnCreate方法中獲取MYAD_PID、手機序列號、包名,最後開啟一個執行緒,呼叫動態庫中的DataInit函式。
在這裡插入圖片描述
到此,JAVA層部分的已經分析完畢,主要是接收廣告、誘導使用者安裝廣告軟體、呼叫DataInit函式進入native層。接下來就開始分析Native層的程式碼。

在apk檔案中找到libvadgo.so檔案,用IDAPro開啟該檔案。找到DataInit函式進行分析。

在一開始通過呼叫GetStringUTFChars函式獲取到裝置ID字串,程式包名字串,Android_ID字串。
在這裡插入圖片描述
然後判斷裝置ID是否為空,為空就退出程式。不為空,進行字串解密操作。演算法非常簡單就是對位元組按位取反。最終解密獲得字串:/system/bin/su、/system/xbin/su、/system/bin/setprop、r0.bot.idr0.bot.ch
在這裡插入圖片描述
接下來函式通過路徑、包名、和隨機數構造出了惡意檔案的檔名:/data/data/com.tebs3.cuttherope/.e隨機數d。然後用檔名建立檔案。
在這裡插入圖片描述
接下來獲取要寫入檔案的資料的首地址,利用write函式將資料寫入檔案,並修改可執行屬性755。
在這裡插入圖片描述
通過access函式判斷system/bin/su是否可以訪問,如果可以訪問那麼建立管道執行system/bin/su命令。

接著依次執行了四條命令:system/bin/setprop r0.bot.id android_id、system/bin/setprop r0.bot.ch NCuttherope、惡意檔案、exit。最後Sleep300毫秒,然後呼叫unlink函式刪除惡意檔案。
在這裡插入圖片描述
總結一下這個函式所做的事情:進行字串解密操作,建立惡意檔案,執行命令執行惡意檔案,等待惡意檔案執行結束,刪除惡意檔案。

接下來分析惡意檔案做了哪些事情。因為惡意檔案在執行結束的時候會被刪除,所以,我們應該在向惡意檔案寫入資料的那一部分dump出惡意檔案。用IDAPro開啟,進行分析。

找到main函式,發現一開始就是和之前一樣的解密函式,再往下是檢查自身是不是以Root許可權執行的。如果不是就退出程式。
在這裡插入圖片描述
Android系統的屬性值是通過system/bin/getprop和system/bin/setprop命令讀取和設定的,因此病毒檔案,通過getpropertyvalue函式獲取屬性值,然後拿返回值和數字0進行比較,如果相等則說明還沒有被感染,那麼進行感染。然後檢查是否等於字元‘0’,相等退出程式,不相等繼續和字元‘1’進行相比,相等再判斷是否需要重新進行感染,否則進行感染。
在這裡插入圖片描述
當病毒進行重新感染的時候,先獲取上一次儲存的時間,使用當前的時間值減去上一次的時間值求出時間差。判斷時間差是否大於3600秒,如果大於那麼重新進行感染,否則退出程式。
在這裡插入圖片描述
接下來通過setprop_s_s_s函式將r0.bot.run的值設定為字串‘0’,然後通過setprop_r0.bot.val對r0.bot.val的值進行寫入,寫入的值是病毒此次感染成功的時間。然後在通過setprop_s_s_s函式將r0.bot.run的值設定為字串‘1’。
在這裡插入圖片描述
著重對infectsysfiles函式進行分析。這個函式有著病毒感染系統檔案的詳細過程。

首先可以看到函式中有著多次對是否可以訪問/system/lib/libd1.so檔案的判斷。根據每次判斷結果的不同對不同檔案進行感染。

首先分析對system/bin/svc檔案的感染。新建/data/.bootemp檔案,先將/system/bin/ifconfig寫入到檔案中,然後再將system/bin/svc檔案寫入到data/.bootemp中。
在這裡插入圖片描述
在這裡插入圖片描述
然後呼叫rewritefile函式。重新掛載系統分割槽為可讀寫,記錄最後一次檔案更改時間,去掉系統屬性,刪除原始檔,將/data/.bootemp檔案內容寫入要感染的檔案。修改屬性644,加上系統屬性,將剛剛記錄的時間進行設定,重新掛載系統分割槽為只讀。
在這裡插入圖片描述
最後在感染system/bin/svc函式中刪除檔案/data/.bootemp檔案。這樣就完成了對system/bin/svc檔案的感染。

Infectsysfiles函式會將/system/bin/vold與/system/bin/debuggerd檔案通過copy2frameworkdir函式備份到/system/frameword目錄下。還會感染如下檔案:
在這裡插入圖片描述
對這些檔案的感染其實就是將裡面的內容替換為惡意檔案的內容。

感染完成之後,通過獲取硬體資訊,連線遠端伺服器。通過最初的解密操作可以知道有三個伺服器地址:
在這裡插入圖片描述
以及如下字串:
AM_START:/system/bin/am start -a android.intent.action.VIEW -d
START_APP:/system/bin/am start -n
PM_INSTALL:/system/bin/pm install -r
PM_UNINSTALL:/system/bin/pm uninstall

總結,這個惡意檔案所做的事情:解密字串、設定感染標誌、感染檔案、連線遠端伺服器、執行控制命令。

三、查殺方法以及解決方法。

1、提取病毒特徵,利用防毒軟體進行查殺。

APK檔案的MD5:45F86E5027495DC33D168F4F4704779C
惡意檔案的MD5:562F6B581DF7B8610251293CEE3C7F7B
網址:http://ad.pandanew.com:8511/search
   http://ad.phonego8.com:8511/search
   http://ad.my968.com:8511/search

2、解決方法

編寫修復檔案,對檔案進行修復。
思路:1、將系統屬性值恢復回去。利用/system/bin/setprop命令,將系統屬性值恢復為‘0’;
2、恢復system/bin/svc檔案中的內容。將檔案開始處的“/system/bin/ifconfig”字串刪除。
3、恢復備份檔案。在剛才的分析中病毒會備份/system/bin/vold與/system/bin/debuggerd檔案通過copy2frameworkdir函式備份到/system/frameword目錄下。所以應該從/system/frameword目錄下的兩個檔案恢復回去。
4、恢復檔案。病毒除了感染上述檔案外還會感染其他檔案,如下圖所示,應當用原來的檔案將以下檔案進行替換。
在這裡插入圖片描述

四、參考文獻

[1] 豐生強. Android軟體安全與逆向分析. 人民郵電出版社. 2013.