簡體   English   中英

進程內存中的密碼,但不在堆轉儲中

[英]Password in the process memory but not in the heap dump

我最近偶然發現了java進程的問題,人們可以使用像http://processhacker.sourceforge.net這樣的工具來檢查運行時應用程序的內存。 該工具 - 顯示用於在應用程序中進行身份驗證的密碼。 我已經調查了這個問題,密碼似乎在使用后就歸零了。 我嘗試使用Java Mission Control進行堆轉儲(禁用GC)並查看是否可以檢索密碼。 使用Eclipse Memory Tool我運行簡單的查詢,如:

SELECT * FROM char[] c WHERE toString(c).startsWith("mypasswordsample")

但是這並沒有產生任何結果,並且在一小時左右之后密碼仍然在進程黑客中可見。 如果我在啟用GC的情況下執行堆轉儲 - 進程黑客似乎不再找到密碼。

在幕后做什么JVM? 為什么我在活動對象中找不到密碼? 我可以進行某種轉儲,看看這個密碼存儲在哪里,誰創建了它,為什么沒有歸零?

這個問題太具體了,但許多密碼(尤其是JAAS)將使用字符數組而不是字符串,並在使用后明確將字符清零。 因此,如果您在登錄時遇到堆轉儲,您可能會看到它; 但如果沒有,那么你就不會。 請參閱使用此機制的JAAS的PasswordCallback

(使用了一個字符數組,因為數組是可變的;因此,您可以在事后通過並將每個字符設置為空格,或者在用於進行身份驗證后將其設置為\\0這樣即使GC不能快速清理它,內存的內容不應該包含窺探進程的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM