`

java的沙箱模型

    博客分类:
  • java
 
阅读更多

java的沙箱模型就是指java的安全模型,沙箱模型允许你下载一些不可靠站点的代码,但是沙箱模型会限制它们对系统的破坏。究竟java沙箱是怎么做到这一点的呢,我们来看看java沙箱的基本组件。
   类装载器结构 
   class
文件检验器 
   java
虚拟机的安全特性 
   
安全管理器和Java API
   这些组件列出的顺序其实也是java沙箱安全模型进行安全措施的步骤。(当然,这其中的类装载器和安全管理器是可以定制的)<o:p></o:p>

类加载器:<o:p></o:p>

      java程序运行的第一步就是通过类加载器加载class文件。

      有几点规则要事先说明:<o:p></o:p>

规则1.java虚拟机中,在同一个命名空间内的类可以直接进行交互,而不同命名空间的类甚至不能觉察到彼此的存在。<o:p></o:p>


规则2.1.2开始,除启动类装载器以外的每一个类装载器,都有一个双亲类装载器,在某个特定的类装载器试图以常用方式装载类以前,它都会默认的把这个任务委派给它的双亲-请求它的双亲去装载这个类,如果它的双亲没有能力转载,则只能试图自己去装载这个类。<o:p></o:p>

我们来举一个例子来描述类的加载过程。<o:p></o:p>

    <!--[if mso & !supportInlineShapes & supportFields]><span lang=EN-US style='mso-no-proof:yes'><span style='mso-element:field-begin; mso-field-lock:yes'></span> SHAPE <span style='mso-spacerun:yes'>&nbsp;</span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><!--[if gte vml 1]><v:rect id="矩形_x0020_1" o:spid="_x0000_s1026" alt="说明: http://zhaonjtu.iteye.com/blog/80647" style='width:237.75pt; height:175.9pt;visibility:visible;mso-wrap-style:square;mso-left-percent:-10001; mso-top-percent:-10001;mso-position-horizontal:absolute; mso-position-horizontal-relative:char;mso-position-vertical:absolute; mso-position-vertical-relative:line;mso-left-percent:-10001;mso-top-percent:-10001; v-text-anchor:top' o:gfxdata="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 " filled="f" stroked="f"> <o:lock v:ext="edit" aspectratio="t" /> <w:wrap type="none" /> <w:anchorlock /> </v:rect><![endif]--><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><![endif]--><!--[if mso & !supportInlineShapes & supportFields]><span lang=EN-US style='mso-no-proof:yes'><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:237.75pt;height:175.9pt'> <v:imagedata croptop="-65520f" cropbottom="65520f" /> </v:shape><span style='mso-element:field-end'></span></span><![endif]--><o:p></o:p>

    假设网络类加载器发出一个转载Volcano类的请求,按照规则2 Volcano的加载会一直逐步委派到启动加载器,但是Volcano不是核心API,因此Volcano的加载的任务会再次让网络类加载器去加载,假设通过网络正确的下载了Volanno类,这样Volcano类会在以后的执行过程中会被使用。<o:p></o:p>

    我们再进一步假设Volcano类有一个方法被调用,方法引用了java.util.HashMap,由于是第一次引用,虚拟机会请求装载Volcano的类装载器去转载,同样通过规则会让启动类加载器去加载这个HashMap类。<o:p></o:p>

   从上述的过程我们可以得出:<o:p></o:p>

  1.假如我们自己编写了一个java.util.HashMap的类,它是不可能被加载的,即便是一个病毒去伪装成java.util.HashMap,还是没法用,原因很简单,类加载器总是去加载真正的核心API中的HashMap<o:p></o:p>

    你也许会想能不能在把HashMap加载后我再用假的去替换这个真的HashMap,呵呵,当然可以,前提是你要知道虚拟机的设计,这样才能知道存放HashMap存放的地址,这一点也是java结构化内存操作的安全性考虑。<o:p></o:p>

    我们继续Volcano类的调用,聪明的黑客或许会想到如何利用规则1伪装一个具有访问权限的类,比如java.lang.hacker,这个hacker按照规则1可是拥有访问java.lang包中的任何权限的啊,好可怕。<o:p></o:p>

      规则三:Java虚拟机只把特殊访问的权限授予由同一个类加载器装载的同一个包中的类,即他们属于同一个运行时包运行时包这个是在java 虚拟机第二版规范中第一次提出,它指由同一个类型加载器转载的,属于同一个包的,多个类型的集合。<o:p></o:p>

   很显然java.lang.hackerjava.lang中的其他类型属于同一个运行时包的,因此没有访问权限。<o:p></o:p>

     说到这里也许会想,我要是修改java核心库是不是就可以瞒天过海了,当然可以了。但是java安全还有其他的机制去防范,但是也注意这仅仅是机制,你死活要主动的破坏也不是不可能。<o:p></o:p>

     注:绝大部分内容来自《深入java虚拟机》,书上只讲这么多,我也只知道这么多,希望抛砖引玉。<o:p></o:p>

 

分享到:
评论

相关推荐

    P神-Java安全漫谈

    代码安全性:Java提供了强大的安全机制,如访问控制、类加载验证、沙箱模型等。这些机制确保代码在运行时不会执行恶意操作或访问未经授权的资源。 身份认证和访问控制:Java安全包括用户身份认证和授权机制,以确保...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中等6章和附录a-c完全可以作为class文件和指令含集的参考手册。本书还附带...

    深入Java虚拟机

    3.12 Java安全模型的不足和今后的发展 方向 3.13 和体系结构无关的安全性 3.14 资源页 第4章 网络移动性 4.1 为什么需要网络移动性 4.2 一种新的软件模式 4.3 Java体系结构对网络移动性的支持 4.4 ...

    java 程序设计试题及答案(8套合辑)

    1.下列特点中,哪个是Java 虚拟机执行的特点之一? A、字节代码 B、多进程 C、静态连接 D、编译 2.Java语言的类型是 A、面向对象语言 B、面向过程语言 C、汇编程序 D、...18.下面关于沙箱模型的叙述中错误的是

    深入java虚拟机第二版

    3.12 Java安全模型的不足和今后的发展 方向 3.13 和体系结构无关的安全性 3.14 资源页 第4章 网络移动性 4.1 为什么需要网络移动性 4.2 一种新的软件模式 4.3 Java体系结构对网络移动性的支持 4.4 applet:...

    深入JAVA虚拟机(第2版)

    3.12 Java安全模型的不足和今后的发展方向 3.13 和体系结构无关的安全性 3.14 资源页 第4章 网络移动性 4.1 为什么需要网络移动性 4.2 一种新的软件模式 4.3 Java体系结构对网络移动性的支持 4.4 ...

    XS2A-Sandbox:XS2ABank-PSD2 XS2A动态沙箱

    ModelBank是一个动态沙箱环境,它可以模拟和测试ASPSP的OpenAPI PSD2服务。 ModelBank基于, 和 。 使用ModelBank ,您作为测试TPP可以直接访问银行API,获取TPP证书并管理测试帐户。 包含测试说明和所有必要的文档...

    nlp-sandbox:自然语言处理沙箱

    NLP沙箱 使用CLiPS-Pattern,NLTK,OpenNLP和Stanford CoreNLP在Java和Python中玩NLP。 Java和Python代码在src / main下。 以下是软件包的说明。 去做: 标准化输出标签(NAME,DATE,ORDINAL等) 比较每个实施...

    security-manager:Java Security Manager的定制实现,旨在为Web应用程序提供额外的保护和保证

    背景默认的Java安全管理器实现被设计为用于不受信任的代码的通用沙箱。 典型案例是在网页上运行小程序。 为此,它检查调用堆栈上的每个类,要求它们都具有对任何潜在危险操作的许可。 当所有类都是Java API(受信任...

    本科毕业设计-恶意代码检测分类平台

    本科毕业设计_恶意代码检测分类平台 ...- **沙箱环境**:搭建一个安全的沙箱环境,用于执行和分析恶意代码。 ### 3. 系统设计 - **数据库设计**:设计数据库模型,包括恶意代码样本、检测记录、用户等实体。

    java版直播间源码-cqrs-hotel:关于CQRS和事件溯源的示例应用程序#NoFrameworks

    java版直播间源码青旅酒店 示例应用程序演示了酒店预订领域的使用和内部预订。 #NoFrameworks 该项目是一个沙箱,用于探索 CQRS+ES 如何影响系统设计。 假设是它会导致比典型的以数据库为中心的方法更好的设计; 一...

    MUI.js:Michael 的 ;) UI 框架,点 JS

    它是我早期 UFTAM + MUI.Java 的延续,在那里我玩弄了类似的想法,但基于服务器端 Java,例如 Vaadin 作为首选的 Web UI 框架,以及用于 UI 模型 DSL 的 Xtext,以及一些数据绑定的涉猎我在 2012 年从事。...

    服务计算与大数据是研究什么.docx

    多种计算模型:MaxCompute支持SQL、MapReduce、UDF(Java/Python)、Graph,基于DAG的处理,交互式,内存计算,机器学习等计算类型及MPI迭代类算法。简化了企业大数据平台的应用架构。 强数据安全:MaxCompute已...

    android手机安全卫士

    1、通过0权限上传下载数据,重启手机等案例,深入讲解android沙箱,安全机制和权限模型。 2、通过分析恶意代码的提权漏洞,讲解如何维护系统的安全。 3、通过linux键盘驱动案例的讲解,分析盗号木马的原理及其实现...

    Procedural-Generation-Sandbox

    程序生成沙箱 我可以在仓库中进行程序生成的地方。 截至2018年7月21日,我感觉自己做了自己打算做的事情。 虽然我想了解有关Perlin Noise的更多信息,但是我没有任何东西可以应用Perlin Noise,例如3D模型或地形生成...

    Spring攻略(第二版 中文高清版).part2

    2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 81 2.9.1 问题 81 2.9.2 解决方案 81 2.9.3 工作原理 82 2.10 加载外部资源 82 2.10.1...

    Spring攻略(第二版 中文高清版).part1

    2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 81 2.9.1 问题 81 2.9.2 解决方案 81 2.9.3 工作原理 82 2.10 加载外部资源 82 2.10.1...

Global site tag (gtag.js) - Google Analytics