Ⅰ.서론
악성 자바 애플릿과 같은 이동실행코드에 의한 피해는 코드레드와 같이 치명적인 피해 사례로 보고되진 않았지만 인터넷 사용의 증가와 함께 무수히 많은 웹 서버가 존재하게 되면서 그 피해 사례가 늘고있다.”(2) 사용자가 임의의 웹 서버에 접속하여 각종자바 애플릿을 프락시 서버를 통해 전송받는 경우가많아지고 있기 때문이다. 악의의 웹 서버가 그 서버에접속하는 모든 불특정 다수의 개인 정보 획득, 시스템 정보 획득 및 시스템 파괴를 목적으로 접속한 사용자에게 악성 자바 애플릿을 전송하여 자동으로 실행될 수 있도록 한다면 그 피해가 크다. 현재 발견된 악성 자바 애플릿의 침해는 크게 4가지 유형으로분류할 수 있으며, 유형별로 살펴보면, 사용자의 자원을 불법적으로 획득하는 비밀성 침해, 사용자의시스템 자원을 불법적으로 수정 및 변경하는 무결성침해, 사용자 시스템의 자원을 과도하게 사용하여사용자의 정상적인 사용을 방해하는 가용성 침해, 그리고 윈도우의 화면 독점 등으로 사용자의 작업을방해할 수 있는 사용자불편 침해이다.
(그림 1) 자바 애플릿과 프락시 서버.
웹 페이지와 함께 전송되는 자바 애플릿은[그림 1〕 과 같이 웹 서버에 접속한 사용자에게 전송되기 전에 HTTP 프락시 서버를 경유한다. 따라서 악성 자바 애플릿의 침해를 방지하기 위해서는 사용자마다악성코드를 탐지할 수 있는 도구를 설치할 수 있지만, 프락시 서버에서 악성 자바 애플릿을 사전에 탐지하고 제거할 수 있는 방법이 더 비용 효과적이다. 기존의 프락시 서버에서 악성 자바 애플릿에 대한대책은 악성 자바 애플릿을 가지고 있는 유해한 사이트를 차단하거나 이미 악성으로 알려진 자바 애플릿에 대한 패턴 정보를 DB로 관리하여 사용자가 요청한 자바 애플릿에 대해 사전 필터링을 수행하는것이었다. 기존 대책에서는 알려지지 않은 악성 자바 애플릿에 대해서는 사전에 탐지할 수 없었다. 또한 기존의 프락시 서버는 HTTP 기능뿐만이 아니라 SMTP, FTP 기능 등을 같이 수행하고 있기 때문에 프락시 서버에서 악성 자바 애플릿 탐지 및 제거를 위한 기능을 추가시킬 경우 부하가 가중되어전송 속도가 떨어지고 사용자의 불편을 유발할 수 있다.
따라서 본 논문에서는 악성 자바 애플릿의 침해를사전에 탐지하여 피해를 방지할 수 있으면서 프락시서버의 부하를 가중시키지 않는 악성 자바 애플릿에대한 대책으로, 프락시 서버에서의 악성 탐지기 구조와 감시 기능을 위한 메서드 치환 기법을 제안하며, 제안한 방법은 악성으로 의심스러운 자바 애플릿에 감시 기능을 수행할 수 있는 코드로 치환한 후클라이언트에서 수행되도록 하여 프락시 서버의 부하를 줄일 수 있다.
Ⅱ. 관련 악성 자바 애플릿 탐지 기법
자바 애플릿의 보안은 Sandbox를 통해 이루어지기 때문에 다른 시스템에 비해 비교적 안전하지만 악성 자바 애플릿이 사용자의 시스템에 피해를 끼칠 수 있는 취약점이 학계를 통해 계속 보고되고 있으며, 자바 1.2 버전부터는 자바 애플릿에 서명 값을 추가하여 그 보안성을 강화하였다.34 그러나 악의의 웹 서버를 통한 악성 자바 애플릿의 제작 및 유포가 점점 증가하고 있는 추세이어서 더욱 더 악성 자바애플릿 보안 대책이 요구되며 이에 대한 탐지 전용 도구 개발도 필요하다.
기존의 악성 자바 애플릿 전용 탐지 도구들을 살펴보면, Finjan 사는 서버용과 클라이언트용의 악성 이동 코드 탐지 도구 제품을 줄시하였으며, 이 기술은 보안성을 강화한 자체 보안 Sandbox (Safe Zone) 를 통해 악성 자바 애플릿을 탐지할 수 있도록 하였다. 復 顶 Trend Micro 사에서는 스캐너 구조를 제안하여 HTTP 프락시 서버에서 악성 자바 애플릿을 탐지할 수 있는 도구를 개발하였다.⑼ 프락시 서버의 탐지 도구에서 악성 자바 애플릿을 탐지하기 위해 사용된 기존의 악성 탐지 기법에는 Playground 기법과 스캐너 기법 등이 있다.'脇 顶-(2)
2.1 Playground 기법
Playground 기법은〔그림 2〕와 같이 프락시 서버에서 악성 자바 애플릿을 클라이언트에게 전달하기 전에 별도로 분리된 Playground에서 자바 애플릿을 실행 시켜 보고 악성 여부를 판정하여 웹 브라우저에 알려주는 기법이다. 동작 원리는 클라이언트의 시스템 자원을 접근할 수 없는 다른 곳(Playground) 에서 자바 애플릿을 실행하고, 자바 애플릿 실행 코드는 제한된 환경으로부터의 클라이언트와 상호작용을 하도록 하는 것이다. 이것은 프락시 서버에서 Playground# 통해 자바 애플릿을 실행시킴으로써 이루어질 수 있다.
(그림 2J Playground 기법
〔그림 2〕와 같이 구성 단계에서 이와 같은 보호가 이루어져야 하기 때문에 기존의 시스템과는 구별되는 별도의 Playground 장치가 필요하다. 또한 자바 애플릿이 실행되는 동안 클라이언트와 상호 작용을 해야 하기 때문에 클라이언트는 마치 그래픽 터미널처럼 작동하게 된다. 하지만 어느 시점에서도 자바 애플릿은 클라이언트의 웹 브라우저에서는 직접 실행되지 않고 Playground라는 공간상에서 실행이 되며 단지 입출력 결과만을 클라이언트에 보여주기 때문에 클라이언트 시스템에 직접적인 피해를 일으킬 수 없다. 하지만 이 기법의 단점은 입출력 결과를 알려주기 위한 웹 브라우저와 서버간의 별도의 통신 프로토콜이 설계되어야 하는 것이다. 또한 이러한 물리적인 분리를 통해 웹의 유연성을 지원하기 위해 만들어진 자바 애플릿의 이동성을 제한할 수 있으며, 프락시 서버의 부하를 가중시킬 수 있다. Digitivity사의 Cage 제품은 Playground 기법을 이용한 것으■로 Playground-g- 위한 CageServer 를 두고 있다.(2)
2.2 스캐너 방법
스캐너 기법은 Playground와 같은 기법을 이용할 경우 프락시 서버에 부하가 가중되는 문제점을해결할 수 있는 방법이다.〔그림 3〕은 기존의 악성자바 애플릿 감시를 위한 스캐너 구조로서 그 절차를 살펴보면 먼저 스캐너의 입력으로 서명된 자바애플릿을 받아 Prefetcher를 통해 클래스 형태의자바 애플릿을 하나의 JAR파일로 압축하고 서명을검사한다. 서명을 검사한 후 Unpacker를 통해 클래스 파일로 다시 변환하고 각각의 클래스 파일들은 Parser를 통해 각각의 인스트럭션 형태로 만들어 Instrumenter를 통해 의심스러운 행위를 수행할수 있는 인스트럭션에 대해서는 앞뒤에 감시용 코드 (Pre- and Post- filter)를 삽입하고, 보안정책에맞는 모니터링 패키지를 덧붙여 Packer를 통해 다시 하나의 JAR' 파일로 압축한다. 스캐너를 통해원래의 자바 애플릿이 변환되었기 때문에 서명을 다시 하여 클라이언트로 전달한다. 이렇게 재서명된자바 애플릿은 클라이언트에서 실행되며 악성 여부를 판정하게 된다.
〔그림 3) 악성 자바 애플릿 탐지용 스캐너 구조
스캐너 기법의 장점은 악성 자바 애플릿을 탐지하기 위해 감시 코드를 삽입하여 클라이언트에서 실행되도록 하기 때문에 프락시 서버에서의 부하 가중을
막을 수 있다는 점이다. 그러나 트랜드 마이크로사의 프락시 서버의 스캐너 기법은 서명된 자바 애플릿에 한정하여 적용되며, 특허로 등록되어 보호되고있고 구체적인 핵심 구현기술은 공개하지 않고 있기때문에 스캐너 기법을 이용한 활용이 어렵다.a® 또한스캐너 구조가 복잡하기 때문에 탐지에 시간이 많이소요되는 단점이 있다.
Ⅲ. 제안한 악성 탐지기와 메서드 치환 기법
본 장에서는 제안한 악성 탐지기와 메서드 치환기법에 대해 알아본다. 악성 탐지기는 프락시 서버에 부하를 가중시키지 않도록 클라이언트에서 실행되도록 하며 악성 행위를 탐지하기 위한 감시 기능을메서드 치환 기법을 이용하였다. 먼저 제안한 악성탐지기의 구조를 살펴보고 메서드 치환 기법에 대해설명한다.
3.1 악성 탐지기 구조
제안한 악성 탐지기를 구현하기 위해서는 악성 자바 애플릿 탐지를 위한 악성 탐지기의 각 절차를 설계하여야 한다. 자바 애플릿이 바이트 코드 형태의 클래스 파일로 프락시 서버를 경유하기 때문에 먼저메서드 치환을 이용한 감시 코드를 삽입하기 위해서는 [그림 4〕와 같이 디컴파일러가 필요하다. 메서드란 자바 소스 코드에 사용되는 함수를 의미하여 자바가 제공하는 패키지의 클래스이다. 디컴파일 러의 수준은 메서드 레벨 수준으로 치환할 메세드들의 목록을 찾을 수 있는 수준이어야 한다. 디컴파일 러를 통해 생성된 코드를 분석하여 의심스러운 행위 가능한 메서드 부분을 치환하여야 한다. 치환 메서드 목록은 침해 유형별로 무결성, 가용성, 비밀성, 사용자불편으로 분류하여 각각의 해당 메서드를 관리하고 치환할 메서드는 악성행위에 대한 감시 기능을 수행할 수 있는 형태로 관리한다. 또한 치환 메서드를작성하기 위해 대상 메서드의 치환용 코드를 작성하여야 한다.
〔그림 4〕는 본 논문에서 제안한 악성 탐지기 동작 절차를 나타낸 것으로 프락시 서버에 들어온 클래스 파일에 대해 서명 검증과 해쉬 검사를 수행하고 디컴파일 러를 수행하여 치환할 메서드가 있는지를 찾고 치환할 메서드가 있을 경우에는 메서드를 치환하고 치환한 메서드에 감시용 코드를 삽입해야 할 경우에 설정된 보안정책에 따라 모니터링 패키지를 삽입하고 재서명을 통해 클라이언트에 전달한다. 본 논문에서는 침해유형별 가중치를 두어 3단계의 보안정책(사용 안 함, 높음, 매우높음)을 적용하였다.
(그림 4) 제안한 악성 탐지기 구조
3.2 메서드 치환 기법
본 논문에서 제안하는 악성 자바 애플릿 탐지를위한 프락시 서버에서의 메서드 치환 기법은 메서드 치환 기법이 적용되는 시스템 절차와 모니터링 코드 삽입을 수행하는 절차로 크게 나누어 살펴본다.[그림 5〕 는[그림 4〕의 메서드 치환 부분에 대한 상세 그림으로써, 본 논문에서 제안한 메서드 치환 및 모니터링 코드의 삽입 절차를 나타낸 것이다. 먼저 자바바이트 코드를 디컴파일러를 통해 치환할 대상 메서드를 찾고 해당 메서드는 치환 메서드 목록에 있는메서드로 치환한다. 치환 메서드에는 악성 행위를탐지할 수 있는 감시용 코드와 악성 행위를 일으키지 않을 경우 원래의 메서드를 호출하는 코드가 있다. 치환된 메서드에서 악성 여부를 판단하기 어려운 경우, 모니터링 감시 코드에 정보를 넘겨주고, 보안정책에 따라 각 클래스마다 모니터링 패키지를삽입한다. 모니터링 코드 삽입에서는 프로세스 상태전이나 자원 사용량을 감시하여, 악성코드 여부를판별하고 처리한다. 감시 코드에는 악성으로 판정이되었을 경우 프락시 서버에 보고할 수 있는 코드가있다. 감시코드가 삽입된 새로운 코드에 대해서는재서명을 수행하여 클라이언트에 전달한다.
〔그림 6〕은 자바 애플릿 실행코드 배열을 나타낸 것으로 왼쪽은 원래 전송된 자바 클래스 파일이고 오른쪽은 메서드 치환을 통해 새롭게 만들어진 자바클래스 파일의 배열을 나타낸 것이다.〔그림 5〕의 메서드 치환 기법이 적용되면〔그림 6〕의 오른쪽과 같은
[그림 5] 머서드 치환 기법
(그림 6) 메서드 치환에 의한 자바 바이트 코드
자바 실행코드가 된다.〔그림 6〕에서와 같이 바이트코드 형태의 클래스 파일의 배열에서 자바 애플릿의행위와 관련된 Methods(메서드)와 Attributes(속성) 데이터에서 디컴파일러를 통해 치환할 메서드나속성이 있는지를 찾고 치환 메서드 목록에 있을 경우 감시 기능을 수행할 수 있도록 해당 메서드와 속성을 치환하고 보안정책이 반영된 모니터링 패키지를 삽입한다.
3.3 메서드 치환 기법 설계
메서드 치환 방법은 먼저 악성 자바 애플릿의 침해유형별로 메서드들을 분류하고 이에 대한 치환 메서드를 생성해 놓은 후 디컴파일러를 통해 나온 소스에서 치환할 메서드가 있는 경우 해당 메서드를 치환한다. 치환할 메서드에는 자체적으로 악성 여부를 판별 및 처리 가능한 메서드도 있고 악성 판별 및 처리를 위해 정보를 전달해야 하는 메서드도 있다. 메서드 치환 방법을 예제를 통해 살펴보면 다음과 같다.
① 사용자불편 유발 가능한 메서드 치환
원도우 크기가 비정상적으로 확대된 자바 애플릿은화면 독점으로 인한 클라이언트의 작업을 방해할 수있는 악성 자바 애플릿이다. 원도우 크기를 변경하는 메서드인 setSize。는 그 입력값이 너무 큰 경우 화면 독점으로 인한 작업 방해를 유발시킬 수 있는 메서드이다. 이를 감시하기 위해 메서드 치환으로 새로운 monitor_setSize0 메서드를 만들어 해당메서드 부분을 치환한다. 치환된 monitor_setSize0 는 파라미터 값을 검사한 후 이상이 없으면 원래의 setSizeO 메서드를 호출한다. 다음 글상자의 모의코드는 monitor__setSize0 치환 메서드의 작성 예제이다.
monitor_setSize0(
모니터 크기에 대한 정보를 획득한다:
if(자바애플릿이 모니터 화면보다 크다면) { 자바애플릿의 화면을 재조정한다;
} else {
원래의 setSizeO 메서드를 호출한다;
② 무결성 침해 가능한 메서드 치환
파일 접근을 통해 자료의 복사, 삭제 등의 공격이 행해질 수 있는 java.io 패키지의 클래스 종류들을 살펴보면 File, FileDescriptor, StreamTokenizer, Inputstream. Outputstream, RandomAccessFile 등이 있다. 이를 메서드 치환으로 감시코드를 삽입할 수 있다. 디컴파일된 메서드 코드에 악성을 유발할 수 있는 FilelnputStreamO 메서드가 존재할 경우 monitor_FileInputStream0 메서드로 치환하여 만약 악성 행위를 수행할 경우에는 설정한 보안정책에 따라 SecurityExceptionO 메서드를호출하고, 그렇지 않은 경우에는 원래의 FilelnputStreamO 메서드를 호출하게 된다. 다음 글 상자의 모의 코드는 monitor_FileInputStream0 치환메서드의 작성 예제이다.
메서드 치환용 코드를 작성할 때 고려사항은 실시간으로 치환 기법이 이루어져 자바 애플릿을 요청한클라이언트가 불편을 느끼지 않도록 해야 한다.
monitor_FileInputStream0 {
try(
if(설정한 보안정책에 위반되는 파일 접근시){
보안 정책에 따라 경고 에러 메서지를 띄우고 실행을 중지 시킨다:
New SecurityExceptionO ; lelse {
원래의 FilelnputStreamO 메서드를 호출한다:}
}catch (SecurityException ) ( alert。;
)
}
3.4 구현 및 시험
본 논문에서 제안한 메서드 치환 기법의 구현 결과를 살펴보면〔그림 7, 8〕과 같으며, 치환 대상 메서드는 감시코드가 삽입된 새로운 메서드로 치환한다.
[그림 7] 사용자불편 메서드 치환 구현
[그림 8] 무결성 침해 메서드 치환 구현
메서드 치환을 통해 감시 기능이 삽입된 자바 애플릿이 클라이언트에서 CPU의 메모리를 점유할 때 탐지하는 과정을 살펴보면〔그림 9. 10〕과 같다.[그림 9〕 는 Memorykiller 악성 자바 애플릿에 감시 기능이있는 Memorymonitor 메서드를 삽입하여 클라이언트에서 자바 애플릿을 처리하는 화면이며, [그림 10〕 은 감시 기능에 의해 악성 자바 애플릿을 탐지한 후그 악성 정보를 프락시 서버에 전송하는 화면이다.
[그림 9] 감시 기능이 삽입된 악성 자바 애플릿
(그림 10) 악성 자바 애플릿 탐지 결과
Ⅳ. 결 론
본 논문에서 제안한 기법은 프락시 서버에서 알려지지 않은 자바 애플릿에 대해 악성 여부를 판정하기 위해 메서드 치환 기법을 통해 감시 기능을 자바애플릿에 삽입하고 클라이언트를 통한 탐지 보고를 수행하도록 하여 프락시 서버의 부하 가중을 일으키지 않도록 한 기법이다. 본 논문을 통해 자바 애플릿의 행동 모니터링을 할 수 있는 메서드 치환 기법을 제안하였으며, 기존의 감시 코드를 삽입하는 스캐너 기법과 비교하면 감시 기능을 수행하기 위한 탐지 절차 및 기법이 다르며 또한 바이트 코드 형태에서 디컴파일러를 통해 메서드 부분을 찾아 치환하기 때문에 구조적으로 단계가 줄어 보다 효율적으로 탐지할 수 있도록 하였다. 악성 자바 애플릿의 기존탐지 기법과 본 논문에서 제안한 메서드 치환 탐지기법을 비교하면〔표 1〕과 같다.
〔표 1) 악성 탐지 기법 성능 비교
본 논문에서 제안한 메서드 치환을 이용한 악성 탐지 기법은 기존의 탐지 기법들과 비교하여 구현난이도와 탐지 대상 및 동작 속도에서 우수하다. 메서드 치환 기법을 이용한 악성 탐지 기법은 특허로 출원하였으며, Visual C++과 Java 언어를 통해 핵심 모듈로 개발하였다.
향후 상용화를 위해서는 악성 자바 애플릿의 4가지침해 유형별로 좀 더 많은 치환 대상 메서드에 대한체계적인 분류가 필요할 것 있으며, 감시 기능이 중복되어 삽입되지 않도록 보안정책을 설정하는 것이필요할 것으로 사료된다.
References
- 이정효. "'Executable Contents 보안" http://www.kisa.or.kr/
- 이병각. '이동코드 보안,' http://www.kisa.or.kr/
- 임영주, '자바 시큐리트에 대한 고찰', http://www.javastudy.co.kr/docs/
- 이인영. 'Java Security와 Cryptography Architecture' http://www.javastudy.co.kr/docs/
- Surfingate, http://www.finjan.com/product_home.com, Data Sheet
- SurfinShield, http://www.finjan.com/ product_home.cfm, Data Sheet
- Shlomo Touboul and Nachshon Gal, "System and Method for Attaching a downloadable Security Proflle to a down-loadable," Patent US6154844, Nov. 28, 2000
- Shlomo Touboul, 'Sytem and Method for Protecting a Computer and a Network from Hostile Downloadables,' Patent US6092194, Jul. 18, 2000
- InterScan AppletTrap. http://www.antivirus.com/products/isat/, Data Sheet
- Shuang Ji. Santa Clara and Calif, 'Computer Network Malicious Code Scanner,' Patent US5983348. Nov. 9, 1999
- Gilad Golan, 'Security Monitor,' PatentUS5974549, Oct. 26, 1999
- AJay Chander, John C.Mitchell and Insik Shin, 'Mobile Code Security by Java Bytecode Instrumentation,' IEEE, 2001