Android的安全機制包括如下幾個方面:linux
Linux是一個多用戶的操做系統,一個UID標識一個用戶。用戶之間是相互隔離的(這種隔離是創建在訪問控制的基礎上實現),用戶有各自獨立的所屬資源和權限範圍。當多用戶登陸Linux系統時,每一個用戶的活動都在各自獨立的環境中進行,互不干擾。android
Android將Linux系統的用戶隔離機制移植爲應用程序隔離,應用程序在安裝時被賦予獨特的用戶標識(UID),並永久保持;應用程序及其運行的Dalvik虛擬機運行於獨立的Linux進程空間,與UID不一樣的應用程序徹底隔離。 web
應用程序包(.apk文件)必須被開發者數字簽名;shell
同一開發者可指定不一樣的應用程序共享UID,進而運行於同一進程空間,共享資源。 瀏覽器
簽名的過程:安全
• 生成私有、公共密鑰和公共密鑰證書服務器
• 對應用進行簽名網絡
• 優化應用程序框架
簽名的做用:測試
• 識別代碼的做者。
• 檢測應用程序是否發生了改變。
• 在應用程序之間創建信任,以便於應用程序能夠安全地共享代碼和數據。
Android程序默認沒法訪問系統和資源,應用程序須要顯式聲明權限、名稱、權限組與保護級別。不一樣的級別要求應用程序行使此權限時的認證方式不一樣:
Normal級申請便可用;
Dangerous級需在安裝時由用戶確認纔可用;
Signature與Signatureorsystem則必須是系統用戶纔可用。
• 經過manifest文件中聲明如下屬性
<uses-permissionandroid:name="string" />
請求android:name對應的權限。
• 經過如下屬性添加自定義權限
<permission xmlns:android="http://schemas.android.com/apk/res/android" android:name="com.test.android.ACCESS_FRIENDS_LIST" android:description="@string/permission_description" android:label="@string/permission_label" android:protectionLevel="normal" />
• 系統組件權限,如activity組件
<activity android:permission="com.test.android.ACCESS_FRIENDS_LIST">
Linux系統默認採用ACM(訪問控制機制爲DAC(自主訪問控制)。
Android直接繼承了Linux的訪問控制機制傳統的Linux訪問控制機制確保系統文件與用戶數據不受非法訪問。
Linux用戶與權限
• 超級用戶(root):具備最高的系統權限,UID爲0。
• 系統僞用戶:Linux操做系統出於系統管理的須要,但又不肯賦予超級用戶的權限,須要將某些關鍵系統應用,文件全部權賦予某些系統僞用戶,其UID範圍爲1~ 499,系統的僞用戶不能登陸系統。
• 普通用戶:只具有有限的訪問權限,UID 爲 500 ~ 6000,能夠登陸系統得到 shell
在Linux權限模型下,每一個文件屬於一個用戶和一個組,由UID與GID標識其全部權。針對於文件的具體訪問權限
定義爲可讀(r)、可寫(w)與可執行(x),並由三組讀、寫、執行組成的權限三元組來描述相關權限。
第一組定義文件全部者(用戶)的權限,第二組定義同組用戶(GID相同但UID不一樣的用戶)的權限,第三組定義其餘用戶的權限(GID與UID都不一樣的用戶)。
Binder進程通訊機制提供基於共享內存的高效進程通訊;
Binder基於Client-Server模式,提供相似COM與CORBA的輕量級遠程進程調用(RPC);
經過接口描述語言(AIDL)定義接口與交換數據的類型,確保進程間通訊的數據不會溢出越界,污染進程空間。
Android內存管理機制基於標準Linux的低內存管理機制OOM(out of memory killer),設計實現了獨特的低內存清理(LMK)機制,將進程按重要性分級、分組,當內存不足時,自動清理最低級別進程所佔用的內存空間;
同時,引入不一樣於傳統Linux共享內存機制的Android獨有共享內存機制Ashmem,具有清理再也不使用共享內存區域的能力。
SELinux 擁有三個基本的操做模式:
• Disabled:禁用SELinux策略
• Permissive:在Permissive模式下,SELinux會被啓用但不會實施安全性策略,而只會發出警告及記錄行動。Permissive模式在排除SELinux的問題時頗有用
• Enforcing:這個缺省模式會在系統上啓用並實施SELinux的安全性策略,拒絕訪問及記錄行動
SELinux 擁有三種訪問控制方法:
• 強制類型(TE):TE是針對型策略所採用的主要訪問控制機制
• 基於角色的訪問控制(RBAC):它以SELinux用戶(未必等同Linux用戶)爲基礎,但缺省的針對型策略並未採用它
• 多層保障(MLS):未被採用,並且常常隱藏在缺省的針對型策略內。
攻擊面進行分類:
攻擊者無需在物理位置接近目標,而能夠直接經過計算機網絡發動攻擊,具備極大的危害性。
安全漏洞研究的聖盃,不須要與目標交互就能實施,並且可以得到系統的徹底訪問控制權,在Android系統中,包含了對IP,TCP,UDP,ICMP等協議的實現。若是在IP包的處理過程當中出現能夠用的緩衝區溢出漏洞,將成爲最爲嚴重的安全漏洞,能夠遠程執行內核中的任意代碼。
無需目標交互的聯網服務是第二位具備吸引力的攻擊面。這些服務一般的用戶空間執行,可是仍有一些潛在的網絡服務,若是成功利用,仍然能夠得到root權限,固然這類網絡服務極少,能夠經過nmap等端口掃描器得到,也能夠經過netstat得到,當啓動wifi,會有額外的網絡服務。
移動設備經過移動通訊暴露了其餘遠程攻擊面,包括經過短信服務(SMS)和多媒體消息服務(MMS),同時使用SMS和MMS消息做爲攻擊向量還能夠達到其它攻擊面。MMS消息中能夠包含一些多媒體內容。而其它一些協議也實如今SMS之上。
因爲網絡的通常配置屏蔽了許多傳統的遠程的攻擊面,並且客戶端對與它通訊的服務器很是信任。因此,攻擊者很大程度上將關注點轉移到客戶端軟件攻擊面中存在的安全漏洞。
現代Web瀏覽器做爲功能最爲強大的客戶端應用表明,支持HTML,Javascript和豐富的web應用。除了渲染和執行應用邏輯以外還支持一些底層協議。如FTP,HTTP。這些都是有數量驚人的後臺代碼實現的。而其中的每一個組件都帶有一個攻擊面。能夠經過誘導點擊,「水坑」等方法進行攻擊
每一個web驅動的移動應用暴露的攻擊面都是不一樣的。
廣告網絡因爲嵌入嵌入式瀏覽器引擎(WebView),瀏覽器攻擊對於這些應用都是存在的,但通常只能經過中間人攻擊人向量。並且與傳統瀏覽器攻擊不一樣,這種組件還會暴露額外的攻擊面,能夠利用Java類型的反射攻擊進行遠程攻破。並且,廣告框架可能會對隱私構成顯著威脅。
常見的文件格式漏洞
相對較少
Android設備都支持多種基於射頻的無線技術,幾乎都支持藍牙和wifi和GPS,較新的還支持NFC(近場通訊),每種無線技術都具備特有的頻率,且極易受到大量的攻擊,包括主動攻擊和被動攻擊。其中,主動攻擊包括阻塞,欺騙,中間人(MitM)等形式。因爲wifi和蜂窩網絡是用於訪問整個互聯網,所以能夠達到很是豐富的攻擊面。
1.GPS:一般指代Android中的位置信息,可讓設備肯定自身在地球的位置。它經過衛星獲取信號肯定自身位置。
2.基帶:蜂窩調解器能夠提供給基帶處理器和移動網絡通訊的功能。它是Android電話棧的軟件組件,因爲對它的攻擊終端用戶難以察覺,並且可以訪問手機通話記錄及傳輸數據,對它的攻擊具備很是的吸引力。儘管屬於遠程攻擊,但依舊須要在必定的範圍內,近年來的「僞基站」攻擊
3.藍牙:藍牙具備30多種協議,每種藍牙都定義了藍牙設備的一項特殊功能。如FTP(文件傳輸協議),HFP(免提協議),HSP(Handest Profile),HID(人機接口設備協議),DUN(撥號網絡協議)。藍牙協議功能首先須要配對。但一些設備使用硬編碼的數字碼,很是容易攻擊。配對後,有可能劫持會話並進行濫用,可能的攻擊方法包括BlueJacking,BlueSnarfing和BlueBugging。除了能夠與一些免提設備配對,android設備之間還能互相配對,用於傳輸聯繫人列表,文件等。藍牙設計時功能很是多樣化,也提供了攻擊者但願的幾乎全部的功能訪問
4.Wi-Fi:Wi-Fi主要用於鏈接局域網,由局域網提供對互聯網的訪問。詳情見於《黑客大曝光:無線網絡安全》
5.NFC:NFC是創建與射頻標示之上(RFID)的無線通訊技術,NFC在全部的無線技術中,做用範圍最短,一般不超過20cm。Android設備上的NFC有三種典型場景。第一,標籤被呈現給設備,設備讀取標籤的數據並進行處理。第二,兩位用戶將他們的Anddorid設備貼在一塊兒傳輸數據。第三,用於非接觸式的支付。最流行的消息格式是NFC數據交換格式(NDEF),解析時會致使執行一些動做。在某些狀況下,無需用戶交互。
除了無線通訊外,還有其它兩個技術也與Android設備的總體攻擊面相關。具體來講爲QR碼(快速響應矩陣碼)和語音指令
當得到對一個設備的任意代碼執行後,邏輯上的下一步就是權限提高。終極目標是得到享有特權的代碼執行,包括在內存空間執行。或者以root執行。然而只是得到少許權限,也能夠暴露更多受限的攻擊面。因爲權限隔離,爲了實現終極目標,須要結合使用多個小的提高目標。
Android的UNIX系統意味着許多攻擊面都是經過文件系統條目暴露的
除了文件系統,其它的本地攻擊面是有linux'內核暴露的,包括系統調用和套接字實現
1.系統調用:系統調用處理表明一個值得關注的攻擊面
2.套接字:Android上運行的軟件使用不一樣類型的套接字進行ipc
3.Binder:Binder驅動以及它依賴的軟件表明Android特有的一個攻擊面。Binder驅動是Intent的基礎,而Intent是用於在應用層Android組件進行通訊。Binder驅動自己在內核空間實現,並經過。/dev/binder字符設備暴露一個攻擊面。
4.共享內存:一種定製的內存共享機制
5.基帶接口:Android智能手機上包含第二個操做系統,就是基帶
6.攻擊硬件支持的服務:包括GPS接收器,光環境傳感器,陀螺儀
須要物理接觸設備的攻擊被稱爲依賴於物理攻擊面,物理面攻擊與物理相鄰不一樣的是物理相鄰不須要實際接觸目標。
對目標設備進行拆解,就可以對目標設備中的硬件發起攻擊。打開一個硬件設備一般會發現
1.暴露的串口,容許接收調試消息
2.暴露的JTAG調試端口,容許對設備的固件進行調試,重刷或訪問
USB是Android設備與其它設備進行交互的標準化有線接口
包括手機SIM卡,SD卡,HDMI卡,暴露的測試點和對接鏈接器
參與生產Android設備的實體會修改操做系統的不一樣組成部分,通常須要手工進行分析。