劉子煜 吳健學(xué)
摘要:隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,Android手機(jī)平臺(tái)內(nèi)越來(lái)越多的APP具有移動(dòng)支付功能。移動(dòng)支付涉及到金融交易,支付信息安全顯得尤為重要。本文分析了Android的Binder機(jī)制,通過(guò)將監(jiān)控代碼動(dòng)態(tài)注入目標(biāo)模塊,對(duì)進(jìn)程間的通信數(shù)據(jù)進(jìn)行提取,通過(guò)比對(duì)既有信息,分析是否有惡意軟件竊取目標(biāo)APP的用戶(hù)隱私信息。在支付環(huán)節(jié)之前將檢測(cè)結(jié)果對(duì)用戶(hù)給予提示,且對(duì)支付過(guò)程無(wú)較大影響,一定程度上保障了用戶(hù)支付信息的安全。
關(guān)鍵詞:Android系統(tǒng);Binder;動(dòng)態(tài)注入;信息提取
中圖分類(lèi)號(hào):TN918.9
文獻(xiàn)標(biāo)志碼:A
1 引 言
基于Android系統(tǒng)龐大的使用人群,各應(yīng)用公司開(kāi)發(fā)了各式各樣的APP為人們的生活提供了便利。但隨著Android應(yīng)用數(shù)量的急劇上升,應(yīng)用質(zhì)量參差不齊,惡意軟件嚴(yán)重威脅著終端用戶(hù)的財(cái)產(chǎn)和隱私安全,也制約著移動(dòng)終端應(yīng)用的進(jìn)一步發(fā)展[1][2]。根據(jù)360互聯(lián)網(wǎng)安全中心發(fā)布的《2016年安卓惡意軟件專(zhuān)題報(bào)告》,2016年全年,Android平臺(tái)新增惡意程序樣本1403.3萬(wàn)個(gè),平均每天新增3.8萬(wàn)惡意程序樣本。
隨著手機(jī)支付功能的普遍化,惡意代碼藏匿于普通應(yīng)用程序盜取用戶(hù)賬戶(hù)信息和密碼的現(xiàn)象時(shí)有發(fā)生,惡意程序威脅著正常的支付功能,泄露了用戶(hù)的敏感信息,對(duì)用戶(hù)直接或間接造成經(jīng)濟(jì)損失[3]。手機(jī)支付越來(lái)越受到人們重視,使用的場(chǎng)景越來(lái)越多,但手機(jī)安全卻阻礙其突破性發(fā)展。
目前應(yīng)用市場(chǎng)上存在手機(jī)管家,手機(jī)安全衛(wèi)士等安全應(yīng)用來(lái)管理和保護(hù)用戶(hù)的手機(jī),但安裝這些安全應(yīng)用會(huì)對(duì)手機(jī)產(chǎn)生一定的額外開(kāi)銷(xiāo),且針對(duì)特定APP中的敏感信息無(wú)法做到精準(zhǔn)的保護(hù)[4]。本文針對(duì)這一現(xiàn)象,為Android系統(tǒng)中涉及支付功能的應(yīng)用提出一種支付信息的保護(hù)方式,通過(guò)比對(duì)進(jìn)程間的通信數(shù)據(jù),找到獲取隱私信息的惡意APP,提醒用戶(hù)進(jìn)行處理,以此保障用戶(hù)的信息安全。
2 Binder通信機(jī)制
Android系統(tǒng)是由谷歌公司基于Linux內(nèi)核開(kāi)發(fā)的智能操作系統(tǒng),在Linux系統(tǒng)中,進(jìn)程間的通信機(jī)制有很多種,包括pipe(管道)通信,socket(套接字)通信,signal(信號(hào))通信這些傳統(tǒng)IPC(Inter Process Communication進(jìn)程間通信)。Android為每個(gè)APP分配了一個(gè)區(qū)分進(jìn)程身份的屬性-UID,傳統(tǒng)的IPC只能由用戶(hù)在數(shù)據(jù)包里填入U(xiǎn)ID/PID[5-6],但這樣容易被惡意程序所利用。由IPC機(jī)制在內(nèi)核中添加的屬性才是最可靠的。Binder的出現(xiàn)滿(mǎn)足了Android對(duì)通信方式,傳輸性能和安全性的要求,與其他進(jìn)程間通信方式相比,Binder通信機(jī)制更安全、簡(jiǎn)潔、高效、快速,消耗的內(nèi)存資源更少。
Binder通信是Android系統(tǒng)的基礎(chǔ)通信機(jī)制,轉(zhuǎn)發(fā)應(yīng)用之間的通信信息。Binder在完成本身轉(zhuǎn)發(fā)信息的功能之外,在底層拷貝應(yīng)用之間的通信信息,用戶(hù)在使用手機(jī)過(guò)程中并不會(huì)察覺(jué)到。Binder在Android的各個(gè)版本中很少變動(dòng),因此基于Binder機(jī)制的方案便于移植到Android的各版本,具有很好的兼容性,可實(shí)現(xiàn)更多種類(lèi)Android移動(dòng)終端的覆蓋。[7]
圖1表示了Binder基于Client-Server的通信模式,傳輸過(guò)程只需一次拷貝,為發(fā)送方添加UID/PID身份,既支持實(shí)名Binder也支持匿名Binder,安全性高。Binder的CS架構(gòu)由四大部分組成,分別是服務(wù)端、客戶(hù)端、服務(wù)管理器和內(nèi)核空間里的Binder驅(qū)動(dòng)[8]。
服務(wù)端Server提供服務(wù),一個(gè)或多個(gè)Client客戶(hù)端向服務(wù)發(fā)起請(qǐng)求,通信過(guò)程由Binder接口實(shí)現(xiàn),數(shù)據(jù)的交互與處理在Binder驅(qū)動(dòng)中完成。服務(wù)需在服務(wù)管理器Service Manager中進(jìn)行注冊(cè),Service Manager是Android系統(tǒng)中的守護(hù)進(jìn)程,負(fù)責(zé)監(jiān)聽(tīng)客戶(hù)端的請(qǐng)求。
3 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
3.1 整體設(shè)計(jì)方案
本方案設(shè)計(jì)的支付信息保護(hù)模塊依托于APP的支付功能,整體流程如圖2所示。
當(dāng)用戶(hù)生成訂單信息時(shí),支付信息保護(hù)模塊同時(shí)開(kāi)始工作,從生成敏感信息時(shí)開(kāi)始監(jiān)控信息的流向。當(dāng)用戶(hù)發(fā)起支付時(shí),客戶(hù)端首先調(diào)用APP后臺(tái)服務(wù)器接口,APP向后臺(tái)接口傳入等待付款的訂單號(hào),支付方式及一系列業(yè)務(wù)相關(guān)的參數(shù),服務(wù)器收到請(qǐng)求后返回JSON格式數(shù)據(jù)。若請(qǐng)求成功,JSON數(shù)據(jù)里包括服務(wù)器根據(jù)訂單號(hào)查詢(xún)到的商品信息,交易的標(biāo)題,訂單金額等等??蛻?hù)端收到成功的指令后,根據(jù)用戶(hù)選擇的支付方式準(zhǔn)備調(diào)用相應(yīng)的第三方支付平臺(tái)的接口。根據(jù)支付平臺(tái)的要求,需要傳入JSON格式數(shù)據(jù)里的敏感信息。
在敏感信息的流動(dòng)過(guò)程中,支付信息保護(hù)模塊同步檢測(cè)敏感信息是否被其他惡意應(yīng)用竊取,支付環(huán)境是否安全,將檢測(cè)結(jié)果在頁(yè)面予以顯示,告知用戶(hù)。支付信息保護(hù)模塊同步覆蓋支付的整個(gè)流程。
3.2 代碼注入
代碼注入是Linux系統(tǒng)提供的Ptrace系統(tǒng)調(diào)用,在目標(biāo)內(nèi)存空間進(jìn)行hook操作。Android的動(dòng)態(tài)鏈接器為L(zhǎng)inker[9],可以實(shí)現(xiàn)ELF格式鏈接庫(kù)的加載與鏈接。Ptrace使用PTRACE—ATTACH模式跟蹤正在運(yùn)行的進(jìn)程,使其變?yōu)榭煽刈舆M(jìn)程[10]。具體過(guò)程如下:
(1)調(diào)用Ptrace的PTRACE_ATTACH模式關(guān)聯(lián)到目標(biāo)進(jìn)程;
(2)獲取目標(biāo)進(jìn)程的子進(jìn)程、內(nèi)存及寄存器信息并保存;
(3)裝載指定的共享庫(kù),將代碼寫(xiě)入到目標(biāo)進(jìn)程上完成加載;
(4)將函數(shù)重定向,使用新函數(shù)。主要修改PLT表和GOT表;
(5)調(diào)用Ptrace的PTRACE_DETACH脫離目標(biāo)進(jìn)程。
當(dāng)客戶(hù)端生成訂單信息時(shí),系統(tǒng)同時(shí)調(diào)用支付信息保護(hù)模塊,首先將監(jiān)控代碼注入到對(duì)應(yīng)模塊。當(dāng)目標(biāo)進(jìn)程被動(dòng)態(tài)注入后,執(zhí)行ioctl函數(shù)(i/o通道控制函數(shù))時(shí)會(huì)跳到共享庫(kù)中對(duì)應(yīng)的重定向函數(shù)hooked_ioctl位置上執(zhí)行。利用欄截到的ioctl函數(shù)返回的數(shù)據(jù)對(duì)進(jìn)程間通信的數(shù)據(jù)進(jìn)行解析,從而提取出應(yīng)用程序在運(yùn)行時(shí)刻的行為參數(shù),可以進(jìn)行提前預(yù)判和管理。ioctl函數(shù)的調(diào)用方式為intioctl(int fd, int cmd, struct binder___ write_read*bwr),第一個(gè)參數(shù)是文件描述符;cmd是用戶(hù)程序?qū)υO(shè)備的控制命令,一般分為GET(從內(nèi)核讀數(shù)據(jù))、SET(向內(nèi)核寫(xiě)數(shù)據(jù))等命令;第三個(gè)參數(shù)為類(lèi)型為binder_write_read結(jié)構(gòu)的數(shù)據(jù)流指針。
由Binder通信機(jī)制,應(yīng)用程序使用服務(wù)時(shí)會(huì)優(yōu)先同Service Manager進(jìn)程通信來(lái)獲取相應(yīng)服務(wù)信息。Service Manager的Binder進(jìn)程間通信數(shù)據(jù)流采用結(jié)構(gòu)體binder_transaction_data表示,保存在結(jié)構(gòu)體binder_write_read中的write_buffer和read_buffer所指向的字節(jié)緩沖區(qū)域。在應(yīng)用同Service Manager進(jìn)行交互時(shí),Service Manager用read_buffer記錄應(yīng)用的IPC數(shù)據(jù)。所以接下來(lái)要通過(guò)結(jié)構(gòu)體binder_transaction_data來(lái)解析read_buffer中指向的緩沖區(qū)域的數(shù)據(jù)。
3.3 數(shù)據(jù)提取與比較
binder—transaction__ data包含成員變量target,target是一個(gè)聯(lián)合體,表示一個(gè)目標(biāo)Binder對(duì)象,Binder驅(qū)動(dòng)根據(jù)其中的handle找到應(yīng)該由哪個(gè)進(jìn)程處理該事件;code是一個(gè)命令,它描述了Binder對(duì)象執(zhí)行的操作,當(dāng)應(yīng)用程序需要ServiceManager來(lái)查詢(xún)相應(yīng)的服務(wù)時(shí),code為GET—SERVICE—TRANSACTION; sender _pid和sender euid為發(fā)起請(qǐng)求進(jìn)程的PID和UID,用于識(shí)別應(yīng)用的身份;data是一個(gè)聯(lián)合體,存放數(shù)據(jù),data_size表示數(shù)據(jù)的大小,其結(jié)構(gòu)體ptr中的buffer保存通信數(shù)據(jù)。下面的偽代碼用于提取buffer中的數(shù)據(jù)。
//定義數(shù)據(jù)包保存提取的數(shù)據(jù)
typedef struct Packet{
pid__t sender__ pid;
uid_t sender_euid;
charservice_name;
)packet;
char*ptr;
//遍歷read_buffer緩沖區(qū)存放進(jìn)一個(gè)移動(dòng)指針
for(i=O;1< READ_BUFFER_SIZE;i++){
ptr = read buffer\[i\];
//當(dāng)與協(xié)議值相同時(shí)移動(dòng)4字節(jié)
if(isMatch(*ptr, BR_TRANSACTION)){
ptr - ptr+1;
//當(dāng)應(yīng)用程序請(qǐng)求服務(wù)的對(duì)象是ServiceManager時(shí)移動(dòng)4字節(jié)
if(target.handle一一O){
ptr - ptr+1;
//當(dāng)參數(shù)滿(mǎn)足要求時(shí)移動(dòng)4字節(jié)
if(isMatch(*ptr,"android.os.IServiceMarrager")&&code一一GET_SERVICE_TRANS-ACTION)f
ptr=ptr+1;
//若為有效字符串,更新packet成員
if(isValid(*ptr)){
update( packet);)
)
)
)
)
解析完參數(shù)信息后,創(chuàng)建一個(gè)子線(xiàn)程將數(shù)據(jù)通過(guò)UNIX套接字的方式傳入上層。首先填寫(xiě)地址創(chuàng)建socket,socket監(jiān)聽(tīng)是否有連接,packet更新后被發(fā)送到socket接收端。
將數(shù)據(jù)傳到客戶(hù)端應(yīng)用層,編碼循環(huán)遍歷敏感數(shù)據(jù)。檢測(cè)提取的通信數(shù)據(jù)是否包含敏感支付信息。本次實(shí)驗(yàn)的敏感數(shù)據(jù)包括手機(jī)號(hào),手機(jī)MAC地址,IMEI號(hào),支付接口傳輸?shù)挠脩?hù)名,訂單號(hào),支付賬號(hào)等等。
4 應(yīng)用測(cè)試
在Ubuntu操作系統(tǒng)中安裝配置Android集成開(kāi)發(fā)工具Android Studio,在工具中新建一個(gè)購(gòu)物應(yīng)用,然后按照第三方支付平臺(tái)的要求集成APP支付功能。此時(shí)通過(guò)開(kāi)發(fā)工具打包生成不含支付信息保護(hù)模塊的基本應(yīng)用TEST BASE.apk。
在基本應(yīng)用的基礎(chǔ)上,動(dòng)態(tài)注入由監(jiān)控代碼生成的庫(kù)文件,再次打包生成含支付信息保護(hù)模塊TEST_BONUS.apk。
測(cè)試時(shí)將Android模擬器和兩部手機(jī)作為測(cè)試平臺(tái)。
在測(cè)試平臺(tái)上安裝TEST_BONUS.apk,作為待測(cè)試APP,同時(shí)安裝三個(gè)有已知惡意行為的APP和三個(gè)健康的APP。在測(cè)試APP中模擬購(gòu)物,生成訂單,發(fā)起支付。支付信息保護(hù)模塊對(duì)用戶(hù)的提示信息如圖3所示。
綜合測(cè)試結(jié)果如表1所示,“√”表示在十輪模擬支付環(huán)節(jié)中,支付信息保護(hù)模塊成功檢測(cè)出對(duì)應(yīng)的惡意程序。
同時(shí)為了測(cè)試敏感信息提取和比對(duì)過(guò)程對(duì)用戶(hù)的影響,我們?cè)谙嗤沫h(huán)境分別安裝TEST—BASE.apk和TEST _BONUS. apk做對(duì)比實(shí)驗(yàn)。表1中額外耗時(shí)即為加入支付保障模塊后,信息的提取與檢測(cè)對(duì)用戶(hù)操作的平均影響時(shí)間。
5 結(jié) 論
針對(duì)Android手機(jī)支付時(shí)容易被盜取個(gè)人信息的情況,對(duì)Android的Binder機(jī)制進(jìn)行研究,實(shí)現(xiàn)了一個(gè)Android進(jìn)程間通信數(shù)據(jù)提取分析的方法。通過(guò)對(duì)目標(biāo)進(jìn)程注入代碼,分析提取應(yīng)用程序間通信的數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行分析匹配,當(dāng)敏感數(shù)據(jù)有泄露的危險(xiǎn)時(shí),給予用戶(hù)提示,保障支付信息安全。此信息保護(hù)模塊內(nèi)置于APP中,對(duì)特定的支付信息予以保護(hù)。相比額外安裝手機(jī)管家更便捷。實(shí)驗(yàn)結(jié)果表示,該方案在一定程度上保證了用戶(hù)支付信息的安全,對(duì)支付過(guò)程無(wú)較大影響,有很強(qiáng)的應(yīng)用前景。
參考文獻(xiàn)
[1] JIMENEZ L M,OCHOA M,RUEDA S J.Jif-based Verifica-tion of Information Flow Policies for Android Apps [J].International Journal of Secure Software Engineering (IJSSE),2017,8(1):28-42.
[2] 吳丹,惡意程序威脅互聯(lián)網(wǎng)安全手機(jī)“植毒”已現(xiàn)利益鏈[Nl.信息通報(bào),2017-04-26(B06).
[3] GU J, XU Y,XU H, et al.Privacy concerns for mobile appdownload: An elaboration likelihood model perspective[Jl.Decision Support Systems, 2016,94:19-28.
[4]焦丹丹,張曉東,李大尉,等,基于安卓的手機(jī)安全衛(wèi)士[J].黑龍江科學(xué),2016,7(14):4-5.
[5]張俊浩.Android智能支付終端安全機(jī)制的研究與實(shí)現(xiàn)[D].南京:東南大學(xué),2015.
[6]張晶,針對(duì)Android的惡意代碼檢測(cè)方案設(shè)計(jì)與實(shí)現(xiàn)[D].貴陽(yáng):貴州大學(xué),2016.
[7] 曾寰.Android平臺(tái)的惡意程序檢測(cè)研究[D].成都:電子科技大學(xué),2016.
[8]甄鑫,基于Binder的Android用戶(hù)隱私數(shù)據(jù)安全增強(qiáng)技術(shù)實(shí)現(xiàn)[D].南京:東南大學(xué),2015.
[9]王濤.移動(dòng)辦公智能終端環(huán)境安全研究[D].南京:東南大學(xué),2014.
[10] 溫圣召,基于Android平臺(tái)的軟件保護(hù)技術(shù)研究[D].北京: 北京郵電大學(xué),2014.