안녕하세요 Thinking Man 입니다.
이번 글에서는 “표준감사를 통한 활동 감사” 중 OS 감사(OS Audit Trail)에 대한 내용을 작성해 보았습니다.
운영 체제 감사와 운영 체제 감사 레코드가 보이는 형식에 대해서 알아보았습니다.
이 글은 Oracle 11gR2 공식 문서를 참고하여 작성하였습니다.
표준 감사를 통한 활동 감사
운영 체제와 데이터베이스 활동 감사의 공통점
운영 체제 및 데이터베이스 감사는 많은 유형의 동작을 동시에 캡처합니다.
표 9-2 에서는 운영 체제 감사 레코드를 나열하고 있으며 대부분은 DBA_AUDIT_TRAIL View의 컬럼과 매핑됩니다.
“표 9-2 운영 체제 및 데이터베이스 감사 항목 매핑”
Operating System Audit Record |
DBA_AUDIT_TRAIL View Column |
SESSIONID | SESSIONID |
ENTRYID | ENTRYID |
STATEMENT | STATEMENTID |
USERID | USERNAME |
USERHOST | USERHOST |
TERMINAL | TERMINAL |
ACTION | ACTION |
SYS$OPTIONS | AUDIT 또는 NOAUDIT로 설정된 감사 옵션 또는 부여 또는 취소된 권한을 나타냅니다. “주석 1” |
RETURNCODE | RETURNCODE |
OBJ$CREATOR | OWNER |
OBJ$NAME | OBJ_NAME |
OBJ$PRIVILEGES | OBJ_PRIVILEGE |
AUTH$GRANTEE | GRANTEE |
NEW$OWNER | NEW_OWNER |
NEW$NAME | NEW_NAME |
SES$ACTIONS | SES_ACTIONS |
LOGOFF$PREAD | LOGOFF_PREAD |
LOGOFF$LWRITE | LOGOFF_LWRITE |
COMMENT$TEXT | COMMENT_TEXT |
OS$USERID | OS_USERNAME |
PRIV$USED | PRIV_USED |
SES$LABEL | CLIENT_ID |
SES$TID | DBA_AUDIT_TRAIL 뷰에서 해당 항목이 없지만 SYS.AUD$ 테이블에 나타납니다. |
SPARE2 | DBA_AUDIT_TRAIL 뷰에서 해당 항목이 없지만 SYS.AUD$ 테이블에 나타납니다. |
“주석 1” 예를 들어, ACTION 값이 104 (AUDIT) 또는 105 (NOAUDIT)인 경우 SYS$OPTIONS 숫자는 STMT_AUDIT_OPTION_MAP 테이블에 나열된 감사 옵션을 나타냅니다.
ACTION 값이 108 (GRANT) 또는 109 (REVOKE)인 경우 숫자는 SYSTEM_PRIVILEGE_MAP 테이블에 나열된 권한을 나타냅니다.
운영 체제 감사 추적
이 섹션에서는 아래 내용이 포함되어 있습니다:
- 운영 체제 감사
- 운영 체제 감사 레코드가 보이는 형식
- 운영 체제 감사의 장점
- 운영 체제 감사 작동 방식
- 운영 체제 감사를 위한 디렉터리 지정
운영 체제 감사
DBA_AUDIT_TRAIL(SYS.AUD$ 테이블)에 표준 감사 레코드를 생성하는 대신 운영 체제 파일에 표준 감사 레코드를 생성할 수 있습니다.
감사 추적을 포함하는 운영 체제 파일에는 다음과 같은 데이터가 포함될 수 있습니다
- 데이터베이스 감사 추적 레코드
- 의무 감사 레코드 (즉, 항상 감사되는 데이터베이스 동작)
- 관리자 사용자(SYS)에 대한 감사 레코드
운영 체제 감사 레코드를 텍스트 파일 또는 XML 파일로 작성할 수 있습니다.
운영 체제 감사 레코드가 보이는 형식
운영 체제 감사 레코드를 텍스트 또는 XML 파일 형식으로 저장할 수 있습니다.
텍스트 및 XML 운영 체제 파일의 내용에 차이가 있고 형식은 다른 릴리스 간에 변경될 수 있음에 유의해야 합니다.
텍스트 운영 체제 파일에는 타임스탬프의 표현이 있습니다.
예) 수 5월 6일 00시 57분 36초 2009 -07:00
이러한 타임스탬프는 이벤트 로그나 syslog에 나타나지 않으며 자체적으로 타임스탬프 형식을 가지고 있습니다. 타임스탬프 문자열은 텍스트 운영 체제 감사 파일에만 나타납니다.
예제 9-3은 Windows에 설치된 오라클 DB에서 로그인 작업을 위한 텍스트 운영 체제 감사의 일반적인 예입니다.
예제 9-3 텍스트 파일 운영 체제 감사
Audit trail: LENGTH: "349" SESSIONID:[5] "43464" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[6] "DBSNMP" USERHOST:[7] "SHOBEEN" TERMINAL:[3] "MAU" ACTION:[3] "100" RETURNCODE:[1] "0" COMMENT$TEXT:[97] "Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.0.2.4)(PORT=2955))" OS$USERID:[19] "NT AUTHORITY\SYSTEM" DBID:[10] "1212547373" PRIV$USED:[1] "5"
항목에 대한 설명:
– LENGTH는 이 감사 레코드에서 사용된 바이트의 총 수를 나타냅니다. 이 숫자는 감사 레코드의 끝에 있는 경우 줄 바꿈 바이트 (\n)도 포함됩니다.
– [] 괄호는 각 감사 항목의 값의 길이를 나타냅니다. 예를 들어 USERID 항목인 DBSNMP는 6바이트입니다.
– SESSIONID는 감사 세션 ID 번호를 나타냅니다. 세션 ID는 V$SESSION 뷰를 조회하여 AUDSID 컬럼으로 확인할 수 있습니다.
– ENTRYID는 각 감사 추적 레코드에 할당된 현재 감사 항목 번호를 나타냅니다. 감사 ENTRYID 시퀀스 번호는 세부 감사 레코드와 일반 감사 레코드 사이에서 공유됩니다.
– STATEMENT는 사용자가 실행하는 SQL문에 할당된 숫자 ID입니다. 사용자의 세션에서 여러 SQL이 수행될 경우 여러개의 감사 레코드로 이어질 수 있기 때문에 숫자를 할당하는 것으로 보입니다.
– ACTION은 사용자가 수행한 ACTION을 나타내는 숫자 값입니다. 해당 유형의 이름은 AUDIT_ACTIONS 테이블을 조회하여 확인 가능합니다 . 예로 ACTION 100은 LOGON을 나타냅니다.
– RETURNCODE는 감사된 동작이 성공했는지 여부를 나타냅니다. 0은 성공을 나타냅니다. 동작이 실패하면 반환 코드에는 Oracle Database 오류 번호가 나열됩니다. 예를 들어, 존재하지 않는 테이블을 삭제하려고 하면 오류 번호가 ‘ORA-00903 무효한 테이블 이름’이 되며 RETURNCODE 에는 903으로 출력됩니다.
– COMMENT$TEXT는 감사 레코드에 대한 추가적인 주석을 나타냅니다. 예를 들어, LOGON 감사 레코드에 대한 인증 방법을 나타낼 수 있습니다. 이것은 DBA_COMMON_AUDIT_TRAIL 뷰의 COMENT_TEXT 컬럼과 동일합니다.
– DBID는 데이터베이스 생성 시에 매겨지는 데이터베이스 식별자입니다. 이것은 V$DATABASE 뷰의 DBID 컬럼과 동일합니다.
– ECONTEXT_ID는 응용 프로그램 실행 컨텍스트 식별자를 나타냅니다.
– PRIVS$USED는 동작을 수행하는 데 사용된 권한을 나타냅니다. 권한을 찾으려면 SYSTEM_PRIVILEGE_MAP 테이블을 조회하십시오. 예를 들어, 권한 5는 이 테이블에서 -5로 표시되며 CREATE SESSION을 의미합니다. PRIVS$USED는 PRIV_USED 컬럼과 동일합니다.
추가적으로 확인 가능한 값
– SCN (예: SCN:8934328925)은 시스템 변경 번호 (SCN)를 나타냅니다. 이 값을 사용하여 과거 시점의 설정(예: 컬럼) 값을 찾으려면 플래시백 쿼리를 수행할 수 있습니다. 예를 들어, SCN 번호를 기반으로 OE.ORDERS 테이블의 ORDER_TOTAL 컬럼의 값을 찾으려면 다음 SELECT 문을 사용하여 확인 가능합니다.
SELECT ORDER_TOTAL FROM OE.ORDERS AS OF SCN = 8934328925 WHERE ORDER_TOTAL = 86;
– SES_ACTIONS는 세션 동안 발생한 동작을 나타냅니다. 이 필드는 BY SESSION 절로 감사 이벤트가 구성된 경우에만 존재합니다. 이 필드는 세션 동안 발생한 동작을 자세히 설명하지 않으므로 BY ACCESS 절로 감사 이벤트를 구성해야 합니다.
SES_ACTIONS 필드는 16자리를 포함합니다. 위치 14, 15 및 16은 미래 사용을 위해 예약되어 있습니다. 처음 12자리에서 각 위치는 동작의 결과를 나타냅니다. 이것들은 ALTER, AUDIT, COMMENT, DELETE, GRANT, INDEX, INSERT, LOCK, RENAME, SELECT, UPDATE 및 FLASHBACK입니다. 예를 들어, 사용자가 ALTER 문을 성공적으로 실행한 경우 SES_ACTIONS 설정은 다음과 같습니다.
S---------------
첫 번째 위치(ALTER에 대한)의 S는 성공을 나타냅니다. ALTER 문이 실패한 경우 해당 위치에 F가 나타났을 것입니다. 동작이 성공과 실패 양쪽에서 결과를 얻는 경우 해당 위치에 B가 나타납니다.
– SES$TID는 감사 동작에 영향을 받는 객체의 ID를 나타냅니다.
– SPARE2는 사용자가 SYS.AUD$ 테이블을 수정했는지 여부를 나타냅니다. 0은 사용자가 SYS.AUD$를 수정했음을 나타내며 그렇지 않은 경우 값이 NULL입니다.
비슷한 방식으로, 예제 9-4는 XML 감사 레코드가 나타나는 방식을 보여줍니다.
예제 9-4 XML 파일 운영 체제 감사 레코드
<?xml version="1.0" encoding="UTF-8"?> <Audit xmlns="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-11_2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-11_2.xsd"> <Version>11.2</Version> <AuditRecord> <Audit_Type>1</Audit_Type> <Session_Id>43535</Session_Id> <StatementId>1</StatementId> <EntryId>1</EntryId> <Extended_Timestamp>2009-04-29T18:32:26.062000Z</Extended_Timestamp> <DB_User>SYSMAN</DB_User> <OS_User>SYSTEM</OS_User> <Userhost>shobeen</Userhost> <OS_Process>3164:3648</OS_Process> <Terminal>mau</Terminal> <Instance_Number>0</Instance_Number> <Action>100</Action> <TransactionId>0000000000000000</TransactionId> <Returncode>0</Returncode> <Comment_Text>Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.0.2.4)(PORT=3536))</Comment_Text> <Priv_Used>5</Priv_Used> </AuditRecord> </Audit>
항목에 대한 설명:
– AuditRecord 항목에는 전체 감사 레코드가 포함되어 있습니다. (Audit_Record 항목에 대한 자세한 정보는 예제 9-3을 참조하십시오.)
– Audit_Type는 감사 추적의 유형을 나타냅니다.
1: 표준 감사 레코드
2: 세분화된 감사 레코드
4: SYS 감사 레코드
8: 의무 감사 레코드
이 필드는 XML 감사 파일에서만 나타납니다. 텍스트 운영 체제 감사 파일에는 나타나지 않습니다.
– Extended_Timestamp은 작업의 시간을 나타내며 (AUDIT SESSION에 의해 생성된 항목의 사용자 로그인 타임스탬프), 협정 세계 시간 (UTC) 또는 그리니치 표준시 (GMT)로 표시됩니다. 이 필드는 XML 감사 파일에만 나타납니다. OS 텍스트 감사 파일에는 표시되지 않습니다.
– Instance_Number는 Oracle Real Application Clusters 환경에 대한 사용자가 연결된 인스턴스 번호를 나타냅니다. 이 예에서 숫자는 0이며, 이는 단일 인스턴스 데이터베이스를 의미합니다.
– Sql_Bind(예: <Sql_Bind>#1(5):89</Sql_Bind>)는 바인드 변수의 값을 표시합니다. 구문은 VariablePosition(LengthOfVariableValue):ValueofBindVariable 이렇습니다.
의미 : #1(5):89은 바인드 변수가 1개 있고, 그 값은 5자리이며 바인드 변수의 값은 89임을 나타냅니다.
이 항목은 AUDIT_TRAIL 매개변수를 XML, EXTENDED로 설정한 경우에만 값이 나타날 수 있습니다. 이 값은 DBA_COMMON_AUDIT_TRAIL 뷰에서 확인 가능합니다.
– Sql_Text(예: <Sql_Text>begin procedure_one(:num); end; </Sql_Text>)는 AUDIT_TRAIL 매개변수를 XML, EXTENDED로 설정한 경우에 나타납니다. 이는 사용자가 입력한 SQL 텍스트를 보여줍니다.
2 thoughts on “Oracle 보안 관리 Audit 3편 (OS Audit Trail 1)”
Comments are closed.