LWN: 避免ext4文件系統(tǒng)中泄露個(gè)人信息!
關(guān)注了就能看到更多這么棒的文章哦~
Preventing information leaks from ext4 filesystems
By Jonathan Corbet
April 27, 2021
DeepL assisted translation
https://lwn.net/Articles/854054/
文件系統(tǒng)的作用是存儲(chǔ)信息,并根據(jù)要求來(lái)獲取原始形式的數(shù)據(jù)。但是,文件系統(tǒng)也應(yīng)該防止那些不應(yīng)該看到信息的人檢索這些信息。這一要求延伸到了已經(jīng)被刪除的數(shù)據(jù);用戶希望這些數(shù)據(jù)真正消失,并且不歡迎它們?cè)诹钊梭@訝的地方重新出現(xiàn)。在 Ext4 方面所做的一些工作表明,需要采取一些措施才能達(dá)到這個(gè)要求。
在四月初的時(shí)候,Leah Rumancik 發(fā)布了兩組 patch,對(duì) ext4 文件系統(tǒng)的實(shí)現(xiàn)做了一些小改動(dòng)。其中第一個(gè)改動(dòng)會(huì)在刪除一個(gè)文件后確保對(duì)存儲(chǔ)該文件名的空間(在磁盤(pán)上)進(jìn)行覆蓋。在回答人們?cè)儐?wèn)為什么需要這樣做的時(shí)候,ext4 的維護(hù)者 Ted Ts'o 解釋說(shuō),這是針對(duì)有時(shí)用戶會(huì)在文件名中存儲(chǔ)個(gè)人身份信息(PII,personally identifiable information)的情況。當(dāng)這種性質(zhì)的文件被刪除時(shí),用戶希望確保 PII 信息也不再存儲(chǔ)在磁盤(pán)上,這意味著要把文件名也抹掉。
Dave Chinner 很快表示反對(duì)。他認(rèn)為,真正的問(wèn)題在于用戶將 PII 以明文方式保存。擦除目錄里的文件名記錄(directory entry)并不是解決這個(gè)問(wèn)題的真正辦法:
這聽(tīng)起來(lái)越來(lái)越說(shuō)明 "不要在任何地方用明文來(lái)保存 PII" 是一個(gè)非常好的做法,應(yīng)該得到強(qiáng)制執(zhí)行。文件名無(wú)處不在,而且沒(méi)有簡(jiǎn)單的方法來(lái)避免泄露,因?yàn)閮?nèi)核中的任何地方都可以進(jìn)行路徑遍歷。這聽(tīng)起來(lái)就像你在玩一個(gè)永遠(yuǎn)不會(huì)贏的打地鼠游戲。
從安全的角度來(lái)看,這正是一個(gè)糟糕的設(shè)計(jì)。將 PII 存儲(chǔ)在明文的文件名中,幾乎可以確定這個(gè) PII 信息會(huì)被泄露,因?yàn)樗荒鼙磺宄?,也不能被控制在?yīng)用程序自己能控制的范圍內(nèi)。試圖在隨便某個(gè)內(nèi)核子系統(tǒng)中來(lái)控制文件名不被傳播,對(duì)我來(lái)說(shuō)感覺(jué)是一個(gè)笨辦法,尤其是考慮到很少有內(nèi)核開(kāi)發(fā)者知道文件名從安全角度來(lái)看也是敏感信息。
正如 Ts'o 解釋的那樣,這種方法的問(wèn)題在于,相關(guān)人員可能甚至不知道他們的 "legacy workloads" 在做什么。他說(shuō),與其冒著在無(wú)人意識(shí)到的情況下可能暴露 PII 信息的風(fēng)險(xiǎn),不如直接清除文件名。
當(dāng)然,如果一個(gè)文件名被認(rèn)定為 PII,那么其內(nèi)容也可能會(huì)挺有意思。當(dāng)文件被刪除時(shí),也是可能對(duì)文件中的數(shù)據(jù)進(jìn)行覆蓋寫(xiě)入的,盡管這樣做的開(kāi)銷(xiāo)很高。至少在現(xiàn)代的存儲(chǔ)設(shè)備上,可以使用 FITRIM 這個(gè) ioctl(),來(lái)告知驅(qū)動(dòng)器要丟棄這些數(shù)據(jù)。哪怕這個(gè)操作并沒(méi)有從物理上刪除數(shù)據(jù),也應(yīng)該要使這些數(shù)據(jù)后續(xù)不可以被讀取到。由于這個(gè)原因(以及其他一些原因),那些關(guān)心被刪除數(shù)據(jù)仍被保存導(dǎo)致問(wèn)題的管理員會(huì)喜歡定期運(yùn)行 FITRIM 操作。
不過(guò),對(duì)于那些真正的偏執(zhí)狂來(lái)說(shuō)還有一個(gè)小問(wèn)題。Ext4 同許多現(xiàn)代文件系統(tǒng)一樣,都使用日志(journaling)來(lái)確保文件系統(tǒng)寫(xiě)入在被異常打斷的時(shí)候也能保證內(nèi)容一致性。為了實(shí)現(xiàn)這種穩(wěn)健性功能,要寫(xiě)入 Ext4 文件系統(tǒng)的 metadata(元數(shù)據(jù))也會(huì)被寫(xiě)入日志(文件數(shù)據(jù)也可以選擇要不要寫(xiě)入日志),因此,哪怕在文件系統(tǒng)的文件存儲(chǔ)空間中刪除了所有痕跡,這時(shí)日志里仍然可能包含一些 PII 信息。一個(gè)獲得磁盤(pán)訪問(wèn)權(quán)的壞人就可以從日志中獲取到這些數(shù)據(jù),即使文件本身已經(jīng)從文件系統(tǒng)中徹底刪除了。
為了解決這個(gè)問(wèn)題,Rumancik 的第二組 patch 增加了一個(gè)新的 ioctl()命令,稱為 FS_IOC_CHKPT_JRNL,強(qiáng)制將日志也刷新到持久性存儲(chǔ)(persistent storage)。還有一個(gè)可選的 flag,即 CHKPT_JRNL_DISCARD,它會(huì)使文件系統(tǒng)在刷新完成之后對(duì)日志本身也同樣進(jìn)行類似于 FITRIM 的操作。這可以確保沒(méi)有 PII 留在日志數(shù)據(jù)中。
Chinner(在上面提到的那封郵件中)建議,這種行為應(yīng)該是 FITRIM 操作的一個(gè)選項(xiàng),而不是一個(gè)單獨(dú)的命令,不過(guò)他后來(lái)發(fā)現(xiàn) FITRIM 沒(méi)有 flag 這個(gè)字段,因此無(wú)法進(jìn)行擴(kuò)展。他建議,也許現(xiàn)在應(yīng)該增加一個(gè)單獨(dú)的 fstrim() 系統(tǒng)調(diào)用,并且也可以用來(lái)對(duì)日志數(shù)據(jù)進(jìn)行 trim 操作。缺省來(lái)說(shuō),這個(gè)單獨(dú)的系統(tǒng)調(diào)用也會(huì)使所有文件系統(tǒng)都能使用這個(gè),而不是僅僅 Ext4 才能使用這個(gè)特定功能。
這兩個(gè) patch 的目的是幫助系統(tǒng)管理員能確保從文件系統(tǒng)中刪除的數(shù)據(jù)會(huì)真正消失。不過(guò),看起來(lái)它們將以不同的方式被合入內(nèi)核。Rumancik 最近對(duì)于文件名覆蓋這個(gè) patch 單獨(dú)提供了一版更新 patch,Ts'o 隨后就合入了。Ts'o 說(shuō),日志方面的問(wèn)題會(huì)需要更多的討論。不過(guò),最終,這兩個(gè)問(wèn)題的解決方案應(yīng)該能夠進(jìn)入內(nèi)核。這將有助于防止 ext4 文件系統(tǒng)中敏感信息的意外泄露,即使用戶是以不合適的方式來(lái)保存這些敏感信息的。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長(zhǎng)按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開(kāi)源社區(qū)的各種新近言論~
