Programming for the java Virtual machine

Slides:



Advertisements
Similar presentations
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
Advertisements

어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
2장 닷넷 프레임워크.
C++ Espresso 제1장 기초 사항.
객체지향 프로그래밍.
Chap05 상속 5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩(Overriding)
어서와 Java는 처음이지! 제1장 기초 사항.
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
12장. JSP에서 자바빈 활용 제12장.
알기 쉽게 해설한 Java 8th edition
어서와 Java는 처음이지! 제1장 기초 사항 IT응용시스템공학과 김형진 교수.
제 12장 예외 처리 12.1 설계 쟁점 12.2 PL/I의 ON-조건 12.3 Ada의 예외 처리
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
Chapter 11 – 예외 처리 Outline 11.1 설계 쟁점 11.2 Pl/I의 예외 처리 11.3 Ada의 예외 처리
10장 예외 처리 프로그래밍 언어론 10.6 Pascal과 C의 에러 처리 10.1 설계 주제 10.2 PL/I의 예외 처리
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
제7장 제어구조 I – 식과 문장.
[ 단원 08 ] 예외처리와 스레드.
명품 JAVA Programming.
명품 JAVA Programming 제 4 장 클래스와 객체.
Power Java 제4장 자바 프로그래밍 기초.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
8장 자바 입출력.
자바 가상 기계 (Java Virtual Machine)
자바 5.0 프로그래밍.
Power Java 제15장 예외 처리 (Exception Handling).
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
명품 JAVA Essential.
AOP 개념 및 Spring의 AOP 기능.
10장 SafeTalk 시스템 소프트웨어 연구실 성순화 이재일
Chapter 07 소스코드의 취약점 분석.
명품 Java Programming.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
2010학년도 2학기 객체지향의 이해.
DataScience Lab. 박사과정 김희찬 (월)
This, static, final 지정 예약어 자바 4대 중첩 클래스
Android Coding Convention
주소록 프로그램.
자바 5.0 프로그래밍.
제1장 서론.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Java Virtual Machine Chapter 5. 제어문 Ps lab 김윤경.
DataScience Lab. 박사과정 김희찬 (월)
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
Web programming Chap 04 상속 김 정 석
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Chap. 14 성능향상시키기 PS Lab. 이지연.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
프로그래머를 위한 첫걸음 JDBC Lecture 001 BY MINIO
Spring DI 이해 및 활용.
CACM 구현 public class CACM { public CACM(File file)
자바 5.0 프로그래밍.
JA V A W. 07 Sb.L.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
[ 단원 06 ] 상속과 다형성.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
C# 10장. 참조형.
Chap. 8 자바 가상 머신의 클래스 로더 사용 PS Lab. 이지연.
6장 클래스(상속).
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
Java 5장. 객체지향 개념 public class SumTest {
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
Presentation transcript:

Programming for the java Virtual machine 15. 보안과 자바 가상 머신 ps lab 김윤경

목차 1. 보안 구조와 보안 정책 1-1.기본적인 애플릿 보안정책 1-2. 세밀한 보안 정책 1-3. 잠재적 공격의 가능성

1. 보안 구조와 보안 정책 SecurityManager 클래스 ->SecurityException발생 어떠한 코드가 어떠한 동작을 할 수 있는 권한이 있는지 판별하는 클래스 잠재적으로 위험한 동작을 하기 전에 해당메소드를 호출하여 금지된 동작인지 검사 ->SecurityException발생 Ex) 표15.1참고(p.476)

예제 public FileInputStream (String filename) throws FileNotFoundException { SecurityManager security=System.getSecurityManager(); if(security !=null) security.checkRead(filename); //해당 파일을 읽을 권한이 없을 경우, SecurityException발생 //파일을 읽을 권한이 있을 경우, FileInputStream객체 생성후 read()메소드호출하여 해당파일을 읽음 }

1-1.기본적인 애플릿 보안정책 Class클래스의 getClassLoader() 애플릿의 클래스가 어느 클래스로더를 통해서 로드되었는지 알 수 있음. Class 클래스는 final클래스이기 때문에 getClassLoader()는 오버라이드될 수 없음.

예제 : NastyApplet이 file을 읽기를 시도 <자바스택> 메소드 클래스 클래스로더 checkRead AppletSecurityManager none <init> FileInputStream attack NastyApplet AppletClassLoader run Class AppletSecurityManager extends SecurityManger { public void checkRead(String name) throws SecurityException{ ClassLoader loader=currentClassLoader(); if(loader instanceof AppletClassLoader throw new SecurityException(“file.read”); }

1-2. 세밀한 보안 정책 시스템프로퍼티를 이용 Ex) Acl.read를 /sandbox라고 설정한 경우 : 애플릿은 /sandbox 절대경로하에 있는 파일에만 접근가능 Digital signature : private key로 암호화 -> public key로 애플릿이 누구로부터 서명되었는지 확인

1-3. 잠재적 공격의 가능성 1) 보안 관리자에 대한 방어. Java.lang.System클래스 : 오직 하나의 SecurityManager 인스턴스가 시스템에 보안 관리자로써 등록될 수 있으며, 한 번 등록이 되고 난 후에는 등록된 보안 관리자는 없앨 수 없다.

AppletSecurityManager asm=new AppletSecurityManager(); System.setSecurityManager(asm); package java.lang; public final class System{ private static SecurityManager security; public static setSecurityManager(SecurityManager sm){ If(security !=null) throw new SecurityException(“SecurityManager already set”); //securityManger가 이미 존재 한다면 exception발생 security=sm;}}

2) 자바 보안에 대한 우회 클래스 로더에서 클래스를 로딩할 때 resolveClass 메소드가 실행되면서 검증이 자동으로 일어남 System.security = null; //검증 알고리즘에서 private인 security필드에 접근할 수 없으므로 해당 클래스 로딩을 중지

3) 생성되지 않은 객체에 대한 사용 검증 알고리즘에서 각 생성자들이 슈퍼클래스의 생성자를 호출하도록 체크 class WimpySecurityManager extends SecurityManager { //보안을 체크하는데 사용되는 메소드를 오버라이드 하//고 오버라이드한 메소드에서는 아무런 일도 하지 않도//록 한다.} public class SecurityManager{ protected SecurityManager(){ if(System.getSecurityManager()!=null) throw new SecurityException(“security manager already installed.”); }}

4) 유효하지 않은 캐스팅 public class Message{ private PrivateKey private_key; } public class SneakeyMessage{ public Privatekey private_key; void attack(Message m){ SneakyMessage hack=(SneakyMessage)m;//검증 알고리즘에서 거부

5) 클래스에 대한 참조바꾸기 Checkcast 검증 알고리즘에서 특정 객체를 특정 클래스로 간주할 수 있게 해준다. 프로그램이 수행되면서 자바 가상 머신에서 checkcast명령어를 만날 때 마다 스택 최상위 값의 실제 타입을 구함. => ClassCastException발생

.method attack(LMessage;)V aload_1 ; 변수1에는 Message를 담고 있다. checkcast SneakyMessage ; 검증알고리즘에서 Message를 SneakyMessage라고 믿게 한다. Getfield SneakyMessage/private_key Ljava/security/PrivateKey;

6) 초기화되지 않은 필드에 대한 접근 어떤 필드를 명확하게 초기화하는 부분이 없을 때 : 숫자=0, 참조 필드=null로 초기화 Class : Connection Password : “foobar” Class : MyObject Field1 :

7) 배열 범위 체크 접근하려는 원소가 배열 경계안에 들어 있는지 판단함 = > ArrayIndexOutOfBoundsException발생 Class : Connection Password : “foobar”

8) 예외처리 시스템에 대한 유해한 작업을 할 때 발생하는 예외를 처리함으로써 예외무시 .class WimpySecurityManager .method <init>V .catch java/lang/SecurityException from begin to end using handler begin : aload_0 ; 수퍼클래스의 생성자 호출 invokevirtual java/lang/SecurityManager/<init>()V end : return handler : ; SecurityException이 발생하면 제어가 넘어온다. return ; SecurityManger 생성자의 호출이 완전하게 끝나지 않은 상태에서 반환 .end method

9) 숨겨진 코드 위치 값 의미 0050 11 sipush 0051 b3 Oxb300=-19712 0052 00 0053 74 ineg 0054 a7 goto 0055 ff Oxfffd=-3 0056 fd