我知道你在同步什麼:透過 syncfs 對檔案系統發動的隱蔽和旁路攻擊
Concepts de base
本文揭露了一種針對檔案系統的新型旁路攻擊,攻擊者可以利用作業系統中的 syncfs 系統呼叫洩漏的時間資訊,推斷出受害者裝置的敏感資訊,例如網站瀏覽紀錄、影片播放內容和應用程式使用情況,甚至可以建立跨容器的隱蔽通道進行通訊。
Traduire la source
Vers une autre langue
Générer une carte mentale
à partir du contenu source
I Know What You Sync: Covert and Side Channel Attacks on File Systems via syncfs
本研究論文揭露了一種利用作業系統檔案系統中 syncfs 系統呼叫進行攻擊的新方法。syncfs 主要用於將記憶體中的資料同步到儲存裝置,確保資料一致性。然而,研究發現,由於 syncfs 的執行時間會受到其他程序 I/O 操作的影響,攻擊者可以透過監控 syncfs 的延遲時間,推斷出受害者裝置的敏感資訊。
研究貢獻
本論文的主要貢獻包括:
新型攻擊向量: 分析 Linux 和 Android 系統中的 syncfs 系統呼叫,發現其時間洩漏問題,並將其作為一種新型攻擊向量。
隱蔽通道攻擊: 設計並實現了一種基於 syncfs 的快速且穩定的隱蔽通道,並展示了其在 Linux 和 Windows 檔案系統上的有效性。
端到端旁路攻擊: 提出了三種高精度的旁路攻擊,用於推斷受害者瀏覽的網站、觀看的影片和使用的應用程式,準確率、召回率和 F1 分數均超過 90%。
跨容器攻擊: 將基於 syncfs 的攻擊擴展到容器化環境,展示了容器偵測和跨容器隱蔽通道的可行性。
研究方法
研究人員首先分析了不同 I/O 操作對 syncfs 執行時間的影響,發現寫入操作、檔案截斷操作和檔案重新命名操作都會導致 syncfs 延遲增加。接著,他們利用這些洩漏資訊設計了三種攻擊方式:
網站指紋辨識: 透過監控瀏覽器載入網站時產生的寫入模式,推斷出受害者訪問的特定網站。
影片指紋辨識: 利用影片播放過程中緩衝區的寫入模式差異,辨識受害者觀看的影片內容。
應用程式指紋辨識: 監控應用程式啟動時產生的寫入模式,辨識受害者正在使用的應用程式。
研究結果
實驗結果顯示,攻擊者可以利用 syncfs 洩漏的時間資訊,成功地進行網站指紋辨識、影片指紋辨識和應用程式指紋辨識攻擊。此外,研究人員還展示了在容器化環境中,攻擊者可以透過監控 syncfs 延遲時間,偵測容器的啟動和停止,並建立跨容器的隱蔽通道進行通訊。
研究結論
本研究揭示了作業系統檔案系統中存在的一種新型旁路攻擊途徑,攻擊者可以利用 syncfs 系統呼叫洩漏的時間資訊,獲取受害者裝置的敏感資訊。研究結果對於提升作業系統和容器化環境的安全性具有重要意義。
Stats
在 Linux 系統上,透過 syncfs 建立的隱蔽通道頻寬最高可達 4.98 Kbps,錯誤率為 0.15%。
在 Windows 系統上,透過 syncfs 建立的隱蔽通道頻寬最高可達 7.61 Kbps,錯誤率為 1.9%。
網站指紋辨識攻擊的 F1 分數在封閉環境和開放環境中均超過 93%。
影片指紋辨識攻擊在 YouTube 平台上的 F1 分數超過 95%,在 Bilibili 平台上的 F1 分數超過 89%。
應用程式指紋辨識攻擊的平均 F1 分數超過 93%。
Questions plus approfondies
除了 syncfs 之外,作業系統中是否還存在其他可能洩漏敏感資訊的系統呼叫?
是的,除了 syncfs 之外,作業系統中還存在其他可能洩漏敏感資訊的系統呼叫。這些系統呼叫通常用於管理系統資源或與硬體互動,而這些操作的時序或結果可能會間接洩漏關於其他程序的資訊。以下是一些例子:
時間相關的系統呼叫:
clock_gettime()、gettimeofday():這些系統呼叫用於獲取當前時間,惡意程式可以通過監測這些呼叫的時序變化來推斷其他程序的活動,例如推測密碼輸入的時機。
sleep()、usleep()、nanosleep():這些系統呼叫用於暫停程序的執行,惡意程式可以利用這些呼叫精確控制自身執行時間,並結合其他時序測量技術來進行攻擊。
資源管理相關的系統呼叫:
malloc()、free()、mmap()、munmap():這些系統呼叫用於管理記憶體資源,惡意程式可以通過監測記憶體分配和釋放的模式來推斷其他程序的行為,例如推測資料結構的大小和佈局。
I/O 相關的系統呼叫:
read()、write()、open()、close()、fsync():這些系統呼叫用於讀寫檔案和設備,惡意程式可以通過監測檔案訪問的時序和模式來推斷其他程序的活動,例如推測正在處理的檔案類型和內容。
其他系統呼叫:
getpid()、getppid()、getuid()、geteuid():這些系統呼叫用於獲取程序和用戶資訊,惡意程式可以利用這些資訊來識別目標程序或用戶,並發起更有針對性的攻擊。
需要注意的是,以上只是一些常見的例子,實際上任何系統呼叫都可能被用於側通道攻擊,具體取決於攻擊者的目標和系統的實現細節。
針對這種新型攻擊,作業系統開發者可以採取哪些防禦措施來保護用戶隱私?
針對利用 syncfs 等系統呼叫發起的側通道攻擊,作業系統開發者可以採取以下幾種防禦措施來保護用戶隱私:
降低時序資訊的精度:
對時間相關的系統呼叫進行模糊化處理,例如加入隨機延遲或降低時鐘精度,使得攻擊者難以通過時序測量來推斷敏感資訊。
將多個程序的 I/O 操作進行批次處理,例如將 syncfs 呼叫延遲到系統空閒時再統一執行,可以混淆個別程序的 I/O 行為。
隔離敏感操作:
將不同安全域的程序隔離在不同的檔案系統或儲存設備上,例如使用容器技術或虛擬化技術,可以防止惡意程式通過共享檔案系統來竊取資訊。
對敏感的系統呼叫進行限制,例如只允許特定程序或用戶使用 syncfs 呼叫,可以減少攻擊面。
增強系統監控和日誌記錄:
監控系統中 syncfs 等系統呼叫的使用情況,例如記錄呼叫頻率、時序分佈等資訊,可以幫助檢測異常行為。
開發新的工具和技術來分析系統日誌,以便及時發現和阻止潛在的攻擊。
持續更新和修補漏洞:
及時更新作業系統和相關軟體,修補已知的安全漏洞,可以防止攻擊者利用漏洞發起攻擊。
鼓勵安全研究人員和開發者積極參與漏洞挖掘和防禦技術的研究,共同提升作業系統的安全性。
需要注意的是,沒有一種防禦措施是完美的,攻擊者總是可以找到新的方法來繞過防禦機制。因此,作業系統開發者需要不斷努力,提升系統的安全性,以應對不斷變化的安全威脅。
如果將這種攻擊方法應用於物聯網設備等資源受限的環境中,其效果和可行性如何?
將基於 syncfs 的攻擊方法應用於物聯網設備等資源受限的環境中,其效果和可行性會受到以下因素的影響:
優勢:
攻擊程式碼簡單: syncfs 是常見的系統呼叫,攻擊程式碼相對簡單,易於在資源受限的設備上運行。
適用於多種檔案系統: 許多物聯網設備使用基於 Linux 的作業系統,syncfs 在這些系統中普遍存在,因此攻擊面較廣。
劣勢:
時序測量精度受限: 物聯網設備的處理器性能和時鐘精度通常較低,這會影響時序測量的精度,降低攻擊的成功率。
背景雜訊較多: 物聯網設備的運行環境通常比較複雜,存在較多的背景雜訊,例如其他程序的活動、網路延遲等,這些雜訊會干擾時序測量,增加攻擊的難度。
防禦措施更容易部署: 由於資源受限,物聯網設備上的軟體功能通常比較簡單,這使得部署一些防禦措施,例如降低時鐘精度、隔離敏感操作等,變得更加容易。
可行性:
總體而言,將基於 syncfs 的攻擊方法應用於物聯網設備是可行的,但攻擊的成功率和效率會受到設備資源和運行環境的限制。攻擊者需要根據具體情況調整攻擊策略,例如使用更精確的時序測量技術、選擇合適的攻擊目標等。同時,物聯網設備的開發者也應該重視此類攻擊,採取相應的防禦措施,例如降低時序資訊的精度、隔離敏感操作等,以保護設備和用戶的資訊安全。