English
◀◁ 뒤로
취약점ID 25020
위험도 40
포트 1521, ...
프로토콜 TCP
분류 DB
상세설명 해당 Oracle Net Listener의 버전에 따르면 긴 SERVICE_NAME 인수를 통한 버퍼 오버플로우 공격에 취약하다.
Listener는 데이터베이스를 사용하기 위한 클라이언트 요청들을 위해 어떤 TCP 포트 (일반적으로 1521)에서 대기(listen)한다. 요청을 받을 때 클라이언트는 데이터베이스의 하나의 인스턴스(instance)로서의 역할을 한다. 정상적인 TNS 패킷으로 만들어진 요청은 다음 형태와 같다:

(DESCRIPTION=(ADDRESS=
(PROTOCOL=TCP)(HOST=x.x.x.x)
(PORT=1521))(CONNECT_DATA=
(SERVICE_NAME=myorcl.target_host.com)
(CID=
(PROGRAM=X:\\ORACLE\\iSuites\\BIN\\SQLPLUSW.EXE)
(HOST=foo)(USER=bar))))

아주 긴 SERVICE_NAME 인수를 보냄으로써 원격지의 공격자는 버퍼를 오버플로우 시키고 윈도우즈 플랫폼상에서 Local SYSTEM 계정의 권한으로 시스템상에 임의의 코드를 실행시킬 수 있다. 이것은 TNS 패킷의 부분으로 받은 너무 긴 SERVICE_NAME을 로깅하는 과정에서 발생한 에러의 결과이다. 오버플로우는 에러 메시지가 실제 로그파일에 쓰여지기 전에 발생하기 때문에 공격이 일어났는지를 발견하기가 어렵다.

* Note : 이 점검항목은 안전한 점검을 위해서 Oracle의 Listener의 버전정보에만 의존한다. 따라서 거짓 양성반응(False Positive)을 보일 수 있다. 만약 버퍼 오버플로우 테스트를 해 보고자 한다면, 정책편집기에서 "Denial of Service Attacks"에 있는 "Oracle/tnslsnr/service_name/real_bof" 항목을 Enable 시킨 후 점검을 하면 된다.

* 참고 사이트:
http://www.securityfocus.com/bid/4845
http://otn.oracle.com/deploy/security/pdf/net9_dos_alert.pdf

* 영향을 받는 플랫폼:
Oracle9i 릴리즈 2 이전의 모든 버전
해결책 이 취약점은 Oracle9i 릴리즈 2 이전의 Oracle의 모든 버전에서 나타난다. 패치들은 윈도우즈용 Oracle 9.0.1 (패치번호 2367681)과 VM용 Oracle 8.0.6.x (패치번호 2303242)에 대해서 나와있다. 다른 플랫폼들이나 Listener의 구버전들에 대해서는 패치가 나와있지 않다.
패치들은 Oracle의 지원용 웹 사이트인 Metalink, http://metalink.oracle.com 로부터 현재 다운로드 가능하다. 패치 웹 페이지로 가서 "Patches" 버튼을 누른다. 위에 명시된 패치번호를 입력하고 "Submit" 버튼을 누른다.

-- 혹은 --

Oracle9i 릴리즈 2로 Listener를 업그레이드 하여야 한다. 데이터베이스에 대해서는 필요가 없으며 Listener에 대해서는 반드시 설치나 업그레이드가 행해져야 한다.

-- 혹은 --

Oracle의 모든 버전들에 대해서 패치는 나와있지 않다. 만약 사용중인 Listener에 대한 패치가 나와있지 않다면 Listener를 액세스할 대상을 제한하는 조치를 취해야 한다. 액세스를 제한하는 한가지 방법은 Listener에 대한 접속을 허용할 IP들을 제한하는 것이다. 이것은 네트웍 주소에 기반을 두고 Oracle 데이터베이스로의 액세스를 제한할 수 있도록 protocol.ora 파일에 있는 validnode_checking 인수를 설정함으로써 제어될 수 있다. Protocol.ora 파일은 UNIX 상에서는 $ORACLE_HOME/network/admin 그리고 윈도우즈 플랫폼에서는 ORACLE_HOME\network\admin, 혹은 TNS_ADMIN 환경변수나 레지스트리 값에 명시된 디렉토리에 위치한다.

tcp.validnode_checking = YES
tcp.invited_nodes= (webserver.appsecinc.com, 192.168.1.110)
tcp.excluded_nodes= (attackers.com, 144.25.5.25, 234.12.3.12)

첫번째 라인은 이 기능을 Enable 한다는 것이다. invited_nodes 는 접속을 허용할 호스트, 즉 DNS 명 혹은 IP 주소로 된 리스트이다. excluded_nodes는 데이터베이스에 대한 접속을 허용하지 않을 호스트들의 리스트이다.

tcp.invited_nodes 인수는 양쪽 리스트에 모두 존재한다면 tcp.excluded_nodes 인수가 우선한다.

이 해결책은 데이터베이스를 액세스해서는 안될 모든 주소들의 리스트를 포함할 수 없을 뿐더러, 허용된 사용자들의 리스트를 유지하는 것이 관리상의 많은 부담을 주기 때문에 완전하지 못하다. 또한 IP 주소가 거짓(Spoofing)일 수 있다는 것도 알아야 한다. 이것은 복잡한 해킹기법을 필요로 할지라도 가능성이 충분히 있으며 이 보안기능을 무력화할 수 있다. 만약 이 해결책을 사용하여야 한다면 데이터베이스를 방화벽 뒷단에 위치시킬 것을 권고한다.
관련 URL CVE-2002-0965 (CVE)
관련 URL (SecurityFocus)
관련 URL (ISS)