是否在JVM级别阻止类的实例

  • 本文关键字:实例 JVM 是否 java cve
  • 更新时间 :
  • 英文 :


有没有一种方法可以配置JVM来阻止正在创建的类的实例?

我想这样做是为了确保JVM中运行的任何服务都不允许创建CVE中被识别为安全风险的类的实例,让我们调用该类BadClass

注意:我正在寻找一个通用的解决方案,因此以下内容纯粹是附加信息。我通常会通过切换库或将其升级到没有漏洞的版本来解决这个问题,但它是一个更大的库的一部分,在一段时间内不会解决这个问题。所以我甚至没有在任何地方使用BadClass,而是想完全阻止它

我不知道JVM参数,但这里有一些替代方案可能会让你处于解决需求的位置:

  1. 您可以编写一个CustomClassLoader,让您可以很好地控制要做什么。正常的用例是插件加载等。在您的情况下,这是在devops级别上进行更多的安全治理。

  2. 如果您有一个带有集成测试的CICD管道,那么您也可以使用-verbose:class参数启动JVM,并查看在运行测试时加载了哪些类。看起来有点古怪,但可能适合您的用例。只要把一切都投入到比赛中,就可以由你来判断最合适的人选。

  3. 根据您的构建系统(Maven?(,您可以仅在您的私有缓存库上限制构建应用程序。所以你应该完全控制它,并在两者之间设置一个库评审层。这也将在开发人员和存储库管理员之间分担责任。

一个明显的否定答案:不要甚至尝试!

如果具有此依赖关系的较大库想要调用该方法,该怎么办?那该怎么办?

换句话说,您的阻塞应该做什么?

  • 抛出一些Error实例,导致JVM崩溃
  • 返回null,这样(可能很久以后(其他代码就会运行到NPE中

请记住:该类不存在于void中。还有其他代码在调用它。该代码没有为你的到来做好准备,好吧,再做什么?!

我认为这些问题有很好的答案。

所以,如果你真的想"操纵";事物:

尝试将该特定类的不同版本偷偷放入类路径中。要么是一个没有安全问题的官方接口,要么是符合所需接口并危害较小的接口。或者,如果你敢走这条路,按照另一个答案的建议去做,进入";我自己的类加载器";商业

无论如何,你的第一个目标是:在这里明确你的要求。阻止意味着什么?!

您是否考虑过使用Java Agent?

它可以在任何类加载器中拦截类加载,并在实际加载类之前处理其内容。然后,您可以修改类以删除/修复它的错误,或者返回会在静态初始值设定项中引发错误的伪类。

最新更新