
Esternalizza l'accesso delle applicazioni Java alle risorse protette come messaggi di log.
Documentazione | Modifiche da Upstream | Blog del Progetto
JVMXRay monitora le applicazioni Java in tempo reale tramite iniezione di bytecode, rilevando vulnerabilità e attività sospette senza modifiche al codice. 19 sensori modulari tengono traccia di accessi ai file, connessioni di rete, query SQL, operazioni crittografiche, autenticazione, esecuzione di processi e altro — generando eventi di sicurezza strutturati e leggibili automaticamente con correlazione incrociata tra sensori.
git clone https://github.com/spoofzu/jvmxray.git
cd jvmxray
mvn clean install
Durante la fase di test di Maven, un piccolo programma chiamato Turtle viene eseguito sotto l'agente JVMXRay appena compilato. Turtle esegue operazioni di I/O su file, crittografia, esecuzione di processi, serializzazione, reflection e altre attività che attivano i sensori — quindi una build riuscita fornisce già log di eventi di sicurezza reali da esplorare in ./target/test-jvmxray/. Viene anche creato un database SQLite in ./target/test-jvmxray/common/data/jvmxray-test.db per una rapida sperimentazione. Consulta la documentazione per ulteriori dettagli.
Distribuisci come agente Java nelle tue applicazioni:
java -javaagent:target/jvmxray-0.0.1-agent.jar -jar yourapp.jar
trace_id e scope_chain consentono ai team SOC di tracciare un incidente dalla richiesta HTTP attraverso l'SQL injection fino all'esfiltrazione dei dati in una singola query.Tieni presente che JVMXRay è una fonte di verità su ciò che un'applicazione Java sta facendo, non un motore di analisi. L'analisi è fornita dalla tua soluzione di logging centralizzata e/o dai tuoi progetti di strumenti AI.
Ogni evento del sensore include campi di correlazione per ricostruire le catene di attacco:
Una catena di ambito come HTTP>Serialization>Reflection>Process è una firma di attacco di deserializzazione a colpo d'occhio. La colonna TRACE_ID è indicizzata nel database per query di correlazione rapide.
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 |
+----------+----------+----------+
Questo progetto è stato sviluppato utilizzando idee, architettura e codice in alcuni casi da quanto segue,
Milton Smith — Creatore e leader del progetto
Divulgazione: JVMXRay non è approvato, avallato o affiliato con Oracle Corporation.
| Sensore | Cosa Monitora |
|---|
| File I/O | Letture, scritture, cancellazioni, permessi, symlink di file con risoluzione del percorso e statistiche I/O aggregate |
| Network | Connessione socket connect/accept/bind/close con rilevamento TLS, classificazione IP privato, temporizzazione |
| SQL | Acquisizione delle query con rilevamento della parametrizzazione, tipo di operazione, durata, metadati di connessione |
| HTTP | Richiesta/risposta con analisi degli header di sicurezza, correlazione utente/sessione |
| Process | ProcessBuilder.start() e Runtime.exec() con argomenti del comando, durata, stato di uscita |
| Crypto | Cipher/KeyStore/MessageDigest/SSL con rilevamento di algoritmi deboli e validazione della forza della chiave |
| Authentication | Operazioni di sessione, login JAAS, autenticazione Spring Security, interrogazioni principal con tracciamento successo/fallimento |
| API Call | HttpClient.send() con URI, metodo, host, TLS, stato della risposta, temporizzazione |
| Script Engine | ScriptEngine.eval() con identificazione del motore, hashing del contenuto, rilevamento di pattern sospetti, livello di rischio |
| Serialization | Deserializzazione nativa Java, Jackson, Gson, XStream con rilevamento di gadget chain |
| Reflection | Class.forName, Method.invoke, Field access, setAccessible con classificazione delle minacce |
| Configuration | Proprietà di sistema, variabili d'ambiente, file delle proprietà, Preferenze con annotazioni di sicurezza |
| Library | Caricamento JAR statico e dinamico con SHA-256, coordinate Maven, inventario dei pacchetti |
| Monitor | Salute JVM: memoria, thread, GC, CPU, file aperti, rilevamento deadlock (intervallo 60s) |
| Uncaught Exception | Diagnostica di crash: stack completo, stato della memoria, dump dei thread, catena di cause, ID incidente |
| App Init | Acquisizione una tantum all'avvio: versione JVM, OS, rilevamento container, variabili d'ambiente (oscurate) |
| Data Transfer | Conteggio byte InputStream.read() (attualmente disabilitato — troppo ampio) |
| Thread | Monitoraggio del ciclo di vita dei thread (attualmente disabilitato — necessaria correzione di logging ricorsivo) |
| Memory | Tracciamento dell'allocazione di memoria (attualmente disabilitato — necessaria correzione di logging ricorsivo) |
| Campo | Esempio | Scopo |
|---|
trace_id | a1b2c3d4e5f6 | Collega tutti gli eventi nello stesso contesto di esecuzione |
scope_chain | HTTP>SQL>FileIO | Percorso annidato del sensore — lo "stacktrace di sicurezza" |
parent_scope | SQL | Genitore immediato per la ricostruzione dell'albero |
scope_depth | 3 | Livello di annidamento — profondità 6+ merita un'indagine |