JVM-T²-Cap是一个基于时间窗能力安全模型的Java虚拟机安全增强框架,实现了『复制即过期、过期即沉默』的核心安全理念。
- ✅ 权限资源化: 将内存访问权限封装为Token资源
- ⏰ 时间窗绑定: Token具有时间有效性,自动过期失效
- 🔒 自毁MAC: 使用硬件加速的MAC验证,防止Token复制
- 📊 动态权值: 基于EWMA的智能限流,防止突发攻击
- 🚀 零侵入部署: 无需修改应用代码,一行命令启用
- ⚡ 硬件加速: 自动检测并利用SHA-NI等CPU特性
┌─────────────────────────────────────────────────┐
│ Java Application Layer │
├─────────────────────────────────────────────────┤
│ Java Agent (字节码转换) │
│ ├─ T2Agent: Agent入口 │
│ ├─ T2ClassTransformer: 类转换器 │
│ └─ T2MethodVisitor: 方法插桩 │
├─────────────────────────────────────────────────┤
│ Token管理层 │
│ ├─ T2Token: Token生命周期管理 │
│ ├─ TimeWindowManager: 时间窗管理 │
│ └─ T2Config: 配置管理 │
├─────────────────────────────────────────────────┤
│ Native层 (C实现) │
│ ├─ t2_validation.c: 核心验证逻辑 │
│ ├─ t2_jni.c: JNI接口 │
│ └─ SHA-NI硬件加速 (可选) │
└─────────────────────────────────────────────────┘
- JDK 11 或更高版本
- Maven 3.6+
- CMake 3.15+ (可选,用于编译Native库)
- Visual Studio 2019+ (Windows) 或 GCC 7+ (Linux/Mac)
build.batchmod +x build.sh
./build.sh将T²-Cap Agent添加到JVM启动参数:
java -javaagent:target/jvm-t2-agent-1.0.0-SNAPSHOT.jar YourApplication通过参数字符串配置:
java -javaagent:target/jvm-t2-agent-1.0.0-SNAPSHOT.jar=debug=true,window_size_ms=200 YourApp或使用配置文件:
java -javaagent:target/jvm-t2-agent-1.0.0-SNAPSHOT.jar=config=/path/to/t2cap.properties YourApp| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
debug |
boolean | false | 启用调试输出 |
hw_sha |
boolean | auto | 启用硬件SHA加速 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
window_size_ms |
long | 100 | 时间窗大小(毫秒) |
ewma_alpha |
double | 0.3 | EWMA平滑因子(0-1) |
downgrade_threshold |
double | 0.8 | 降级阈值 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
token_pool_size |
int | 1024 | 每线程Token池大小 |
token_expiry_ms |
long | 5000 | Token过期时间(毫秒) |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
fast_path |
boolean | true | 启用快速路径优化 |
perf_monitor |
boolean | true | 启用性能监控 |
在Intel i7-10700K @ 3.8GHz上的测试结果:
| 操作 | 平均延迟 | 说明 |
|---|---|---|
| Token获取 | ~15 ns | ThreadLocal读取 |
| Token验证 | ~50 ns | 含时间窗检查 |
| 完整验证 | ~80 ns | Java + Native |
在实际应用中的开销:
- Web应用吞吐量影响: < 2%
- 内存开销: < 10MB (1000并发线程)
- CPU开销: < 3% (正常负载)
T²-Cap防护以下攻击:
- ✅ 内存马攻击: 通过复制指针绕过访问控制
- ✅ 信息泄露: 通过堆外内存泄露敏感数据
- ✅ 资源耗尽: 通过突发IO耗尽系统资源
- ✅ 重放攻击: 重用旧Token访问资源
- 时间窗隔离: Token仅在特定时间窗内有效
- 自毁机制: Token被复制后自动失效
- 确定性限流: 基于D/D/1模型的可预测降级
- Epoch防护: 防止时间回滚攻击
mvn testmvn test -Dtest=T2Benchmarkmvn verifyT2-Modle/
├── src/
│ ├── main/
│ │ ├── java/com/t2cap/
│ │ │ ├── agent/ # Java Agent实现
│ │ │ │ ├── T2Agent.java
│ │ │ │ ├── T2ClassTransformer.java
│ │ │ │ ├── T2ClassVisitor.java
│ │ │ │ ├── T2MethodVisitor.java
│ │ │ │ └── T2Config.java
│ │ │ └── core/ # 核心Token管理
│ │ │ ├── T2Token.java
│ │ │ └── TimeWindowManager.java
│ │ └── resources/
│ │ └── native/ # Native库
│ ├── native/
│ │ ├── include/
│ │ │ └── t2_core.h
│ │ ├── core/
│ │ │ └── t2_validation.c
│ │ ├── jni/
│ │ │ └── t2_jni.c
│ │ └── CMakeLists.txt
│ └── test/
│ └── java/com/t2cap/
│ ├── test/ # 单元测试
│ └── benchmark/ # 性能测试
├── pom.xml
├── build.bat # Windows构建脚本
├── build.sh # Linux/Mac构建脚本
└── README.md
欢迎贡献代码、报告问题或提出建议!
本项目采用 MIT 许可证 - 详见 LICENSE 文件
如有问题或建议,请提交Issue或Pull Request。 邮箱:anweat@163.com
T²-Cap - 让Java应用更安全 🛡️