新聞中心
一、Android安全問題產(chǎn)生的根源
【專稿】研究人員已發(fā)現(xiàn)Android上的流行軟件普遍存在安全陷阱與安全漏洞,漏洞頻發(fā)的原因可能有很多,主要有如下幾種:

成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元任縣做網(wǎng)站,已為上家服務(wù),為任縣各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
- 與一切都是集中管理的IOS相比,Android提供了一種開放的環(huán)境,在獲得了靈活性、可以滿足各種定制需求的同時,也損失了部分安全性。
- 開發(fā)團隊通常將精力集中在產(chǎn)品設(shè)計、功能實現(xiàn)、用戶體驗和系統(tǒng)等方面,而很少考慮安全問題
- Android提供的安全機制比較復(fù)雜,開發(fā)者需要理解它們,并對相應(yīng)的攻擊思路和攻擊方法有所了解,才能有效地保護軟件。
- 一方面,目前很少出現(xiàn)對特定移動軟件安全漏洞的大規(guī)模針對性攻擊,在真實的攻擊出現(xiàn)之前,許多人對此并不重視,另一方面,利用這些漏洞展開攻擊并不太難,許多攻擊方法和工具都已經(jīng)成熟,一旦出現(xiàn)這種攻擊,用戶的個人隱私數(shù)據(jù)可能發(fā)生泄漏,賬戶信息可能被收集,如果與釣魚等攻擊結(jié)合,甚至可能產(chǎn)生經(jīng)濟損失。產(chǎn)品開始團隊則可能由此面臨信任危機和法律風(fēng)險。
下面簡單的例舉幾個不注重安全的現(xiàn)象,這些也是我們Android開發(fā)團隊容易忽略的地方。
二、數(shù)據(jù)存儲安全問題
Android軟件可以使用的存儲區(qū)域分外部(SD卡)和內(nèi)部(NAND閃存)二種,除了大小和位置不同之外,兩者在安全權(quán)限上也有很大的區(qū)別。外部存儲的文件沒有讀寫權(quán)限的管理,所有應(yīng)用軟件都可以隨意創(chuàng)建、讀取、修改、刪除位于外部存儲中的任何文件,而Android的應(yīng)用則只需要申明READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE權(quán)限。
內(nèi)部存儲則為每個軟件分配了私有區(qū)域,并有基本Linux的文件權(quán)限控制,其中每個文件的所有者ID均為該軟件設(shè)立的一個用戶ID,其他軟件無權(quán)讀寫這些文件。
關(guān)于數(shù)據(jù)存儲可能出現(xiàn)的問題包括如下幾點:
將隱私數(shù)據(jù)明文保存在外部存儲
例如,聊天軟件或社交軟件將聊天記錄、好友信息、社交信息等存儲在SD卡上;備份軟件將通信錄、短信等備份到SD卡上等,如果這些數(shù)據(jù)是直接明文保存(包括文本格式、XML格式、SQLite數(shù)據(jù)庫格式等)的,那么攻擊者寫的軟件可以將其讀取出來,并加傳到指定的服務(wù)器,造成隱私信息泄露。較好的做法是對這些數(shù)據(jù)進行加密,密碼保存在內(nèi)部存儲,由系統(tǒng)托管或者由用戶使用時輸入。
將系統(tǒng)數(shù)據(jù)明文保存在外部存儲
例如,備份軟件和系統(tǒng)輔助將用戶數(shù)據(jù)備份到安裝的其他的SD卡,以便刷機或升級后進行恢復(fù)等;或者將一些系統(tǒng)數(shù)據(jù)緩存在SD卡上供后續(xù)使用,同樣的,這些數(shù)據(jù)是明文保存的,惡意軟件可以讀取它們,有可能用于展開進一步的攻擊。
將軟件運行時依賴的數(shù)據(jù)保存在外部存儲
如果軟件將配置文件存儲在SD卡上,然后在運行期間讀取這些配置文件,并其中的數(shù)據(jù)決定如何工作,也可能產(chǎn)生問題。攻擊者編寫的軟件可以修改這些配置文件,從而控制這些軟件的運行。例如將登錄使用的服務(wù)器列表存儲在SD卡中,修改后,登錄連接就會被發(fā)往攻擊者指定的服務(wù)器,可能導(dǎo)致賬戶泄露或會話劫持(中間人攻擊)。
對這種配置文件,較安全的方法是保存到內(nèi)部存儲;如果必須存儲到SD卡,則應(yīng)該在每次使用前檢驗它是否被篡改,與預(yù)先保存在內(nèi)部的文件哈希值進行比較。
將軟件安裝包或者二進制代碼保存在外部存儲
現(xiàn)在很多軟件都推薦用戶下載并安裝其他軟件;用戶點擊后,會聯(lián)網(wǎng)下載另一個軟件的APK文件,保存到SD卡然后安裝。
也有一些軟件為了實現(xiàn)功能擴展,選擇動態(tài)加載并執(zhí)行二進制代碼。例如,下載包含了擴展功能的DEX文件或JRA文件,保存到SD卡,然后在軟件運行時,使用dalvik.system.DexClassLoader類或者java.lang.ClassLoader類加載這些文件,再通過Java反射,執(zhí)行其中的代碼。
如果安裝或者加載前,軟件沒有對SD卡 的文件進行完整性驗證,判斷其是否可能被篡改和偽造,就可能出現(xiàn)安全問題。
在這里,攻擊者可以使用稱為“重打包”(re-packaging)的方法,目前大量Android惡意代碼已經(jīng)采用這一技術(shù),重打包的基本原理是,將APK文件反匯編,得到 Dalivik指令的smali語法表示 ;然后在其中添加、修改、刪除等一些指令序列,并適當(dāng)改動Manifest文件;最后,將這些指令重新匯編并打包成新的APK文件,再次簽名,就可以給其他手機安裝了,通過重打包,攻擊者可以加入惡意代碼、改變數(shù)據(jù)或指令,而軟件原有功能和界面基本不會受到影響,用戶難以察覺。
如果攻擊者對軟件要安裝的APK文件或要加載DEX、JAR文件重打包,植入惡意代碼,或修改其代碼;然后在SD卡上,用其替換原來的文件,或者拷貝到要執(zhí)行或加載 的路徑,當(dāng)軟件沒有驗證這些文件的有效性時,就會運行攻擊者的代碼攻擊。結(jié)果有很多可能,例如直接發(fā)送扣費短信,或者將用戶輸入的賬戶密碼發(fā)送給指定的服務(wù)器,或者彈出釣魚界面等。
因此,軟件應(yīng)該在安裝或加載位于SD卡的任何文件之前,對其完整性做驗證,判斷其與實現(xiàn)保存在內(nèi)部存儲中的(或從服務(wù)器下載來的)哈希值是否一致。
全局可讀寫的內(nèi)部文件
如果開發(fā)者使用openFileOutPut(String name,int mode)方法創(chuàng)建內(nèi)部文件時,將第二個參數(shù)設(shè)置為Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,就會讓這個文件變?yōu)槿挚勺x或全局可寫的。
開發(fā)者這樣做是為了實現(xiàn)不同軟件之間的數(shù)據(jù)共享,但這種問題在于無法控制哪個軟件可以讀寫,所以攻擊者的惡意軟件也擁有這一權(quán)限。
如果要跨應(yīng)用有種較好的方法是實現(xiàn)一個Content Provider 組件,提供數(shù)據(jù)的讀寫接口并為讀寫操作分別設(shè)置一個自定義的權(quán)限。
內(nèi)部敏感文件被root權(quán)限軟件讀寫
如果攻擊者的軟件已獲得root權(quán)限,自然可以隨意讀寫其他軟件的內(nèi)部文件,這種情況 并不少見。
1)大量的第三方定制ROM提供了root 權(quán)限管理工具,如果攻擊者構(gòu)造的軟件偽造成一些功能強大的工具??梢云垓_用戶授予它root權(quán)限。
2)即便手機預(yù)裝的官方系統(tǒng),國內(nèi)用戶也大多樂于解鎖,即recovery并刷入toot管理工具。
3)在Android2.2和2.3中,存在一些可用于獲取root權(quán)限的漏洞,并且對這種漏洞的利用不需要用戶的確認(rèn)。
4)因此,我們并不能假設(shè)其他軟件無法獲取root權(quán)限。即使是存在內(nèi)部數(shù)據(jù),依然有被讀取或修改的可能。
5)前面提到,重要、敏感、隱私的數(shù)據(jù)應(yīng)使用內(nèi)部存儲,現(xiàn)在又遇到root后這些數(shù)據(jù)依然可能被讀取的問題。我對這個問題的觀點是,如果攻擊者鋌而走險獲取root權(quán)限(被用戶或者被安全軟件發(fā)現(xiàn)的風(fēng)險),那理論上他已經(jīng)擁有了系統(tǒng)的完整控制權(quán),可以直接獲得聯(lián)系人信息、短信記錄等,甚至賬戶密碼、會話憑證、賬戶數(shù)據(jù)等。例如,早期Google錢包將用戶的信用卡數(shù)據(jù)明文存儲,攻擊者獲取這些數(shù)據(jù)后,可以偽裝成持卡人進行進一步攻擊以獲得賬戶使用權(quán)。這種數(shù)據(jù)就是“其他軟件管理的重要數(shù)據(jù)”。
6)這個問題并沒有通用的解決方法,開發(fā)者可能需要根據(jù)實際情況尋找方案,并在可用性與安全性之前做出恰當(dāng)?shù)倪x擇。
#p#
三、網(wǎng)絡(luò)通信安全問題
Android軟件通常使用WIFI網(wǎng)絡(luò)與服務(wù)器進行通信。WiFi并非總是可靠的,例如,開放式網(wǎng)絡(luò)或弱加密網(wǎng)絡(luò)中,接入者可以監(jiān)聽網(wǎng)絡(luò)流量;攻擊者可能 自己設(shè)置WIFI網(wǎng)絡(luò)釣魚。此外,在獲得root權(quán)限后,還可以在Android系統(tǒng)中監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)。
不加密地明文傳輸敏感數(shù)據(jù)
最危險的是直接使用HTTP協(xié)議登錄賬戶或交換數(shù)據(jù)。例如,攻擊者在自己設(shè)置的釣魚網(wǎng)絡(luò)中配置DNS服務(wù)器,將軟件要連接的服務(wù)器域名解析至攻擊者的另一臺服務(wù)器在,這臺服務(wù)器就可以獲得用戶登錄信息,或者充當(dāng)客戶端與原服務(wù)器的中間人,轉(zhuǎn)發(fā)雙方數(shù)據(jù)。
早期,國外一些著名社交網(wǎng)站的Android客戶端的登錄會話沒有加密,后來出現(xiàn)了黑客工具FaceNiff,專門嗅探這些會話并進行劫持(它甚至支持在WEP、WPA、WPA2加密的WIFI網(wǎng)絡(luò)上展開攻擊),這 是目前我所知的唯一一個公開攻擊移動軟件漏洞的案例。
這類問題的解決方法很顯然-----對敏感數(shù)據(jù)采用基于SSL/TLS的HTTPS進行傳輸。
SSL通信不檢查證書有效性
在SSL/TLS通信中,客戶端通過數(shù)字證書判斷服務(wù)器是否可信,并采用證書的公鑰與服務(wù)器進行加密通信。
然而,在開發(fā)者在代碼中不檢查服務(wù)器證書的有效性,或選擇接受所有的證書時,例如,開發(fā)者可以自己實現(xiàn)一個X509TrustManager接口,將其中的CheckServerTrusted()方法實現(xiàn)為空,即不檢查服務(wù)器是否可信或者在SSLSoketFactory的實例中,通過setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIET),接受所有證書。做出這種選擇的可能原因是,使用了自己生成了證書,客戶端發(fā)現(xiàn)證書沒有和可信CA 形成信任鏈,出現(xiàn) 了CertificateException等異常。
這種做法可能導(dǎo)致的問題是中間人攻擊。
在釣魚Wifi網(wǎng)絡(luò)中,同樣地,攻擊者可以通過設(shè)置DNS服務(wù)器使客戶端與指定的服務(wù)器進行通信。攻擊者在服務(wù)器上部署另一個證書,在會話建立階段,客戶端會收到這張證書,如果客戶端忽略這個證書上的異常,或者接受這個證書,就會成功建立會話、開始加密通信。但攻擊者擁有私鑰,因此可以解密得到客戶端發(fā)來數(shù)據(jù)的明文。攻擊者還可以模擬客戶端,與真正的服務(wù)器聯(lián)系,充當(dāng)中間人做監(jiān)聽。
解決問題的一種方法是從可信CA申請一個證書。但在移動軟件開發(fā)中,不推薦這種方法。除了申請證書的時間成本和經(jīng)濟成本外,這種驗證只判斷了證書是否CA可信的,并沒有驗證服務(wù)器本身是否可信,例如,攻擊者可以盜用其他可信證書,或者盜取CA私鑰為自己頒發(fā)虛假證書,這樣的攻擊事件在過去二年已經(jīng)有多次出現(xiàn)。
事實上,在移動軟件大多只和固定的服務(wù)器通信,因此可以在代碼更精確地直接驗證是否某張?zhí)囟ǖ淖C書,這種方法稱為“證書鎖定”(certificate pinning)。實現(xiàn)證書的方法有二種:一種是前文提到的實現(xiàn)X509TrustManager接口,另一種則是使用keystore。具體可以參考Android開發(fā)文檔中的HttpsURLConnection類的概述。
使用短信注冊賬戶或接收密碼
也有軟件使用短信進行通信,例如自動發(fā)送短信來注冊、用短信接收初始密碼、用短信接收用戶重置密碼等。
短信并不是一種安全的通信方式。惡意軟件只要申明了SEND_SMS 、RECEIVE_SMS和READ_SMS這些權(quán)限,就可以通過系統(tǒng)提供的API向任意號碼發(fā)送任意短信、接收指定號碼發(fā)來的短信并讀取其內(nèi)容,甚至攔截短信。這些方法 已在Android惡意代碼中普遍使用,甚至2011年就已經(jīng)出現(xiàn)攔截并回傳短信中的網(wǎng)銀驗證碼(mTANs)的盜號木馬Zitmo。
因此,這種通過短信注冊或接收密碼的方法,可能引起假冒注冊、惡意密碼重置、密碼竊取等攻擊,此外,這種與手機號關(guān)聯(lián)的賬戶還可能產(chǎn)生增值服務(wù)、危險更大。較好的實現(xiàn)方式還是走Intent。
#p#
三、不安全的密碼和認(rèn)證策略
明文存儲和編碼存儲密碼
許多軟件有“記住密碼”的功能。如果開發(fā)者依字面含義將密碼存儲在本地,可能導(dǎo)致泄漏。
另外,有的軟件不是直接保存密碼,而是和Base64、固定字節(jié)或字符串異或、ProtoBuf等方法對密碼然后存儲在本地,這些編碼也不會增加密碼的安全性,采用 smali、dex2jar、jd-gui、IDA Pro等工具,攻擊者可以對Android軟件進行反匯編和反編譯。攻擊者可以借此了解軟件對密碼的編碼方法和編碼參數(shù)。
較好的做法是,使用基于憑據(jù)而不是密碼的協(xié)議滿足這種資源持久訪問的需求,例如OAuth。
對外服務(wù)器的弱密碼或固定密碼
另一種曾引起關(guān)注的問題是,部分軟件向外提供網(wǎng)絡(luò)服務(wù),而不使用密碼或使用固定密碼,例如,系統(tǒng)輔助軟件經(jīng)常在WiFi下開啟FTP服務(wù),部分軟件對這個FTP服務(wù)不用密碼或者用固定密碼。在開放或釣魚的WiFi網(wǎng)絡(luò)下,攻擊者也可以掃描到這個服務(wù)并直接訪問。
還有弱密碼的問題,例如,早期Google錢包的本地訪問密碼是4位數(shù)字,這個密碼的SHA256值 被存儲在內(nèi)部存儲中,4位數(shù)字一共只有10000種情況,這樣攻擊軟件即使是在手機上直接暴力破解,都可以在短時間內(nèi)獲得密碼。
使用IMEI或IMSI作為唯一認(rèn)證憑據(jù)
IMEI、IMSI是用于標(biāo)識手機設(shè)備、手機卡的唯一編號。如果使用IMSI或IMEI作為用戶的唯一憑據(jù),可能導(dǎo)致假冒用戶的攻擊。
首先,應(yīng)用要獲取手機IMEI、手機卡的IMSI不需要特殊權(quán)限。事實上許多第三方廣告會回傳它們用于用戶統(tǒng)計。其次得到IMEI或IMSI后,攻擊者有多種方法偽造成用戶與服務(wù)器進行通信。例如,將原軟件重打包,使其中獲取IMEI、IMSI的代碼始終返回指定的值;或者修改Android代碼,使相關(guān)API始終返回指定的值,編譯為ROM在模擬器中運行;甚至可以分析客戶端與服務(wù)器的通信協(xié)議,直接模擬客戶端的網(wǎng)絡(luò)行為。
因此,若使用IMEI或IMSI作為認(rèn)證唯一憑據(jù),攻擊者可能獲得服務(wù)器原用戶賬戶及數(shù)據(jù)。
#p#
四、一些供參考的安全機制
除了上文中講述的一些安全問題,采用相應(yīng)的安全配置手段進行安全加固外。用戶在使用Android平臺的時候,還可以采用如下的一些安全機制。
使用Android 智能型手機內(nèi)建的安全功能
讓智能型手機保持安全最有效的方法就是正確的設(shè)定位置與安全性??梢栽凇何恢门c安全性』選項內(nèi)設(shè)定。設(shè)定智能型手機的PIN 碼或密碼鎖定功能也是個好方法。雖然需要輸入密碼才能從待機中回復(fù)使用似乎有點浪費時間。但是在手機不慎遺失時,這可以幫你保持資料安全。
如果這還不夠,你也可以選擇使用指紋鎖定功能。這可能是最好的辦法,因為它能確保你是唯一可以使用你智能型手機內(nèi)資料的人。提醒大家記住,使用上述這些安全設(shè)定總是比沒有來的好。有了密碼,畢竟就有了一道鎖來防止犯罪分子存取你的資料。
停用WiFi自動連接
除了正確地設(shè)定Android 智能型手機的『位置與安全性』選項,停用自動連接無線網(wǎng)絡(luò)也有幫助,盡管它的確是挺方便的功能。
免費的無線網(wǎng)絡(luò)總是有一些安全上的疑慮。連上一個開放網(wǎng)絡(luò)可能簡單、方便又免費,但這樣做是有風(fēng)險的。自動連接開放的無線網(wǎng)絡(luò)就等于開放大門給幾乎所有人。你的智能型手機跟無線路由器或AP 之間的數(shù)據(jù)可以自由的傳輸。因此,就算你可能并不希望,但任何在同一網(wǎng)絡(luò)上的人都可以看到。
個人電腦使用者所面對的威脅,Android 智能型手機的使用者也同樣可能會遇到。就像是透過自動連接無線網(wǎng)絡(luò)所帶來的風(fēng)險,特別是那些沒有安全設(shè)定的網(wǎng)絡(luò)。停用自動連接無線網(wǎng)絡(luò)選項也是另一個保持手機遠(yuǎn)離威脅的方法。
封鎖從官方應(yīng)用商店以外的應(yīng)用程式來源
第一個 Android 木馬是以Windows 多媒體播放器的模樣出現(xiàn)。很快地,另個新的Android 木馬出現(xiàn)在某個中國的第三方軟件商店。雖然我們不能保證官方應(yīng)用商店下載的應(yīng)用絕對安全。但由于它屬于官方,所以我們還是可以假設(shè)它比其他人更值得信賴些。
也因為如此,我們建議你設(shè)定禁止安裝非來自官方應(yīng)用商店的應(yīng)用。這將帶給你的智能手機多一層的保護。
接受授權(quán)要求時先確認(rèn)
在分析惡意的Android 應(yīng)用程式時,我們發(fā)現(xiàn)這些程序通常會要求你允許他們存取許多儲存在手機內(nèi)的資料。一個最近的例子是木馬化的 Android Market Security Tool。它會要求權(quán)限去發(fā)送簡訊到服務(wù)號碼,知道目前位置,查看儲存的簡訊和更改你的系統(tǒng)設(shè)定。提供你的授權(quán)去讓它能夠成為一個后門程式。它會收集設(shè)備資訊并且傳送到遠(yuǎn)端URL 。同時也會在未經(jīng)授權(quán)下去執(zhí)行其他功能,像是修改通話記錄,監(jiān)看攔截簡訊以及下載視訊檔。
接受授權(quán)要求時,要小心那些要求存取個人及設(shè)備資訊,還有其他該應(yīng)用程式不會用到的權(quán)限。要先想想這應(yīng)用程式是作什么的。比方說,如果不是電話簿軟體,就不需要權(quán)限去存取聯(lián)絡(luò)人列表。
考慮安裝有效的手機安全軟件
有時候,光是小心手機軟體的下載和安裝是不夠的。因為網(wǎng)絡(luò)犯罪分子不會停止開發(fā)新的巧妙手法來誘騙你去泄漏個人資料。有效的安全解決方案仍然是最好的選擇。
為了能夠隨時隨地得到保護,你可以使用解決方案像是360安全衛(wèi)士、金山毒霸、騰訊手機管家等。這可以保護你儲存在手機上的數(shù)字資料,并保護你在Android 智能手機上所進行的銀行交易。它甚至可以在惡意軟體下載到手機之前就先識別并封鎖它,讓你能夠更加安心。
網(wǎng)站題目:Android平臺通用安全問題分析及策略
當(dāng)前鏈接:http://m.fisionsoft.com.cn/article/cogpseh.html


咨詢
建站咨詢
