◆李旭東
?
Android短信木馬的模擬與監測研究
◆李旭東
(中國聯通山東省分公司網絡與信息安全部 山東 250002)
本文在闡述了Android系統架構的基礎上,基于Android SDK模擬實現了短信監聽木馬原型,為了為用戶提供有效的防護手段,又進一步針對外發短信等的實時監測提出了其具體實現,最后針對進一步研發的關鍵點進行了討論。
Android;木馬模擬與監測
360互聯網安全中心最新發布的《2016年中國互聯網報告》中稱:在截獲盜取個人信息的手機惡意程序樣本中,67.4%的樣本會竊取短信信息,34.8%的樣本會竊取手機銀行信息,10.0%的樣本會竊取手機聯系人信息,3.7%的樣本會竊取手機通話記錄[1]。網絡上有研究表明,2017年2月中國國內的手機操作系統份額比例,Android暴漲至86.4%[2]。由于Android系一開放的系統,因此大量的竊取和攔截短信的木馬程序產生于安裝有Android操作系統的手機上。因此深入研究Android短信木馬的實現,掌握核心技術,有針對性的研發出相應的短信收發監測系統是一項緊要的工作。本文首先闡述了Android系統架構,并在此基礎上描述了基于Android SDK實現短信木馬的技術,針對短信發送提出了短信實時監測的開發,最后作者針對后續的研發方向進行了討論。
Android系統架構可分為四層:操作系統層、各種庫和Android運行環境、應用程序框架層、應用系統。具體如下圖所示。

圖1 Android操作系統組件結構圖
內核層提供內存管理、進程調度設備驅動和文件系統,所有的設備資源如顯示、相機、Wifi、藍牙、音頻、鍵盤、Flash內存等通過內核層進行訪問[3],內核層以Linux2.6操作系統為基礎改造[4]。
各種庫和運行環境層相當于中間件,本層的內容大多是用C/C++實現的,包括了C庫、多媒體庫、SGL、SSL、OpenGL ES、界面管理工具、SQLite、WebKit、FreeType。Android運行環境主要是指Dalvik(虛擬機)技術。Dalvik不同于Java虛擬機,主要區別在于Java VM是基于棧的虛擬機,而Dalvik根據硬件實現進行了優化,是基于寄存器的,更適合于移動設備。
在應用程序框架層,Android為應用程序和開發都提供了各種功能的強大API,提供了程序中所需要的各種控件。
頂層應用程序主要是用戶界面,本層通常使用Java編寫,經過編譯后生成一個APK包,然后在手機安裝后使用。
基于短信監聽木馬模擬程序的研發,可以探索短信監聽木馬的實現機制,從而提出有針對性的反制措施,另外,也可以為下一步實施監聽系統的研發提供可控的模擬測試樣本。
一個Android應用通常由5個部分組成:Activity(活動)、Broadcast Intent Reveiver(廣播意圖接收者)、Service(服務)、Content Provider(內容提供者)、Intent and Intent Filter(意圖和意圖過濾器)。本文對短信的監聽需要用到Activity、Broadcast Intent Reveiver和Intent。程序中通常一個Activity對應一個單獨的界面,一般情況一下實時短信監聽的惡意木馬是不會在操作中提供界面的,而Broadcast是不需要提供界面的。我們這里只是為了模擬短信監聽木馬,為了演示和操作方便,因此提供了Activity。
首先需要在AndroidManifest注冊相應的短信權限。
然后重寫MainActivity中的init()。
mSMSBroadcastReceiver=new SMSBroadcastReceiver();
mSMSBroadcastReceiver.setOnReceivedMessageListener(new MessageListener(){}
可以實時監聽到所接收到的短信。
對監聽到的接收的短信內容可通過后臺發送到指定的手機或郵箱中,以后臺發送給指定手機為例如下:
SmsManager sms=SmsManager.getDefault();
Intent sentIntent=newIntent(SENT_SMS_ACTION);
PendingIntent sentPI=PendingIntent.getBroadcast(this,0,sentIntent,0);
sms.sendTextMessage(phoneNumber,null,message,sentPI,deliverPI);
用一測試手機向安裝有模擬程序手機發送測試短信,接收和顯示的短信如圖2所示:

圖2 短信系統和木馬模擬程序監聽的短信信息
針對短信監聽木馬,需要對手機外發的短信內容進行全面監測,可以及時發現和提醒用戶是否有惡意程序在對監聽到的短信通過短信等外發到某一指定手機上。以外發短信監測為例:
首先在AndroidManifest注冊相應的權限。
然后注冊相應的組件。
重寫BroadcastReceiver類中的onReceive()
Object [] pdus= (Object[]) intent.getExtras().get("pdus");
for(Object pdu:pdus){
SmsMessage smsMessage=SmsMessage.createFromPdu((byte[]) pdu);
String sender=smsMessage.getDisplayOriginatingAddress();
String content=smsMessage.getMessageBody();
long date=smsMessage.getTimestampMillis();
}
基于Android SDK中的BoxManager監測器開發的短信外發監測短信信息如圖3所示:

圖3 手機外發短信信息監測
在短信監測系統的研發過程中,我們發現Android原生的SDK方法中,沒法監測到哪個APP發送的短信,因此雖然我們能夠監測到手機通過SMS Manager外發的短信信息,但并不能夠挖掘出是哪個應用發出的短信,因此進一步的分析工作如:對比手機中注冊的合法權限用戶,找到外發的后臺惡意程序,就無法開展。針對這一問題,我們初步研究了實現方法,初步的思路是通過JNI層,采用hook系統關鍵API的方式,去監聽哪些程序調用了發送短信或者其他敏感API,然后結合特征碼或白名單等方式去判斷是否提示用戶或者直接放行。
目前在這一方面的研發有參考價值的是360公司于2104年12月份申請的發明專利:《移動終端及其設備管理器權限的攔截方法》,“本發明實施例提供了一種移動終端及其設備管理器權限的攔截方法,所述方法包括監聽到設備管理器權限的獲取請求后,攔截所述請求,并確定出發送所述請求的程序;確定出所述程序與安全識別庫所記載的惡意程序相匹配后,提示用戶有惡意程序嘗試獲取設備管理器權限;在接收到用戶輸入的禁止指令后,清除所述請求[5]。”
隨著智能手機的發展和應用,如何保護我們的手機信息的安全,對手機應用信息流的實時監測是一個重要的發展方向,本文在模擬短信監聽木馬的基礎上,研發了短信等的外發監測程序,但對這一工作的研究才剛剛起步,還需要一些關鍵技術的突破才能達到比較完善的效果。對本文內容感興趣的研發人員,也可以聯系作者,讓我們共同推進手機的安全防護工作。
[1]2016年中國互聯網安全報告.http://zt.360.cn.
[2]2017年2月手機市場份額.http://www.ithome.com/h tml/iphone/304298.htm.
[3]卿斯漢.Android安全研究進展.軟件學報,2016.
[4]劉云,朱桂英.Android系統安全和反編譯實戰.清化大學出版社,2015.
[5]移動終端及其設備管理器權限的攔截方法發明專利.http://www.google.com.