2011-01-20 35 views
1

我認爲這是預期的行爲?Linux上的Nvidia信息泄露/內存漏洞和一般操作系統內存保護

來源:http://classic.chem.msu.su/cgi-bin/ceilidh.exe/gran/gamess/forum/?C35e9ea936bHW-7675-1380-00.htm

意譯總結:「我們發現,cudaHostAlloc/cuMemHostAlloc CUDA API調用返回未初始化的固定內存的Linux的端口上的工作該洞可能會允許一個檢查以前使用的內存區域其他程序和Linux內核,我們建議大家停止在任何多用戶系統上運行CUDA驅動程序。「

我的理解是「正常」的malloc返回未初始化的內存,所以我看不出這裏有什麼區別...

我理解的內存分配工作將如何讓下發生的方式:

-userA在系統上運行程序,該程序處理一系列敏感信息。計算完成後,結果寫入磁盤,進程退出,並且userA註銷。

-userB接下來登錄。 userB運行一個程序,請求系統中所有可用的內存,並將其未初始化內存的內容寫入磁盤,該內存包含RAM中留下的userA的一些敏感信息。我不得不在這裏丟失一些東西。它是什麼?內存是否在某處出現了問題?內核/固定內存是否以相關的方式特殊?

回答

1

malloc()返回的內存可能不爲零,但只能在被其他代碼使用並釋放後才能使用相同的進程。絕不是另一個過程操作系統應該嚴格執行進程之間的內存保護,即使在退出之後。

內核/固定內存的特殊之處在於它顯然給內核模式驅動程序提供了打破操作系統過程保護保障的機會。

所以不行,這不是預期的行爲;是的,這是一個錯誤。對於NVIDIA如此迅速的行動表示讚賞!

1

唯一需要root權限才能安裝CUDA的部分是NVIDIA驅動程序。因此,使用NVIDIA編譯器和鏈接完成的所有操作都可以使用常規系統調用和標準編譯(只要您具有正確的信息-lol-)即可完成。如果存在任何安全漏洞,它將保留,無論是否修改了cudaHostAlloc/cuMemHostAlloc。

我對在這篇文章中看到的第一個答案不確定。 malloc的手冊頁指定 內存未被清除。免費的手冊頁沒有提及任何清除記憶。 內存的清除似乎是在敏感部分的編碼員的責任範圍內 - 這會導致出現意外(罕見)退出的問題。除了VMS(好但不是廣泛使用的操作系統),我不認爲任何操作系統都會接受系統清除的性能成本。我不清楚這個系統可能會在新分配的內存堆中跟蹤之前在過程域中的內容,而不是。我的結論是:如果您需要嚴格的隱私級別,請不要使用多用戶系統 (或使用VMS)。