00-0-R00

자바프로그램의 보안 정보 흐름 분석

(Analysis of Secure Information flow for Java programs)

박숙영․이상규

숙명여자대학교 컴퓨터과학과

blue@sookmyung.ac.kr   sanglee@sookmyung.ac.kr

요  약

자바 언어의 사용에 있어서 안전한 데이터의 관리는 중요한 요소가 된다. 자바 바이트코드 검증기(Java bytecode Verifier)나 클래스 로더(class loader), 보안관리자(Security Manager)를 통한 자바언어 자체의 보안장치로서는 플랫폼 독립을 지원하는 자바언어의 특성을 살리면서 동시에 민감한 정보의 유출을 방지하는 역할을 수행하기에는 부족한 점이 있다. 이러한 점을 고려하여 안전한 정보 흐름에 관한 연구들이 수행되어 왔다. 그중 자바 가상 기계의 바이트코드 검증기의 타입 검사기능을 이용한 방법이 연구되어 왔는데 본 논문에서는 구문분석정보를 그래프로 나타내어 보다 효율적인 방법으로 안전한 정보 흐름을 분석하고 그 결과를 시각화 하여 시스템 관리자가 보다 편리하게 사용할 수 있는 안전한 정보 흐름 분석기를 구현하였다.

1. 서  론

자바 프로그램의 보안 정보 흐름 분석

프로그래밍언어논문지 제00권 제0호 (2005. 0)

컴퓨터의 사용에 있어서 보안 문제는 늘 대두되는 문제이다. 여러 가지 모든 자료의 보관이 컴퓨터를 통한 디지털 데이터의 형태로 이루어지면서 보관하고 있는 국가나 회사 혹은 개인의 민감한 데이터들 어떻게 안전하게 관리할 수 있는가가 시스템 운영에 있어서 중요한 요소가 되었다. 특히 유/무선 네트워크의 발달로 네트워크를 통한 자원의 접근이 용이해 지면서 보안 중요성은 더욱 커진 상태이다. 따라서 암호화나 인증키 방식 등을 이용한 전통적인 보안 방법의 연구와 함께 자원에 대한 접근 권한을 조절하는(Access Control) 연구가 이루어 졌는데 역할 기반(role-based)방법이나 B-tree Bitmap encoding방법을 이용하는 저근 조절(Access Control) 방법들이 연구되어 왔다[1-3].

자바 언어는 네트워크 환경, 특히 Web을 이용한 분산 환경을 고려하여 고안된 언어로서 플랫폼 독립적인 바이트코드(bytecode)로 작성된 애플릿을 인터넷을 통해 다른 컴퓨터에 전달하고 로컬 컴퓨터의 자바가상기계(Java Virtual Machine)을 통한 원격 실행의 편의성을 지원하고 있다. 이는 많은 네트워크 프로그래머들의 관심을 갖는 자바의 큰 장점이지만 시스템의 보안의 측면에서 볼 때 이러한 자바프로그램의 네트워크를 통한 다른 플랫폼으로의 전달 및 원격 실행이 보안에 있어서 위험적 요소가 될 수 있다. 다운로드 된 프로그램이 악의적으로 컴퓨터의 민감한 데이터를 접근하여 그 내용을 수정하거나 네트워크를 통해 직간접적인 방법으로 정보를 전송시킨다면 보안상의 문제가 발생 될 수 있다. 이러한 상황을 대비하기위해 자바에서는 자체적으로 방어체계를 갖고 있는데 자바 바이트코드 검증기(Java bytecode Verifier)나 클래스 로더(class loader),  보안 관리자(Security Manager)가 그 역할을 한다. 바이트코드 검증기는 타입(type) 검사나, 스택의 초과나 미달 상태, 레지스터나 객체의 초기화 등을 검사하여 부적절한 변환이나 메모리 접근을 하는지 확인을 하고 클래스 로더는 이름 공간(Name Space)을 나누어 클래스 이름의 중복을 막고 로컬 클래스를 먼저 로드시킴으로써 네트워크를 통해 전송되어온 클래스가 시스템 클래스처럼 보이려고 하는 시도를 감지한다. 보안 관리자(Security Manager)는 모래상자(sandbox) 개념을 이용하여 신뢰할 수 없는 코드를 격리시키고 신뢰할 수 있는 코드에게만 보다 민감한 자원에 대한 접근 권한을 부여하고 있다[4]. 그러나 이러한 데이터 접근 제어 방법만으로는 시스템의 보안에 충분하지 못한 경우가 있다.

위에서 설명한 3개의 자바 보완 체계는 민감한 데이터의 직접적인 유출은 막을 수 있으나 프로그램 안에서의 이러한 민감한 정보의 전파는 막을 수 없는 한계를 갖고 있다. 프로그램을 실행하는데 있어 경우에 따라 다른 프로그램의 민감한 정보의 접근을 완전히 차단하는 경우보다 대상에 따라 읽기는 허용하되 그 유출은 허락하지 않는 등, 다른 보안정책을 적용하는 것이  필요한 경우가 있다. 이런 경우 프로그램안의 클래스나 메소드, 변수 등에 각기 다른 보안수준을 부여하여 같은 보안 수준으로의 정보의 흐름이나 낮은 수준에서 높은 수준으로의 정보의 흐름은 허용하되 높은 수준에서 낮은 수준으로의 정보 흐름은 허용하지 않는 방법을 사용할 수 있는데 이를 안전한 정보 흐름 정책(secure information flow policy)이라 한다. 프로그램의 변수와 메소드에 보안수준을 할당하고 프로그램의 실행시작에서 종료에 있어서 어떠한 경우에도 높은 보안수준을 갖는 정보가 낮은 보안수준으로 전파되는 경우가 없을 경우 그 프로그램은 안전한 정보 흐름을 갖고 있다고 이야기할 수 있다. 프로그램의 실행에 따라 외부에서 전송되어온 낮은 보안 수준을 갖는 악의적 클래스의 메소드로 시스템의 높은 수준의 데이터가 전파되어 네트워크를 통해 그 정보가 유출 되어서는 안되는데  이러한 안전하지 못한 정보의 전파는 그림 1의 코드의 예에서 찾아 볼 수 있다.

그림 1. 데이터 유출의 예

y = passwd;      (a)

if (length(passwd) < 4)

y = 1;

else	(b)

y = 0;

그림 1에서 y가 낮은 보안수준을 갖는다고 할 때 높은 보안수준을 갖는 passwd의 정보가 (a)와 같이 직접적으로 낮은 보안수준의 y로 전달되거나 (b)의 경우와 같이 passwd의 민감한 정보를 간접적으로 낮은 보안수준의 y에 저장하는 경우 이것은 불안전한 정보 흐름(insecure information flow)을 갖는다고 볼 수 있다. (a)의 경우 명시적인 방법으로 인한 불안전한 정보 흐름이 일어났고 (b)의 경우 내재적 방법으로 인한 불안전한 정보 흐름이 일어났다고 이야기 할 수 있다[4,5].

이러한 정보흐름 보안 정책을 갖고 있는 경우 실행시키고자 하는 자바 프로그램이 안전한 정보흐름을 갖고 있는지 혹은 불안전한 정보 흐름을 갖고 있는지를 실행 전에 검사하여 민감한 정보의 유출을 사전에 방지 할 수 있다. 이러한 검사는 컴퓨터 간에 이동되는 프로그램이 소스프로그램이나 기계어가 아닌  JVM 언어인 바이트코드이기 때문에 바이트코드를 대상으로 하여 분석되어야 하고 되도록 이러한 검사를 빠르게 수행할 수 있어야 하겠다. 본 논문에서는 바이트 코드의 분석을 통한 안전 정보 흐름 그래프를 생성하여 시스템 관리자에게 프로그램의 안전 정보흐름의 내용을 시각화하여 제공하고 그래프에서의 전파흐름 분석을 통해 프로그램의 정보 흐름 안전도를 분석하여 자동으로 제공하는 방법을 설계하여 구현하였다. 논문의 2장에서는 관련연구의 소개와 그 문제점을 분석하고 3장에서는 제안하는 그래프를 이용하는 보안 검사 방법 및 구현을 소개하고 4장에서 결론 및 향후 연구과제를 맺도록 구성하였다.

2. 관련 연구

[5]와 [6]의 연구에서는 안전한 정보 흐름을 JVM의 Java 바이트코드 검증을 이용해 분석하였다. 자바 가상 기계는 스택을 사용하여 명령을 수행하는 스택기계모델을 갖고 있다. 테스트 하고자 하는 바이트코드 프로그램을 변환하여 프로그램에서 사용되는 클래스와 메소드 그리고 변수가 갖고 있는 보안수준을 지정하는데 이 때 보안 수준에 따라 모든 데이터 타입을 낮은 보안 수준을 갖는 L 클래스와 높은 수준을 갖는 H 클래스로 변환한다. 이렇게 새로 변환된 바이트코드는 자바 바이트 코드 검증기를 거치면서 일반적인 타입검사를 하게 되는데 이 결과가 바로 안전한 정보 흐름 검사와 일치하게 된다. [6]에서 사용한 보안 모델을 보면 JVM 언어의 명령어 중 정보 전파를 일으킬 수 있는 세 개의 명령어를 수행할 때 정보흐름의 안전성을 검사하게 되는데 putfileld, invoke, return이 그것이다. 세 가지 인스트럭션의 일반적인 스택에서의 의미론적 규칙(semantics rules)은 그림 2에 나와 있는 것과 같다.

그림 2. JVM 언어의 의미론적 규칙(부분)

putfield [eqn: {B[i]`=`putfield`C.f} over {LEFT < (B,i,M,k CDOT r CDOT S) CDOT A,O RIGHT > -> LEFT < (B,i+1,M,S) CDOT A,O[k/r.f] RIGHT >}]

invoke  [eqn: {B[i]=~"invoke"~C.mt rm ` rm ` rm ` rm ` rm ` rm ` rm ` rm ` rm ` rm ` rm ` rm ` rm ` rm `B prime `"is"~"the"~"bytecode"~"of"~C.mt it} over {LEFT < (B,i,M,k CDOT r CDOT S) CDOT A,O RIGHT > -> LEFT < (B prime ,0,M[r/x0][k/x1], lambda ) CDOT (B,i+1,M,S) CDOT A,O RIGHT >}]

return  [eqn: {B[i]= alpha rm `return it} over {LEFT. LEFT. RIGHT < (B,i,M,k CDOT lambda ) CDOT (B rm ` prime ,j,M rm ` prime ,S) CDOT A,O RIGHT > -> LEFT < (B rm ` prime ,j,M rm ` prime ,k CDOT S) CDOT A,O RIGHT > it}]

그림 2에서 클래스 [eqn: C]의 메소드 [eqn: mt]의 실행상태(execution state)는 4가지 요소[eqn: (B,i,M,S)]로 표현되고 이 때 [eqn: B]는 메소드 [eqn: mt]의 바이트코드, [eqn: i]는 프로그램 카운터가 갖고 있는 주소, [eqn: M]은 로컬 메모리, [eqn: S]는 스택을 의미한다. 어느 객체 [eqn: O]의 활성스택에서의 실행상태 [eqn: X]의 실행은 [eqn: <X,`O>]로 표현되었다. 또한 [eqn: M[k/x]]는 [eqn: M]과 모두 같으면서 [eqn: x]레지스터의 값만 [eqn: k]를 갖는 메모리형태를 뜻하고 마찬가지로 [eqn: O[k/r.f]]은 [eqn: O]와 모두 같으면서 객체 [eqn: r]의 변수 [eqn: f]만 [eqn: k]값을 갖는 객체 값 배정을 의미한다. 이러한 자바가상기계의 명령문으로 이루어진 프로그램을 보안수준을 감암한 보안 바이트코드로 변환하여 자바 검증기를 통한 타입검사를 수행하여 보안 정보흐름을 파악하고 있다. 이때 보안 모델을 다음과 같이 정의 한다. 보안수준 값의 도메인영역을 [eqn: Sigma]라 할 때 클래스 집합 [eqn: C]에 있는 각각의 클래스에 대한 보안수준 할당 함수를 [eqn: S : C \ \ \ rarrow Sigma], [eqn: C]에 있는 메소드의 집합을 [eqn: Mtds(C)]라 했을 때 여기에 속하는 메소드의 파라미터들에 대한 보안수준 할당 함수를 [eqn: P: Mtds(C) ~ ~rarrow ~ Sigma], 반환값들에 대한 보안수준 할당은 [eqn: R: Mtds(C) ~ rarrow ~Sigma]라 했을 때 프로그램 실행 시 높은 수준의 정보가 낮은 수준으로의 전파가 없을 경우 프로그램은 안전 정보 흐름을 갖고 있다고 정의했다. 자바 검증기를 통한 안전한 정보 흐름의 규칙은 그림 3과 같다.

이 때 [eqn: Q_i]는 명령문 [eqn: i]를 실행하기 직전의 보안정보 흐름 상태를 [eqn: (M,S,E)] 3개의 요소로 나타내는데 [eqn: M]은 레지스터 메모리들의 보안수준 할당을([eqn: M: Registers ~ ~rarrow ~ Sigma]), [eqn: S]는 스택에 저장된 보안수준을([eqn: S ~in Sigma^*]) 그리고 [eqn: E]는 환경의 보안수준을([eqn: E ~in Sigma]) 나타낸다. 이 때 [eqn: sqcup]연산은 보안 수준의 최소상한연산으로(least upper bound) 주어진 보안수준 중 가장 높은 보안수준을 갖고 [eqn: sqsubseteq]관계는 왼쪽의 보안 수준의 오른 쪽의 보완 수준보다 낮을 때 참값을 가진다[5].

그림 3. 메소드 [eqn: C.mt]의 보안 정보 흐름 검증 규칙(부분)

putfield [eqn: {c[i]= rm `invoke it `C1.f,~~~Q _{i} =(M,k CDOT r CDOT S,E),~~k SQCUP r SQCUP E SQSUBSETEQ S(C1)} over {Q _{i+1} :=Q _{i+1} SQCUP _{i+1} (M,S,E)}]

invoke  [eqn: {c[i]= rm invoke it `C1.mt1,Q _{i} =(M,k CDOT r CDOT S,E),`k SQCUP E SQSUBSETEQ P(C1.mt1),`r SQCUP E SQSUBSETEQ S(C1)} over {Q _{i+1} :=Q _{i+1} SQCUP _{i+1} (M,(R(C1.mt1) SQCUP E SQCUP r) CDOT S,E)}]

return  [eqn: {c[i]= alpha rm return it ,~~~Q _{i} =(M,k CDOT S,E),~(k SQCUP E) SQSUBSETEQ R(C.mt)} over {Q _{f} :=Q _{f} SQCUP _{f} (M,S,E)}]

그림 4는 이러한 보안 정보 흐름의 검증을 위해 [6]에서 제안한 검사도구 프로그램의 구성도이다. [6]에서는 모든 변수와 메소드의 파라미터, 반환값, 환경값등의 타입을 그 보안 수준에 따라 H 클래스와 H 클래스를 상속하는 L 클래스로 변환하여 자바 바이트코드 검증기의 타입검사를 통해 H객체가 L객체에 할당되는 경우가 생기는지를 검사하여 보안 정보 흐름을 확인하는 프로그램을 구현하였다. 그러나 그 프로그램은 검사하고자 하는 대상 프로그램의 코드전체를 이해하고 있어야 어느 메소드와 어느 변수에 어떠한 보안 수준을 설정해야 하는지를 파악할 수 있게 되어있다. 이는 보안 수준의 초기값 설정인 SecSpec.txt 파일 작성에 있어서 일단 검증 대상 프로그램의 코드를 어느정도 분석해야 가능한데 이는 대부분의 검사 대상 프로그램이 자체 개발된 프로그램보다는 네트워크를 통해 전달된 신뢰할 수 없는 프로그램이 주가 되는 상황에서 매 검사를 위해 그 프로그램의 코드를 이해해야하는 번거로움이 있다. 또한 안전 정보 흐름검사가 메소드 별로 진행되어 메소드 하나를 검사하고 그 결과에 따라 필요한 변경사항을 Sf_drive를 통해 SecSpec.txt 정보를 업데이트 시키고 또다시 똑같은 검사를 sf_transform으로부터 시작해서 Jasmin을 거처 justice_varifier로 이어지는 과정을 반복하게 되어 검사시간에 중복이 생기는 구조를 갖고 있어서 수행시간이 많이 걸리는 비효율적인 면을 갖고 있다. 따라서 본 논문에서는 초기값 설정에 필요한 정보를 검사자가 프로그램의 소스를 분석하지 않아도 쉽게 알 수 있도록 정보 흐름에 관한 시각화 정보를 제공하고 반복 적용되는 검사 사이클을 바이트코드 정적분석을 통해 수집한 정보를 이용한 보안 정보 흐름 그래프를 구성하여 그래프에서의 고수준 보안 정보의 전파 추적을 통한 노드별 보안수준 계산을 통해 보안 정보 흐름의 유무 및 불안전 흐름 부분을 파악하는데 필요한 검사시간을 줄일 수 있는 방법을 제안하고 이를 구현하였다. 또한 기존의 텍스트로만 제공되던 분석결과를 시각화를 통해 보다 효과적인 정보전달을 추구하였다.

그림 4. Secure Flow Tool

3. 그래프 계산을 이용한 안전 정보 흐름 검사 방법 및 구현

각각의 데이터 정보에 각 시스템 관리자가 적용하고 있는 보안 정책에 따라 초기 보안수준 값을 설정할 수 있는데 보안수준 값은 보안 레벨 영역([eqn: Sigma])안의 1부터 [eqn: sigma_max]까지의 정수 중 하나이거나 보안 레벨에 독립적인 데이터를 나타내거나 보안 레벨의 미지정 상태를 나타내는 0값 중의 하나를 할당 하게 된다. 프로그램의 데이터 흐름에 따라 보안정보가 다른 변수나, 메소드 혹은 클래스로 전파되어 가는데 흐름의 진행에 있어서 보안수준이 같거나 높은 곳으로의 흐름은 상관없으나 높은 보안수준의 정보가 낮은 보안수준으로 전파되어지면 중요 정보의 유출이 발생 될 수 있다. 이러한 정보 흐름은 보안레벨을 갖는 대상을 나타내는 노드집합과 정보 흐름의 진행을 나타내는 에지집합으로 표현된 방향성 있는 그래프(directed graph)로 나타낼 수 있다. 이 때 각 노드는 초기에 할당된 보안레벨을 갖거나 초기값이 정해지지 않은 0값을 갖고 있고 자신 보다 높은 수준의 보안 레벨을 갖는 다른 정보의 전파 경로에 있는 경우 자신을 지나가는 보안 흐름 경로 중 가장 큰 값을 부여 받게 된다. 이러한 사항이 그림 5에 나타나 있다.

그림 5 노드 i의 보안 수준

그림 5에서 노드 [eqn: i]의 초기 보안수준을 0이라 했을 때 노드 [eqn: i]의 보안 수준 [eqn: sigma(i)]는 [eqn: N_{\in} (i)]를 노드 [eqn: i]로 들어오는 방향의 에지로 연결된 이웃 노드들이라 했을 때 그 값은 식 (1)과 같이 계산된다.	[eqn: sigma (i)=max _{j IN N _{rm IN it} (i)} ` sigma (j)]           식 (1).

이러한 전달의 흐름을 시퀀스로 생각하여 정보 흐름 시퀀스가 [eqn: P_sigma = i_0, i_1, i_2, cdots, i_k]라 했을 때 다음과 같은 특성을 관찰할 수 있다.

특성 1. 안전 정보 흐름 그래프에서

[eqn: P_sigma = i_0, i_1, i_2, cdots, i_k]로 정보 흐름이 있다면

[eqn: sigma(i_0 ) leq sigma(i_1 ) leq cdots leq sigma(i_k )]이다.

특성 2. 안전 정보 흐름 그래프에서

[eqn: P_sigma = i_0, i_1, i_2, cdots, i_k]로 정보 흐름이 있고

[eqn: i_0 == i_k]라면

[eqn: sigma(i_0 ) = sigma(i_1 ) = ~cdots = ~sigma(i_k )]이다.

위의 특성을 고려하여 안전 정보 흐름 분석기를 다음과 같을 구성을 통해 구현하였다.

주어진 검사대상 바이트코드를 Jasmin Visitor를 이용한 구문분석을 통해 그래프 구성에 필요한 노드들과 콜 관계를 나타내는 에지 정보를 추출 하였다. 이 정보는 시각화기(Visualizer)로 전달되어 주어진 프로그램의 안전 정보 흐름관계를 그래프로 생성하게 된다. 노드가 내타내는 프로그램 상의 전체 이름은 왼편에 프레임을 따로 두어 나타냈고 노드를 클릭하면 상응하는 해당 이름이 목록에서 하이라이트되어지고 목록에서 이름을 클릭하면 그래프에서 상응하는 해당 노드가 하이라이트되어지도록 설계하였다. 구현에서는 [5,6]의 논문에서와 같이 [eqn: sigma_max]를 2로 하여 낮은 레벨의 보안 수준인 1과 높은 레벨의 보안 수준인 2 두가지를 갖는 경우를 고려하여 [6]에서 사용했던 PACAP 프로젝트에서 만들어진 Loalty Rent-A-Car applet을 검사 대상으로 분석을 하였다. 이 예제의 보안 정보흐름 그래프는  92개의 노드를 갖는 그림 7에서 보는 것과 같은 결과를 주었다.

그림 6 그래프 기반 안전 정보 흐름 분석기

전체 92개의 노드 중 보안 흐름에 관여하지 않는 노드들은 간결화를 위해 그래프에 표시하지 않게 설계하였다.  오른쪽 이름의 목록에서 클릭하여 그 노드의 보안레벨을 설정할 수 있게 하였는데 그림 7에서 높은 보안 레벨을 갖는 노드는 붉은 색으로 낮은 보안레벨을 갖는 노드는 연두색으로 표시되는 것을 볼 수 있다. 이렇듯 보안 레벨 설정을 검사하는 프로그램의 소스를 보지 않고 GUI를 통해 마우스로 흐름 연결 관계를 보면서 쉽게 설정하고 변경하게 하여 시스템 관리자의 편의를 도모하였다.

그림 7과 같은 설정으로 보안 정보 흐름을 검사하였을 때의 결과가 그림 8에 나타나 있다. Pulse/Credit의 보안 레벨을 2(high)로 설정하고 LoyaltyRentACar/getBalanced의 보안 레벨을 1(low)로 설정했을 때, 보안 정보의 흐름에 따라 전파해 나가다 파란색 노드로 표시되는 보안 레벨 2로 새로이 설정된 LogyaltyAirFrance/logfull의 정보가 초기값으로 설정되어 있는 보안 레벨 1의 LoyaltyRentACar/getBalanced로 전달되면서 안전한 정보 흐름이 아님이 발견된 경우이다. 주어진 보안 레벨 설정을 적용했을 경우 그래프의 어느 노드에서 어느 노드로 흐르게 되는 정보가 보안정책에 위배되어 검사하는 프로그램이 불안정 정보 흐름을 갖게 되는지 결과 창에 그 내용이 출력되어 있는 것을 볼 수 있다.

그림 9의 경우에 나타나 있는 바와 같이 LoyaltyRentACar/getBalanced의 보안 레벨만이 2(high)로 설정되어진 경우로 이러한 설정 하에서는 검사하는 Loalty Rent-A-Car applet 프로그램은 안전한 정보 흐름을 갖고 있음을 나타내고 있다. 이때 새로이 높은 레벨의 보안수준 값을 갖게 되는 노드들의 목록도 결과에 출력되어진다. 그 목록은 LoyaltyRentACar/getBalanced의 보안 내용이 프로그램의 어느 영역에 영향을 미치게 되는가를 나타내기도 한다.

그림 7 GUI 방식의 초기 보안레벨 설정화면

그림 8 정보 흐름을 분석 결과 화면

그림 9 안전한 정보 흐름을 포함하는 경우

4. 결론 및 향후 연구과제

본 논문이 제안하고 구현한 자바프로그램에서의 안전한 정보 흐름 분석은 텍스트로만 결과를 보여주었던 기존의 프로그램에 비해 시각화를 이룸으로써 시스템 관리자가 보다 편리하게 프로그램의 안전 정보 흐름을 검사할 수 있게 하였다. 그리고 기존의 프로그램이 코드 분석없이 초기 보안 레벨 설정하는데 어려움이 있었다면 본 논문에서 제안하는 프로그램은 GUI 방식의 메뉴에서의 클릭을 통해 손쉽게 초기값을 설정하고 그 설정된 값에 의한 정보 흐름 분석을 한눈에 파악할 수 있게 해줌으로써 프로그램의 사용자 친숙도를 높일 수 있었다. 더욱이 기존의 메소드 단위의 프로그램 업데이트 루프를 돌지 않고 그래프를 이용한 전파 경로를 추적하여 보안 레벨을 설정 하고 이에 따른 안전 정보 흐름을 파악하는데 보다 효율적인 방법을 제안하였다.

향후 연구과제로는 보안 레벨 계산에 보다 구체화된 스코프 별 환경 보안 레벨을 함께 고려 하는 것이다. 현제는 보안 레벨의 계산에 있어서 표면적으로 전달되어지는 보안레벨의 전파만을 고려하고 있는데 이러한 전파 정보와 함께 메소드 내에서 이정보를 접근하는 위치의 스코프 별 환경에 대한 보안레벨도 계산하여 함께 산출하는데 이용하는 방법이 연구되어져야 한다. 결과나 과정의 시각화에 있어서도 많은 노드와 에지들로 이루어진 정보를 한번에 표현하고 있는데 이러한 정보의 표현을 단계화한다면 보다 명확한 정보전달이 가능하리라 판단된다.

참 고 문 헌

[1] D. Ferraioilo and R. Kuhn, Role-Based Access Control. In Proceedings of 15th National Computer Security Conference, 1992.

[2] C.-Y. Chan and Y. Ioannidis, An Efficient Bitmap Encoding Scheme for Selection Queries, In ACM SIGMOD Record, Vol. 28, No.2, 1999.

[3] A. Gummadi, J. Yoon, B. Shah, V. Raghavan, A bitmap-based access control for restricted views of XML documents In Proceedings of the 2003 ACM workshop on XML security, 2003.

[4] M. Shoffner, D. Hamner, and M. Hughes, Java Network Programming: A Complete Guide to Networking, Streams, and Distributed Computing, Manning Publications, 1999.

[5] M. Avvenuti, C. Bernardeschi and N. De Francesco, Java bytecode verification for secure information flow, In ACM SIGPLAN Notices, Vol. 3, No. 12, 2003.

[6] C. Bernardesci, N. De Francesco, G. Lettieri and L. Martini, Checking secure information flow in Java bytecode by code transformation and standard bytecode verification, In Software-Practice and Experience, Vol. 34, No. 13, 2004.

	박 숙 영 2000년 숙명여자대학교 컴퓨터과학과(학사) 2003년 숙명여자대학교 대학원 컴퓨터과학과(석사) 2004년~현재 숙명여자대학교 컴퓨터과학과 박사과정 관심분야:무선통신,Mobile Computing
	이 상 규 1989년 Univ. of Southern Cal. 컴퓨터과학과 졸업(학사) 1991년 George Washington Univ. 컴퓨터과학과 졸업(석사) 1995년 George Washington Univ. 컴퓨터과학과 졸업(박사) 1997년~현재 숙명여자대학교 컴퓨터과학과 부교수 관심분야:컴파일러,Mobile Computing