基本概念

  • JVM:java虚拟机,Java编译程序将生成Java虚拟机上可运行的目标代码,使得Java程序可以再不同平台不加修改的运行。JVM包含完善的硬件架构,主要分为五大模块—类装载器子系统、运行时数据全、执行引擎、本地方法接口和垃圾收集模块。其没有寄存器,指令集使用Java栈来存储中间数据。

  • JRE:Java运行环境,包含JVM标准实现与Java核心类库,安装后能正确运行Java应用程序

  • JDK:Java开发人员使用的SDK(软件开发工具包),主要用于移动设备、嵌入式设备的Java应用等开发,一般JDK会含有JRE以及常用的Java相关工具

JVM逃逸

  • JDK 以及 JRE 几经变迁,目前的主流版本是由 Oracle 公司提供的。除了官方提供的之外,还有开源的 OpenJDK 项目,以及 Apple、IBM 等公司基于官方 JRE 开发的一些 JRE 程序。国内外的研究方向更偏向于 JVM 逃逸手段也就是 JRE 漏洞的利用技术,触发本地JRE 漏洞,发起了逃逸出本地 JVM 而针对操作系统的攻击,被称为JVM 逃逸。

Java 安全机制

  • 以 Oracle JRE 为例,Java API 分为Java 层和原生层(native层),其中Java 层由 Java 语言本身编写,原生层主要由 C 语言编写,是一些与操作系统接合较为紧密的底层 API 封装,在 Windows 系统中编译为动态链接库(“*.dll”文件),作为 JRE 的重要组成部分而存在。而Java 层中存在着可以自定义安全规则的沙箱(Sandbox)。针对 Java 层 API 与原生层 API,JRE 安全机制分别包括 JRE 沙箱与 JVM 类型安全机制。

在 JRE 中的 JRE 沙箱(JRE Sandbox),是由众多安全组件组成的系统,负责限制类似 Applet 这样来自互联网的不可信 Java 程序在执行中的权限。

  • 一个 class 文件,从被加载到 JVM 中开始直到卸载,其生命周期要经过七个阶段:加载、验证、准备、解析、初始化、使用、卸载。class 文件的加载和校验环节是比较重要的。一般来说,只要顺利通过了这两个环节,一个 class 直到它运行之前都不会有安全检查了。任何一个类一旦由Bootstrap Classloader 加载,那么它将拥有 Java API 级别的权限,完全被 Java 虚拟机所信任。那么 JRE 沙箱的安全管理系统将被彻底关闭。

  • SecurityManager 对象一般为 null,也就是说允许一切“不安全”操作。但在不信任的状态下,如在 Applet 中,这个 SecurityManager 对象被默认设置为 Java 原生类中的sun.applet.AppletSecurity 类的对象实例,将限制其在沙箱中操作。实现 JVM 逃逸的最终目标是将安全管理器设置为 null。

  • 在 Java 6 与 Java 7 当中,权限检查的工作交给了 AccessController 类,每当触发权限检查时,AccessController 会对方法调用栈上的所有方法进行检查。而AccessController 类中提供了用于提升权限的doPrivileged()方法,作为调用栈检查的终止点,可以通过此函数实现权限提升代码块。

  • Java 反射机制(Reflection)是 Java 程序开发语言的重要特性,它为 Java 提供了在运行过程中动态获取及调用一个类及其方法和变量的功能,从编程的表现形式来讲,可以理解为通过间接的方式去调用一些 API。有一些相对“不安全”的 API,通过传统的直接调用的方式是调不了的,而通过反射机制就可以调用到它们。

  • checkPackageAccess 方法,其功能是检查当前类是否具有访问、调用某些包的权限。

  • 禁止非结构化地访问内存是 JVM 中防止对内存恶意破坏的一种安全策略。

java安全相关知识的更多相关文章

  1. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  2. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  3. Java基础知识系列——String

    最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...

  4. 学习Spring必学的Java基础知识

    [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...

  5. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

  6. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  7. java基础知识梳理

    java基础知识梳理 1 基本数据类型

  8. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  9. java基础理论知识的一些总结

    在学习Java初期,由于我们是刚开始接触Java,我们不仅需要牢牢掌握Java的基础理论知识,来为我们后面对Java更深层次的学习打好基础,而且我们需要养成编程人的思想习惯.来我们一起来探索Java基 ...

随机推荐

  1. 【tensorflow基础】Tensorpack-API

    安装 pip install tensorpack 使用 参考 1. Tensorpack: 2. Tensorpack,一个基于TensorFlow的神经网络训练界面,源码包含很多示例: 完

  2. [LeetCode] 354. Russian Doll Envelopes 俄罗斯套娃信封

    You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...

  3. InfluxDB入门

    InfluxDB是一个用于存储和分析时间序列数据的开源数据库 时序数据是基于时间的一系列的数据 时序数据库就是存放时序数据的数据库,并且需要支持时序数据的快速写入.持久化.多纬度的聚合查询等基本功能 ...

  4. Ubuntu查看与结束任务进程

    1.打开终端 2.敲  ps -ef  查出进程的编号(就是PID那列) 3.输入 kill PID 即可(如果PID是123456,则kill 123456) 例如: 我想把splash关闭,直接输 ...

  5. libevent实现对管道的读写操作

    读管道: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/t ...

  6. hdu 2962 题解

    题目 题意 给出一张图,每条道路有限高,给出车子的起点,终点,最高高度,问在保证高度尽可能高的情况下的最短路,如果不存在输出 $ cannot  reach  destination $ 跟前面 $ ...

  7. SQL——函数

    演示c_grade表 一.AVG() AVG()函数用于返回数值列的平均值 例: SELECT AVG(score) FROM c_grade; 运行结果: 通过运行结果可以看到,score字段为Nu ...

  8. Python中logging快速上手教程

    本文使用得日志需要导入logging模块和logging.handlers模块,即 import logging import logging.handlers ''' author = " ...

  9. asp.net WEB简单打印

    ASP.NET网页打印 2018.08.26 18:50 1096浏览   昨晚朋友要求在前段时间完成的新闻的网站上加上一个功能,就是在每篇新闻浏览的页面, 加一个打印铵钮.让用户一点打印,能把整篇文 ...

  10. C# HtmlAgilityPack爬取静态页面

    最近对爬虫很感兴趣,稍微研究了一下,利用HtmlAgilityPack制作了一个十分简单的爬虫,这个简易爬虫只能获取静态页面的Html HtmlAgilityPack简介 HtmlAgilityPac ...