Oracle Fine Grained Auditing 1편 (상세감사)

안녕하세요 Thinking Man 입니다.

이번 글에서는 Fine Grained Auditing(상세감사)을 하는 방법에 대해 알아보도록 하겠습니다.

이번 글을 읽게 되면 표준 감사 보다는 좀 더 상세한 조건으로 감사를 하고자 할 때 유용한 상세감사의 기본정보와 장점 및 작동방식 등에 대해서 알 수 있습니다.

이 글은 Oracle 11gR2 공식 문서를 참고하여 작성하였습니다.

 

 

Fine Grained Auditing
Fine Grained Auditing

Fine Grained Auditing(상세감사) 정보 

Fine-Grained Auditing은 특정 조건에 맞는 그리고 표준 감사보다는 더 세밀한 조건을 정의하여 감사할 수 있습니다.

특정 테이블의 특정 컬럼을 SELECT, INSERT, UPDATE, DELETE 하는 SQL에 대한 세밀한 감사가 가능합니다.

공공기관의 기밀하고 중요한 데이터가 있고 이 데이터에 대한 접근을 추적해야 된다면 어떤 데이터에 액세스 되었는지 확인 가능한 세밀한 정보가 필요할 때 이 FGA 기능을 활용 할 수 있습니다.

일반적으로 Fine-Grained Audit 정책은 특정 테이블에 대한 사용자가 정의한 정책만을 선택적으로 감사하기 위한 조건으로 구성됩니다.

정의된 정책 조건에 충족되는 데이터에 액세스하는 경우 해당 SQL이 감사됩니다.

예로 아래와 같은 특정 상황에서의 감사를 Fine-Grained 감사를 사용하여 가능합니다.

  • 9시부터 6시까지 테이블 액세스
  • 토요일과 일요일에 테이블 액세스
  • 기업 네트워크 외부에서 IP 주소 사용
  • 테이블의 특정 컬럼을 SELECT 하거나 UPDATE
참고사항

- Fine-Grained 감사는 CBO(비용 기반 옵티마이저)만 지원합니다. 
- RBO(룰 기반 옵티마이저)를 사용하는 쿼리의 경우 Fine-Grained 감사는 row의 필터링을 적용하기 전에 확인하기 때문에 불필요한 감사 이벤트가 발생할 수 있습니다.

 

상세 감사의 장점

Fine-Grained 감사는 매우 특정한 작업만 포함하는 더 세밀한 감사 기능입니다. 표준 감사와 비교하면 Fine-Grained 감사는 아래와 같은 장점들이 있습니다.

Boolean(참, 거짓) 조건을 체크합니다. 예를 들어, 토요일에 특정 테이블에 액세스하는 경우와 같이 지정한 조건이 충족되었을 경우 감사를 수행합니다.

감사를 유발한 SQL을 캡처합니다. 감사를 유발한 SQL 문과 관련된 바인드 변수도 캡처 할 수 있습니다. 다만 바인드 변수의 데이터가 LOB, object column, 사용자 정의 컬럼 타입일 경우에는 캡처할 수 없으며 이것 외의 일반 문자, 숫자 등의 데이터는 캡쳐 가능합니다.

예를 들어, 아래와 같은 쿼리가 있다고 했을때

SELECT NAME FROM EMPLOYEE WHERE SSN = :1

만약 :1 값이 정수형이고 SSN 값이 123456이라면 이 값은 캡처 할 수 있습니다.

하지만 :1 값이 BLOB, CLOB, object column 이나 사용자 정의 컬럼인 경우 이 정보를 캡처할 수 없습니다.

이 기능은 DBMS_FGA.ADD_POLICY PL/SQL 프로시저의 audit_trail 매개변수를 DB+EXTENDED 또는 XML+EXTENDED로 설정하여 FGA 정책을 생성할 경우에 사용할 수 있습니다.

이벤트 핸들러 기능을 제공합니다. 예를 들어 변경되어서는 안되는 특정 테이블의 컬럼이 있다고 가정했을 때 이 컬럼이 수정되면 보안 담당자에게 이메일 혹은 SMS 를 발송하는 함수를 사용하여 감사할 수 있습니다.

Fine-Grained 감사를 활성화하려면 초기화 매개변수를 설정할 필요가 없습니다.

AUDIT_TRAIL과 같은 초기화 매개변수를 설정하지 않아도 DBMS_FGA 패키지를 사용하여 감사 레벨을 설정 및 정책을 추가할 수 있고 특정 작업을 감사할 수 있습니다.

민감한 컬럼에 추가적인 보호 기능을 제공합니다. 급여나 주민등록번호와 같은 민감한 데이터를 포함하는 특정 컬럼의 감사를 추가할 수 있습니다.

상세 감사 정책을 생성하고자 할 때 필요한 권한. 상세 감사 정책을 생성하려면 DBMS_FGA 패키지에 대한 EXECUTE 권한이 필요합니다. 이 패키지는 SYS 유저에게 오너쉽이 있습니다.

 

상세감사에서 항상 감사되는 활동

SYS 사용자가 아닌 일반 사용자가 SYS.FGA_LOG$ 테이블에 DML 수행 시 모든 기록은 SYS.AUD$ 테이블에 감사 기록으로 저장됩니다.

Oracle은 SYS.FGA_LOG$ 테이블에 어떠한 감사 설정이 되지 않은 상태라도 위와 같이 DML 발생 시 감사 기록을 저장합니다.

이 활동 내용은 DBA_FGA_AUDIT_TRAIL, DBA_COMMON_AUDIT_TRAIL 뷰를 조회하면 확인 가능합니다.

 

상세감사 레코드가 저장되는 장소

Fine-Grained 감사 레코드는 SYS.FGA_LOG$ 테이블에 저장됩니다. 유효한 감사 정책을 통해 생성된 레코드를 찾으려면 DBA_FGA_AUDIT_TRAIL 뷰를 조회하면 됩니다.

DBA_COMMON_AUDIT_TRAIL 뷰에는 표준 감사 및 Fine-Grained 감사 레코드 모두 저장됩니다.

XML 형식 파일에 저장된 Fine-Grained 감사 레코드는 V$XML_AUDIT_TRAIL 뷰에 기록됩니다.

위의 뷰에 대한 상세한 정보가 궁금하다면 Oracle Database Reference를 참조하시면 됩니다.

Oracle은 SYS.FGA_LOG$, SYS.AUD$ 테이블에 대한 수정 작업(DML)을 SYS.AUD$ 테이블에 감사 기록을 저장합니다.

이러한 AUDIT 관련된 테이블의 수정 작업으로 인해 기록된 감사 레코드는 일반 사용자는 삭제할 수 없으며, SYS 사용자만이 작업 수행이 가능합니다.

AUDIT_SYS_OPERATIONS 초기화 매개변수를 TRUE로 설정한 경우 SYS 사용자의 작업도 감사됩니다.

이 경우 모든 SYS 작업의 감사 레코드가 AUDIT_FILE_DEST 초기화 매개변수가 가리키는 디렉토리에 저장됩니다.

AUDIT_FILE_DEST가 설정되지 않은 경우 감사 레코드는 운영 체제에 따라 다른 위치에 작성됩니다.

 

상세감사 트레일의 감사 레코드 생성 방법

상세감사 트레일은 각 테이블이나 뷰를 참조 할 때마다 감사 레코드를 기록합니다.

예를 들어 UNION 문을 사용하여 SCOTT.EMP 테이블을 위아래 두 번 참조하는 SQL을 실행한다고 했을 때 EMP 테이블의 각 각 액세스에 대해 두 개의 감사 레코드를 생성합니다.

 

상세감사 트레일 생성

상세감사 트레일을 위해서는 DBMS_FGA.ADD_POLICY 패키지를 사용해 정책을 생성해야 하며 이때 매개변수 audit_trail 에 어떤 레벨로 감사할지 설정하여 생성합니다.

감사 정책을 생성 할 때 이 매개변수에 XML 이나 XML+EXTENDED 로 설정하면 감사 레코드는 XML 형식으로 OS 서버단에 파일로 저장됩니다.

OS의 XML 형식의 파일에 저장된 감사 기록들을  V$XML_AUDIT_TRAIL 뷰를 조회하여 DB에서도 편리하게 XML형식의 감사 기록 확인이 가능합니다.

V$XML_AUDIT_TRAIL 뷰는 AUDIT_FILE_DEST 디렉토리의 모든 XML 파일을 분석하여 테이블 형식으로 제공합니다.

DBA_COMMON_AUDIT_TRAIL 뷰는 표준 감사 레코드, 상세 감사 레코드에 대한 V$XML_AUDIT_TRAIL 뷰의 내용을 포함합니다.

XML 파일은 모든 플랫폼에서 .xml 확장자를 가진 파일로 저장되기 때문에 동적 뷰는 모든 플랫폼에서 감사 정보를 일관되게 표시합니다.

만약 상세 감사 레코드를 SYS.FGA_LOG$ 테이블에 기록하기 원한다면 DBMS_FGA.ADD_POLICY 패키지 audit_trail 매개변수에 DB, DB+EXTENDED 로 설정하면 됩니다.

OS 서버에 파일로 감사 레코드를 기록하려면 OS로 설정하면 되며 상세한 내용이 궁금하시다면 OS 감사의 장점을 참조하시면 됩니다.

참고사항

민감한 데이터가 있는 테이블을 감사하고자 하는 경우 DBMS_FGA.ADD_POLICY의 audit_trail 매개변수를 DB+EXTENDED 또는 XML+EXTENDED로 설정하면 이 데이터가 캡쳐됩니다.

 

같이 읽으면 좋은 글

> Oracle 보안 관리 Audit 10편 (Directory, Function, Procedure, Package, Trigger, Network Audit)

> Oracle 보안 관리 Audit 9편 (Schema Object Audit)

> Oracle 보안 관리 Audit 8편 (SQL & Audit Privileges)

> Oracle 보안 관리 Audit 7편 (SQL Audit)

다음글 (상세감사 2편 DBMS_FGA)

1 thought on “Oracle Fine Grained Auditing 1편 (상세감사)”

Comments are closed.