基本概念

  • 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. UI Automator 介绍

    简介 Android 4.3发布的时候包含了一种新的测试工具–uiautomator,uiautomator是用来做UI测试的.也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期.比如 ...

  2. python json dumps datetime类型报错

    # -*- coding: utf-8 -*- import json from datetime import date, datetime class MyEncoder(json.JSONEnc ...

  3. 高级UI-高级渲染

    在使用了Panit画笔之后,可以对其进行渲染,从而达到更加人性化的方式 渲染分类 按常用渲染方式可以分为以下几种: BimapShader位图的图像渲染器 LinearGradient线性渲染 Rad ...

  4. 微信小程序 与后台交互----获取服务器时间

    index.wxml代码 <!--index.wxml--> <view class="container"> <text>{{date}}&l ...

  5. Influx Sql系列教程一:database 数据库

    对于influxdb而言,database和我们更熟悉的mysql中的dababse没有什么特别的区别,可以将数据库简单理解为一堆表(measurement)的集合,接下来我们将看一下在influxd ...

  6. 8、2 es数据库的使用

    1.注意问题.es和redis同时使用会报错 解决: package com.bw; import org.springframework.beans.factory.InitializingBean ...

  7. WordPress 设计学习

    "One can never be defeated until defeat has been accepted as a reality"----- Bruce Lee 官网免 ...

  8. [转帖]直击案发现场!TCP 10倍延迟的真相是?

    直击案发现场!TCP 10倍延迟的真相是? http://zhuanlan.51cto.com/art/201911/605268.htm 内核参数调优 非常重要啊. 什么是经验?就是遇到问题,解决问 ...

  9. Tomcat是一个Servlet容器?

    "Tomcat是一个Servlet容器",这句话对于2019年的程序员应该是耳熟能详的. 单纯的思考一下这句话,我们可以抽象出来这么一段代码: class Tomcat { Lis ...

  10. MySQL数据库的安装(Windows平台)

    1.MySQL数据库安装与配置 1.1 数据库安装和配置 安装需要注意的地方: 典型安装:安装最常用的特性组件,会默认安装至C盘目录下,适合大部分开发者. 自定义安装:可以自定义安装目录,自定义选择安 ...