Passwort im Prozessspeicher, jedoch nicht im Heap-Dump

9

Ich bin kürzlich über ein Problem mit Java-Prozessen gestolpert, bei dem man ein Tool wie Ссылка verwenden kann, um den Speicher der Laufzeitanwendung zu überprüfen . Das Tool - zeigt das Passwort an, das zur Authentifizierung in der Anwendung verwendet wird. Ich habe das Problem untersucht und das Passwort scheint nach der Verwendung auf Null gesetzt zu sein. Ich habe versucht, einen Heap-Dump mit Java Mission Control (mit GC deaktiviert) und sehen, ob ich das Pass-Schwert abrufen kann. Mit dem Eclipse Memory Tool habe ich eine einfache Abfrage wie folgt durchgeführt:

%Vor%

Aber das brachte kein Ergebnis, und das Passwort war nach einer Stunde noch im Prozesshacker sichtbar. Wenn ich den Heap-Dump mit aktiviertem GC mache - der Prozess-Hacker scheint das Passwort nicht mehr zu finden.

Was macht JVM hinter den Kulissen? Warum kann ich das Passwort in den Live-Objekten nicht finden? Kann ich eine Art Dump machen, um zu sehen, wo dieses Passwort gespeichert ist, wer es erstellt hat und warum nicht auf Null gesetzt wurde?

    
Faur Ioan-Aurel 29.02.2016, 16:23
quelle

1 Antwort

1

Dies ist zu spezifisch, um darauf zu antworten, aber viele Passwörter (insbesondere mit JAAS) verwenden ein Zeichen-Array anstelle eines Strings und löschen die Zeichen nach der Verwendung explizit auf Null. Wenn Sie also einen Heap-Dump erhalten, während Sie sich angemeldet haben, sehen Sie es vielleicht; aber wenn nicht, dann würdest du nicht. Siehe den PasswordCallback von JAAS, der diesen Mechanismus verwendet.

(Da ein Array veränderbar ist, wird ein Array von Zeichen verwendet. Daher können Sie jedes Zeichen nach der Authentifizierung durch ein Leerzeichen oder %code% ersetzen. Auf diese Weise wird der GC nicht bereinigt es schnell, der Inhalt des Speichers sollte nicht die Daten für Snooping-Prozesse halten.

    
AlBlue 13.04.2016 13:36
quelle

Tags und Links