有人告訴我,為了安全起見,他的公司正在將所有應用程序數據(至少我猜是敏感數據)存儲在RAM中。他們的應用程序運行時間很長,因此數據會長時間保留在內存中。 RAM難於訪問/利用,還是僅僅是因為它易失?
有人告訴我,為了安全起見,他的公司正在將所有應用程序數據(至少我猜是敏感數據)存儲在RAM中。他們的應用程序運行時間很長,因此數據會長時間保留在內存中。 RAM難於訪問/利用,還是僅僅是因為它易失?
在正確的條件下以及在要求允許的情況下,將信息保留在RAM中可以增強安全性。我將展示兩種安全架構,其中將數據保留在RAM中可帶來安全優勢。這些是相當具體的場景;
請考慮一個用於處理服務器上文件的Web應用程序。它可能具有的一種漏洞是允許用戶下載根本不應該公開顯示的文件。如果一條關鍵數據僅存儲在某些進程的內存中(此處與內存無關,而是與文件系統相對應的虛擬內存),那麼它不會被文件暴露漏洞所揭示。 p>
當然,可以通過其他漏洞來揭示數據,例如,通過一條攻擊鏈,該攻擊鏈首先安排將機密數據寫入文件(例如某種類型的錯誤轉儲),然後再進行攻擊。轉儲文件。
僅在未從文件中加載數據時,將數據保留在內存中才有幫助。引導後在哪裡獲取數據?數據可以加密存儲,但是重啟後需要有人輸入解密密鑰。對於大多數Web應用程序來說,這是沒有好處的,因為它們無法承受停機時間。數據可以存儲在文件中,該文件需要Web服務器沒有的其他特權:Web服務器進程將以提升的特權開始,讀取文件,然後刪除特權。這提高了攻擊者的門檻,因為除了使他們立足的遠程漏洞之外,他們還必須找到本地特權升級漏洞。好處仍然很小,因為許多使攻擊者獲得不受特權的本地訪問的攻擊還提供了一種檢查活動進程內存的方法。
如果RAM電源關閉,則RAM中的信息會消失。因此,如果攻擊者只能通過關閉電源來設法控制目標系統,那麼僅在RAM中訪問數據時,他將面臨更多的麻煩。但是,將數據存儲到RAM本身並不會帶來多大好處,因為 RAM具有幾秒鐘到幾分鐘的剩餘數據容量。 (另請參閱從關閉的PC中恢復RAM的先前內容嗎?)。這足以將計算機重新啟動到由攻擊者控制的操作系統,或將RAM棒轉移到另一台計算機。 (另請參閱斷電後是否存在不保留數據的易失性存儲芯片?)
對數據進行加密會有所幫助,但是您必須將加密密鑰存儲在某個地方。而且,如果您要加密數據,則仍可以在磁盤上進行加密。加密大多數敏感數據確實有幫助,因為如果攻擊者不夠幸運而丟失了密鑰,則數據是安全的。
因此,為了將數據存儲在RAM中以增強安全性,必須其他物理安全措施。如果RAM位於防篡改外殼內,如果打開則導致電源關閉,則可能足以超出RAM的剩餘容量。為了獲得更好的結果,篡改嘗試應該導致主板在關閉電源之前將RAM歸零(這意味著主板應該有一塊小電池)。加密數據會有所幫助,因為這時只需要將密鑰清零即可,所需時間較短。即使可以使用足夠好的工具來克服防篡改措施,它也比簡單的傳遞和抓取更加困難(帶有斷線鉗的入侵者比帶有手機殼內部電路板的攻擊者更為明顯。 )。
更進一步,值得對RAM進行加密,並確保將密鑰保存在處理器緩存或寄存器中。攻擊者通常必須重新啟動才能嘗試獲取密鑰。足夠迅速地重新啟動以找到原始緩存,而又不破壞緩存更困難,並且拔出CPU的難度比拔掉RAM的難度更大。
當然總是存在從何處加載數據的問題(或者加密,存儲密鑰)。一些用例重視機密性而不是可用性,並且可以承受每次重啟後要求有人進入並輸入密鑰的情況(例如,大數據中心可能會有人晝夜不停地進行操作,以防入侵者走得那麼遠)。此安全措施還可以使處理數據但不存儲數據的系統受益。
他們對模糊的安全感感到放心
如果某人獲得了對您計算機的root訪問權限,則他們可以看到任何應用程序可以看到的所有內容。 。如果應用程序必須能夠使用純文本,那麼加密將無濟於事,因為應用程序必須將密鑰存儲在某個地方。隱藏這些密鑰是模糊安全性的來源-最終入侵者將找到並複制它們。
儘管如此,將所有數據保存在RAM中確實可以衡量物理安全性,因為斷電意味著數據丟失。但是,一旦數據離開RAM並進入永久性存儲(例如通過內存交換操作),則所有選擇都將關閉。此外,任何值得一提的數據中心都將製定可靠的物理安全計劃,以防止入侵,因此毫無意義。
當然,出於性能考慮,將數據保留在RAM中以便快速訪問是完全有效的,只是不要以為安全性會因此得到增強。
我很驚訝沒有人指出核心文件的危險。當進程崩潰時,大多數Unix或Linux變體都會幫助將“核心”文件寫入磁盤。核心文件通常在崩潰時包含該進程的RAM內容,以便您可以嘗試查找導致問題的數據或條件。以後,具有正確權限的用戶可以訪問此文件,並蒐索無效進程曾經保存在內存中的數據殘留。僅出於這個原因,我要說的是,保存在內存中的數據實際上並沒有比存儲在磁盤上的數據更安全。有人對此有何補充?
這有點困難,因為在關閉電源後它確實消失了。它要求有人在機器運行時獲得對計算機的訪問權限,而不僅僅是竊取硬盤驅動器/筆記本電腦。
也就是說,需要從 somewhere 處填充內存。如果那是一台遠程計算機,那麼您已經打開了一條攻擊途徑,在大多數情況下,這通常比將數據保留在磁盤上的風險更大。
與磁盤相比,內存可能更難從中檢索敏感信息,但是可能性仍然存在。如果數據也未加密,則可能會遭到破壞。因此,我們最近在PowerShell中研究了安全字符串。是的,它有時需要是純文本,而不必等待使用。可以從強制崩潰轉儲中檢索來自RAM的數據,僅僅因為它在RAM中並不意味著它在分頁操作期間就永遠不會到達磁盤上。
我認為這主要是愚蠢的。如果攻擊者可以訪問您硬盤上的數據,幾乎可以肯定他們也將訪問您的內存(反之亦然)。無論數據位於何處,都需要對其進行加密。
此外,將所有數據保留在內存中可能會對應用程序造成一些不良影響(內存膨脹,更複雜的代碼等)。解決問題的方式。
可以幫到的是依賴於硬件信任根的新內存加密技術,例如英特爾的SGX和AMD的SEV。對於Intel SGX,應用程序的數據使用只能由CPU訪問的密鑰在內存中加密,並且可以固定到特定代碼,這樣其他應用程序(甚至是root用戶)都無法訪問此外,可以使用特定於CPU的密鑰對存儲的數據(靜態)進行加密,這可以防止上述某些攻擊。