題:
在RAM中保護數據的含義
user19833
2012-07-03 19:35:36 UTC
view on stackexchange narkive permalink

有人告訴我,為了安全起見,他的公司正在將所有應用程序數據(至少我猜是敏感數據)存儲在RAM中。他們的應用程序運行時間很長,因此數據會長時間保留在內存中。 RAM難於訪問/利用,還是僅僅是因為它易失?

當所有敏感數據都保留在RAM中時,這聽起來像是我的潛在問題。如果RAM物理上消失了怎麼辦?
數據如何進入ram?它不是必須從數據庫或文件開始嗎?當然數據可以被加密。
當操作系統交換時,更不用說內存中的數據可以進入磁盤了。
@herby:沒有交換可以解決該問題。
@Blrfl或僅使用[VirtualLock]之類的API將內存頁標記為不可交換(http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa366895%28v=vs.85 %29.aspx)
七 答案:
Gilles 'SO- stop being evil'
2012-07-03 23:02:24 UTC
view on stackexchange narkive permalink

在正確的條件下以及在要求允許的情況下,將信息保留在RAM中可以增強安全性。我將展示兩種安全架構,其中將數據保留在RAM中可帶來安全優勢。這些是相當具體的場景;

防止文件轉儲攻擊

請考慮一個用於處理服務器上文件的Web應用程序。它可能具有的一種漏洞是允許用戶下載根本不應該公開顯示的文件。如果一條關鍵數據僅存儲在某些進程的內存中(此處與內存無關,而是與文件系統相對應的虛擬內存),那麼它不會被文件暴露漏洞所揭示。 p>

當然,可以通過其他漏洞來揭示數據,例如,通過一條攻擊鏈,該攻擊鏈首先安排將機密數據寫入文件(例如某種類型的錯誤轉儲),然後再進行攻擊。轉儲文件。

僅在未從文件中加載數據時,將數據保留在內存中才有幫助。引導後在哪裡獲取數據?數據可以加密存儲,但是重啟後需要有人輸入解密密鑰。對於大多數Web應用程序來說,這是沒有好處的,因為它們無法承受停機時間。數據可以存儲在文件中,該文件需要Web服務器沒有的其他特權:Web服務器進程將以提升的特權開始,讀取文件,然後刪除特權。這提高了攻擊者的門檻,因為除了使他們立足的遠程漏洞之外,他們還必須找到本地特權升級漏洞。好處仍然很小,因為許多使攻擊者獲得不受特權的本地訪問的攻擊還提供了一種檢查活動進程內存的方法。

防禦某些具有物理訪問權限的攻擊

如果RAM電源關閉,則RAM中的信息會消失。因此,如果攻擊者只能通過關閉電源來設法控制目標系統,那麼僅在RAM中訪問數據時,他將面臨更多的麻煩。但是,將數據存儲到RAM本身並不會帶來多大好處,因為 RAM具有幾秒鐘到幾分鐘的剩餘數據容量。 (另請參閱從關閉的PC中恢復RAM的先前內容嗎?)。這足以將計算機重新啟動到由攻擊者控制的操作系統,或將RAM棒轉移到另一台計算機。 (另請參閱斷電後是否存在不保留數據的易失性存儲芯片?

對數據進行加密會有所幫助,但是您必須將加密密鑰存儲在某個地方。而且,如果您要加密數據,則仍可以在磁盤上進行加密。加密大多數敏感數據確實有幫助,因為如果攻擊者不夠幸運而丟失了密鑰,則數據是安全的。

因此,為了將數據存儲在RAM中以增強安全性,必須其他物理安全措施。如果RAM位於防篡改外殼內,如果打開則導致電源關閉,則可能足以超出RAM的剩餘容量。為了獲得更好的結果,篡改嘗試應該導致主板在關閉電源之前將RAM歸零(這意味著主板應該有一塊小電池)。加密數據會有所幫助,因為這時只需要將密鑰清零即可,所需時間較短。即使可以使用足夠好的工具來克服防篡改措施,它也比簡單的傳遞和抓取更加困難(帶有斷線鉗的入侵者比帶有手機殼內部電路板的攻擊者更為明顯。 )。

更進一步,值得對RAM進行加密,並確保將密鑰保存在處理器緩存或寄存器中。攻擊者通常必須重新啟動才能嘗試獲取密鑰。足夠迅速地重新啟動以找到原始緩存,而又不破壞緩存更困難,並且拔出CPU的難度比拔掉RAM的難度更大。

當然總是存在從何處加載數據的問題(或者加密,存儲密鑰)。一些用例重視機密性而不是可用性,並且可以承受每次重啟後要求有人進入並輸入密鑰的情況(例如,大數據中心可能會有人晝夜不停地進行操作,以防入侵者走得那麼遠)。此安全措施還可以使處理數據但不存儲數據的系統受益。

RAM加密如何工作?它不會破壞DMA嗎?
@Mehrdad RAM加密可以使用專門的硬件進行處理,該硬件可以處理數據到總線上的數據,如果您有一些高安全性的內存(例如,CPU內高速緩存),並且將其餘部分視為交換,則可以在軟件中進行。除非設備本身俱有與CPU的共享通信密鑰,否則用於DMA的內存必須為純文本格式。
Gary Rowe
2012-07-03 19:51:23 UTC
view on stackexchange narkive permalink

他們對模糊的安全感感到放心

如果某人獲得了對您計算機的root訪問權限,則他們可以看到任何應用程序可以看到的所有內容。 。如果應用程序必須能夠使用純文本,那麼加密將無濟於事,因為應用程序必須將密鑰存儲在某個地方。隱藏這些密鑰是模糊安全性的來源-最終入侵者將找到並複制它們。

儘管如此,將所有數據保存在RAM中確實可以衡量物理安全性,因為斷電意味著數據丟失。但是,一旦數據離開RAM並進入永久性存儲(例如通過內存交換操作),則所有選擇都將關閉。此外,任何值得一提的數據中心都將製定可靠的物理安全計劃,以防止入侵,因此毫無意義。

當然,出於性能考慮,將數據保留在RAM中以便快速訪問是完全有效的,只是不要以為安全性會因此得到增強。

對此的一項改進是通過內核模塊將加密數據存儲在非頁面緩衝池中。這樣一來,您就可以將數據放置在系統的同一區域中,這將是完整性的最終依據。一旦內核模式被破壞,整個機器就會被破壞。不確定如何在允許`/ dev / kmem`訪問root的Linux系統上將其堆疊,但是至少它增加了潛在攻擊的複雜性。
或者,他們可以使用[HSM](http://en.wikipedia.org/wiki/Hardware_security_module)。
@Polynomial“允許`/ dev / kmem`訪問root_的_”我相信通常在“強化”敏感系統上將其關閉
您的第一句話和最後一句話太強硬。正如您在兩者之間討論的那樣,這取決於數據流是什麼。
@curiousguy想了很多。我對Linux強化不太熟悉,但是我有種感覺不允許這樣做。
Luke
2012-07-04 04:27:03 UTC
view on stackexchange narkive permalink

我很驚訝沒有人指出核心文件的危險。當進程崩潰時,大多數Unix或Linux變體都會幫助將“核心”文件寫入磁盤。核心文件通常在崩潰時包含該進程的RAM內容,以便您可以嘗試查找導致問題的數據或條件。以後,具有正確權限的用戶可以訪問此文件,並蒐索無效進程曾經保存在內存中的數據殘留。僅出於這個原因,我要說的是,保存在內存中的數據實際上並沒有比存儲在磁盤上的數據更安全。有人對此有何補充?

有什麼要補充的嗎?當然:`ulimit -c 0`。顯然,如果要將數據保留在RAM中,則必須禁用諸如交換到磁盤和崩潰轉儲之類的操作。
Telastyn
2012-07-03 19:42:53 UTC
view on stackexchange narkive permalink

這有點困難,因為在關閉電源後它確實消失了。它要求有人在機器運行時獲得對計算機的訪問權限,而不僅僅是竊取硬盤驅動器/筆記本電腦。

也就是說,需要從 somewhere 處填充內存。如果那是一台遠程計算機,那麼您已經打開了一條攻擊途徑,在大多數情況下,這通常比將數據保留在磁盤上的風險更大。

“ _也就是說,需要從某個地方填充內存。_”聽到!聽!如果那是推薦“ all in RAM”解決方案的人的話,那麼“ _If那是一台遠程計算機_”,他們應該這樣說。如果您不說數據的來源,“我將數據保存在RAM中”是一個空洞的安全概念**。
Bratch
2012-07-03 19:46:51 UTC
view on stackexchange narkive permalink

與磁盤相比,內存可能更難從中檢索敏感信息,但是可能性仍然存在。如果數據也未加密,則可能會遭到破壞。因此,我們最近在PowerShell中研究了安全字符串。是的,它有時需要是純文本,而不必等待使用。可以從強制崩潰轉儲中檢索來自RAM的數據,僅僅因為它在RAM中並不意味著它在分頁操作期間就永遠不會到達磁盤上。

為了將數據存儲在RAM中以提供幫助,您必須設計整個系統來實現這種安全性,但是您不能將其插入現有的基礎架構中。
@Gilles-我相信您對OP中提到的大量數據是正確的。 PowerShell具有專門用於處理安全字符串的方法,但是通常它是少量數據,例如一些變量或密碼。
Oleksi
2012-07-03 19:44:51 UTC
view on stackexchange narkive permalink

我認為這主要是愚蠢的。如果攻擊者可以訪問您硬盤上的數據,幾乎可以肯定他們也將訪問您的內存(反之亦然)。無論數據位於何處,都需要對其進行加密。

此外,將所有數據保留在內存中可能會對應用程序造成一些不良影響(內存膨脹,更複雜的代碼等)。解決問題的方式。

“無論數據位於何處,都需要對其進行加密。”在哪裡存儲加密密鑰? “這不是解決他們問題的“正確”方法。”不知道他們的問題是什麼,怎麼知道?
crcat
2018-11-20 12:54:31 UTC
view on stackexchange narkive permalink

可以幫到的是依賴於硬件信任根的新內存加密技術,例如英特爾的SGX和AMD的SEV。對於Intel SGX,應用程序的數據使用只能由CPU訪問的密鑰在內存中加密,並且可以固定到特定代碼,這樣其他應用程序(甚至是root用戶)都無法訪問此外,可以使用特定於CPU的密鑰對存儲的數據(靜態)進行加密,這可以防止上述某些攻擊。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...