UFS系列9:UFS資料安全

想個id好難啊發表於2020-11-14

前面提到RPMB使用認證機制和抗重放攻擊機制保障資料不被黑客攻擊,除此之外,UFS還有其它一些手段來保護使用者資料安全,這一章節我們來關注UFS資料安全。

UFS裝置用來儲存個人或者企業的資料資訊,UFS裝置需要這樣一種機制,就是必要時,資料能永久從裝置(快閃記憶體)刪除,這樣就能防止別有用心的人通過反向工程獲取你的資料。

話說,陳老師吸取了上次教訓,每次拍照後,事後“閱後即焚”。陳老師想:這樣就沒有人看到我們的照片了吧。陳老師很是得意。

沒有想到,不久後網上又爆出陳老師新的“豔照門”事件。陳老師很是納悶,我不是明明都刪除了嗎??

我們幫陳老師分析一下為什麼刪了的照片還能被修手機的人弄出來。

手機檔案系統把陳老師拍的照片資料用邏輯塊管理,然後把這些邏輯塊寫到UFS裝置的儲存介質(如上圖所示)。陳老師刪除照片,刪除的只是邏輯塊資料,存在UFS儲存介質上的資料還在原地,如下圖所示:

修手機的一看,這不陳老師嗎?修手機的知道肯定能發現什麼,嘴角不禁露出一絲不易覺察的笑。他從檔案中沒有找到照片,有點失望。小子吃一塹長一智呀!但獵奇的心不會讓他輕易放棄的,有經驗的他盯上了儲存卡。功夫不負有心人,他從儲存介質裡把照片弄出來!

拍照不容易,且拍且珍惜。我們看看如何避免陳老師的悲劇。

  • 擦除操作(Erase Operation

注意,這個“擦除”操作不是擦除儲存介質,不是快閃記憶體層面的擦除操作,而是UFS層面的擦除操作。資料寫在快閃記憶體上,UFS裝置內部有個邏輯地址到實體地址的對映,擦除操作通過切斷這種對映,主機就不能獲得擦除掉的資料。

當陳老師刪除照片時,它切斷了使用者直接訪問照片的途徑:

當陳老師刪除照片後,手機系統會通過傳送UNMAP命令(就是通常說的TRIM)來告訴裝置這些照片資料無效。裝置收到該命令後,然後根據邏輯單元描述符中的bProvisioningType來確定執行具體操作。

bProvisioningType

00h: Thin Provisioning is disabled (default)

02h: Thin Provisioning is enabled and TPRZ = 0 (Discard)

03h: Thin Provisioning is enabled and TPRZ = 1 (Erase)

即當bProvisioningType = 03h時,裝置執行擦除操作,即切斷邏輯地址到物理空間的對映。

一個邏輯塊如果被擦除,那麼主機訪問這個邏輯塊時,裝置必須返回全0資料給主機。

注意,這個“擦除”操作不是擦除儲存介質,只是主機讓裝置切斷邏輯地址到實體地址的對映,因此不保證照片資料從快閃記憶體介質刪除。但是,由於UFS裝置知道該照片資料已經刪除(沒有邏輯塊到物理空間的對映),在後續垃圾回收時,這些被刪掉的資料很大概率會從介質上擦除掉。

  • 捨棄操作(Discard Operation

和擦除操作類似,主機通過傳送UNMAP命令來執行捨棄操作。當bProvisioningType = 02h時,裝置執行捨棄操作。

捨棄操作和擦除操作的區別:主機訪問一個被捨棄的邏輯塊,可能獲得任何資料,甚至包括捨棄前的資料,而擦除操作是主機獲得全0資料。也就是說,對刪除的照片,如果UFS裝置執行的是捨棄操作,那麼主機還可能獲得原圖片;如果UFS裝置執行的是擦除操作,主機不可能再獲得原照片。

但不管是捨棄操作還是擦除操作,都不能保證照片從儲存介質上刪除。像修手機這樣的人,它不走尋常路(通過手機系統),直接操作快閃記憶體的話,還是有可能把刪除的照片找回來。

陳老師看到這裡,急了,難道我以後再也不能拍照了嗎??

別急,小陳!你先坐下,聽我慢慢講。

  • 安全清除(Secure Removal

陳老師,有三種可選策略用以安全清除資料,你造嗎?

1. 裝置控制器擦除(Erase)要被刪除的邏輯塊所對應的實體地址空間;

2. 裝置控制器用單一字元覆蓋寫要被刪除的邏輯塊所對應的實體地址空間,然後擦除裝置;

3. 裝置控制器用單一字元、字元補碼和隨機字元,依次覆蓋寫要被刪除的邏輯塊所對應的實體地址空間。

又是覆蓋寫,又是擦除,照片是徹底從快閃記憶體中刪除了。

陳老師聽到這裡,情緒緩和下來,終於是坐了下來。

  • 清除操作(Purge Operation

清除操作是針對垃圾資料(比如陳老師刪除的照片),讓這些資料不僅不能通過正規渠道(作業系統)訪問,還讓這些資料無法從儲存介質中獲取,徹底把垃圾資料從UFS裝置清除掉。

前面所說的擦除和捨棄操作,都是主機通過命令層的UNMAP命令來實施的。而清除操作則是主機通過裝置管理器的Query功能來告訴裝置的。

這裡涉及到一個重要的標誌(flag)和一個重要的屬性(Attribute),分別是發PurgeEnable和bPurgeStatus,前者用以使能/禁止清除操作,後者用以裝置向主機提供清除操作的狀態資訊。

fPurgeEnable:

  1. 上電或者重啟,該標誌位0;
  2. 主機通過設定或者清除該標誌,使能或禁止清除操作;
  3. 只有當所有邏輯單元的命令佇列空的時候,主機才能設定該標誌為1使能清除操作;
  4. 當UFS裝置執行完清除操作或者發生錯誤,該標誌會被清零;

如果主機想終止裝置執行清除操作,可以通過清除該標誌達到目的。

bPurgeStatus:

主機為了讓裝置執行清除操作,主機通過QUERY REQUEST UPIU設定fPurgeEnable = 1。如果當前邏輯單元的命令佇列中沒有任何命令,裝置會執行清除操作。一旦裝置開始執行清除操作,它不會響應主機發來的任何命令。如果這個時候主機需要讓裝置緊急響應命令,主機首先應該通過QUERY REQUEST UPIU設定fPurgeEnable = 0來提前終止裝置的清除操作,然後再傳送命令。

下圖是清除操作的狀態機圖:

UFS裝置在執行清除操作時,對那些垃圾資料,有以下幾種處理方式:

  1. 預設是把這些垃圾資料從快閃記憶體空間擦除掉;
  2. 或者先用單個字元(比如全A)覆蓋寫,然後再擦除;
  3. 抑或先用單個字元(比如A)覆蓋寫,然後用它的補碼(比如5)覆蓋寫,最後用隨機字元覆蓋寫;
  4. 最後還可以使用使用者自定義的方式處理。

這些手段前面已經介紹過。

  • 格式化裝置(Wipe Device

主機通過傳送FORMAT UNIT命令格式化所有的邏輯單元(RPMB LU除外)。不過,對那些防寫的邏輯單元,FORMAT UNIT命令會失敗。

FORMAT UNIT的命令物件是Device well know LU,它格式化除RPMB之外所有無防寫的邏輯單元。

FORMAT UNIT會切斷邏輯塊到物理空間的對映。但如果要讓資料徹底從裝置上清除,UFS裝置還需要執行Purge操作,這樣資料才能徹底刪除。

  • 防寫

前面都是千方百計的清除資料,但有時候UFS裝置需要保護寫的資料。

每個邏輯邏輯單元(除了RPMB)有防寫屬性。防寫包括永久防寫和上電防寫,前者的意思是說,一旦該邏輯單元防寫使能,將終生是防寫(不能改回去了);而後者防寫只對某次上電有效,如果裝置重上電或者重啟,防寫將失效。

最後總結一下UFS資料安全機制:

  1. 安全擦除(本章重點講述);
  2. 防寫(本章講述);

RPMB,提供資料認證和抗重放攻擊機制保護一些重要資料,請參看RPMB章節。

相關文章