데이터베이스 감사
IT 위키
더 많은 작업
데이터베이스 감사(Database Auditing)는 데이터베이스에 누가 언제 접속해 어떤 명령으로 어떤 데이터에 접근하거나 바꾸었는지를 기록하고 점검하는 활동이다. 기록 자체를 감사 로그 또는 감사 추적(audit trail)이라 한다.
데이터베이스 보안의 요구사항 가운데 하나가 감사 기능이다. 접근 통제가 사전에 막는 수단이라면 감사는 사후에 추적하고 책임을 묻는 수단이다. 권한 남용, 대량 조회·유출, 스키마 변경, 관리자 계정의 이상 행위를 찾아내고 침해사고가 나면 증거로 쓴다. 개인정보처리시스템의 접속기록 보관, ISMS-P 의 로그 관리 요구도 이 기록으로 충족한다.
감사 방식은 크게 셋이다.
- DBMS 자체 감사 : DBMS 의 감사 기능을 켠다(오라클 AUDIT, SQL Server Audit, MySQL Enterprise Audit 등)
- DB 접근제어 솔루션 : 게이트웨이(프록시) 또는 에이전트 방식으로 질의를 가로채 기록·통제한다
- 네트워크 스니핑 : 미러링한 트래픽에서 SQL 을 뽑아 기록한다
오라클은 초기화 매개변수로 감사 기록을 남길지, 어디에 남길지를 정한다. 현재 값은 `SHOW PARAMETER audit` 로 본다.
| 매개변수 | 뜻 | 주요 값 |
|---|---|---|
| AUDIT_TRAIL | 표준 감사를 켜고 감사 기록을 저장할 곳을 정한다 | NONE : 감사 기록을 남기지 않는다 OS : 운영체제 파일(AUDIT_FILE_DEST)에 쓴다 DB : 데이터베이스의 SYS.AUD$ 테이블에 쓴다 DB,EXTENDED : DB 에 쓰되 실행한 SQL 문과 바인드 변수까지 남긴다 XML, XML,EXTENDED : OS 디렉터리에 XML 파일로 쓴다 |
| AUDIT_FILE_DEST | OS 감사 파일을 쓰는 디렉터리. AUDIT_TRAIL 이 OS·XML 일 때와 SYS 감사 기록이 여기에 쌓인다 | 예: /u01/app/oracle/admin/ORCL/adump |
| AUDIT_SYS_OPERATIONS | SYSDBA·SYSOPER 로 접속한 관리자(SYS)의 작업을 감사할지 | TRUE : SYS 의 명령을 OS 파일(또는 syslog)에 기록한다 FALSE : SYS 작업은 감사하지 않는다(접속·기동·종료 같은 필수 기록만 남는다) |
| AUDIT_SYSLOG_LEVEL | 감사 기록을 OS 의 syslog 로 보낼 때 쓸 facility.priority | 예: LOCAL0.INFO. SYS 감사 기록과, AUDIT_TRAIL=OS 일 때의 표준 감사 기록이 syslog 로 간다 |
- AUDIT_TRAIL 은 정적 매개변수라 바꾼 뒤 인스턴스를 다시 시작해야 적용된다.
SQL> ALTER SYSTEM SET audit_trail = DB SCOPE = SPFILE; SQL> SHUTDOWN IMMEDIATE SQL> STARTUP
- DB 에 쌓인 기록은 `DBA_AUDIT_TRAIL` 뷰로 조회한다.
- 매개변수는 저장소를 정할 뿐이고, 무엇을 감사할지는 `AUDIT SELECT TABLE BY scott;` 같은 AUDIT 문으로 따로 지정한다. 세밀한 조건 감사는 DBMS_FGA 패키지(기록은 SYS.FGA_LOG$)로 한다.
NAME TYPE VALUE ----------------------- -------- -------------------------------- audit_file_dest string /u01/app/oracle/admin/ORCL/adump audit_sys_operations boolean FALSE audit_syslog_level string LOCAL0.INFO audit_trail string NONE
- audit_trail = NONE : 표준 감사가 꺼져 있어 일반 사용자 작업의 감사 기록이 남지 않는다
- audit_sys_operations = FALSE : SYS 관리자 작업도 감사하지 않는다
- audit_syslog_level = LOCAL0.INFO : syslog 로 보낼 때 local0 facility, info 등급을 쓴다. syslog 설정(예: `local0.info @@10.20.2.11:514`)에 원격 로그 서버를 지정해야 바깥으로 나간다 → 리눅스 syslog.conf
- audit_file_dest : OS 감사 파일이 쌓이는 경로. 지금은 AUDIT_TRAIL 이 NONE 이므로 필수 기록만 쌓인다
- 감사 기록을 SYS.AUD$ 에 남기려면 AUDIT_TRAIL 을 DB(또는 DB,EXTENDED)로 바꾸고 재시작한다
오라클 12c 부터는 여러 감사 기록(표준 감사, 세밀 감사, SYS 감사, RMAN·데이터 펌프 등)을 하나로 모은 통합 감사를 쓴다. 감사 정책을 `CREATE AUDIT POLICY` 로 만들고 `AUDIT POLICY` 로 켜며, 기록은 AUDSYS 스키마에 저장되어 `UNIFIED_AUDIT_TRAIL` 뷰로 본다. 오라클은 새 시스템에 통합 감사를 권하며, 기존 매개변수(AUDIT_TRAIL 등)는 통합 감사만 쓰는 모드에서는 효과가 없다.
- 위·변조 방지 : 감사 기록이 DB 안(SYS.AUD$)에만 있으면 DB 관리자 권한을 가진 공격자나 내부자가 자신의 흔적을 지우거나 고칠 수 있다. 감사 대상이 감사 기록을 관리하는 셈이다
- 직무 분리 : DB 관리자와 다른 사람이 관리하는 로그 서버에 두면 관리자 자신의 행위도 감사할 수 있다
- 증거 능력 : 사고가 나도 별도 서버의 기록은 신뢰할 수 있는 증거로 남는다
- 통합 모니터링 : syslog 로 SIEM 같은 중앙 수집 시스템에 보내면 다른 서버·보안 장비의 로그와 상관 분석하고 실시간으로 경보를 낼 수 있다
- 성능·용량 : 감사 기록이 DB 테이블스페이스를 채워 서비스에 영향을 주는 일을 막는다
- 실무에서는 정밀 분석을 위해 DB 안과 밖에 함께 남기기도 한다. 일반적인 로그 무결성 대책은 로그 관리 문서를 본다