본문 바로가기
악성코드 정보

자바 취약점을 악용하는 악성코드들

by 알 수 없는 사용자 2012. 9. 7.

ASEC에서는 8월 29일 "오라클 자바 JRE 7 제로 데이 취약점 악용 악성코드 유포"를 통해 자바(Java) JRE에서 알려지지 않은 제로 데이(Zero-Day, 0-Day) 취약점이 발견되었으며, 이를 악용한 악성코드가 유포되었다고 공개하였다.


해당 CVE-2012-4681 자바 취약점외에도 다른 CVE-2012-0507 자바 취약점 역시 다수의 악성코드 유포에 사용되고 있다.


일반적으로 자바의 경우 JVM을 이용한 샌드박스(SandBox) 개념의 보안 기능을 운영체제에 제공하고 있다. 악의적인 코드의 경우 JVM에서 시큐리티 매니져(Security Manager)를 기준으로 차단을 하게 된다. 예를 들어 파일을 디스크에 쓰거나 실행하는 경우에 정책(Policy)에 허용 되지 않은 경우에는 해당 명령은 허용 되지 않는다.


그러나 최근에 발견된 자바 취약점을 악용하는 악성코드 제작자들은 샌드박스를 우회 하기 위해 2가지 방법을 사용하고 있다.


1. 샌드박스 자체 무력화 - CVE-2012-0507 취약점



해당 CVE-2012-0507 취약점은 AtomicReferenceArray에서 발생한다. AtomicReferenceArray 클래스의 경우 시큐리티 매니져에서 ArrayObject에 대한 타입(Type)을 체크 하지 않으며, 해당 배열 생성시 역직렬화를 하고, 역직렬화된 악의적인 코드를 doWork에 정의된 클래스가 샌드박스 밖에서 실행하도록 한다.


역직렬화를 하게 되면 메모리에 악의적인 코드가 쓰일 수 있기 때문에 시큐리티 매니져에서 해당 객체에 대해서 접근에 대한 체크가가 필요하지만, 체크 하지 않아 문제가 발생하게 된다.


2. 샌드박스 내부의 정책 우회를 위하여 시큐리티 매니져를 setSecurityManger(Null)로 우회 - CVE-2011-3544와 CVE-2012-4681 취약점


샌드박스에서 시큐리티 매니져는 정책으로서 접근제어를 수행하게 된다. 하지만 시큐리티 매니져가 무력화 될 경우 접근제어를 수행하지 않기 때문에 악의적인 코드 실행이 가능해진다.


자바는 JVM에서 명령을 수행하기 위해서는 시큐리티 매니저가 함수내에서 빈번하게 호출되며, 자바 애플릿 역시 예외가 아니다. JVM이 포함되어 있는 웹 브라우저가 애플릿이 포함된 웹 사이트 접속시 JVM으로 애플릿을 다운 받아 실행하게 된다. 이 과정에서 로컬에서 실행하기 위해서는 디스크에 파일을 쓰고 실행을 하여야 하는데, 시큐리티 매니져를 우회 하여야 악성코드를 감염 시킬 수 있게 된다.



CVE-2011-3544와 CVE-2012-4681의 경우가 시큐리티 매니져를 우회하는 취약점으로 해당 취약점들은 toString Method에서 해당 함수를 실행할 경우 시큐리티 매니져를 우회 하는 취약점이였다. 


시큐리티 매니져를 해제하기 위해서는 setSecurityManager함수를 이용하여 시큐리티 매니져를 해제 해야한다. 하지만 JRM에서 setSecurityManger(NULL)을 호출하게 되면, 에러(Error)와 함께 함수 호출에 대해 실행을 허가 하지 않지만, toString Method를 이용하게 되면 해당 함수를 호출할 수 있는 취약점이다.


이와 비슷한 원리로 작동하는 취약점이 CVE-2012-4681으로 해당 취약점은 sun.awt.SunToolkit을 이용하여 파일시스템에 대한 모든 권한을 부여함으로서 시큐리티 매니져를 비활성화하도록 한다. 


현재 앞서 설명한 자바 취약점들 모두 다수의 악성코드에서 악용되고 있음으로 오라클(Oracle)에서 제공하는 보안 패치를 설치하여야만 다른 보안 위협들로보터 시스템을 보호 할 수 있다.

댓글