基本概念

  • 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. Spring cloud微服务安全实战-8-1课程总结

    总结 首先讲了api的安全.安全常见的风险.安全措施.然后我们把简单的api演化成一个这种微服务的架构. 首先讲了在网关上可以做哪些安全的措施.然后讲了如何搭建一个安全中心,也就是认证服务器,包括一些 ...

  2. dockerfile运行mysql并初始化数据

    本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Dockerfile和 ...

  3. mysql使用yum源安装各个版本的mysql数据库

    每次想用yum安装旧版本的mysql时,发现都找不到mysql的yum安装源,在官网只能找到最新版本mysql的yum源.后来才知道,原来最新的mysql的yum源也是包含了旧版本的mysql的yum ...

  4. [LeetCode] 602. Friend Requests II: Who Has Most Friend? 朋友请求 II: 谁有最多的朋友?

    In social network like Facebook or Twitter, people send friend requests and accept others' requests ...

  5. [LeetCode] 637. Average of Levels in Binary Tree 二叉树的层平均值

    Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...

  6. torch7安装的坑

    https://github.com/torch/torch7/issues/1086 sudo su export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_O ...

  7. redhat7.6Linux安装Oracle19C完整版教程

    首先安装配置虚拟机,见博客https://www.cnblogs.com/xuzhaoyang/p/11264563.html 然后配置IP地址,见博客https://www.cnblogs.com/ ...

  8. STL源码剖析——Iterators与Traits编程#5 __type_traits

    上节给出了iterator_traits以及用到traits机制的部分函数的完整代码,可以看到traits机制能够提取迭代器的特性从而调用不同的函数,实现效率的最大化.显然这么好的机制不应该仅局限于在 ...

  9. day40——数据库、数据库分类、安装、修改密码、字符集编码、简单语句介绍

    day40 详情请看:https://www.cnblogs.com/clschao/articles/9907529.html 数据库 数据库 简而言之可视为电子化的文件柜--存储电子文件的处所,用 ...

  10. JavaScript进行UTF-8编码与解码

    JavaScript本身可通过charCodeAt方法得到一个字符的Unicode编码,并通过fromCharCode方法将Unicode编码转换成对应字符. 但charCodeAt方法得到的应该是一 ...