Java - 动态jar加载如何被利用?

时间:2011-11-29 07:18:47

标签: java dynamic jar loading exploit

我正在开发一个分析JAR文件的封闭源Java应用程序。 由于java可以很容易地反编译,并且混淆真的不是什么大不了的事, 我想提供一个在我的服务器上执行应用程序的在线服务 返回它的结果很像fernflower:www.reversed-java.com/fernflower /.

问题是,我担心这会让我的应用程序加载任何潜在的灾难 即使我从未运行过罐子,服务器上的有害罐子也是如此。 我正在做的就是使用URLClassLoaderJarInputStream加载它们。

我正在加载的jar可以覆盖原始应用中的类以执行恶意代码, 或弄乱我的计划?

动态加载罐子有什么风险?

1 个答案:

答案 0 :(得分:8)

  

动态加载罐子有什么风险?

没有动态加载本身的风险。风险实际上是运行不受信任的代码的风险。如果您在没有采取适当预防措施的情况下这样做,则可能会使您的机器完全受损。

如果您要执行此类操作,至少应该在沙箱中运行不受信任的代码,以防止其执行任何可能有害的操作。例如,您需要阻止读取和写入本地文件,运行外部进程,使用反射,访问系统属性等。您可能希望停止创建线程,创建套接字以及其他消耗系统资源的东西。

最后,您需要考虑一些不受信任的JAR具有无限循环方法的情况。这是使用安全沙箱无法解决的问题。实际上,摆脱循环线程的唯一防弹方法是退出JVM并重新启动它。

  

我可以在我的原始应用程序中加载一个jar类来执行恶意代码,或者搞乱我的程序吗?

我认为它不能轻易覆盖你的课程,但是还有很多其他方法可以让不受信任的代码“搞乱”你的世界;往上看。 (如果不受信任的代码可以执行反射代码,那么它可能通过搞乱类加载器的私有数据结构来覆盖你的类。)