Apple iOS 作業系統
可否恢復被刪除的資料?

2024-12-9 by 高田鑑識

iOS 作業系統的檔案

為了提供更高的隱私和資安保護,蘋果持續強化 iPhone 與 iPad 等裝置的系統安全,包括採用更高等級的加密機制,以防止或限制可讀取的數據。

在 iOS 裝置的儲存空間內,所有檔案都以加密方式存儲,而所使用的加密金鑰都是唯一且不重複的。當刪除檔案時,加密金鑰會立即被銷毀,即使被刪除的檔案仍然存在於儲存空間內,即使擁有低階讀取儲存分區的能力(這需要越獄或漏洞),也無法「恢復已被刪除檔案 – undelete」。

有關 Apple 如何針對檔案系統加密,可參考「iOS資料保護機制簡介」這篇文章。

iOS-Data-Protection

圖一、iOS Data Protection 架構

不過,某些類型的資料仍然可以恢復,因為它們要麼不是檔案,或沒有真正被刪除。這些數據包括:

照片和影片:一旦在 iPhone 上刪除照片,系統並不會立即刪除檔案,而是將照片移到一個特殊的相簿(「最近刪除」資料夾)。照片會在「最近刪除」相簿中保留至少 30 天。在此期間,使用者可以輕鬆恢復刪除的照片。

訊息:你的文字簡訊和 iMessage 會存儲在 SQLite 格式的資料庫中。預設情況下,SQLite 不會立即覆蓋被刪除的記錄,而是將它們標記為「已刪除」。刪除的頁面 (Page) 成為未使用的 (Free Page),並儲存在稱為「空閒列表 – Freelist」的地方。如果取得資料庫檔案(透過備份),這些記錄可以被恢復,直到資料庫被完全清理和重組(如果是這樣,刪除將變得永久)。這種情況在 iOS 8 至 iOS 11 中是如此。但從 iOS 12 之後,Apple 似乎採用了非標準程序,任何紀錄在刪除後幾乎立即物理清除。因此,在 iOS 12 之後版本,刪除的訊息和 iMessage 將無法恢復。

書籤:被刪除的 Safari 書籤儲存在 HomeDomain/Library/Safari/Bookmarks.db 資料庫內,採用 SQLite 格式。在 iOS 12 及之前版本,刪除的書籤可以從 SQLite 數據庫中恢復。從 iOS 13 開始,刪除的書籤無法再恢復。

歷史紀錄:Safari 的瀏覽歷史存儲在 AppDomain-com.apple.mobilesafari/Library/Safari/History.db 的 SQLite 資料庫內。從 iOS 12 之後,刪除的 Safari 瀏覽歷史無法再恢復。

Safari 開啟的分頁:從 iOS 10 開始,Safari 開啟的分頁儲存在 AppDomain-com.apple.mobilesafari/Library/Safari/BrowserState.db 的 SQLite 資料庫內。在 iOS 10 和 11 中,開啟的分頁會無限期儲存,直到關閉為止,包括在私密瀏覽模式中開啟的分頁。然而,即使分頁已關閉,它們仍然可以被恢復。從 iOS 12 開始,這種情況不再成立。iOS 13 導入了額外的保護機制,允許用戶指定分頁可以保持開啟的最長時間,並在該時間過後自動關閉分頁並刪除相應的記錄。在 iOS 12 之後,關閉的 Safari 分頁無法再恢復。

Safari 閱讀列表:書籤儲存於 com.apple.ReadingList 下。從 iOS 13 開始,從閱讀列表中刪除的項目無法再恢復。

聯絡人、日曆、備忘錄和通話記錄:這些都儲存在各自對應的 SQLite 資料庫中。刪除的記錄可以透過提取和掃描資料庫檔案來恢復,除非資料庫已被清理和重組。

檔案 App:在裝置上使用「檔案 App」刪除檔案時,這些檔案會移至「最近刪除」資料夾。可以透過打開「位置 > 最近刪除」來找到並復原這些檔案。

iCloud Drive 中的檔案:就像照片和影片一樣,在 iCloud Drive 中儲存的檔案不會立即被刪除。根據 Apple 的說法,「當你從 iCloud Drive 刪除檔案時,它會進入『最近刪除』資料夾。如果你改變主意或不小心刪除了檔案,你有 30 天的時間可以恢復。前往『位置 > 最近刪除』,選擇你想要保留的檔案並點擊恢復。需注意 30 天後,檔案會從『最近刪除』中移除。」

確實,大多數的檔案只能從之前製作的備份中恢復。

從 iOS 13 開始,許多刪除的數據無法直接恢復,無論使用的是 iTunes、iCloud 還是其他備份方法。

圖片來源:Elcomsoft

SQLite 資料庫的紀錄

在較舊版本的 iOS 中,從 SQLite 資料庫中刪除一筆紀錄(record)時,出於資源考量,該紀錄並不會立即被完全清除,而只是被資料庫引擎標記為「已刪除」,並將包含該紀錄的 Page 標記為「未使用」,同時將其加入到 「freelist」 中以供追蹤並後續再次使用該空間。這意味著直到資料庫引擎進行整理(如 defragment 或 vacuum)時,才會將未使用的 Page 重新整理,並移除已刪除的紀錄。

要恢復已刪除的記錄(像是簡訊、通話記錄或聯絡人),主要問題在於現代 iOS 版本中 SQLite 資料庫的變動性。從裝置上取得 SQLite 資料庫檔案的唯一方法是透過 iTunes 備份。在新的 iOS 版本中,SQLite 資料庫皆使用預寫日誌(WAL),其中一些未合併的「已刪除」記錄可能還能恢復。然而,一旦開始進行 iTunes 備份,SQLite 資料庫會與預寫日誌合併(WAL),已刪除的記錄就會永久移除。

不過,有一個例外:可以透過 AFC 協議取得的媒體檔案資料庫。這些資料庫包含所有已索引照片和影片檔案的中繼資料,包括用戶刪除的(甚至從「最近刪除」相簿中清除的)檔案。雖然對大多數人來說,照片的中繼資料價值不大,但對鑑識人員而言,可能提供重要線索。

技術上來說,可以透過越獄或漏洞直接取得 SQLite 資料庫與其相關檔案。這時若取得 WAL 檔案,有可能可以恢復刪除的資料。