Android沙盤原理與實現
一、前言
據網秦釋出的《2012年上半年全球手機安全報告》,2012年上半年Android病毒感染量增長迅猛,尤以5、6月最為突出,上半年感染手機1283萬部,比2011年下半年增長62%。在全球範圍內,中國大陸地區被感染率佔居首位。面對增長如此迅速的Android軟體,安全研究人員常常需要逆向分析樣本,分析出其惡意行為,但手工分析較費時間。在DEX檔案反混淆技術的不遍推廣和普及下,比如今年的BlackHat就有DEX反混淆的專題及相應工具公佈,現在已有很多惡意軟體使用到這些反混淆技術,這就加大了樣本分析的難度及所花費的時間。本文主要講述如何利用Android沙盤實現自動化分析惡意軟體的方法,其中介紹了Android沙盤的原理,以及由筆者編寫的Android沙盤——MalDroidAnalyzer,後面會提供由MalDroidAnalyzer分析真實病毒時自動生成的分析報告。
二、Android常見惡意軟體行為
1、惡意扣費
病毒在後臺傳送扣費簡訊、拔打電話進行惡意扣費,同時會對服務商發回的服務簡訊進行遮蔽,破壞系統的正常功能,同時對使用者造成資費損失。
2、隱私竊取
病毒通過後臺服務竊取使用者隱私資訊,包括通話錄音、簡訊內容、IMEI、IMSI、地理位置、通訊錄、瀏覽器歷史記錄等資訊,然後上傳到黑客控制的遠端伺服器。
3、遠端控制
病毒在後臺開機自動,並與C&C伺服器進行通訊,並從中獲取加密的指令,解密後執行相應的惡意操作,也有通過SMS進行控制,構造出botnet,從而大規模地遠端控制使用者的手機。比如之前著名的AnserverBot病毒,就是通過新浪部落格進行遠端控制,也是首個利用第三方站點作為C&C伺服器的Android病毒。
4、系統破壞
病毒通過系統漏洞進行ROOT提權,並執行高許可權操作,在後臺靜默安裝子程式包,或者通過偽造成防毒軟體、提示更新等方式欺騙使用者安裝第三方惡意程式。病毒可能會更改網路狀態、APN,或者替換系統檔案、新增惡意書籤、遮蔽運營商簡訊、中止殺軟程序等方式進行系統破壞。
5、其它
病毒在後臺聯網下載大量軟體,消耗使用者手機流量,或者執行一些比較耗電的操作來消耗手機電量,進而影響正常的手機通訊。也有些一些病毒通過釣魚欺騙等方式,誘騙使用者下載偽裝軟體,導致帳戶密碼失竊。
三、Android沙盤原理
本文主要介紹一款Android惡意軟體行為自動分析平臺——MalDroidAnalyzer,其主要結合靜態分析和動態分析技術來實現惡意軟體行為自動化分析。MalDroidAnalyzer是筆者使用Perl語言編寫的,用於輔助分析Android軟體行為,提高惡意軟體的分析效率。
首先,MalDroidAnalyzer直接以apk檔案作為輸入,整個分析過程主要分析兩部分:靜態分析和動態分析。靜態分析會通過反編譯apk檔案,分析其中的許可權、元件、敏感函式等資訊,這些可以彌補動態分析中因未觸發惡意行為而漏掉的行為。動態分析主要通過在模擬器執行Android軟體,然後再對軟體進行一些操作以觸發儘可能多的惡意行為,接著輸出到log中,再通過指令碼對日誌進行分析。由於Android系統預設情況下,一些輸出日誌裡面缺乏我們所需的資訊,比如傳送簡訊時,只在log中記錄手機號,而沒有簡訊內容,此時就需要通過修改Android原始碼或者反彙編system.img中的相關類或者庫進行修改,可以在簡訊傳送函式sendTextMessage(位於system.img中的framework/framework.jar)裡面新增簡訊內容的日誌輸出:
下面是可能需要修改的相關檔案,包括原始碼位置和編譯後所對應的相關檔案,可根據自身需要進行修改:
傳送簡訊:android.telephony.SmsManager(system.img中的framework/framework.jar) 檔案操作:org.apache.harmony.luni.platform.OSFileSystem(system.img中的framework/core.jar) 網路操作:org.apache.harmony.luni.platform.OSNetworkSystem(system.img中的framework/core.jar) 拔打電話:android.app.Activity(system.img中的framework/framework.jar) 啟動服務:android.content.ContextWrapper(system.img中的framework/framework.jar) 資料加解密:javax.crypto.Cipher(system.img中的framework/core.jar) 核心庫:dalvik/vm/native(system.img中的lib/libdvm.so)
關於apk檔案及MalDroidAnalyzer的工作流程如下圖所示:
1、靜態分析
沙盤MalDroidAnalyzer主要在電腦端對APK進行靜態分析,通過apktool先進行反編譯處理。正常的APK檔案主要是以zip格式進行壓縮捆綁的文件,裡面主要包含AndroidManifest.xml、Classes.dex和res等檔案。在反編譯後會得到明文的AndroidManifest.xml,裡面定義各元件、元件許可權和啟動位置、軟體基本資訊等,通過對該xml檔案的分析,可以獲取到軟體名稱、包名等基本資訊,同時對包含的各個元件進行分析,特別是Broadcast Receiver元件的觸發條件,可能就包含有開機自啟動項用於啟動後臺服務,這些在報告中都會被高亮顯示出來。
在動態分析過程中,可能由於惡意行為的時間限制,或者模擬器的功能限制(比如藍芽、Wifi),導致病毒的一些惡意行為無法觸發。此時,我們通過檢測Android軟體呼叫的API函式可彌補這裡的不足,比如傳送扣費簡訊通常會呼叫sendTextMessage()函式,執行外部命令可能會呼叫java.lang.Runtime.exec()。下面是筆者收集整理的一些敏感API函式列表,歡迎各位讀者補充和改進:
my %apis = ( "IActivityManager\$Stub\$Proxy\;\-\>shutdown" => '關機', "ActivityManager\;\-\>killBackgroundProcesses" => '中斷程序,可用於關閉殺軟', 'ActivityManagerNative;->killBackgroundProcesses' => '中斷程序,可用於關閉殺軟', 'ActivityManagerNative;->restartPackage' => ' 中斷程序,可用於關閉殺軟', 'ActivityManager;->restartPackage' => ' 中斷程序,可用於關閉殺軟', #"BluetoothAdapter\;\-\>enable" => '開啟藍芽', #"BluetoothSocket\;\-\>connect" => '連線藍芽', #"IBluetoothPbap\$Stub\$Proxy\;\-\>connect" => '連線藍芽', "ContentResolver\;\-\>query" => '讀取聯絡人、簡訊等資料庫', "ContentService\;\-\>dump" => '轉儲聯絡人、簡訊等資訊', "PackageManager\;\-\>installPackage" => '安裝apk包', "Camera\;\-\>open" => '開啟相機', "MediaRecorder\;\-\>setAudioSource" => '開啟錄音功能', "MediaRecorder\;\-\>setVideoSource" => '開啟視訊錄製', "LocationManager\;\-\>getLastKnownLocation" => '獲取地址位置', "Downloads\$ByUri\;\-\>startDownloadByUri" => '下載檔案', "Downloads\$DownloadBase\;\-\>startDownloadByUri" => '下載檔案', "PowerManager\;\-\>reboot" => '重啟手機', "Settings\$Bookmarks\;\-\>add" => '新增瀏覽器書籤', "TelephonyManager\;\-\>getDeviceId" => '蒐集使用者手機IMEI碼、電話號碼、系統版本號等資訊', "TelephonyManager\;\-\>getSimSerialNumber()" => '獲取SIM序列號', "Telephony\$Mms\;\-\>query" => '讀取簡訊', "TelephonyManager\;\-\>getLine1Number" => '獲取手機號', "SpeechRecognizer\;\-\>startListening" => '開啟麥克風', "WifiManager\;\-\>setWifiEnabled" => '開啟WIFI', "SmsManager\;\-\>getAllMessagesFromSim" => '獲取sim卡上的簡訊', "SmsManager\;\-\>sendDataMessage" => '傳送二進位制訊息', "SmsManager\;\-\>sendMultipartTextMessage" => '傳送彩信', "SmsManager\;\-\>sendTextMessage" => '傳送普通簡訊', #"http/multipart/FilePart;->sendData" => '傳送http請求', #"http/multipart/Part\;\-\>send" => '傳送http請求', #"http/multipart/Part\;\-\>sendParts" => '傳送http請求', #"http/multipart/StringPart\;\-\>sendData" => '傳送http請求', "internal/telephony/ISms\$Stub\$Proxy\;\-\>sendData" => '傳送簡訊', "internal/telephony/ISms\$Stub\$Proxy\;\-\>sendMultipartText" => '傳送簡訊', "internal/telephony/ISms\$Stub\$Proxy\;\-\>sendText" => '傳送簡訊', "internal/telephony/ITelephony\$Stub\$Proxy\;\-\>call" => '拔打電話', "java/lang/Runtime\;\-\>exec" => '執行字串命令', "java/net/HttpURLConnection\;\-\>connect" => '連線URL', #"java/net/URL\;\-\>getContent" => '獲取網頁內容', "java/net/URL\;\-\>openConnection" => '連線URL', "java/net/URLConnection\;\-\>connect" => '連線URL', "DefaultHttpClient\;\-\>execute" => '傳送HTTP請求', "HttpClient\;\-\>execute" => '請求遠端伺服器', 'android/app/NotificationManager;->notify' => '資訊通知欄', "SmsReceiver\;\-\>abortBroadcast" => '攔截簡訊接收', "ContentResolver\;\-\>delete" => '刪除簡訊、聯絡人', "chmod " => '更改檔案許可權', "getRuntime" => '獲取命令列環境', #'content://telephony/carriers' => '獲取所有的APN(網路接入點)配置資訊', 'content://telephony/carriers/preferapn' => '可能用於篡改APN(網路接入點)以呼叫應用市場M-Market扣費介面並驗證', 'content://sms' => '獲取簡訊資料庫', 'content://browser/bookmarks' => '獲取瀏覽器書籤', 'mount -o remount' => '重新掛載檔案系統', '/system/bin/sh' => '執行shell', '/proc/mounts' => '載入檔案系統', '/system/bin/cp' => '複製檔案', '/root/su' => '切換使用者', '/system/bin/rm ' => '刪除檔案', );
2、動態分析
動態分析是Android沙盤的主要功能,主要使用Google Android模擬器作為沙盤環境,同時以前面修改過的system.img來啟動模擬器,以在操作過程中生成我們所需的日誌資訊:
system('start emulator -avd MalDroidAnalyzer -scale 0.8 -system images/root-system.img -ramdisk images/ramdisk.img -kernel images/zImage -prop dalvik.vm.execution-mode=int:portable &');
這裡的root-system.img是經過root的,預設情況下,Android模擬器是沒有root許可權的,需要自己手工修改。這樣在一些需要root許可權的病毒才能正常地模擬器執行,以觸發更多的惡意行為。
啟動模擬器後,利用adb安裝APK到模擬器上。業界多數沙盤是通過monkey去自動操作軟體以觸發惡意行為,但這種做法過於盲目,不容易觸發惡意行為,同時當操作過於頻繁時容易導致程式崩潰,因此在MalDroidAnalyzer中選擇由使用者自主手工操作,操作時間由使用者自己把握。手工操作可能更有利於觸發惡意行為,因為病毒作者通常會更多地依賴使用者的操作習慣來觸發惡意行為,比如點選、拔打電話等行為。
為了避免生成過多的無用日誌,因此在使用logcat命令時可提前過濾下,並輸出到log.txt檔案:
system("adb logcat -v time ActivityManager:I camera:V AudioHardware:D Telephony:V CallNotifier:D su:D MediaProvider:V videocamera:V BluetoothEnabler:V BluetoothHIDService:I dalvikvm:W *:S > log.txt");
最後對生成的日誌log.txt進行分析,由於修改過system.img,它會按照json格式輸出我們所需的資訊,而有些原本Android系統輸出的日誌可直接拿來作行為檢測,就未作修改。日誌格式如下:
09-16 10:18:04.583 W/dalvikvm( 299): MalDroid: { "DexClassLoader": { "path": "/data/data/com.test/files/anserverb.db" } } 09-16 10:17:27.963 W/dalvikvm( 281): MalDroid: { "SendNet": { "desthost": "www.google.com", "destport": "80", "data": "7b2263656c6c5f746f77657273223a5b7b226d6f62696c655f6e6574776f726b5f636f6465223a32362c226c6f636174696f6e5f617265615f636f6465223a2d312c226d6f62696c655f636f756e7472795f636f6465223a3331302c2263656c6c5f6964223a2d317d5d2c22726571756573745f61646472657373223a747275652c22686f7374223a226d6170732e676f6f676c652e636f6d222c2276657273696f6e223a22312e312e30227d" } } 09-09 08:37:10.371 W/dalvikvm( 191): MalDroid: { "CryptoUsage": { "operation": "keyalgo", "key": "53, 52, 67, 68, 65, 48, 54, 51, 67, 68, 53, 56, 68, 56, 53, 70", "algorithm": "AES" } } 09-09 08:37:12.560 W/dalvikvm( 191): MalDroid: { "CryptoUsage": { "operation": "encryption", "algorithm": "AES/CBC/PKCS5Padding", "data": "ylmftg6" } } 09-17 20:17:14.302 W/dalvikvm( 274): MalDroid: { "ServiceStart": { "name": "com.android.md5.Settings" } } 09-17 20:24:24.944 W/dalvikvm( 126): MalDroid: { "FdAccess": { "path": "2f646174612f646174612f636f6d2e616e64726f69642e6c61756e636865722f66696c65732f6c61756e636865722e707265666572656e636573", "id": "588716465" } } 09-17 20:24:24.965 W/dalvikvm( 126): MalDroid: { "FileRW": { "operation": "read", "data": "0005", "id": "588716465" } }
生成日誌後,MalDroidAnalyzer會去分析日誌,生成統計圖資料,然後生成報告。下面是一些真實病毒樣本的惡意行為記錄:
1、竊取通訊錄:
2、通話錄音:
3、傳送收費簡訊:
4、動態載入類檔案:
5、Root提權:
四、真實案例
在Google Android官方市場上,曾出現過多起應用程式嵌入惡意程式碼的事件,比如“功夫病毒”,可進行root提權,並破壞檔案系統,同時竊取使用者隱私資訊,感染了上百萬使用者,危害甚廣。病毒作者通過對知名軟體進行修改,嵌入惡意程式碼然後重打包,然後誘騙使用者下載這些偽造軟體。除“功夫病毒”外,還有DroidDream、AnserverBot、PhoneSpy等惡意軟體。下面是MalDroidAnalyzer針對PhoneSpy病毒Gmail.apk給出的分析報告,該病毒會竊取使用者隱私資訊、通話錄音等惡意行為。由於該病毒無GUI介面,而是以後臺服務在執行,因此報告中的截圖是主頁介面:
五、總結
當前手機使用者量增長越來越快,尤其是中國,手機使用者量已超10億,即大約75%的中國人擁有自己的手機。正因為手機越來越智慧化,攜帶也方便,因此許多人將隱私資訊儲存在手機上,且在多處場景下無形地公開化,而這些資訊正是許多病毒作者所熱衷的。在移動終端上的安全也將比電腦終端越來越重要,移動安全也已成為安全領域的另一新戰場。
六、鳴謝
感謝Dflower同學(0day2作者之一)在筆者編寫MalDroidAnalyzer過程中給予的幫助。
七、參考資料