
Externalizar el acceso de aplicaciones Java a recursos protegidos como mensajes de log.
Documentación | Cambios desde Upstream | Blog del Proyecto
JVMXRay monitorea aplicaciones Java en tiempo real mediante inyección de bytecode, detectando vulnerabilidades y actividad sospechosa sin cambios en el código. 19 sensores modulares rastrean acceso a archivos, conexiones de red, consultas SQL, operaciones criptográficas, autenticación, ejecución de procesos y más — generando eventos de seguridad estructurados y legibles por máquina con correlación automática entre sensores.
git clone https://github.com/spoofzu/jvmxray.git
cd jvmxray
mvn clean install
Durante la fase de pruebas de Maven, un pequeño programa llamado Turtle se ejecuta bajo el agente JVMXRay recién compilado. Turtle realiza operaciones de E/S de archivos, criptografía, ejecución de procesos, serialización, reflexión y otras actividades que activan los sensores — por lo que una compilación exitosa ya te proporciona registros de eventos de seguridad reales para explorar en ./target/test-jvmxray/. También se crea una base de datos SQLite en ./target/test-jvmxray/common/data/jvmxray-test.db para experimentación rápida. Consulta la documentación para más detalles.
Despliega como agente Java en tus propias aplicaciones:
java -javaagent:target/jvmxray-0.0.1-agent.jar -jar yourapp.jar
trace_id y scope_chain permiten a los equipos SOC rastrear un incidente desde una solicitud HTTP hasta la inyección SQL y la exfiltración de datos en una sola consulta.Ten en cuenta que JVMXRay es una fuente de verdad sobre lo que hace una aplicación Java, no un motor de análisis. El análisis lo proporciona tu solución de registro centralizada y/o tus proyectos de herramientas de IA.
Cada evento de sensor incluye campos de correlación para reconstruir cadenas de ataque:
Una cadena de ámbito como HTTP>Serialization>Reflection>Process es una firma de ataque de deserialización de un vistazo. La columna TRACE_ID está indexada en la base de datos para consultas rápidas de correlación.
java -javaagent:jvmxray-agent.jar -jar app.jar
|
AgentBootstrap (classloader aislado)
|
ByteBuddy instala interceptores de sensores
|
Los sensores se activan en entrada/salida de método
|
LogProxy fusiona el contexto de correlación MCC
|
+----------+----------+----------+
| SQLite | File | Socket |
| Appender | Appender | Appender |
+----------+----------+----------+
Este proyecto fue desarrollado utilizando ideas, arquitectura y, en algunos casos, código de las siguientes fuentes:
Milton Smith — Creador y líder del proyecto
Divulgación: JVMXRay no está aprobado, respaldado ni afiliado con Oracle Corporation.
| Sensor | Qué monitorea |
|---|
| E/S de archivos | Lecturas, escrituras, eliminaciones, permisos, enlaces simbólicos con resolución de rutas y estadísticas agregadas de E/S |
| Red | Conexión/aceptación/enlace/cierre de socket con detección de TLS, clasificación de IP privada, temporización |
| SQL | Captura de consultas con detección de parametrización, tipo de operación, duración, metadatos de conexión |
| HTTP | Solicitud/respuesta con análisis de cabeceras de seguridad, correlación usuario/sesión |
| Proceso | ProcessBuilder.start() y Runtime.exec() con argumentos de comando, duración, estado de salida |
| Criptografía | Cipher/KeyStore/MessageDigest/SSL con detección de algoritmos débiles y validación de fortaleza de clave |
| Autenticación | Operaciones de sesión, inicio de sesión JAAS, autenticación Spring Security, consultas de principal con seguimiento de éxito/fallo |
| Llamada API | HttpClient.send() con URI, método, host, TLS, estado de respuesta, temporización |
| Motor de scripts | ScriptEngine.eval() con identificación del motor, hash de contenido, detección de patrones sospechosos, nivel de riesgo |
| Serialización | Deserialización nativa de Java, Jackson, Gson, XStream con detección de cadenas de gadgets |
| Reflexión | Class.forName, Method.invoke, Field access, setAccessible con clasificación de amenazas |
| Configuración | Propiedades del sistema, variables de entorno, archivos Properties, Preferences con anotaciones de seguridad |
| Biblioteca | Carga de JAR estática y dinámica con SHA-256, coordenadas Maven, inventario de paquetes |
| Monitor | Estado de JVM: memoria, hilos, GC, CPU, archivos abiertos, detección de interbloqueos (intervalo de 60s) |
| Excepción no capturada | Diagnósticos de fallo: pila completa, estado de memoria, volcado de hilos, cadena de causas, ID de incidente |
| Inicio de aplicación | Captura única al inicio: versión de JVM, SO, detección de contenedor, variables de entorno (editadas) |
| Transferencia de datos | Conteo de bytes de InputStream.read() (actualmente deshabilitado — demasiado amplio) |
| Hilo | Monitoreo del ciclo de vida de hilos (actualmente deshabilitado — requiere corrección de registro recursivo) |
| Memoria | Seguimiento de asignación de memoria (actualmente deshabilitado — requiere corrección de registro recursivo) |
| Campo | Ejemplo | Propósito |
|---|
trace_id | a1b2c3d4e5f6 | Vincula todos los eventos en el mismo contexto de ejecución |
scope_chain | HTTP>SQL>FileIO | Ruta anidada del sensor — el "stacktrace de seguridad" |
parent_scope | SQL | Padre inmediato para reconstrucción de árbol |
scope_depth | 3 | Nivel de anidamiento — profundidad 6+ justifica investigación |