JVMXRay 通过字节码注入实时监控 Java 应用程序,检测漏洞和可疑活动,无需修改代码。19 个模块化传感器追踪文件访问、网络连接、SQL 查询、加密操作、身份验证、进程执行等——生成结构化、机器可读的安全事件,并自动进行跨传感器关联。
git clone https://github.com/spoofzu/jvmxray.git
cd jvmxray
mvn clean install
在 Maven 的测试阶段,一个名为 Turtle 的小程序会在新构建的 JVMXRay 代理下运行。Turtle 执行文件 I/O、加密、进程执行、序列化、反射等触发传感器的活动——因此成功构建后,您即可在 ./target/test-jvmxray/ 目录中探索真实的安全事件日志。同时还会在 ./target/test-jvmxray/common/data/jvmxray-test.db 创建 SQLite 数据库,方便快速实验。详见文档。
部署为 Java 代理,用于您自己的应用程序:
java -javaagent:target/jvmxray-0.0.1-agent.jar -jar yourapp.jar
trace_id 和 scope_chain 的相关事件,让安全运营团队能够通过一次查询,追踪从 HTTP 请求经 SQL 注入到数据泄露的完整事件。请记住,JVMXRay 是 Java 应用程序实际行为的真相来源,而非分析引擎。分析工作由您的集中式日志记录解决方案和/或 AI 工具项目完成。
每个传感器事件都包含用于重构攻击链的关联字段:
类似 HTTP>Serialization>Reflection>Process 的作用域链,一眼即可识别为反序列化攻击特征。数据库中的 TRACE_ID 列已建立索引,便于快速关联查询。
java -javaagent:jvmxray-agent.jar -jar app.jar
|
AgentBootstrap(隔离类加载器)
|
ByteBuddy 安装传感器拦截器
|
传感器在方法入口/出口触发
|
LogProxy 合并 MCC 关联上下文
|
+----------+----------+----------+
| SQLite | 文件 | Socket |
| Appender | Appender | Appender |
+----------+----------+----------+
本项目的开发借鉴了以下项目的思想、架构及部分代码:
Milton Smith — 项目创建者、领导者
声明:JVMXRay 未经 Oracle 公司批准、认可,亦非其附属品。
| 传感器 | 监控内容 |
|---|
| 文件 I/O | 文件读取、写入、删除、权限、符号链接(含路径解析)及聚合 I/O 统计 |
| 网络 | Socket 连接/接受/绑定/关闭,含 TLS 检测、私有 IP 分类、时序 |
| SQL | 查询捕获(含参数化检测)、操作类型、持续时间、连接元数据 |
| HTTP | 请求/响应,含安全头部分析、用户/会话关联 |
| 进程 | ProcessBuilder.start() 和 Runtime.exec(),含命令参数、持续时间、退出状态 |
| 加密 | Cipher/KeyStore/MessageDigest/SSL,含弱算法检测和密钥强度验证 |
| 身份验证 | 会话操作、JAAS 登录、Spring Security 认证、主体查询,含成功/失败追踪 |
| API 调用 | HttpClient.send(),含 URI、方法、主机、TLS、响应状态、时序 |
| 脚本引擎 | ScriptEngine.eval(),含引擎识别、内容哈希、可疑模式检测、风险等级 |
| 序列化 | Java 原生、Jackson、Gson、XStream 反序列化,含小工具链检测 |
| 反射 | Class.forName、Method.invoke、Field 访问、setAccessible,含威胁分类 |
| 配置 | 系统属性、环境变量、Properties 文件、Preferences,含安全注解 |
| 库 | 静态和动态 JAR 加载,含 SHA-256、Maven 坐标、包清单 |
| 监控 | JVM 健康:内存、线程、GC、CPU、打开文件、死锁检测(60 秒间隔) |
| 未捕获异常 | 崩溃诊断:完整堆栈、内存状态、线程转储、原因链、事件 ID |
| 应用初始化 | 一次性启动捕获:JVM 版本、操作系统、容器检测、环境变量(已脱敏) |
| 数据传输 | InputStream.read() 字节计数(当前已禁用——过于宽泛) |
| 线程 | 线程生命周期监控(当前已禁用——需要修复递归日志记录) |
| 内存 | 内存分配追踪(当前已禁用——需要修复递归日志记录) |
| 字段 | 示例 | 用途 |
|---|
trace_id | a1b2c3d4e5f6 | 链接同一执行上下文中的所有事件 |
scope_chain | HTTP>SQL>FileIO | 嵌套传感器路径——"安全堆栈跟踪" |
parent_scope | SQL | 直接父作用域,用于树状重构 |
scope_depth | 3 | 嵌套层级——深度≥6 时值得调查 |