李煥
(福州匯思博信息技術(shù)有限公司,福建廈門,361000)
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),ADB的全稱為Android Debug Bridge,就是起到調(diào)試橋的作用。
ADB本身是Android設(shè)備開發(fā)時的調(diào)試工具,但是也可以用來作為管理工具?;旧习俣戎?、360手機助手、QQ手機助手對手機的管理功能都是通過ADB來實現(xiàn)。ADB的管理功能需要手機打開調(diào)試選項,這為手機管理提供了方便,同時也造成了安全隱患。
當我們打開設(shè)備的調(diào)試選項,并使用USB線將設(shè)備連接到PC時,不僅僅是手機管理工具可以控制設(shè)備,只要調(diào)用ADB命令,任何PC端的程序都可以訪問手機內(nèi)容,那么設(shè)備連接到PC后就是在“裸奔",設(shè)備中的所有信息都可以被PC端抓取。
由于ADB功能的強大,一些Android設(shè)備廠商考慮到安全等因素,他們不希望將此功能輕易開放給用戶使用,但是自己又很需要此功能,所以如果需要保護設(shè)備上的私密信息,那么最好謹慎控制用戶ADB的訪問權(quán)限。
Android ADB(Android Debug Bridge)是一種多功能的命令行工具,可讓用戶與設(shè)備通信。ADB命令可用于執(zhí)行各種設(shè)備操作(如安裝和調(diào)試應用),并提供Unix shell(可用來在設(shè)備上運行各種命令)的訪問權(quán)限,是一種客戶端-服務器程序。圖1為ADB的應用結(jié)構(gòu)。
圖1 ADB的應用結(jié)構(gòu)。
(1)我們在PC端使用過adb命令,則會在當前用戶目錄生成一對密鑰,密鑰存放在.android目錄,其中adbkey為私鑰,adbkey.pub為公鑰,通常默認只有一組。
(2)PC adb會把公鑰(adbkey.pub)發(fā)送給android設(shè)備來獲取認證,建立adb連接。
(3)android 會根據(jù)屬性ro.adb.secure來判斷,是否進行認證,如果為0,則不需要認證,允許建立adb連接。如果為1,則需要進行密鑰認證。
(4)如果需要進行adb密鑰認證,則把接收到的adbkey.pub與本地的/data/misc/adb/adb_keys進行對比,如果相同,則表明是允許此設(shè)備進行adb連接,如果不相同,則彈出對話框,提示用戶是否允許信任usb調(diào)試。
Client為Android設(shè)備端服務,Host為PC客戶端應用,交互過程如圖2。
圖2 交互過程
(1)Client向Host發(fā)送AUTH_TOKEN報文,包含源自/dev/urandom的20字節(jié)的隨機token。
(2)Host用自己的私鑰對該隨機token進行簽名(SHA1+RSA),放在發(fā)往Client的AUTH_SIGNATURE報文中。
(3)Client通過已有的adb_keys公鑰檢查簽名,如果正確,響應以CONNECT報文,否則向Host發(fā)送新的AUTH_TOKEN報文,提供新的隨機token。
(4)Host接收到新的AUTH_TOKEN,嘗試用另外一組公私鑰對對該隨機token進行簽名,放在發(fā)往Client的AUTH_SIGNATURE報文中。
(5)如果Host已經(jīng)嘗試完所有公私鑰對,則向Client發(fā)送AUTH_ RSAPUBLICKEY報文,包含一個Host公鑰。Client將Host公鑰發(fā)往framework,后者彈出信息框,詢問是否允許(或永久允許)使用USB調(diào)試接口,該信息框中一般會顯示Host公鑰的指紋(MD5),而不是Host公鑰本身,公鑰保存在/data/misc/adb/adb_keys中。
當最終授權(quán)通過時,Client和Host就能成功建立連接。當服務端和客戶端建立連接之后,就可以使用adb命令來控制或者訪問了,用戶可以通過ADB指令對設(shè)備進行特定的操作,包括adb shell查看設(shè)備信息、logcat、reboot、backup指令等。
ADB本身是Android設(shè)備的調(diào)試工具,同時也可以作為管理工具,當設(shè)備打開調(diào)試選項即可用來管理設(shè)備,同時也造成了安全隱患。
(1)與PC建立連接過于簡易,用戶可輕松完成設(shè)備連接管理。用戶僅需設(shè)備打開調(diào)試選項,ADB工具就可以實現(xiàn)查看手機內(nèi)容、向手機寫入文件、給手機安裝軟件等功能,這些都不需要root權(quán)限。
(2)指令執(zhí)行風險。adb具有豐富的系統(tǒng)權(quán)限以backup/restore為例,Android應用屬性allowBackup安全風險源于adb backup容許任何一個能夠打開USB 調(diào)試開關(guān)的人從Android手機中復制應用數(shù)據(jù)到外設(shè),一旦應用數(shù)據(jù)被備份之后,所有應用數(shù)據(jù)都可被用戶讀?。籥db restore容許用戶指定一個恢復的數(shù)據(jù)來源(即備份的應用數(shù)據(jù))來恢復應用程序數(shù)據(jù)的創(chuàng)建。因此,當一個應用數(shù)據(jù)被備份之后,用戶即可在其他Android手機或模擬器上安裝同一個應用,以及通過恢復該備份的應用數(shù)據(jù)到該設(shè)備上,在該設(shè)備上打開該應用即可恢復到被備份的應用程序的狀態(tài)。
由上了解了ADB的使用過程后,可知,當Android設(shè)備接入PC時,若PC端程序使用adb命令連接Android設(shè)備,則Android端會彈出授權(quán)窗口,提示PC程序正在嘗試連接Android設(shè)備,若用戶選擇始終允許這臺計算機連接Android設(shè)備,則意味著PC中的任何軟件(包括惡意軟件)都可通過adb命令連接到Android設(shè)備,并通過adb協(xié)議提供的接口訪問Android設(shè)備中的數(shù)據(jù),廠商設(shè)備的一些私密信息可能會被讀取,導致信息泄露的風險。因此加強ADB權(quán)限的授權(quán)管控,使得ADB的使用狀態(tài)能夠被廠家所掌控便成為了一種必不可少的措施。如圖3,提供一種網(wǎng)絡+秘鑰的授權(quán)方式對ADB使用進行控制。
圖3 一種網(wǎng)絡+秘鑰的授權(quán)方式對ADB使用進行控制
(1)Client端收到AUTH_RSAPUBLICKEY通訊指令時,不再是彈出信任請求提示并保存公鑰,而是再次發(fā)起一個認證請求AUTH_TOKEN,內(nèi)容不僅僅是上面提到的/dev/urandom生成的隨機數(shù),還會攜帶一個額外的經(jīng)過預置公鑰加密的參數(shù)信息extra_info用于收集終端設(shè)備信息(版本號、SN等)。
(2)Host端收到AUTH_TOKEN指令后,發(fā)現(xiàn)extra_info數(shù)據(jù),收集Host端授權(quán)賬號信息(賬號、密碼、MAC地址等),通過聯(lián)網(wǎng)將賬號信息以及extra_info上送授權(quán)服務器,服務器檢查賬戶信息,并解密extra_info信息進行設(shè)備識別,將加密后的授權(quán)結(jié)果數(shù)據(jù)發(fā)送給Host端并放在發(fā)往Client的AUTH_SIGNATURE報文中。
其中賬號信息有以下2種方式獲?。?/p>
從廠商內(nèi)部人員的Ukey設(shè)備獲取;
非廠商人員通過廠商渠道申請臨時賬號密碼,放置在PC指定目錄。
(3)Clint端接收到AUTH_SIGNATURE報文中數(shù)據(jù),本地做解密認證授權(quán)結(jié)果,根據(jù)結(jié)果開放ADB相對應的功能。
如上在原生的認證流程上,對于ADB的授權(quán)采用聯(lián)網(wǎng)+秘鑰的方式,不但可以根據(jù)不同需求人群進行權(quán)限管控,同時可以獲取每臺設(shè)備的狀態(tài),這樣就可以使得ADB的使用得到有效的管理,從而有效禁止非法程序訪問Android設(shè)備端的文件數(shù)據(jù),提高了Android設(shè)備端數(shù)據(jù)的安全性。
ADB常用指令如表1。
表1 ADB 常用指令
表2 指令
如上,針對不同的指令不同的作用,可以對指令做適當?shù)膬?yōu)化或者直接屏蔽指令的方式來限制指令的使用。
Android 的內(nèi)核本身就是Linux,所以Android本身也支持Linux指令,通過adb shell指令,可以是用戶已shell的身份對Android設(shè)備進行訪問,因此對shell的使用管控顯得格外重要。對于安全保密性要求較高的Android設(shè)備,在版本發(fā)放時建議以屏蔽shell指令或者根據(jù)使用者身份賦予shell指令使用權(quán)限會更加可靠與安全。
借助ADB工具, 我們可以管理Android設(shè)備的狀態(tài),還可以進行很多控制操作,比如安裝軟件,系統(tǒng)升級,運行shell命令等等, 其實簡而言之,ADB就是連接Android手機與PC端的橋梁,可以讓用戶在電腦上對設(shè)備進行全面的操作。ADB為用戶設(shè)備的管理帶來方便的同時也帶來許多潛在的安全風險。對于廠商和用戶,如何平衡廠商和用戶的ADB功能使用,又能滿足各自的使用需求顯得格外的重要。本文闡述了Android ADB的框架和一些針對安全訪問的策略機制,探討ADB定制上的可能性和安全性,希望能為廣大Android工作者和愛好者提供有效的幫助。