Oracle DBMS 로그인의접근제어우회 취약점분석 2006. 2. 9 인터넷침해사고대응지원센터 (KISC) 본보고서의전부나일부를인용시반드시 [ 자료 : 한국정보보호진흥원 (KISA)] 룰명시하여주시기바랍니다.
개요 o 2005년이후 Oracle Critical Patch Update(CPU) 는 Oracle사제품대상으로다수의보안패치및보안패치와관련된일반패치를발표하는주요수단임 o 1월 17일패치된 29개의 Oracle DBMS 취약점중 "DB18" 의공격코드가공개되어이를분석함 [3] - 취약점 DB18" 의최초발견사보안권고문 : 1월 17일, Imperva사 [1] - 취약점 DB18" 의공격코드공개 : 1월 24일, René Nyffenegger 개인블로그 [2] 영향받는소프트웨어 [3] o Oracle Database 8i 이상 o Oracle Database 8.x : 8.1.7.4 이하 o Oracle Database 9.0.x : 9.0.1.5 이하 o Oracle Database 9.2.x : 9.2.0.7 이하 o Oracle Database 10.1.x : 10.1.0.5 이하 o Oracle Database 10.2.x : 10.2.0.1 이하 해결방안 o 해결방안으로서가능하면벤더사및유지보수업체와협의 / 검토후패치적용요망 [3] o 각사이트의사정으로패치적용이지연될경우, - 불필요한계정을삭제하고디폴트패스워드변경 [4][5] - 데이터베이스 (DB) 접근통제를구현하여사용자에게허가되는권한을최소화함으로써, 공격으로인해발생될영향을제한 - 가능하면, 영향을받는서비스에대해서는신뢰된호스트및네트워크들만액세스할수있도록제한 - DB 보안제품활용 영향력분석 o 다음두가지조건이충족되면공격자가본취약점을악용하여 Oracle DB 관리자권한을획득할수있음 - 최소한의 DB 권한을가진사용자계정 / 패스워드를알고있음 - Oracle Net(1521/tcp 포트 ) 에접근할수있음 o 공격이성공하면획득한 DB 관리자권한으로새로운 DB 계정생성, 데이터를유출 / - 1 -
변경 / 생성 / 삭제할수있음 o 일반적으로 DB 서버는조직의네트워크뒷단에서보호되고있으므로, 내부자가테스트용 DB 계정 ( 설치시디폴트로생성되는계정포함 ) 을이용하여내부정보유출 / 조작에본취약점을악용할가능성이높음 o 공개된공격코드테스트결과, DB 버전에따라패킷의추가조작이필요함 - Oracle 10g Enterprise Edition 10.1.0.3.0(Linux) 에서테스트성공 - Oracle9i Enterprise Edition 9.2.0.4.0 64bit Production에서테스트성공 취약점상세설명 [2] TNS(Transparent Network Substrate) 프로토콜은 Oracle DB 서버와클라이언트사이에서사용된다. TNS 프로토콜에서기본적인인증과정은사용자이름과패스워드를요구하는데, 로그인과정에서 CREATE SESSION" 권한만가진 DB 사용자가 DB 관리자권한 (SYS) 으로임의의 DB 명령을수행할수있는취약점이존재한다. TNS 프로토콜의인증부분에서 AUTH_ALTER_SESSION" 은 SQL문의형태로향후맺을세션의로케일과언어속성을설정한다. 이 SQL문이다른 SQL으로대체되어도 SYS 권한으로실행되는것이다. 공개된공격코드를 Oracle 10g Enterprise Edition 10.1.0.3.0(Linux) 에서수행한테스트결과와함께설명한다. - 2 -
( 그림 1) 테스트환경 공개된공격코드는두부분으로나뉜다. 첫번째과정에서는먼저테스트를위해 VictimServer에최소권한을가진계정 least를생성한다. ( 그림 2) 테스트용 DB 계정 least 는 CREATE SESSION 권한만가짐 - 3 -
다음프락시를통해 least 계정이 VictimServer에접속하는, 정상적인과정의패킷을덤프한다.(proxy_show.pl 공격코드이용 ) 덤프한패킷을분석하여공격에서조작할부분의길이를계산한다. ( 그림 3) 덤프한패킷을분석하여공격에서조작할부분을계산함 두번째과정은첫번째과정을통해알아낸정보를바탕으로이루어지며 ( 그림 4) 와같다. - 4 -
( 그림 4) 1 프락시및 SQL 대체프로그램인 proxy_do_sql.pl을실행시킨후, 최소권한사용자계정 least로 Oracle 연결을요청한다. 2 프락시는연결요청을받아 VictimServer로전송하고, 응답을받는다. 3 프락시는응답을받아공격자에게전송한다. 4 프락시에서요청패킷의 "ALTER SESSION SET NLS_LANGUAGE= 'KOREAN'" 를 "create user evil_user identified by hahaha" 로대체하여전송한다. 패스워드 "hahaha" 를가진 "evil_user" 계정을생성하는 SQL문이다. 5 VictimServer에서는 4에서대체된 SQL문을 SYS 권한으로실행한다. 4, 5의과정을반복하여 VictimServer가 "grant dba to evil_user" SQL문을실행하도록한다. "evil_user" 에게 DBA 권한을주는 SQL문이다. 6 그결과 DBA 권한을가진 "evil_user" 가생성되고, 공격자는생성된계정으로 VictimServer에연결할수있다. 테스트결과, ( 그림 5) 와같이 SQL문이대체되어 VictimServer로전송되고 dba 권한을가진 "evil_user" 가생성되는것을확인하였다. - 5 -
( 그림 5) 공격이성공하면 dba 권한을가진 EVIL_USER 계정이생성됨 [ 참고사이트 ] [1] http://www.imperva.com/application_defense_center/papers/oracle-dbms-01172006.html [2] http://www.adp-gmbh.ch/blog/2006/01/24.php [3] http://www.oracle.com/technology/deploy/security/pdf/cpujan2006.html [4] 민간사이버안전매뉴얼기업정보보호담당자용, 228p ~ 231p, 2004, http://www.boho.or.kr/notice/9_1_read.jsp?u_id=38&board_id=1 [5] http://updates.oracle.com/arulink/patchdetails/process_form?patch_num=4926128 (Metalink 계정필요 ) - 6 -