認識Android加密機制

在開始探討物理提取之前,要先了解Android現有的三種內容加密機制。從Android 5.0版開始,第一個內容加密機制,Full Disk Encryption(FDE)提供了裝置基本的保護。從Qualcomm Snapdragon 410到Snapdragon 845,FDE使用ARMv8專用的指令集進行加解密加速,讓用戶享有資料加密的保護下不會降低裝置效能。該加密金鑰受可信執行環境(TEE)保護,TEE是CPU的專用部分,僅允許執行特定授權的小程式(trustlet)。在預設的情況下,FDE用於加密和解密的金鑰是透過裝置唯一的硬體序號和預設密碼“default_password”這兩個資料的組合。雖然Android FDE保護機制比iOS的FDE安全性低好幾個等級,但它仍為一般用戶提供了合理的保護。

如果用戶覺的FDE的保護不夠,可選擇採用”Secure Startup”。Secure Startup與FDE最大的差異是在FDE開機後,當用戶尚未輸入PIN/pattern/passcode,手機還處於未解鎖狀態,但系統已將Data分區掛載並解密(/Data Partition)。但是,如果啟用了Secure Startup選項,手機將在啟動過程中要求輸入密碼。 在密碼尚未輸入的狀態下,大多數的Android服務(更不用說APP)是不被允許啟動的,除了Data分區尚未掛載,電話或鬧鐘等功能都不能使用。Secure Startup提供了較佳的保護,但在實際使用情境會造成用戶的困擾,所以該功能較少被用戶接受並啟用。

Android 7.0後另推出了優化的加密機制(Apple則是在iOS 8起開始採用FBE),FBE(File Base Encryption),採用FBE加密時,可以使用不同的金鑰對不同的文件進行加密,也可以對加密文件單獨解密。FBE的金鑰與用戶的PIN/pattern/passcode皆儲存於TEE中。如果使用FBE的手機重新開機,手機可以讀取存儲在僅受硬體金鑰保護的設備加密區域(Device Encrypted Area)中的內容,所以至少電話或鬧鐘等功能可以使用。其他的內容都存儲在憑證加密區域(Credential Encrypted Area)中,該區域是透過用戶的PIN/pattern/passcode來保護,解鎖後才可以掛載開始使用。

破解Android加密保護

在尚未有加密機制的年代,Chip-Off是鑑識人員的一個利器,只要將儲存晶片解焊取出,資料既可輕鬆提取。Chip-Off第一個面對的困境是iPhone 5c,當iOS導入FDE後,即使可以透過Chip-Off取出資料,鑑識人員只能看到一堆亂碼,沒有相對應的金鑰,是無法讀取以Chip-Off取出的內容。而近年來有將近85%以上的Android設備,出廠預設已導入加密機制,Chip-Off已經是一個過時的技術。

從上面可了解,物理提取要面臨多一個門檻,才能提取出加密的內容。這部分Cellebrite採用兩個方式處理,作業系統層級漏洞與晶片層級漏洞。

  • 作業系統層級漏洞:如Advanced ADB,採用Dirty COW漏洞進而進行物理提取。

  • 晶片層級漏洞:許多設備都有無法修補的低階晶片層級漏洞。 這些漏洞可以通過EDL模式被利用,使Cellebrite能夠覆蓋某些分區並注入修改後的trustlets,進而利用TEE提取加密金鑰或在強制破解密碼時(Password Brute Force)消除GateKeeper因輸入錯誤密碼時所產生的延遲等待。

物理提取 – Physical Extraction

為了對裝置進行最全面和詳細的分析,Cellebrite的物理提取可以讀取手機快閃記憶體的已配置(allocated)和未配置(unallocated)空間中的資料。 這些資料可大致分為三種不同型態的內容:

  1. 邏輯提取以外的內容。如之前檔案系統提取所敘,邏輯提取透過API與裝置溝通進而取得內容,但使用API可提取內容有限。
  2. 系統刪除之檔案。系統僅刪除資料的位址索引,實際資料還在快閃記憶體中。
  3. 由手機自主收集的內容,如wi-fi networks,GPS locations,web history,email headers,照片的EXIF等。也可參考透過knowledgeC.db掌握使用者行為(一)該篇所敘。

Cellebrite 4PC支援以下三種類型的物理提取方式,透過物理提取可產生出一份bit-for-bit的映像檔:

  • 1. ADB: Android Debug Bridge, 為方便除錯所內建的溝通機制,該方式有機會支援物理提取,前提手機須為解鎖狀態,並打開USB Debugging功能。

  • 2. Bootloader: 該提取方法為設備處於Bootloader模式時執行物理提取。因手機尚未執行作業程式,也無法連線上網。該程序可跳過User Lock並為符合鑑識科學方法。

  • 3. Recovery Mode: 該提取方式為手機進入Recovery Mode時進行。UFED會將手機原廠的Recovery partition替換為Cellebrite符合鑑識科學的Recovery Partition。該提取方式可跳過部分三星手機的User Lock。

若從現有Cellebrite支援的8,696支手機清單(UFED_Supported_Phone_List_7.18)上來分析,其中5,244支為Android作業系統,支援最多的提取模式為ADB Rooted,有2,660支,ADB有2,574支,Bootloader有2,127支,Advanced ADB + Generic有1,621,Smart ADB是348支,Decrypting Bootloader為330支,Recovery Partition最少,只有38支。

表一、各物理提取支援的裝置數量

ADB

ADB支援以下四種提取模式。Adb 全名是 Android Debug Bridge,是開發或使用 Android 時很常用到的工具,該提取模式需開啟USB Debugging Mode。該功能支援Android 4.1以上的版本。

方式Android版本Security Patch
ADB4及以上
Advanced ADB4.3-7.12016年11月及之前
Smart ADB6.0-8.02016年12月及之後
ADB Rooted4及以上無限制

表二、ADB提供的物理提取

Advanced ADB:物理提取,支援作業系統版本介於Android 4.3與7.1之間,及安全性patch版本在2016年11月之前的裝置。過程採用dirty cow (copy-on-wirte)漏洞,會暫時安裝一個App(Extraction App)協助提取,因採用OTG,故儲存位置有兩個選擇:

  1. 外接記憶卡(External SDCard)
  2. USB隨身碟(透過OTG線連接手機)

Smart ADB:支援的作業系統版本為Android 6.0 ~ 8.0。比Advanced ADB更優異的是,所支援的安全性Patch版本可為2016年12月及之後

ADB Rooted:該方式不會在提取過程中嘗試進行root,所以裝置必須已經是rooted狀態,才可透過adb進行物理提取。

ADB:該方式會在提取過程中暫時root裝置,如果成功取得root權限,就可以完成物理提取。

Bootloader物理提取 – Bootloader Extraction

Cellebrite物理提取用的bootloader引導程序是針對各品牌、型號的晶片、USB介面等客製化設計的。Cellebrite也確保該提取過程是非侵入式,並且設備的用戶分區中的任何資料也不會被改變。在設備啟動的階段,UFED將Bootloader引導程序發送到設備的RAM記憶體,設備開始執行引導程序,但不會開機進入至Android作業系統。 接著Cellebrite引導程序僅執行“read-only”動作,開始提取設備上的快閃記憶體。

方式Android版本/晶片組備註
Bootloader
(FW flashing)
7.1.1Qualcomm-based Samsung Galaxy S7
不支援8.0以上版本,會造成開機迴圈
Bootloader
Legacy
支援部分較早的晶片組如Qualcomm 8060, 8250等無法提取加密的手機
Non-Decrypting
Bootloader
支援的晶片組同Decrypting Bootloader裝置需處於未加密狀態
Decrypting
Bootloader
可提取加密手機
Qualcomm chipsets:
8909, 8916, 8939, 8952, 8396 and more.
Kirin: 620, 650, 655, 658, 659, 930, 935, 950, 955, 960.
Exynos: SM-G930F Galaxy S7, SM-G935F Galaxy S7 Edge, SM-A520F Galaxy A5 2017 and SM-J730F Galaxy J7 Pro, SM-G950F Galaxy S8, SM-G955FD Galaxy S8+, SM-G955F Galaxy S8+, SM-N950F Galaxy Note 8, SM-J600G_DS Galaxy J6, SM-J600F Galaxy J6 (2018) and SM-A600FN Galaxy A6
MTK: .6797,6757,6755,6753,6750, 6737, 6735, 6580

表三、UFED 7.15支援之Bootloader提取

Bootloader

在大多數設備中,Cellebrite客製的Bootloader可以繞過所有安全機制,即使設備處於被螢幕鎖定(locked)狀態。因為Cellebrite的Bootloader除了用於讀取設備上的儲器晶片能力外,並沒有執行其它功能的代碼,針對裝置快閃記憶體尚未加密的狀態下適合使用。並且在提取過程中或之後都不寫入任何資料至設備上,且設備並沒有開機進入OS,也無法上網,整個過程是處於Bootloader模式中,所以該模式是符合鑑識科學方法的物理提取。

優點

  • 對於支援的裝置,提取僅需兩個步驟,相對簡單
  • 與其他提取方法相比,因為不須進入作業系統,更加穩健可靠
  • 可無視螢幕鎖,直接物理提取未加密的裝置內容
  • 因是晶片層級漏洞,可忽略裝置Android版本

缺點

  • 無法提取已使用FDE加密的裝置
  • 進入到EDL模式有時非常麻煩

Decrypting Bootloader

Cellebrite的Decrypting Bootloader功能,主要支援Qualcomm(請參考以下表四),Kirin、Exynos與MTK晶片組。同樣藉由晶片本身的漏洞,既使裝置已針對快閃記憶體採用加密機制(FDE – Full Disk Encryption),也可成功完成物理提取出解密的bit-for-bit映像檔。這個提取方式是最完整也最快速,唯一的挑戰是採用Qualcomm晶片組的手機需要進入到EDL(Emergency Download)模式,才可啟動提取過程。

優點

  • 少數可以物理提取加密(FDE – Full Disk Encryption)裝置方法之一
  • 在不知道螢幕鎖的情況下,也可直接提取FDE加密的裝置(但不能啟用Secure Startup)
  • 也可破解或停用螢幕鎖(LockPick功能)

缺點

  • 僅支援有限的晶片組裝置(表三與表四)
  • 如果設置了未知密碼,則無法繞過FBE(File Based Encryption)加密
  • 如果不知道Secure Startup密碼,則無法繞過FDE加密
  • 進入到EDL模式有時非常麻煩
  • 需要6個程序,且手機須開機進入作業系統
支援完整度較高僅部分支援
MSM8909 (2014)MSM8996 (2015)
MSM8916 (2014)MSM8917 (2016)
MSM8939 (2014)MSM8937 (2016)
MSM8936 (2014)MSM8940 (2016)
MSM8952 (2015)MSM8953 (2016)

表四、支援Decrypting Bootloader的Qualcomm晶片組

Recovery Partition提取 – Forensic Recovery Partition Extraction

該提取方式僅支援三星的裝置(手機與平板),發表時間大多數落於於2014~2015間的型號,從UFED手機支援清單上分析,共有38支裝置可使用該提取方式。

提取會在設備處於恢復模式(Recovery Mode)時執行。該過程UFED會將原本裝置的Recovery Partition更換成Cellebrite客製的Forensic Recovery Partition。原本Android設備上的Recovery Partition進入後有可能會變更用戶資料。而Cellebrite的Recovery Partition則避免了這個情況,該功能僅會使用於物理提取(read only),並不會更改任何用戶資料。