
Java-Anwendungszugriff auf geschützte Ressourcen als Logmeldungen externalisieren.
Dokumentation | Änderungen gegenüber dem Upstream | Projekt-Blog
JVMXRay überwacht Java-Anwendungen in Echtzeit mittels Bytecode-Injektion und erkennt Schwachstellen und verdächtige Aktivitäten ohne Codeänderungen. 19 modulare Sensoren überwachen Dateizugriffe, Netzwerkverbindungen, SQL-Abfragen, kryptografische Operationen, Authentifizierung, Prozessausführung und mehr – und generieren strukturierte, maschinenlesbare Sicherheitsereignisse mit automatischer sensorübergreifender Korrelation.
git clone https://github.com/spoofzu/jvmxray.git
cd jvmxray
mvn clean install
Während der Maven-Testphase wird ein kleines Programm namens Turtle unter dem frisch erstellten JVMXRay-Agenten ausgeführt. Turtle führt Datei-I/O, Kryptografie, Prozessausführung, Serialisierung, Reflektion und andere Aktivitäten durch, die die Sensoren auslösen – ein erfolgreicher Build liefert Ihnen also bereits echte Sicherheitsereignis-Logs zum Erkunden in ./target/test-jvmxray/. Eine SQLite-Datenbank wird ebenfalls unter ./target/test-jvmxray/common/data/jvmxray-test.db für schnelle Experimente angelegt. Siehe die Dokumentation für weitere Details.
Bereitstellung als Java-Agent in Ihren eigenen Anwendungen:
java -javaagent:target/jvmxray-0.0.1-agent.jar -jar yourapp.jar
trace_id und scope_chain ermöglichen es SOC-Teams, einen Vorfall von der HTTP-Anfrage über die SQL-Injection bis zur Datenexfiltration in einer einzigen Abfrage zu verfolgen.Beachten Sie, dass JVMXRay eine Quelle der Wahrheit dafür ist, was eine Java-Anwendung tut, und keine Analyse-Engine. Die Analyse erfolgt durch Ihre zentrale Logging-Lösung und/oder Ihre KI-Tooling-Projekte.
Jedes Sensorereignis enthält Korrelationsfelder zur Rekonstruktion von Angriffsketten:
Eine Scope-Kette wie HTTP>Serialization>Reflection>Process ist auf einen Blick eine Deserialisierungs-Angriffssignatur. Die Spalte TRACE_ID ist in der Datenbank für schnelle Korrelationsabfragen indiziert.
java -javaagent:jvmxray-agent.jar -jar app.jar
|
AgentBootstrap (isolated classloader)
|
ByteBuddy installs sensor interceptors
|
Sensors fire on method entry/exit
|
LogProxy merges MCC correlation context
|
+----------+----------+----------+
| SQLite | File | Socket |
| Appender | Appender | Appender |
+----------+----------+----------+
Dieses Projekt wurde unter Verwendung von Ideen, Architektur und in einigen Fällen Code von den folgenden entwickelt:
Milton Smith — Projektersteller, Leiter
Hinweis: JVMXRay wird von Oracle Corporation weder genehmigt, unterstützt noch ist es mit ihr verbunden.
| Sensor | Überwachung |
|---|
| File I/O | Datei-Lesen, -Schreiben, -Löschen, Berechtigungen, Symlinks mit Pfadauflösung und aggregierte E/A-Statistiken |
| Network | Socket-Verbindung/Annahme/Binden/Schließen mit TLS-Erkennung, private IP-Klassifizierung, Timing |
| SQL | Abfrageerfassung mit Parametrisierungserkennung, Operationstyp, Dauer, Verbindungsmetadaten |
| HTTP | Anfrage/Antwort mit Sicherheitsheader-Analyse, Benutzer-/Sitzungskorrelation |
| Process | ProcessBuilder.start() und Runtime.exec() mit Befehlsargumenten, Dauer, Exit-Status |
| Crypto | Cipher/KeyStore/MessageDigest/SSL mit Erkennung schwacher Algorithmen und Schlüssellängenvalidierung |
| Authentication | Sitzungsoperationen, JAAS-Login, Spring Security-Authentifizierung, Principal-Abfragen mit Erfolgs-/Fehlerverfolgung |
| API Call | HttpClient.send() mit URI, Methode, Host, TLS, Antwortstatus, Timing |
| Script Engine | ScriptEngine.eval() mit Engine-Identifikation, Inhalts-Hashing, Erkennung verdächtiger Muster, Risikostufe |
| Serialization | Java-native, Jackson, Gson, XStream-Deserialisierung mit Gadget-Chain-Erkennung |
| Reflection | Class.forName, Method.invoke, Feldzugriff, setAccessible mit Bedrohungsklassifikation |
| Configuration | Systemeigenschaften, Umgebungsvariablen, Properties-Dateien, Preferences mit Sicherheitsannotierungen |
| Library | Statisches und dynamisches JAR-Laden mit SHA-256, Maven-Koordinaten, Paketinventar |
| Monitor | JVM-Gesundheit: Speicher, Threads, GC, CPU, offene Dateien, Deadlock-Erkennung (60-Sekunden-Intervall) |
| Uncaught Exception | Absturzdiagnose: vollständiger Stack, Speicherzustand, Thread-Dump, Ursachenkette, Vorfall-ID |
| App Init | Einmalige Startaufzeichnung: JVM-Version, Betriebssystem, Containererkennung, Umgebungsvariablen (geschwärzt) |
| Data Transfer | InputStream.read() Byte-Zählung (derzeit deaktiviert – zu breit) |
| Thread | Thread-Lebenszyklusüberwachung (derzeit deaktiviert – rekursive Logging-Behebung erforderlich) |
| Memory | Speicherzuweisungsverfolgung (derzeit deaktiviert – rekursive Logging-Behebung erforderlich) |
| Feld | Beispiel | Zweck |
|---|
trace_id | a1b2c3d4e5f6 | Verknüpft alle Ereignisse im selben Ausführungskontext |
scope_chain | HTTP>SQL>FileIO | Verschachtelter Sensorpfad – der „Sicherheits-Stacktrace“ |
parent_scope | SQL | Direkter Elternteil für die Baumrekonstruktion |
scope_depth | 3 | Verschachtelungstiefe – Tiefe 6+ rechtfertigt Untersuchung |