Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Java Security Model Evaluation
 
JDK1.0 과 JDK1.1 과 JDK1.2의 Security Model 비교와 java.policy file에 대한 설명 ( 2003/03/10 ) 151
Written by specular - 전홍성
1 of 1
 

Java Security Model Evaluation


▶ JDK1.0 Security Model - Sandbox Model
  • JVM에 ClassLoader 객체는 사용되어지는 class file을 Memory로 Loading하는 작업을 한다.
  • Applet을 실행 시키는 JVM은 classpath(Browser내에 내장된 class Library)에서 Loading한 class와 외부로 부터 downloading한 class의 Naming Space를 다르게 관리를 한다.
  • 외부로 부터 downloading된 class, 즉 Untrusted Code는 SecurityManager객체에 의해 활동이 제한이 되어 진다.
  • JDK1.0 Security Model은 Sandbox Model이라고 하는데, Untrusted Code에 대해서는 Naming Space를 다르게 관리 함으로써, SecurityManager객체에 의해 활동이 제한되는 Sandbox라는 Boundary 영역내에서만 활동하는 구조를 말한다.

▶ JDK1.1 Security Model - Sandbox Model + Signed Applet
  • JDK1.1 Security Model은 1.0의 Sandbox Model에 Signed 개념이 추가가 되었다.
  • Untrusted Code가 Sign만 되면, Sandbox boundary를 벗어나 local의 classpath에서 loading된 class처럼 활동할 수 있다. SecurityManager 객체의 제한은 않받는다는 것이지요.
  • 지금 현재의 Browser는 JDK1.1의 Security Model을 사용하고 있다.

    ▶ JDK1.2 Security Model - Sandbox Model + Protection Domain
    • JDK1.2 Security Model은 JDK1.1 Security Model(Sandbox + Signed)에 Protection Domain개념을 추가시킨 구조이다.
    • 1.1 version에서 Signed code는 1.2 version에서 Domain으로 관리가 되고, 각 Domain별로 Sandbox boundary를 다르게 설정할 수가 있어, Sandbox boundary가 Domain별로 가변적이라는 특성을 갖게 된다.
    • Domain은 Signer와 Codebase에 의해 결정이 되고, client의 policy file에 각 Domain이 활동 가능한 Sandbox boundary를 설정하게끔 되어있다.
    • JDK1.2 version에서는 jdk1.2\jre\lib\security\ directory에 java.security file은 master security properties file을 제공하는데, 이것은 Security에 관련된 Configuration file이다. 이 file내에 Domain의 활동 영역을 설정하는 policy file을 지정할 수 있는 부분이 있다.
      
      	# The default is to have a single system-wide policy file,
      	# and a policy file in the user's home directory.
      	policy.url.1=file:${java.home}/lib/security/java.policy
      	policy.url.2=file:${user.home}/.java.policy
      	# User Policy File
      	policy.url.3=file:/D:/javaLab/signedApplet1.2/MyPrint.jp
      	
      	java.home : jre directory
      	java.policy file : System policy file
      	.java.policy file : user default policy file(c:\windows\ 생성)
      	MyPrint.js file : user define policy file
    • java.policy file은 JDK1.2 version, JRE1.2 version을 Installation하면 ~jre/lib/security/ 자동 생성되고, .java.policy file은 c:\windows directory에 필요하다면 생성 할 수가 있다.
    • policy file은 editor tool로 작성가능하지만, JDK에서 제공하는 policytool로 edit하는 것이 편리하다. 일단 System policy file인 java.policy file의 내용은 아래와 같다.
      
      // Standard extensions get all permissions by default
      
      grant codeBase "file:${java.home}/lib/ext/-" {
      	permission java.security.AllPermission;
      };
      
      // default permissions granted to all domains
      // 모든 domain에 대해 System properties를 read 할 수 있는 permission을 설정하고 있다.
      grant {
      	// Allows any thread to stop itself using the java.lang.Thread.stop()
      	// method that takes no argument.
      	// Note that this permission is granted by default only to remain
      	// backwards compatible.
      	// It is strongly recommended that you either remove this permission
      	// from this policy file or further restrict it to code sources
      	// that you specify, because Thread.stop() is potentially unsafe.
      	// See "http://java.sun.com/notes" for more information.
      	permission java.lang.RuntimePermission "stopThread";
      
      	// allows anyone to listen on un-privileged ports
      	permission java.net.SocketPermission "localhost:1024-", "listen";
      
      	// "standard" properies that can be read by anyone
      
      	permission java.util.PropertyPermission "java.version", "read";
      	permission java.util.PropertyPermission "java.vendor", "read";
      	permission java.util.PropertyPermission "java.vendor.url", "read";
      	permission java.util.PropertyPermission "java.class.version", "read";
      	permission java.util.PropertyPermission "os.name", "read";
      	permission java.util.PropertyPermission "os.version", "read";
      	permission java.util.PropertyPermission "os.arch", "read";
      	permission java.util.PropertyPermission "file.separator", "read";
      	permission java.util.PropertyPermission "path.separator", "read";
      	permission java.util.PropertyPermission "line.separator", "read";
      
      	permission java.util.PropertyPermission "java.specification.version", "read";
      	permission java.util.PropertyPermission "java.specification.vendor", "read";
      	permission java.util.PropertyPermission "java.specification.name", "read";
      
      	permission java.util.PropertyPermission "java.vm.specification.version", "read";
      	permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
      	permission java.util.PropertyPermission "java.vm.specification.name", "read";
      	permission java.util.PropertyPermission "java.vm.version", "read";
      	permission java.util.PropertyPermission "java.vm.vendor", "read";
      	permission java.util.PropertyPermission "java.vm.name", "read";
      };
      	
    • 위의 내용은 보면, jre\lib\ext\ directory에서 loading된 class는 AllPermission을 갖는다. 즉 SecurityManager의 제한이 없다는 것을 의미한다. 그리고, 두번째 항목은 모든 Domain에 대해 System.getProperty("java.version") method를 통해 System Property를 read할 수 있는 Permission을 설정한 사항이다.
    • policytool을 이용해 위와 같은 내용으로 Domain별 Sandbox boundary를 설정한 file을 생성할 수가 있고, 그 file을 JVM이 loading될때 policy file로 인식하게 하기 위해 java.security file에 설정할 수가 있다.

     

    2001.08.03 written by Jeon HongSeong

     
    1
    References
     
    Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD