安全增強

Android 不斷改進其安全能力和產品。請參閱左側導覽中按版本列出的增強功能清單。

安卓14

每個 Android 版本都包含數十項安全增強功能來保護使用者。以下是 Android 14 中提供的一些主要安全增強功能:

  • Android 10 中引入的硬體輔助 AddressSanitizer (HWASan) 是一種類似AddressSanitizer 的記憶體錯誤偵測工具。 Android 14 為 HWASan 帶來了重大改進。了解它如何幫助防止 bug 進入 Android 版本, HWAddressSanitizer
  • 在Android 14 中,從與第三方共享位置數據的應用程式開始,系統運行時權限對話框現在包含一個可點擊的部分,突出顯示應用程式的數據共享實踐,包括應用程式為何決定與第三方共享數據等資訊。
  • Android 12 引入了在調變解調器層級停用 2G 支援的選項,這可以保護使用者免受 2G 過時安全模型帶來的固有安全風險。認識到禁用 2G 對企業客戶的重要性,Android 14 在 Android Enterprise 中啟用了此安全功能,引入了對 IT 管理員的支持,以限制託管設備降級到 2G 連接的能力。
  • 增加了對拒絕空加密蜂窩連接的支持,確保電路交換語音和 SMS 流量始終加密並免受被動無線攔截。詳細了解 Android 強化蜂巢連線的計畫
  • 新增了對多個 IMEI 的支持
  • 自 Android 14 起,AES-HCTR2 成為具有加速加密指令的裝置的首選檔案名稱加密模式。
  • 蜂巢連接
  • 為 Android安全中心新增了文檔
  • 如果您的應用程式面向 Android 14 並使用動態程式碼載入 (DCL),則所有動態載入的檔案都必須標記為唯讀。否則,系統會拋出異常。我們建議應用程式盡可能避免動態載入程式碼,因為這樣做會大大增加應用程式因程式碼注入或程式碼篡改而受到損害的風險。

查看我們完整的 AOSP發行說明以及 Android 開發人員功能和變更清單

安卓13

每個 Android 版本都包含數十項安全增強功能來保護使用者。以下是 Android 13 中提供的一些主要安全增強功能:

  • Android 13 新增了多重文件示範支援。這個新的演示會話介面使應用程式能夠執行多文檔演示,這是現有 API 無法實現的。欲了解更多信息,請參閱身份憑證
  • 在 Android 13 中,當且僅當源自外部應用程式的意圖與其聲明的意圖過濾器元素相符時,才會將其傳遞到導出的元件。
  • 開放行動 API (OMAPI) 是用於與裝置的安全元件進行通訊的標準 API。在 Android 13 之前,只有應用程式和框架模組可以存取此介面。透過將其轉換為供應商穩定的接口,HAL 模組還能夠透過 OMAPI 服務與安全元件進行通訊。有關詳細信息,請參閱OMAPI 供應商穩定介面
  • 從 Android 13-QPR 開始,共享 UID 已被棄用。 Android 13 或更高版本的使用者應將行 `android:sharedUserMaxSdkVersion="32"` 放入其清單中。此條目可防止新使用者取得共用 UID。有關 UID 的更多信息,請參閱應用程式簽名
  • Android 13 增加了對 Keystore 對稱加密原語的支持,例如 AES(高級加密標準)、HMAC(密鑰雜湊訊息驗證碼)和非對稱加密演算法(包括橢圓曲線、RSA2048、RSA4096 和 Curve 25519)
  • Android 13(API 等級 33)及更高版本支援從應用程式發送非豁免通知的執行時間權限。這使用戶可以控制他們看到的權限通知。
  • 為請求存取所有裝置日誌的應用程式新增了每次使用提示,使用戶能夠允許或拒絕存取。
  • 推出了Android 虛擬化框架 (AVF) ,它將不同的虛擬機器管理程式匯集在一個具有標準化 API 的框架下。它為執行由管理程式隔離的工作負載提供安全且私有的執行環境。
  • 引入了APK 簽章方案 v3.1所有使用 apksigner 的新金鑰輪換都將預設使用 v3.1 簽章方案來針對 Android 13 及更高版本進行目標輪替。

查看我們完整的 AOSP發行說明以及 Android 開發人員功能和變更清單

安卓12

每個 Android 版本都包含數十項安全增強功能來保護使用者。以下是 Android 12 中提供的一些主要安全增強功能:

  • Android 12 引入了BiometricManager.Strings API ,它為使用 BiometricPrompt 進行身份驗證的應用程式提供本地化字串。這些字串旨在實現裝置感知,並提供有關可以使用哪種身份驗證類型的更多特異性。 Android 12 也支援螢幕下指紋感應器
  • 增加了對屏下指紋感應器的支持
  • 指紋Android介面定義語言(AIDL)簡介
  • 支援新的Face AIDL
  • 引入 Rust 作為平台開發語言
  • 新增了用戶僅授予其大致位置存取權限的選項
  • 當應用程式使用攝影機或麥克風時,狀態列上新增了隱私指示器
  • Android 的私有運算核心 (PCC)
  • 新增了禁用 2G 支援的選項

安卓11

每個 Android 版本都包含數十項安全增強功能以保護用戶。有關 Android 11 中提供的一些主要安全增強功能的列表,請參閱Android 發行說明

安卓10

每個 Android 版本都包含數十項安全增強功能來保護使用者。 Android 10 包含多項安全性和隱私增強功能。有關Android 10 中更改的完整列表,請參閱 Android 10 發行說明

安全

邊界消毒劑

Android 10 在藍牙和編解碼器中部署了BoundsSanitizer (BoundSan) 。 BoundSan 使用 UBSan 的邊界消毒劑。此緩解措施是在每個模組層級啟用的。它有助於確保 Android 關鍵元件的安全,不應被停用。 BoundSan 在以下編解碼器中啟用:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec
  • libaac
  • libxaac

只執行記憶體

預設情況下,AArch64 系統二進位檔案的可執行程式碼部分被標記為僅執行(不可讀取),作為即時程式碼重複使用攻擊的強化緩解措施。將資料和程式碼混合在一起的程式碼以及有目的地檢查這些部分的程式碼(無需首先將記憶體段重新映射為可讀)不再起作用。如果目標 SDK 為 Android 10(API 等級 29 或更高)的應用程式嘗試讀取記憶體中啟用只執行記憶體 (XOM) 的系統函式庫的程式碼部分,而不先將該部分標記為可讀,則會受到影響。

擴展訪問

信任代理是 Smart Lock 等三級身份驗證機制使用的底層機制,在 Android 10 中只能延長解鎖時間。信任代理無法再解鎖鎖定的設備,並且只能將設備保持解鎖狀態最多四個小時。

臉部認證

人臉驗證允許用戶只需查看設備正面即可解鎖設備。 Android 10 增加了對新的人臉身份驗證堆疊的支持,該堆疊可以安全地處理相機幀,從而在受支援的硬體上進行人臉身份驗證期間保護安全性和隱私。 Android 10 也為安全相容實施提供了一種簡單的方法,以實現線上銀行或其他服務等交易的應用程式整合。

整數溢位清理

Android 10 在軟體編解碼器中啟用整數溢位清理 (IntSan) 。確保設備硬體不支援的任何編解碼器的播放性能是可接受的。 IntSan 在以下編解碼器中啟用:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec

模組化系統組件

Android 10模組化了一些 Android 系統元件,並使它們能夠在正常的 Android 發布週期之外進行更新。一些模組包括:

OEM加密

Android 10 使用 OEMCrypto API 版本 15。

斯庫多

Scudo是一種動態使用者模式記憶體分配器,旨在更好地抵禦堆疊相關漏洞。它提供標準 C 分配和釋放原語以及 C++ 原語。

影子呼叫堆疊

ShadowCallStack (SCS)是一種LLVM 偵測模式,透過將函數的回傳位址儲存到非葉函數的函數序言中單獨指派的ShadowCallStack實例,並從ShadowCallStack實例載入傳回位址來防止傳回位址覆蓋(如堆疊緩衝區溢出)。函數結語。

WPA3 和 Wi-Fi 增強開放

Android 10 增加了對Wi-Fi 保護存取 3 (WPA3) 和 Wi-Fi 增強開放安全標準的支持,以提供更好的隱私性和抵禦已知攻擊的穩健性。

隱私

針對 Android 9 或更低版本時的應用程式訪問

如果您的應用程式在 Android 10 或更高版本上運行,但面向 Android 9(API 等級 28)或更低版本,則平台將套用下列行為:

  • 如果您的應用程式為ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION宣告了<uses-permission>元素,系統會在安裝過程中自動為ACCESS_BACKGROUND_LOCATION新增<uses-permission>元素。
  • 如果您的應用程式要求ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION ,系統會自動將ACCESS_BACKGROUND_LOCATION新增至要求中。

後台活動限制

從 Android 10 開始,系統對從後台啟動 Activity 進行了限制。此行為變更有助於最大程度地減少對使用者的干擾,並使使用者更好地控制螢幕上顯示的內容。只要您的應用程式啟動活動是使用者互動的直接結果,您的應用程式很可能不會受到這些限制的影響。
要了解有關從後台啟動活動的推薦替代方案的更多信息,請參閱有關如何提醒用戶應用程式中的時間敏感事件的指南。

相機元數據

Android 10 更改了getCameraCharacteristics()方法預設回傳的資訊的廣度。特別是,您的應用程式必須具有CAMERA權限才能存取此方法的傳回值中包含的潛在裝置特定元資料。
要了解有關這些變更的更多信息,請參閱有關需要權限的相機欄位的部分。

剪貼簿數據

除非您的應用程式是預設輸入法編輯器 (IME)或是目前具有焦點的應用,否則您的應用程式無法存取 Android 10 或更高版本上的剪貼簿資料。

設備位置

為了支援使用者對應用程式存取位置資訊的額外控制,Android 10 引入了ACCESS_BACKGROUND_LOCATION權限。
ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION權限不同, ACCESS_BACKGROUND_LOCATION權限僅影響應用程式在背景執行時對位置的存取。除非滿足以下條件之一,否則應用程式將被視為在背景存取位置:

  • 屬於該應用程式的活動可見。
  • 該應用程式正在運行一個前台服務,該服務已聲明前台服務類型location
    若要聲明應用程式中服務的前台服務類型,請將應用程式的targetSdkVersioncompileSdkVersion設定為29或更高。詳細了解前台服務如何繼續使用者發起的需要存取位置的操作

外部儲存

預設情況下,面向 Android 10 及更高版本的應用程式會獲得對外部儲存或範圍儲存的有限存取權。此類應用程式可以查看外部儲存裝置中的以下類型的文件,而無需請求任何與儲存相關的使用者權限:

要了解有關作用域存儲以及如何共享、訪問和修改保存在外部存儲設備上的文件的更多信息,請參閱有關如何管理外部存儲中的文件以及訪問和修改媒體文件的指南。

MAC位址隨機化

在運行 Android 10 或更高版本的裝置上,系統預設傳輸隨機 MAC 位址。
如果您的應用程式處理企業使用案例,該平台會提供用於與 MAC 位址相關的多個操作的 API:

  • 取得隨機 MAC 位址:裝置擁有者應用程式和設定檔擁有者應用程式可以透過呼叫getRandomizedMacAddress()來擷取分配給特定網路的隨機 MAC 位址。
  • 取得實際的出廠 MAC 位址:裝置擁有者應用程式可以透過呼叫getWifiMacAddress()來擷取裝置的實際硬體 MAC 位址。此方法對於追蹤設備群很有用。

不可重置的裝置標識符

從 Android 10 開始,應用程式必須擁有READ_PRIVILEGED_PHONE_STATE特權才能存取裝置的不可重置標識符,其中包括 IMEI 和序號。

如果您的應用程式沒有權限,並且您嘗試詢問有關不可重置標識符的信息,則平台的響應會根據目標 SDK 版本而有所不同:

  • 如果您的應用程式面向 Android 10 或更高版本,則會發生SecurityException
  • 如果您的應用程式面向 Android 9(API 等級 28)或更低版本,且該應用程式具有READ_PHONE_STATE權限,則該方法將傳回null或占位符資料。否則,將會發生SecurityException

身體活動識別

Android 10 為需要檢測使用者步數或對使用者身體活動(例如步行、騎自行車或乘車移動)進行分類的應用引入了android.permission.ACTIVITY_RECOGNITION運行時權限。這樣做的目的是讓用戶了解如何在「設定」中使用裝置感測器資料。
Google Play 服務中的某些程式庫(例如Activity Recognition APIGoogle Fit API )不會提供結果,除非使用者授予您的應用程式此權限。
裝置上唯一需要您聲明此權限的內建感測器步數計數器步數偵測器感測器。
如果您的應用程式是針對 Android 9(API 等級 28)或更低版本,且您的應用程式符合以下每個條件,系統會根據需要自動向您的應用程式授予android.permission.ACTIVITY_RECOGNITION權限:

  • 清單檔案包含com.google.android.gms.permission.ACTIVITY_RECOGNITION權限。
  • 清單檔案包含android.permission.ACTIVITY_RECOGNITION權限。

如果系統自動授予android.permission.ACTIVITY_RECOGNITION權限,則在您將應用程式更新至面向 Android 10 後,您的應用程式將保留該權限。但是,使用者可以隨時在系統設定中撤銷該權限。

/proc/net 檔案系統限制

在運行 Android 10 或更高版本的裝置上,應用程式無法存取/proc/net ,其中包含有關裝置網路狀態的資訊。需要存取此資訊的應用程式(例如 VPN)應使用NetworkStatsManagerConnectivityManager類別。

從 UI 中刪除的權限群組

從 Android 10 開始,應用程式無法尋找權限在 UI 中的分組方式。

刪除聯絡人親和力

從 Android 10 開始,平台不再追蹤聯絡人親緣關係資訊。因此,如果您的應用程式對使用者的聯絡人進行搜索,結果不會按互動頻率排序。
有關ContactsProvider的指南包含一個通知,描述了從 Android 10 開始的所有裝置上已過時的特定欄位和方法

限制存取螢幕內容

為了保護使用者的螢幕內容,Android 10 透過更改READ_FRAME_BUFFERCAPTURE_VIDEO_OUTPUTCAPTURE_SECURE_VIDEO_OUTPUT權限的範圍來防止對裝置螢幕內容的靜默存取。從 Android 10 開始,這些權限僅限於簽名存取
需要存取裝置螢幕內容的應用程式應使用MediaProjection API,該 API 會顯示一條提示,要求使用者提供同意。

USB 裝置序號

如果您的應用程式面向 Android 10 或更高版本,則在使用者授予您的應用程式存取 USB 裝置或配件的權限之前,您的應用程式無法讀取序號。
要了解有關使用 USB 設備的更多信息,請參閱有關如何配置 USB 主機的指南。

無線上網

面向 Android 10 或更高版本的應用程式無法啟用或停用 Wi-Fi。 WifiManager.setWifiEnabled()方法始終傳回false
如果您需要提示使用者啟用和停用 Wi-Fi,請使用設定面板

直接存取已設定 Wi-Fi 網路的限制

為了保護使用者隱私,Wi-Fi 網路清單的手動配置僅限於系統應用程式和裝置策略控制器 (DPC) 。給定的 DPC 可以是裝置擁有者或設定檔擁有者。
如果您的應用程式面向 Android 10 或更高版本,且它不是系統應用程式或 DPC,則以下方法不會傳回有用的資料:

安卓9

每個 Android 版本都包含數十項安全增強功能以保護用戶。有關 Android 9 中提供的一些主要安全增強功能的列表,請參閱Android 發行說明

安卓8

每個 Android 版本都包含數十項安全增強功能以保護用戶。以下是 Android 8.0 中提供的一些主要安全增強功能:

  • 加密。添加了對在工作資料中逐出密鑰的支持。
  • 驗證啟動。添加了 Android 驗證啟動 (AVB)。經過驗證的引導代碼庫支持回滾保護,可在添加到 AOSP 的引導加載程序中使用。推薦引導加載程序支持 HLOS 的回滾保護。推薦的引導加載程序只能通過用戶與設備進行物理交互來解鎖。
  • 鎖屏。添加了對使用防篡改硬件來驗證鎖屏憑據的支持。
  • 密鑰庫。所有搭載 Android 8.0+ 的設備都需要密鑰證明。添加了ID 證明支持以改進零接觸註冊。
  • 沙盒。使用 Project Treble 在框架和設備特定組件之間的標準接口對許多組件進行更緊密的沙箱化。將 seccomp 過濾應用於所有不受信任的應用程序以減少內核的攻擊面。 WebView現在在一個隔離的進程中運行,對系統其餘部分的訪問非常有限。
  • 內核硬化。實施了強化的 usercopy 、PAN 仿真、init 後只讀和 KASLR。
  • 用戶空間強化。為媒體堆棧實施了 CFI。應用程序覆蓋不能再覆蓋系統關鍵窗口,用戶有辦法關閉它們。
  • 流式操作系統更新。在磁盤空間不足的設備上啟用更新
  • 安裝未知應用程序。用戶必須授予從非第一方應用商店的來源安裝應用的權限
  • 隱私。 Android ID (SSAID) 對設備上的每個應用和每個用戶都有不同的值。對於 Web 瀏覽器應用程序,Widevine 客戶端 ID 為每個應用程序包名稱和 Web 源返回不同的值。 net.hostname現在為空,dhcp 客戶端不再發送主機名。 android.os.Build.SERIAL已被Build.SERIAL API取代,該 API 受到用戶控制權限的保護。改進了某些芯片組中的 MAC 地址隨機化。

安卓7

每個 Android 版本都包含數十項安全增強功能以保護用戶。以下是 Android 7.0 中提供的一些主要安全增強功能:

  • 基於文件的加密。在文件級別加密,而不是將整個存儲區域作為單個單元進行加密,可以更好地隔離和保護設備上的個人用戶和配置文件(例如個人和工作)。
  • 直接啟動。通過基於文件的加密啟用,Direct Boot 允許某些應用程序(例如鬧鐘和輔助功能)在設備開機但未解鎖時運行。
  • 驗證啟動。現在嚴格執行驗證啟動,以防止受損設備啟動;它支持糾錯以提高針對非惡意數據損壞的可靠性。
  • SELinux .更新的 SELinux 配置和增加的 seccomp 覆蓋範圍進一步鎖定了應用程序沙箱並減少了攻擊面。
  • 庫加載順序隨機化和改進的 ASLR 。增加的隨機性使一些代碼重用攻擊不太可靠。
  • 內核硬化。通過將部分內核內存標記為只讀,限制內核對用戶空間地址的訪問並進一步減少現有的攻擊面,為較新的內核增加了額外的內存保護。
  • APK 簽名方案 v2 .引入了全文件簽名方案,提高了驗證速度並加強了完整性保證。
  • 受信任的 CA 存儲。為了使應用程序更容易控制對其安全網絡流量的訪問,默認情況下,用戶安裝的證書頒發機構和通過設備管理 API 安裝的證書頒發機構不再受針對 API 級別 24+ 的應用程序的信任。此外,所有新的 Android 設備都必須隨附同一個受信任的 CA 商店。
  • 網絡安全配置。通過聲明性配置文件配置網絡安全和 TLS。

安卓6

每個 Android 版本都包含數十項安全增強功能以保護用戶。以下是 Android 6.0 中提供的一些主要安全增強功能:

  • 運行時權限。應用程序在運行時請求權限,而不是在應用程序安裝時被授予。用戶可以打開和關閉 M 和 pre-M 應用程序的權限。
  • 驗證啟動。在執行之前對系統軟件進行一組加密檢查,以確保手機從引導加載程序一直到操作系統都是健康的。
  • 硬件隔離安全。指紋 API、鎖屏、設備加密和客戶端證書使用新的硬件抽象層 (HAL) 來保護密鑰免受內核洩露和/或本地物理攻擊
  • 指紋。現在只需輕輕一按即可解鎖設備。開發人員還可以利用新的 API 來使用指紋來鎖定和解鎖加密密鑰。
  • SD卡採用。設備可以採用可移動媒體並為應用程序本地數據、照片、視頻等擴展可用存儲空間,但仍受塊級加密保護。
  • 明文流量。開發人員可以使用新的 StrictMode 來確保他們的應用程序不使用明文。
  • 系統強化。通過 SELinux 實施的策略強化系統。這提供了更好的用戶隔離、IOCTL 過濾、減少暴露服務的威脅、進一步收緊 SELinux 域以及極其有限的 /proc 訪問。
  • USB 訪問控制:用戶必須確認允許 USB 訪問手機上的文件、存儲或其他功能。現在,默認僅對需要用戶明確批准的存儲訪問收費

安卓5

5.0

每個 Android 版本都包含數十項安全增強功能以保護用戶。以下是 Android 5.0 中提供的一些主要安全增強功能:

  • 默認加密。在附帶 L 開箱即用的設備上,默認情況下會啟用全盤加密,以提高對丟失或被盜設備上數據的保護。更新到 L 的設備可以在Settings > Security中加密。
  • 改進了全盤加密。使用scrypt保護用戶密碼免受暴力攻擊,並且在可用的情況下,將密鑰綁定到硬件密鑰庫以防止設備外攻擊。與往常一樣,Android 屏幕鎖定密碼和設備加密密鑰不會從設備發送出去或暴露給任何應用程序。
  • 使用 SELinux 增強的 Android 沙箱。 Android 現在要求所有域的 SELinux 處於強制模式。 SELinux 是 Linux 內核中的強制訪問控制 (MAC) 系統,用於增強現有的自主訪問控制 (DAC) 安全模型。這一新層提供了針對潛在安全漏洞的額外保護。
  • 智能鎖。 Android 現在包括為解鎖設備提供更多靈活性的 trustlet。例如,trustlet 可以允許設備在靠近另一個受信任設備(通過 NFC、藍牙)或被具有受信任面孔的人使用時自動解鎖。
  • 適用於手機和平板電腦的多用戶、受限個人資料和訪客模式。 Android 現在為手機上的多個用戶提供了一個訪客模式,該模式可用於提供對您的設備的輕鬆臨時訪問,而無需授予對您的數據和應用程序的訪問權限。
  • 在沒有 OTA 的情況下更新到 WebView。 WebView 現在可以獨立於框架進行更新,無需系統 OTA。這將允許更快地響應 WebView 中的潛在安全問題。
  • 更新了 HTTPS 和 TLS/SSL 的加密。現在啟用 TLSv1.2 和 TLSv1.1,現在首選前向保密,現在啟用 AES-GCM,並且現在禁用弱密碼套件(MD5、3DES 和導出密碼套件)。有關更多詳細信息,請參閱https://developer.android.com/reference/javax/net/ssl/SSLSocket.html
  • 非 PIE 鏈接器支持已刪除。 Android 現在要求所有動態鏈接的可執行文件都支持 PIE(與位置無關的可執行文件)。這增強了 Android 的地址空間佈局隨機化 (ASLR) 實現。
  • FORTIFY_SOURCE 改進。以下 libc 函數現在實現 FORTIFY_SOURCE 保護: stpcpy()stpncpy()read()recvfrom()FD_CLR()FD_SET()FD_ISSET() 。這提供了針對涉及這些功能的內存損壞漏洞的保護。
  • 安全修復。 Android 5.0 還包括針對 Android 特定漏洞的修復。有關這些漏洞的信息已提供給開放手機聯盟成員,Android 開源項目中提供了修復程序。為提高安全性,一些裝有較早版本 Android 的設備也可能包含這些修復程序。

Android 4 及更低版本

每個 Android 版本都包含數十項安全增強功能以保護用戶。以下是 Android 4.4 中提供的一些安全增強功能:

  • 使用 SELinux 增強的 Android 沙箱。 Android 現在在強制模式下使用 SELinux。 SELinux 是 Linux 內核中的強制訪問控制 (MAC) 系統,用於增強現有的基於自由訪問控制 (DAC) 的安全模型。這提供了針對潛在安全漏洞的額外保護。
  • 每用戶 VPN。在多用戶設備上,VPN 現在適用於每個用戶。這可以允許用戶通過 VPN 路由所有網絡流量,而不會影響設備上的其他用戶。
  • AndroidKeyStore 中的 ECDSA 提供程序支持。 Android 現在有一個允許使用 ECDSA 和 DSA 算法的密鑰庫提供程序。
  • 設備監控警告。如果任何證書已添加到設備證書存儲區,Android 會向用戶發出警告,該證書可能允許監控加密的網絡流量。
  • FORTIFY_SOURCE。 Android 現在支持 FORTIFY_SOURCE 級別 2,並且所有代碼都使用這些保護進行編譯。 FORTIFY_SOURCE 已得到增強,可與 clang 一起使用。
  • 證書固定。 Android 4.4 檢測並防止在安全 SSL/TLS 通信中使用欺詐性 Google 證書。
  • 安全修復。 Android 4.4 還包括針對 Android 特定漏洞的修復。有關這些漏洞的信息已提供給開放手機聯盟成員,Android 開源項目中提供了修復程序。為提高安全性,一些裝有較早版本 Android 的設備也可能包含這些修復程序。

每個 Android 版本都包含數十項安全增強功能來保護使用者。以下是 Android 4.3 中提供的一些安全性增強功能:

  • 使用 SELinux 增強的 Android 沙箱。此版本使用 Linux 核心中的 SELinux 強制存取控制系統 (MAC) 增強了 Android 沙箱。 SELinux 強化對於使用者和開發人員來說是不可見的,它增強了現有 Android 安全模型的穩健性,同時保持了與現有應用程式的兼容性。為了確保持續的兼容性,此版本允許在寬鬆模式下使用 SELinux。此模式會記錄任何策略違規行為,但不會破壞應用程式或影響系統行為。
  • 沒有 setuid/setgid 程式。為 Android 系統檔案新增了對檔案系統功能的支持,並刪除了所有 setuid/setguid 程式。這減少了根攻擊面和潛在安全漏洞的可能性。
  • 亞銀認證。從 Android 4.2.2 開始,與 ADB 的連線透過 RSA 金鑰對進行驗證。這可以防止攻擊者對設備進行實體存取時未經授權使用 ADB。
  • 限制 Android 應用程式的 Setuid。 /system 分區現在為 zygote 產生的進程掛載了 nosuid,從而阻止 Android 應用程式執行 setuid 程式。這減少了根攻擊面和潛在安全漏洞的可能性。
  • 能力界限。 Android zygote 和 ADB 現在使用 prctl(PR_CAPBSET_DROP) 在執行應用程式之前刪除不必要的功能。這可以防止 Android 應用程式和從 shell 啟動的應用程式取得特權功能。
  • AndroidKeyStore 提供者。 Android 現在有一個金鑰庫提供程序,允許應用程式建立專用金鑰。這為應用程式提供了一個 API 來創建或儲存其他應用程式無法使用的私鑰。
  • KeyChain是綁定金鑰演算法。 Keychain API 現在提供了一種方法 (isBoundKeyType),可讓應用程式確認系統範圍的金鑰已綁定到裝置的硬體信任根。這提供了一個創建或儲存私鑰的位置,即使在根洩漏的情況下,也無法從裝置匯出私鑰。
  • NO_NEW_PRIVS。 Android zygote 現在使用 prctl(PR_SET_NO_NEW_PRIVS) 在執行應用程式程式碼之前阻止新增權限。這可以防止 Android 應用程式執行可透過 execve 提升權限的操作。 (這需要 Linux 核心版本 3.5 或更高版本)。
  • FORTIFY_SOURCE 增強功能。在 Android x86 和 MIPS 上啟用了 FORTIFY_SOURCE,並強化了 strchr()、strrchr()、strlen() 和 umask() 呼叫。這可以檢測潛在的記憶體損壞漏洞或未終止的字串常數。
  • 搬遷保護。為靜態連結的可執行檔啟用唯讀重定位 (relro),並刪除 Android 程式碼中的所有文字重定位。這提供了針對潛在記憶體損壞漏洞的深度防禦。
  • 改進的熵混合器。除了定期混合之外,EntropyMixer 現在還會在關閉/重新啟動時寫入熵。這允許保留設備開機時產生的所有熵,對於配置後立即重新啟動的設備特別有用。
  • 安全修復。 Android 4.3 也修復了 Android 特定的漏洞。有關這些漏洞的資訊已提供給開放手機聯盟成員,並且 Android 開源專案中提供了修復。為了提高安全性,某些運行早期版本 Android 的裝置也可能包含這些修復。

Android 提供了Android 安全概述中描述的多層安全模型。 Android 的每次更新都包含數十項安全增強功能,以保護用戶。以下是 Android 4.2 中引入的一些安全增強功能:

  • 應用程序驗證- 用戶可以選擇啟用“驗證應用程序”並在安裝之前讓應用程序驗證者篩選應用程序。應用程序驗證可以在用戶嘗試安裝可能有害的應用程序時提醒用戶;如果應用程序特別糟糕,它可以阻止安裝。
  • 對高級 SMS 的更多控制- 如果應用程序嘗試將 SMS 發送到使用高級服務的短代碼,Android 將提供通知,這可能會導致額外費用。用戶可以選擇是允許應用程序發送消息還是阻止它。
  • 永遠在線的 VPN - 可以配置 VPN,以便應用程序在建立 VPN 連接之前無法訪問網絡。這可以防止應用程序通過其他網絡發送數據。
  • 證書固定- Android 核心庫現在支持證書固定。如果證書未鏈接到一組預期證書,則固定域將收到證書驗證失敗。這可以防止證書頒發機構受到可能的損害。
  • 改進的 Android 權限顯示- 權限已組織成更易於用戶理解的組。在查看權限時,用戶可以點擊該權限,查看該權限的更多詳細信息。
  • installd 強化- installd守護程序不以 root 用戶身份運行,從而減少了 root 權限升級的潛在攻擊面。
  • 初始化腳本強化- 初始化腳本現在應用O_NOFOLLOW語義來防止與符號鏈接相關的攻擊。
  • FORTIFY_SOURCE - Android 現在實現FORTIFY_SOURCE 。系統庫和應用程序使用它來防止內存損壞。
  • ContentProvider 默認配置- 以 API 級別 17 為目標的應用程序將默認將每個Content Provider的“export”設置為“false”,從而減少應用程序的默認攻擊面。
  • Cryptography - 修改 SecureRandom 和 Cipher.RSA 的默認實現以使用 OpenSSL。使用 OpenSSL 1.0.1 添加了對 TLSv1.1 和 TLSv1.2 的 SSL 套接字支持
  • 安全修復- 帶有安全修復的升級開源庫包括 WebKit、libpng、OpenSSL 和 LibXML。 Android 4.2 還包括針對 Android 特定漏洞的修復。有關這些漏洞的信息已提供給開放手機聯盟成員,Android 開源項目中提供了修復程序。為提高安全性,一些裝有較早版本 Android 的設備也可能包含這些修復程序。

Android 提供了Android 安全概述中描述的多層安全模型。 Android 的每次更新都包含數十項安全增強功能,以保護用戶。以下是 Android 版本 1.5 到 4.1 中引入的一些安全增強功能:

安卓 1.5
  • ProPolice 防止堆棧緩衝區溢出 (-fstack-protector)
  • safe_iop 減少整數溢出
  • 擴展 OpenBSD dlmalloc 以防止雙重 free() 漏洞並防止塊合併攻擊。塊合併攻擊是利用堆損壞的常用方法。
  • OpenBSD calloc 在內存分配期間防止整數溢出
安卓 2.3
  • 格式字符串漏洞保護(-Wformat-security -Werror=format-security)
  • 基於硬件的 No eXecute (NX) 可防止在堆棧和堆上執行代碼
  • Linux mmap_min_addr 以減輕空指針取消引用權限升級(在 Android 4.1 中進一步增強)
安卓4.0
地址空間佈局隨機化 (ASLR) 用於隨機化內存中的關鍵位置
安卓4.1
  • PIE(位置獨立可執行文件)支持
  • 只讀重定位/立即綁定 (-Wl,-z,relro -Wl,-z,now)
  • dmesg_restrict 啟用(避免洩漏內核地址)
  • 啟用 kptr_restrict(避免洩漏內核地址)