JNI 信号链和 OWASP(安全)
JNI Signal Chaining and OWASP (Security)
我们目前使用 LD_PRELOAD 来启用信号链。我们选择 LD_PRELOAD 是因为我们不强迫我们的客户使用特定的 Java 供应商或版本,我们也不希望通过为各种 Java 中的每一个创建独特的构建来使我们的构建过程复杂化vendor/versions 我们的客户可能正在使用。我们最近发现 LD_PRELOAD 的使用被安全分析工具(例如检查 OWASP 2017 的工具)视为代码注入风险。
为了让我们的 JNI 依赖产品符合 OWASP 标准,有什么我们可能没有考虑的吗?或者有谁知道将来是否有计划以新的或替代的方式解决这个问题,以允许 JNI 应用程序符合 OWASP 标准?链接到每个支持的 JVM 的构建是可行的,但是在 5 个平台上从 1 到 9 个构建(大约 3 JDK 供应商 x 3 个活动 JDK 版本级别)肯定会增加我们的维护和测试周期。
根据对 OpenJDK 社区的建议,我们更新了 API 的 Java 部分以执行
System.loadlibrary("jsig");
在调用我们要加载的 JNI 库之前。这在测试时产生了预期的效果;本机代码处理了信号,Java 程序成功完成。这适用于所有涉及的 JDK 和平台。
我们目前使用 LD_PRELOAD 来启用信号链。我们选择 LD_PRELOAD 是因为我们不强迫我们的客户使用特定的 Java 供应商或版本,我们也不希望通过为各种 Java 中的每一个创建独特的构建来使我们的构建过程复杂化vendor/versions 我们的客户可能正在使用。我们最近发现 LD_PRELOAD 的使用被安全分析工具(例如检查 OWASP 2017 的工具)视为代码注入风险。
为了让我们的 JNI 依赖产品符合 OWASP 标准,有什么我们可能没有考虑的吗?或者有谁知道将来是否有计划以新的或替代的方式解决这个问题,以允许 JNI 应用程序符合 OWASP 标准?链接到每个支持的 JVM 的构建是可行的,但是在 5 个平台上从 1 到 9 个构建(大约 3 JDK 供应商 x 3 个活动 JDK 版本级别)肯定会增加我们的维护和测试周期。
根据对 OpenJDK 社区的建议,我们更新了 API 的 Java 部分以执行
System.loadlibrary("jsig");
在调用我们要加载的 JNI 库之前。这在测试时产生了预期的效果;本机代码处理了信号,Java 程序成功完成。这适用于所有涉及的 JDK 和平台。