본문 바로가기
정보보호 (Security)

Parameter 설정을 통한 오라클 보안

by 날으는물고기 2009. 6. 15.

Parameter 설정을 통한 오라클 보안

㈜안랩코코넛 컨설팅사업부 김진수

오라클의 보안을 강화하기 위해 지난 호에서 알아본 "OEM(Oracle Enterprise Manager)을 이용한 오라클 계정 관리"에 이어서 이번 호에서는 파라미터 설정을 통해 오라클의 보안을 강화할 수 있는 방법에 대해 알아보겠다.



Data Dictionary는 데이터베이스의 핵심 정보가 기록되는 곳으로 데이터 베이스의 구조, 객체에 대한 정의 및 공간 할당, 사용자, 롤(role), 권한, 감사 와 같은 정보들을 제공한다. Data Dictionary는 테이블의 형태로 제공되며 데이터베이스 엔진에서 관리하여 사용자가 직접 변경할 수 없도록 되어있다. 또한 Data Dictionary는 대부분 DBA_, ALL_, USER_ 로 시작하는 접두어를 가지고 있어 구분하기가 쉽다.
이러한 Data Dictionary는 'DROP ANY TABLE' 시스템 권한 가진 사용자가 악의적으로 Data Dictionary 테이블의 삭제가 가능하므로 오라클에서 제공하는 파라미터를 변경하여 DBA 권한으로 접속한 사용자만이 Data Dictionary의 ANY 시스템권한을 사용할 수 있도록 해야 한다.

** 파라미터 파일
오라클 데이터베이스 인스턴스의 초기화 설정에 사용되며 텍스트 형식인 PFILE과 바이너리 형태인 SPFILE이 존재한다. PFILE은 init<sid>.ora과 같은 이름으로 SPFILE은 spfile<sid>.ora 같은 이름으로 각각 생성되며 PFILE과 SPFILE파일이 모두 존재할 경우 SPFILE파일이 우선순위를 가진다. Oracle 9i 에서는 디폴트 설치 시 기본적으로 SPFILE을 이용하게 된다. OS별 파라미터 파일의 경로는 다음과 같다.
OS
경 로
Windows
$ora_home\database\spfile<sid>.ora
Unix/Linux
$ora_home/dbs/spfile<sid>.ora

OEM(Oracle Enterprise Manager)을 이용하여 파라미터 파일을 확인하고 설정하기 위해서는 다음과 같은 방법을 이용한다.
① OEM에서 [데이터베이스] -> [세부정보보기/편집] -> [데이터베이스 편집] -> [모든 초기화 매개변수...] 창을 열어 [모든 매개변수]탭을 확인하면 다음과 같이 현재 적용된 모든 파라미터의 값을 확인할 수 있다.
Data Dictionary와 관련된 파라미터는 7_DICTIONARY_ACCESSIBILITY으로 해당 값을 FALSE로 설정하여 Data Dictionary를 보호해야 한다.
 

② [모든 매개변수]탭에서 [SPFILE]을 선택하여 현재 구성파일(SPFILE)에 있는 O7_DICTIONARY_ACCESSIBILITY 파라미터의 값이 TRUE로 되어 있을 경우 이를 변경하여야 한다.
Oracle 9i 및 10g에서는 O7_DICTIONARY_ACCESSIBILITY 파라미터의 값이 기본적으로 FALSE로 설정되어 있으나 Oracle8i는 TRUE로 설정되어 있으므로 반드시 변경하여야 한다.

③ O7_DICTIONARY_ACCESSIBILITY 파라미터의 값을 변경한 후 [적용]을 누르면 다음과 같이 데이터베이스를 재시작하라는 메시지가 뜬다. 이때 데이터베이스를 재시작해야만 변경된 파라미터의 값이 적용된다.


참고로 SPFILE에서 동적 매개변수를 변경할 경우 현재 실행중인 메모리에 즉시 반영이 되고 동시에 SPFILE에 저장되나 O7_DICTIONARY_ACCESSIBILITY와 같은 정적 매개변수의 값이 변경된 경우 변경된 값은 SPFILE파일에만 저장되므로 데이터베이스를 재시작하여 변경된 값을 적용해야 한다.



오라클에서 지원하는 원격인증 기능이 활성화되면, 원격의 클라이언트는 오라클 데이터베이스에 접속할 수 있도록 허용된다. 즉, 데이터베이스는 적절하게 인증된 (클라이언트 자체OS의 인증) 모든 클라이언트들을 신뢰한다. 그러나 PC와 같은 클라이언트의 경우 Virus, Worm, Backdoor 등이 설치되어 있을 수 있어 데이터베이스에 접속할 경우 적절한 인증여부를 보장할 수 없어 보안이 대단히 취약해진다.
이러한 원격 인증기능을 비활성화시켜 오라클 데이터베이스에 접속하는 클라이언트는 Server-Based 인증(데이터베이스 어플리케이션의 인증)을 하도록 파라미터를 변경하여 보안을 강화하여야 한다.

OEM(Oracle Enterprise Manager)을 이용하여 파라미터 파일을 확인하고 설정하기 위해서는 다음과 같은 방법을 이용한다.
① OEM에서 [데이터베이스] -> [세부정보보기/편집] -> [데이터베이스 편집] -> [모든 초기화 매개변수...] 창을 열어 [모든 매개변수]탭의 구성파일(SPFILE)을 선택한 후 파리미터 값을 확인한다.
원격 인증기능과 관련된 파라미터는 REMOTE_OS_AUTHENT으로 해당 값을 FALSE로 설정하여 OS인증이 아닌 오라클 어플리케이션의 인증을 받도록 설정한다.


 


Oracle 9i 및 10g 에서는 O7_DICTIONARY_ACCESSIBILITY 파라미터와 같이 REMOTE_OS_AUTHENT 파라미터의 값이 기본적으로 FALSE로 설정되어 있으나 Oracle8i는 TRUE로 설정되어 있으므로 반드시 변경하여야 한다.

② REMOTE_OS_AUTHENT 파라미터의 값을 변경한 후에는 Data Dictionary 를 위한 파라미터 변경과 마찬가지로 데이터베이스를 재시작하여 변경된 파라미터값을 적용하면 된다.




Listener는 오라클 데이터베이스에 원격의 클라이언트가 접속할 수 있도록 실행되는 프로세스이며 클라이언트측의 요청을 받아 실제 쿼리문을 수행하는 서버프로세스를 생성하게 된다.
그러나 Listener의 패스워드는 디폴트로 설정되어 있지 않아 오라클의 Service Name을 알경우 공격자에 의하여 Listener프로세스가 시작/정지 또는 재설정될 수 있다.

** Service Name
하나의 오라클 서버에 여러 DBMS프로세스(인스턴스)가 동작할 경우 이를 구별하기 위해 하나의 인스턴스를 Service Name으로 나타내게 된다. 이러한 Service Name은 sid, 서버IP, 접속 프로토콜 등의 정보로 구성이 되며 TNSNAME.ORA 파일에 의해서 정의되게 된다.

이러한 Listener에 패스워드를 설정하여 임의의 공격자가 Listener를 정지시켜 원격의 사용자가 오라클에 접속하지 못하게 하는 것을 방지하여야 한다. Listener에 패스워드는 LSNRCTL 유틸리티의 change_password 명령어를 이용하여 설정이 가능하며 설정된 패스워드는 LISTENER.ORA파일에 암호화되어 저장되게 된다.

Listener에 패스워드를 설정하기 위해서는 LSNCTL유틸리티를 사용하며 다음과 순서로 진행된다.


OS> lsnrctl LSNRCTL> set current_listener LISTENER
LSNRCTL> set save_config_on_stop on
LSNRCTL> change_password
Old password: 처음의 경우 enter
New password: ******
Reenter new password: ******

위와 같이 설정한 후 Listener에 설정된 내용을 확인하기 위해서는$ORACLE_HOME/network/admin/listener.ora 경로에 존재하는 LISTENER.ORA파일을 텍스트에디터를 이용하여 확인해 보면 된다.
LISTENER.ORA파일에 다음과 같이 설정되어 있을 경우 Listener의 시작 및 정지 시에 패스워드를 물어보게 된다.

SAVE_CONFIG_ON_STOP_LISTENER = ON
PASSWORDS_LISTENER
= 2D6C48144CF753AC

또한 Listener의 설정파일인 LISTENER.ORA은 LSNRCTL 유틸리티의 SET 명령어를 사용하여 수정이 가능하므로 다음과 같은 파라미터를 수정하여 원격에서 LSNRCTL 유틸리티를 사용한 Listener의 설정을 변경할 수 없도록 해야 한다.
Listener의 설정을 변경하기 위해서는 OS상에서 LISTENER.ORA파일을 텍스트 에디터로 열어 수정해야 한다.

ADMIN_RESTRICTIONS_listener_name=ON



오라클에서 임의의 사용자에 의한 원격 접속을 차단하기 위해 Listener의 IP 접근제한을 설정할 수 있다. 특정 클라이언트에서의 접근만 가능하도록 접근 가능 IP를 설정하여 불필요한 외부의 사용자가 접근하는 것을 차단한다.
환경설정 파일에서 접근 가능한 IP 대역과 접근 불가능한 IP대역을 설정하여 네트워크 접근통제를 할 수 있으며 Oracle 8i 는 $ORACLE_HOME/network/admin/protocol.ora 파일에서, Oracle9i 에서는 $ORACLE_HOME/network/admin/sqlnet.ora 파일에서 설정을 한다.

SQLNET.ORA 및 PROTOCOL.ORA파일을 OS상에서 텍스트 에디터로 열어 다음과 같이 편집하여 설정을 한다.

TCP.VALIDNODE_CHECKING = YES
TCP.INVITED_NODES
=(접속을 허용할 ip)
TCP.EXCLUDED_NODES =(접속을 차단할 ip)

tcp.validnode_checking를 YES 로 설정한 후 접속을 허용·차단할 IP 또는 호스트 네임을 ','를 구분자로 하여 넣어주면 된다.
다음 예제와 같이 접근통제를 할 IP, 및 네트워크 대역을 넣어 설정할 수 있다.

TCP.VALIDNODE.CHECKING = YES
TCP.INVITED_NODES =(192.168.100.12, 192.168.100.13, dbms.com)
TCP.EXCLUDED_NODES =(192.168.200.0)

tcp.invited_nodes 만을 사용할 경우 허용된 IP에서만 접근이 되며 그 외의 IP에 대해서는 접근이 불가능하다. 이때 주의해야 할 것은 반드시 자기자신의 IP를 추가해줘야 한다는 것이며 tcp.excluded_nodes를 같이 사용하여 차단할 IP를 추가하여도 된다.
SQLNET.ORA 및 PROTOCOL.ORA파일을 수정한 후에는 Listener를 재시작해야 해당 설정이 적용된다.

From <AhnLab coconut> -
728x90

댓글