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

YLi*_*vay 3 java exploit jar loading dynamic

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

问题是,我担心这是一个灾难的秘诀我的应用程序加载服务器上的任何可能有害的罐子,即使我从来没有运行罐子.我正在做的就是使用URLClassLoaderJarInputStream加载它们.

我正在加载的jar可以覆盖原始应用程序中的类,以便执行恶意代码或搞乱我的程序吗?

动态加载罐子有哪些风险?

Ste*_*n C 8

动态加载罐子有哪些风险?

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

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

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

罐子im加载是否可以覆盖原始应用程序中的类,以便执行恶意代码或搞乱我的程序?

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

  • 如果您可以**保证**您不会为您加载的代码运行任何静态初始化程序,那么您应该是安全的. (2认同)