데이터와 서비스 접근 제한 : 개인정보 유출 방지, 중요한 데이터 보호 등을 위해 최소 권한 부여 또는 상세감사(FGA)를 통해 데이터 접근을 제한
사용자 인증
암호 기반(Password based) 인증
인증서 기반(Certificate based) 인증 : 표준 기반 PKI(Public Key Infrastructure) 제공. PKI 인증이 Oracle Wallet이나 Smart Card에 저장될 수 있음
커버로스 인증서(Kerberos credential) : 데스크탑 사인온(sign-on)을 통한 인증
생물학적 정보(Biometric) 인증 : 지문, 뼈구조 패턴, 홍채 스캔 등을 통한 인증
의심스런 작업에 대한 모니터링 : 신용카드 정보, 연구 결과, 중요한 정보 등이 유출 되거나 원래 목적을 벗어난 것을 방지 하기 위한 모니터링
최소 권한 원칙
최소 권한 원칙
작업에 필요한 만큼의 권한을 부여한다.
사용자가 효율적이고 간결하게 작업을 실시할 수 있도록 하기 위해서, 사용자에게 최소 권한을 주는 것이 안전하다.
최소 권한 원칙 부여
데이터 사전 보호 활성화
Public 으로 부터 불필요한 권한 회수
사용자 디렉토리에 접근 제한
Admin권한 제한
원격 DB인증 제한
데이터사전 보호 활성화
초기화 파라미터 설정
07_DICTIONARY_ACCESSIBILITY = BOOLEAN
FALSE : DBA권한으로 접속한 관리자만 데이터 사전 제어 가능. default(9i 이후부터)
TRUE : 'ANY'의 시스템 권한을 가지는 일반 사용자가 데이터 사전 삭제 가능(8i까지 default)
Select ANY DICTIONARY : 일반 사용자가 데이터 사전 뷰의 접근이 필요한 경우, 이 권한만 부여 한다.
Public으로부터 불필요한 권한 회수
개요 : DB서버의 사용자 그룹 PUBLIC으로부터 불필요한 권한과 롤(Role)을 회수
PUBLIC : 시스템 권한, 또는 데이터베이스 역할을 모든 사용자에게 부여할 수 있다.
오용 가능성 있는 PL/SQL 패키지
UTL_SMTP
A 사용자가 B, C, D 등의 다른 사용자에게 메일을 보낼 수 있게 한다.
패키지에 PUBLIC권한 부여 : 메일의 부정한 교환이 가능해진다.
UTL_TCP
DB서버로 네트워크 서비스에 대한 외부의 네트워크 접속을 허용한다.
패키지에 PUBLIC권한 부여 : DB에서 외부의 네트워크 서비스로 임의의 데이터를 보내는것이 가능해진다.
UTL_HTTP
DB서버가 HTTP를 이용해 데이터를 요구하고 얻을 수 있게 한다.
패키지에 PUBLIC권한 부여 : HTML폼으로 특정 웹사이트에 악의적인 목적으로 임의의 데이터를 보내는 것이 가능해진다.
UTL_FILE
부적절하게 구성되었을 경우 이 패키지는 호스트 OS 시스템의 어떤 파일에 대해서도 텍스트 레벨에서의 액세스를 허용한다.
적절하게 구성 되었을 경우에도 이 패키지는 호출하고 있는 애플리케이션을 구별하지 않으므로 UTL_FILE에서 액세스하고 있는 애플리케이션이
다른 애플리케이션에 의해 쓰여지고 있는 같은 위치에 임의의 데이터를 쓰는 것이 가능하게 된다.
DBMS_OBFUSCATION_TOOLKIT(DOTK)
데이터에 암호화 적용하는 패키지. 대부분의 DB 환경에 적절한 수준의 보완 환경 제공
패키지에 PUBLIC권한 부여 : 암호화된 데이터가 안전하게 저장 • 관리 되어지지 않으므로 복구 불가
단점 : 숙련된 해커의 공격에 쉽게 무력화됨
DBMS_CRYPTO(=DOTK 기능 + α) : 10g 추가된 강력한 암호화 패키지. 암호화를 수동으로 처리. 기존 함수와 프로시져에 대해서도 보다 개선된 기능 제공
OS 디렉토리 접근 제한
목적 : ORACLE_HOME 디렉토리 자체와 그 하위에 위치하는 파일과 디렉토리에 접근을 제한해서 보안을 강화한다.
UTL_FILE_DIR 파라미터 사용으로 OS 디렉토리 접근 제한 가능
PL/SQL 파일의 I/O 디렉토리를 지정한다.
DB 사용자는 이 파라미터에 명시된 OS 디렉토리를 read/write 한다.
SPFile에 이 파라미터를 설정하나, 동적 파라미터가 아니므로 인스턴스를 재시작 해야 한다.
인스턴스 시작 할 때 디렉토리 존재 유무를 확인하지 않으므로, 파라미터에 먼저 디렉토리를 지정한 후에 디렉토리를 생성해도 된다.
“UTL_FILE_DIR = *” 설정 NO : 데이터 파일 및 리두 로그 디렉토리를 포함한 오라클 인스턴스와 관련된 모든 디렉토리에 접근할 수 있기 때문에 피한다.
작성 규칙
대소문자가 혼합된 긴 디렉토리명 사용 가능하며, 대소문자 구별한다.
공백이 들어간 디렉토리명 : DOUBLE QUOTES(“”)로 감싼다. ex) UTL_FILE_DIR=“E:\LOG DIR”
2개 이상의 디렉토리명을 지정하는 방법 : 구분된 라인으로 지정하면 안 되고, 연속적인 하나의 라인에 디렉토리를 지정하여야 하는데,
그러기 위해서는 각 디렉토리명을 single quotes()로 분리시킨다.
- 디렉토리명에 환경변수를 사용하면 안 된다.
==== Admin 권한 제한 ====
- 심각한 문제를 일으킬 수 있는 과도한 권한은 제한한다.
* sys 권한 : SYSDBA & SYSOPER
* DB • 사용자에게 SYSTEM & OBJECT 권한 부여 및 권한 수
* 필요성 : “DROP ANY TABLE”, “CREATE ANY TABLE” 등의 과도한 권한 부여로 테이블 삭제나 절단, 불필요한 생성 같은 사용자 과실의 문제가 발생한다.
==== 원격 클라이언트 사용자 인증 ====
* 초기화 파라미터 설정
- REMOTE_OS_AUTHENT = BOOLEAN''
TRUE : 오라클 DB에 접속하려는 원격 클라이언트 사용자의 인증을 위임하므로 DB는 모든 클라이언트를 암묵적으로 신뢰하게 된다.
문제점 : 클라이언트 PC가 웜 바이러스에 감염되었거나 악성 코드에 감염 되었다면,
원격으로 접속하는 클라이언트 PC의 보안 상태를 보장 하지 않으므로 보안을 약화 시킨다.
FALSE : 원격인증 금지. 원격 클라이언트들이 접근할 때 서버가 인증 작업을 수행하도록 설정하여 보안을 강화 시킴.(9i부터 default)
TDE(Transparent Data Encryption)
TDE 사용 목적 : 주민번호, 신용카드번호, 비밀번호 등의 정보를 저장한 백업 미디어의 암호화 데이터를 보호하기 위해서,
TDE를 사용해 네트워크와 DB 내부에 투명하게 데이터를 암호화한다.
장점
기존의 애플리케이션을 수정하는 일 없이 간단히 암호화 가능
암호화 대상의 테이블의 인덱스도 암호화 하므로, where 절의 equal연산에 대한 성능은 거의 저하되지 않는다. (단, like연산에서는 성능이 저하 됨)
cf) 일반적이 암호화 : 인덱스 데이터는 암호화 되지 않기 때문에 기존의 인덱스에서 문제 발생
관리자는 “ALTER TABLE” 구문으로 테이블의 보안이 필요한 컬럼을 암호화 할 수 있다.
SYS 계정으로 EM접속 → Administration Click → Users & Privileges 중에서 Users click → 프로파일 할당할 사용자 선택 → 적용 click
사용자가 로그인 상태라면, 다음 번 로그인 때 설정한 프로파일은 적용된다.
사용자 권한, 롤 등 수정 가능 : Edit click
의심스러운 작업에 대한 모니터링
감사(Auditng) 개요
사용자의 행동을 감시하거나 DB에 관한 통계자료를 얻는 목적으로 사용된다.
누가 어떠한 테이블을 언제 사용하고, 언제 어떤 작업을 하는지를 기록할 수 있다.
감사를 실시하는 목적 : 권한을 받은 사용자가 주어진 권한을 이용하여 원래의 목적에 맞지 않는, 접근해서는 안 되는 중요한 데이터를 조회하거나 변경하는 것을 예방하기 위해
감사 TOOL의 비교
감사형태
감사 대상
감사 추적
표준 감사
object 접근을 포함한 권한
지정한 데이터
값기반 감사
DML문에 의해서 변경된 데이터
관리자가 지정한 구문
상세 감사
컨텐츠를 기준으로 select + DML구문
SQL 구문을 포함한 지정된 데이터
표준DB 감사(DB Auditing) : DB에 영향을 끼치는 작업을 감시하거나 특정 DB작업에 대한 데이터를 모니터하고 수집한다.
이벤트에 대한 정보는 Audit Trail에 저장한다.
값 기반 감사(Value-based Auditing) : DB감사 뿐만 아니라 DML 수행에 의해서 변경된 데이터까지 감사한다. DB 트리거를 통해서 구현한다.
상세 감사(Fine-grained Auditing. FGA) : 특정 사용자의 조회(select) & DML 작업을 감사한다.
표준 DB 감사
Overview
DB 감사를 통해 DB의 모든 연결에 대한 감사 : 승인되지 않은 사용자가 테이블에서 데이터를 삭제하는 경우 DBA는 DB안의 테이블의 행에 대한 성공적인 삭제 여부를 감시하는데 사용된다.
특정 DB를 모니터링하고, 그에 대한 데이터를 모으는데 사용 된다.
ex) DBA는 업데이트 중인 테이블, 수행한 논리적 I/O 횟수 및 바쁜 시간에 시스템에 연결된 동시 사용자 수에 대한 통계 수집 가능
DBA가 AUDIT_TRAIL 을 이용하여 DB 감사 기능을 활성화/비활성화 한다.
AUDIT_TRAIL은 정적 파라미터이다.
로그인, SYSTEM & OBJECT 권한 수행, SQL문 사용 할 때도 감사 수행 할 수 있다.
AUDIT_TRAIL 설정
AUDIT_TRAIL Value
설명
NONE/FALUE
감사 기능 비활성화
DB/TRUE
감사기능 활성화, 감사결과는 SYS.AUD$에 저장됨
OS
OS에서 허용하는 경우 활성화, 감사결과는 OS파일로 저장됨
DB_EXTENDED
10g 추가된 기능. 감사 기능 활성화
SYS.AUD$에 저장되는 감사 추적(AUDIT TRAIL) 정보 중에 SQLBIND, SQLTEXT 컬럼 정보가 추가로 생성된다.
Specify Audit Options
정의
Audit 명령을 사용하여 감사할 명령, 사용자, Objects, 권한을 지정하며,
Audit Record가 발생할 때마다 생성할지 Session 당 한번씩 생성 할지 결정 할 수 있다.
옵션
Options
Command
Description
SQL Statement Auditing
AUDIT TABLE ~
DDL문의 유형에 따른 감사 설정
Sucess/Failure 사용하여 제한가능
System privilege auditing
AUDIT CREATE ~
사용되는 권한에 따른 감사 설정
유저이름 또는 Sucess/Failure 사용하여 제한가능
Object privilege auditing
AUDIT ~ on schema.objectname
특정 스키마의 개체의 명령문에 대한 감사 설정
Sucess/Failure 사용하여 제한할 수 있으며 세션이나 액세스별 그룹화도 가능
NOAUDIT
NOAUDIT ~
설정한 감사 기능을 제거한다
예제
Statement Auditing
scott 사용자가 테이블에 관련된 명령(CREATE TABLE, DROP TABLE etc)이 성공한 경우 기록됨
AUDIT TABLEBY SCOTT BY ACCESS WHENEVER SUCCESSFUL;
Privilege Auditing
scott 사용자가 “CREATE TABLE” 권한이 필요한 명령을 수행한 경우 기록됨
AUDIT CREATETABLEBY SCOTT BYSESSION;
(Schema)Object Auditing
scott.emp테이블에 대한 모든 명령(select, DML etc)에 관한 사항이 기록됨
AUDIT ALLON SCOTT.EMP;
NOAUDIT
scott.emp테이블 설정한 감사 기능이 제거됨
NOAUDIT ALLON SCOTT.EMP;
기타 감사 관련 정보
Execute Command
감사 기능이 지정된 명령어를 사용자가 수행한다.
즉, 사용자가 SQL or PL/SQL문을 실행 할 때 서버 프로세스는
감사 옵션을 검색하여 실행중인 문장이 감사 대상에 포함되는지 여부를 결정한다.
Generate Audit Trail
AUDIT_TRAIL 파라미터에 정의된 값에 따라 OS의 파일 또는 DB 내에 SYS.AUD$에 AUDIT_TRAIL 레코드를 생성한다.
이 작업은 사용자의 트랜잭션과 무관하므로 Transaction Rollback이 수행될지라도 AUDIT_TRAIL 레코드는 그대로 유지된다.
AUDIT_TRAIL 레코드는 구문의 execute 단계에서 생성되므로 Parsing 단계에서 오류가 발생되면 생성 되지 않는다.
Review Audit Information
감사 설정, 감사를 통해 생성된 정보는 Audit Trail Data Dictionary View를 통해 확인 할 수 있다.
OS에 생성된 Audit_trail인 경우 OS Utility를 사용해서 확인한다.
이 정보를 토대로 의심이 가는 작업을 확인하거나 DB작업에 대한 모니터링을 할 수 있다.
Audit Trail Data Dictionary View
View
Description
STMT_AUDIT_OPTION_MAP
감사 옵션 타입 코드에 대한 정보를 보여준다.
AUDIT_ACTIONS
Audit_trail Action 타입 코드에 대한 설명을 포함한다.
ALL_DEF_AUDIT_OPTS
Object가 생성될 때 적용될 수 있는 기본적인 Object-auditing 옵션을 보여준다.
DBA_STMT_AUDIT_OPTS
시스템과 사용자에 걸쳐 현재 시스템의 감사 옵션을 보여준다.
DBA_PRIV_AUDIT_OPTS
시스템과 사용자에 걸쳐 감사되고 현재 시스템 권한을 보여준다.
DBA_OBJ_AUDIT_OPTS
USER_AUDIT_OPTS
모든 Object에 대한 감사 옵션을 보여준다.
USER뷰는 현재 사용자가 소유한 모든 Object의 감사 옵션을 보여준다.
DBA_AUDIT_TRAIL
USER_AUDIT_TRAIL
모든 Audit Trail 엔트리를 리스트한다.
USER뷰는 현재 사용자에 관련된 Audit Trail 엔트리를 보여준다.
DBA_AUDIT_OBJECT
USER_AUDIT_OBJECT
시스템의 모든 Object에 대한 Audit Trail 레코드를 보여준다.
USER뷰는 현재 사용자가 접근할 수 있는 Object와 관련된 구문에 대한 Audit Trail 레코드를 리스트한다.
DBA_AUDIT_SESSION
USER_AUDIT_SESSION
CONNECT와 DISCONNECT에 관련된 모든 Audit Trail 레코드를 리스트한다.
USER뷰는 현재 사용자에 대한 연결 설정과 해제에 관련된 모든 Audit Trail 레코드를 리스트한다.
DBA_AUDIT_STATEMENT
USER_AUDIT_STATEMENT
DB 전반적으로 Grant, Revoke, Audit, NOAUDIT, Alter system 구문과 관계되는 Audit Trail 레코드를
리스트 한다.
USER뷰는 현재 사용자와 관련된 내용만을 보여준다.
DBA_AUDIT_EXISTS
AUDIT EXISTS와 AUDIT NOT EXISTS와 관련된 Audit Trail 엔트리를 리스트한다.
XML 형식의 Audit Trail 지원(10gR2)
파일시스템에 감사기록(Audit Trail) 저장하면, 시스템의 보안 수준을 강화 할 수 있다.
초기화 파라미터에 설정하기
인스턴스 재시작 : 동적 매개변수가 아니므로 인스턴스를 재시작한다.
감사기록은 “audit_file_dest”에서 지정한 경로의 디렉토리에 저장 된다.
audit_file_dest에 매개변수 미지정 시 default : $ORACLE_HOME/rdbms/audit(UNIX/Linux)
Windows Event Log(Windows)
감사 기록 파일의 저장 형식은 “.xml”이다.
xml형식의 장점
감사기록을 XML 타입으로 DB에 로드하고, XML Query를 이용하여 조회 가능
XML과 SQL Query를 조합하여, 단일 SQL 소스에 대해 질의하는 것처럼 정보 조회 가능
DBA는 Third Party XML parser/editor를 활용하여 XML 형식으로 저장된 감사 기록 조회 가능
XML입력 지원 툴을 통해 리포트 생성 가능
감사 기록 조회를 위해 parser를 직접 구현할 필요 없음
V$XML_AUDIT_TRAIL : DBA_AUDIT_TRAIL과 구조면에서 유사
audit_file_dest ='directory path & name'
audit_trail = XML
Value-Based Auditing
Overview
trigger를 사용해서 데이터의 액세스나 조작이 일어나기 전 • 후의 내용을 관리자가 관리하는 테이블로 저장하는 방식이다.
DML 수행에 의해서 컬럼과 로우의 값이 변경 될 때, trigger를 사용해서 감사를 수행한다(이벤트 중심의 PL/SQL 구성요소).
DML문 수행시마다 trigger code가 수행되므로 표준 감사보다 성능은 저하된다.
사용자 접속 정보, 사용자의 IP 주소, 인스턴스에 접속한 프로그램 이름의 첫 48자, 인스턴스 접속한 터미널명을 capture할 수 있다.
수행 방법
사용자가 값 변경 시도 → Trigger 수행 → 사용자의 변경은 실행되고, trigger에 의해서 감사 레코드 생성 → audit trail 테이블에 생성된 감사 레코드 삽입
Fine-Grained Auditing(FGA)
FGA 정의
특정 데이터의 조회(select) & DML 작업을 감사한다.
FGA 특징
더 상세한 레벨의 감사 기능 제공 : 선택적인 감사를 위해 where절을 사용한다.
뷰나 테이블의 특정 컬럼 참조 또는 액세스 여부, 값 변경에 대해서 감사한다.
DBMS_FGA 패키지를 이용하여 활성화/비활성화 : trigger를 사용하는 것이 아니므로 성능은 표준 감사와 비슷하다.
CBO(Cost Based Optimizer)를 사용하는 경우에도 정상 작동 : 인스턴스 레벨로 CBO 설정 및 액세스 되는 테이블에 대한 분석이 수행되어 있어야 하며,
SQL에 힌트를 사용하면 안 된다.
Audit Trail Record는 SYS.FGA_LOG$에 저장된다.
생성되는 감사기록(Audit Trail)의 양은 적고, 프로그램에서 사용된 sQL문에 대한 정보와 BIND정보 등을 제공하므로 실제로 수행된 SQL문에 대한 파악이 용이하다.
과거 데이터를 재구성하는데 필요한 로우 레벨 변경 내역과 SCN값을 제공한다.
특정 스키마 내의 테이블에 수행한 select(조회) & DML 구문(10g에 추가된 기능)에 대해 감사한다.
컨텐츠를 기준으로 데이터 접근을 모니터링 할 수 있다.
제한된 감사 수행 : 정책을 통해 관리자는 감사기준이 되는 컬럼과 조건을 설정하면, 특정 DML구문 유형 또는 관리자가 지정한 특정 컬럼에 대해서만 감사 수행
감사 이벤트가 발생했을 때 호출할 루틴(PL/SQL 패키지 또는 프로시저)의 이름 지정 가능
FGA 정책 생성
DBMS_FGA.ADD_POLICY 명령 사용
프로시저
파라미터
데이터 타입
설명
object_schema
VARCHAR2
FGA에서 설정하고자 하는 스키마명
object_name
VARCHAR2
FGA에서 설정하고자 하는 객체명(테이블, 뷰 이름)
policy_name
VARCHAR2
FGA에서 설정하고자 하는 Policy명(Unique)
audit_condition
VARCHAR2
상세 감사 지정. 스키마 객체에 대한 논리적인 데이터 그룹에 상응하는 where 절 지정
ex) “department_id=10” 으로 지정 : 조회대상 객체에 AUDIT_CONDITION을 만족하는 데이터가 있다면, 명시적인 조건을 만족하지 않아도 Audit Trail은 생성된다.
SELECT … FROM employees;
⇒ where 절에 조건 없이 전체를 조회하는 것 역시, AUDIT_CONDITION에 지정한 “department_id=10”인 데이터도 조회되므로 이 문장도 FGA의 대상이다.
audit_column
VARCHAR2
감사 대상이 되는 컬럼명 지정. 1개 이상의 컬럼 지정 가능(10g 추가 기능)
handler_schema
handler_module
VARCHAR2
FGA설정에 의해서 Audit Trail이 생성될 때 같이 실행될 수 있는 프로시저를 작성하는 경우, 프로시저의 스키마명과 프로시저명을 기술
프로시저 생성 패턴 : PROCEDURE <fname>(object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2) AS …
enable
BOOLEAN
FGA 기능 활성화 여부 지정. default가 TRUE임에도 불구하고 TRUE로 설정하지 않으면 FGA 설정이 활성화되지 않는다.
statement_types
VARCHAR2
10g 추가된 기능. FGA가 적용되는 문장 종류에 대해서 기술. INSERT, UPDATE, DELETE, SELECT(default) 중에서 지정하며,
MERGE문은 내부적으로 INSERT 또는 UPDATE의 지정의 영향을 받음
audit_trail
BINARY_INTEGER IN DEFAULT
10g 추가된 기능. “AUDIT_TRAIL ⇒ DBMS_FGA.DB_EXTENDED”로 설정하는 경우 SYS.FGA_LOG$의 LSQLTEXT, LSQLBIND컬럼에 Audit Trail이 생성된다.
audit_trail_opts
BINARY_INTEGER IN DEFAULT
10g 추가된 기능. DBMS_FGA.ALL_COLUMNS & DBMS_FGA.ANY_COLUMNS
DBMS_FGA.ALL_COLUMNS : AUDIT_COLUMN에 나열된 컬럼 중에서 모두 액세스될 때 AUDIT TRAIL을 생성하도록 지정
DBMS_FGA.ANY_COLUMNS : AUDIT_COLUMN에 나열된 컬럼 중에서 하나라도 액세스될 때 AUDIT TRAIL을 생성하도록 지정
FGA정책 활성화
메타데이터 정보를 전혀 손실하지 않고도 임시로 FGA 정책의 활성화/비활성화 할 수 있다.