English
◀◁ 뒤로
취약점ID 25003
위험도 40
포트 1521, ...
프로토콜 TCP
분류 DB
상세설명 PL/SQL 패키지가 'CREATE LIBRARY' 권한을 가진 사용자들에게 운영체제 라이브러리에 있는 외부 펑션들을 호출할 수 있게 해 준다. Oracle 내에서 외부 function들을 호출하기 위해서는 어떤 라이브러리가 CREATE LIBRARY 권한을 가지고 있는 로그인 계정에 의해 생성되어야 한다. 디폴트 내부 계정인 sys, system, ctxsys 로그인 계정들은 라이브러리를 추가할 수 있다. 이러한 계정들이나 필요한 퍼미션을 가진 어떤 다른 계정 중의 하나로 공격자가 로그인할 수만 있다면 공격자는 oracle 프로세스를 수행하는 운영체제 계정의 권한으로 운영체제 명령들을 실행시킬 수 있는 라이브러리와 PL/SQL 패키지를 만들 수 있다.

PL/SQL 패키지들은 라이브러리나 동적 링크 라이브러리에 있는 외부 function들을 호출할 수 있도록 확장될 수 있다. 데이터베이스 서버에서 실행중인 어떤 PL/SQL 패키지가 외부 function을 수행하도록 하는 요청을 받을 때 oracle 프로세스는 Listener에 접속하여 Listener가 해당 라이브러리를 로드, 그 function을 호출하고 그 function에 전달된 어떤 인수들을 건네준다. Listener는 자기 자신의 프로세스 (Unix 시스템일 경우 extproc, 윈도우즈 플랫폼일 경우 extproc.exe)에 라이브러리를 로드하지 않으며 oracle에 접속하도록 유도한다. Oracle은 named pipe들을 이용, extproc 프로세스에 접속하게 하여 listener에 대해 행한 똑같은 요청을 만들어 낸다. Extproc는 라이브러리를 로드하고 function을 호출한다. 이 모든 과정에서 인증은 전혀 수행되지 않는다. 이것은 극히 위험한 보안상의 문제점이다.
공격자는 Oracle 프로세스로 가장해서 파일시스템상의 어떤 DLL에 있는 어떤 function을 실행시킬 수 있다. 이 문제가 심각한 것은 원격으로 행해질 수 있다는 사실이다. 이 때문에 공격자는 TCP를 통해 listener/extproc에 접속하여 아무런 인증도 거치지 않고 그들이 원하는 어떤 라이브러리의 어떤 function을 수행시킬 수 있는 exploit을 만들 수 있다. 실제의 공격이 이루어진다면 아마도 윈도우즈 플랫폼상의 msvcrt.dll이나 Unix 플랫폼상의 libc가 가지고 있는 system()을 호출할 것이다. 이 function들에 어떤 인수로 전달된 어떤 운영체제 명령은 oracle 프로세스들을 수행하는 계정의 권한으로 수행될 것이다. Unix 시스템들에서 이것은 대개 "oracle" 사용자이며 윈도우즈 NT/2000에서는 디폴트로 로컬 SYSTEM 계정이다. 따라서 이 사용자들로서 어떠한 명령의 수행도 가능하여 컴퓨터 시스템에 심각한 결과를 초래하게 된다.

* 참고 사이트:
http://www.securityfocus.com/bid/4033

* 영향을 받는 플랫폼:
Oracle Database 서버
해결책 Oracle이 설치될 때 어떤 컴포넌트들이 추가되느냐에 따라 많은 수의 로그인 계정들이 디폴트로 셋된 패스워드를 가진 채 생성된다. 많은 경우에 있어 항상 그렇지는 않지만 이 패스워드는 사용자 ID와 같다. Oracle에 대한 여러 부속 제품들은 대개의 경우 그러며 패스워드를 추측하기도 너무 쉽다. 모든 로그인 계정에 기본적으로 가진 디폴트 패스워드는 바꾸어야 한다.

-- 그리고 --

tnsnames.ora 파일과 listener.ora 파일에서 해당 엔트리들을 제거하여 PLExtproc 기능을 Disable 하여야 한다. 이 function은 icache_extproc, PLSExtproc 그리고 extproc를 포함하여 다양한 이름을 가지고 있을 수 있다.

-- 혹은 --

$ORACLE_HOME\network\admin\sqlnet.ora 파일에 다음과 같은 엔트리들을 추가하여 listener 프로세스에 접속할 수 있는 시스템들을 제한할 수 있다:

tcp.validnode_checking = YES
tcp.invited_nodes = (11.4.1.2, trusted_machine)

마지막으로 Windows NT/2000의 경우, 오라클 프로세스들은 로컬 SYSTEM 권한으로 수행시켜서는 안된다. 낮은 권한의 계정을 생성하고 그 사용자의 권한으로 오라클 프로세스를 수행시켜야 한다. 이 계정은 "Logon as a service" 계정 권한을 필요로 한다.
관련 URL (CVE)
관련 URL (SecurityFocus)
관련 URL (ISS)