
Externalizar o acesso de aplicações Java a recursos protegidos como mensagens de log.
Documentação | Alterações em relação ao Upstream | Blog do Projeto
O JVMXRay monitora aplicações Java em tempo real por meio de injeção de bytecode, detectando vulnerabilidades e atividades suspeitas sem alterações no código. 19 sensores modulares rastreiam acesso a arquivos, conexões de rede, consultas SQL, operações criptográficas, autenticação, execução de processos e muito mais — gerando eventos de segurança estruturados e legíveis por máquina, com correlação automática entre sensores.
git clone https://github.com/spoofzu/jvmxray.git
cd jvmxray
mvn clean install
Durante a fase de teste do Maven, um pequeno programa chamado Turtle é executado sob o agente JVMXRay recém-construído. O Turtle realiza operações de E/S de arquivo, criptografia, execução de processos, serialização, reflexão e outras atividades que disparam os sensores — portanto, uma compilação bem-sucedida já fornece logs reais de eventos de segurança para explorar em ./target/test-jvmxray/. Um banco de dados SQLite também é criado em ./target/test-jvmxray/common/data/jvmxray-test.db para experimentação rápida. Consulte a documentação para mais detalhes.
Implante como um agente Java em suas próprias aplicações:
java -javaagent:target/jvmxray-0.0.1-agent.jar -jar yourapp.jar
trace_id e scope_chain permitem que equipes de SOC rastreiem um incidente desde a requisição HTTP passando por injeção SQL até a exfiltração de dados em uma única consulta.Tenha em mente que o JVMXRay é uma fonte da verdade sobre o que uma aplicação Java está fazendo, não um mecanismo de análise. A análise é fornecida pela sua solução centralizada de logging e/ou seus projetos de ferramentas de IA.
Cada evento de sensor inclui campos de correlação para reconstruir cadeias de ataque:
Uma cadeia de escopo como HTTP>Serialization>Reflection>Process é uma assinatura de ataque de desserialização à primeira vista. A coluna TRACE_ID é indexada no banco de dados para consultas rápidas de correlação.
java -javaagent:jvmxray-agent.jar -jar app.jar
|
AgentBootstrap (classloader isolado)
|
ByteBuddy instala interceptadores de sensores
|
Sensores disparam na entrada/saída de métodos
|
LogProxy mescla contexto de correlação MCC
|
+----------+----------+----------+
| SQLite | File | Socket |
| Appender | Appender | Appender |
+----------+----------+----------+
Este projeto foi desenvolvido utilizando ideias, arquitetura e, em alguns casos, código dos seguintes:
Milton Smith — Criador do projeto, líder
Divulgação: JVMXRay não é aprovado, endossado nem afiliado à Oracle Corporation.
| Sensor | O que monitora |
|---|
| File I/O | Leituras, gravações, exclusões, permissões, links simbólicos com resolução de caminho e estatísticas agregadas de E/S |
| Network | Connect/accept/bind/close de soquete com detecção de TLS, classificação de IP privado, temporização |
| SQL | Captura de consultas com detecção de parametrização, tipo de operação, duração, metadados de conexão |
| HTTP | Requisição/resposta com análise de cabeçalhos de segurança, correlação de usuário/sessão |
| Process | ProcessBuilder.start() e Runtime.exec() com argumentos de comando, duração, status de saída |
| Crypto | Cipher/KeyStore/MessageDigest/SSL com detecção de algoritmo fraco e validação de força de chave |
| Authentication | Operações de sessão, login JAAS, autenticação Spring Security, consultas de principal com rastreamento de sucesso/falha |
| API Call | HttpClient.send() com URI, método, host, TLS, status de resposta, temporização |
| Script Engine | ScriptEngine.eval() com identificação do motor, hash de conteúdo, detecção de padrões suspeitos, nível de risco |
| Serialization | Desserialização nativa Java, Jackson, Gson, XStream com detecção de cadeias de gadgets |
| Reflection | Class.forName, Method.invoke, acesso a Field, setAccessible com classificação de ameaça |
| Configuration | Propriedades do sistema, variáveis de ambiente, arquivos Properties, Preferences com anotações de segurança |
| Library | Carregamento de JAR estático e dinâmico com SHA-256, coordenadas Maven, inventário de pacotes |
| Monitor | Saúde da JVM: memória, threads, GC, CPU, arquivos abertos, detecção de deadlock (intervalo de 60s) |
| Uncaught Exception | Diagnóstico de falhas: pilha completa, estado da memória, dump de threads, cadeia de causas, ID do incidente |
| App Init | Captura única de inicialização: versão da JVM, SO, detecção de contêiner, variáveis de ambiente (editadas) |
| Data Transfer | Contagem de bytes de InputStream.read() (atualmente desabilitado — muito amplo) |
| Thread | Monitoramento do ciclo de vida de threads (atualmente desabilitado — correção de logging recursivo necessária) |
| Memory | Rastreamento de alocação de memória (atualmente desabilitado — correção de logging recursivo necessária) |
| Campo | Exemplo | Propósito |
|---|
trace_id | a1b2c3d4e5f6 | Vincula todos os eventos no mesmo contexto de execução |
scope_chain | HTTP>SQL>FileIO | Caminho aninhado do sensor — o "stacktrace de segurança" |
parent_scope | SQL | Pai imediato para reconstrução em árvore |
scope_depth | 3 | Nível de aninhamento — profundidade 6+ merece investigação |