Oracle Database 보안 강화 (점검, 네트워크, TLS, 인증, 권한, Unified Auditing, TDE)
Oracle난이도: 고급소요 시간: 5분(점검) – 4시간(전체 보안 강화)설치 가이드가 아닙니다: 운영 중인 Oracle 19c / 23ai (26ai) 데이터베이스(단일 인스턴스, Oracle Restart 또는 RAC, CDB/PDB)의 보안 취약점을 찾아 해소합니다. 먼저 읽기 전용 상태 점검이 취약점을 심각도 순으로 나열하고 각 발견 사항이 어느 카드로 이어지는지 알려줍니다. 그다음 영역별로 하나씩 또는 전체를 순서대로 해소합니다: listener와 TCP.VALIDNODE_CHECKING, firewall, TCPS(wallet) 또는 native network encryption, 12C 비밀번호 verifier와 프로파일, 기본 계정 잠금, 롤 설계와 PUBLIC의 UTL_* 권한 회수, Unified Auditing과 AUDSYS 정리, TDE, 암호화된 백업, 운영체제와 RU 관리. TDE와 RMAN/Data Pump 암호화는 Advanced Security 라이선스가 필요하며 나머지는 모두 라이선스가 필요 없습니다. 마지막에 점검을 다시 실행합니다.
구성: 단일 인스턴스 / Oracle Restart / RAC(2–8 노드), CDB + PDB, 애플리케이션 서버(클라이언트 검증)
시나리오
- 상태 점검: 어떤 취약점이 있는가? (읽기 전용) — 가장 먼저 실행할 스캔: 기본 비밀번호를 가진 계정과 open 상태 계정, 구버전 비밀번호 verifier, 프로파일, DBA/ANY 권한, PUBLIC에 부여된 UTL_ PL/SQL 패키지, audit, TDE, 암호화되지 않은 세션, listener와 파일 권한. 아무것도 변경하지 않습니다.
- 전체 보안 강화 (모두 순서대로) — 새로 설치했거나 한 번도 보안 강화를 하지 않은 데이터베이스: 모든 영역을 안전한 순서로 적용합니다. listener와 데이터베이스를 한두 번 재시작합니다(유지보수 시간대 필요).
- 네트워크와 접속: 누가 어디서 접속할 수 있는가? (listener, TCP.VALIDNODE_CHECKING, firewall) — listener가 모든 주소에 열려 있고, invited nodes가 정의되지 않았으며, 1521/5500이 누구에게나 열려 있습니다. listener를 재시작합니다(열린 세션은 영향받지 않음).
- 접속 암호화 (TCPS wallet 또는 native network encryption) — 네트워크 트래픽이 암호화되지 않았습니다. TLS(TCPS, wallet, 인증서, 클라이언트의 SSL_SERVER_DN_MATCH) 또는 인증서 없는 native encryption(SQLNET.ENCRYPTION_SERVER=REQUIRED). 두 방법 모두 라이선스가 필요 없습니다. listener를 재시작하며 열린 세션은 영향받지 않습니다.
- 인증과 비밀번호 (12C verifier, 프로파일, 기본 계정) — 10G/11G 비밀번호 verifier, 비밀번호 프로파일 없음, 기본 비밀번호 계정이나 샘플 계정이 open 상태, 개인 DBA 계정. 다운타임 없음.
- 최소 권한: 롤, PUBLIC과 애플리케이션 계정 — 애플리케이션 계정의 DBA/RESOURCE/ANY 권한, PUBLIC에 부여된 UTL_FILE/UTL_TCP/UTL_HTTP. 스키마 소유자, 읽기/쓰기 롤과 권한 보고서. 다운타임 없음.
- Audit: 누가 무엇을 했는가? (Unified Auditing, AUDSYS 정리) — 감사인이 로그인, 계정 및 스키마 변경 기록을 요구합니다: unified audit 정책, 보존 기간에 따른 AUDSYS 정리, 레코드를 syslog/중앙 시스템으로 전송. Unified Auditing은 라이선스가 필요 없습니다.
- 디스크 데이터 암호화 (TDE) — datafile, 백업 또는 디스크 사본의 유출에 대비한 TDE: WALLET_ROOT, keystore, master key, tablespace 암호화(online). Advanced Security 라이선스가 필요하며 WALLET_ROOT 때문에 재시작이 한 번 필요합니다.
- 백업 보안 (RMAN 암호화, 비밀번호 없는 자동화, 권한) — RMAN/Data Pump 백업이 암호화되지 않았고, 스크립트에 평문 비밀번호가 있으며, 백업 디렉터리가 누구에게나 열려 있습니다. RMAN encryption, ENCRYPTION_PWD_PROMPT, wallet(SEPS)과 디렉터리 권한. RMAN과 Data Pump 암호화는 Advanced Security 라이선스가 필요합니다.
- 운영체제 측면 (oracle 계정, 파일 권한, core dump, SELinux) — oracle 계정에 비밀번호 로그인이 가능하고, 비밀번호 파일/network admin/wallet 권한이 느슨하며, SELinux가 꺼져 있습니다. core dump 제한은 새 세션 또는 재시작 시 적용됩니다.
- 패치와 버전: 최신 RU인가? — 설치된 RU, datapatch 상태와 지원 일정. 적용은 RU 패치 가이드로 연결됩니다. 읽기 전용.
시작하기 전에
- oracle 사용자의 프로파일에 ORACLE_HOME=…, ORACLE_SID…(노드별 인스턴스 이름)…, PATH가 정의되어 있고 sqlplus / as sysdba가 비밀번호 없이(OS 인증) 동작합니다. 각 단계는 sudo -iu oracle로 login shell에서 실행되며 프로파일이 로드됩니다.… listener는 Grid Infrastructure home(…)에서 …로 관리합니다.… 출력의 한글이 ?로 보이면 프로파일에 export NLS_LANG=AMERICAN_AMERICA.AL32UTF8을 추가하십시오(표시에만 해당하며 데이터에는 영향이 없습니다).
- 서버에 두 개의 별도 세션을 열어 두고 그중 하나에서 sqlplus / as sysdba를 열어 둡니다. 로컬 / as sysdba(bequeath) 접속은 listener, sqlnet.ora 네트워크 규칙, 프로파일의 영향을 받지 않습니다: listener, invited nodes, 암호화 오류가 생겨도 항상 복귀 경로가 됩니다. 접근을 제한하는 각 단계 후에는 새 접속을 별도 세션(애플리케이션 서버)에서 테스트하십시오.
- 유지보수 시간대: listener를 재시작합니다(새 접속이 몇 초간 거부되며 열린 세션은 영향받지 않음)…. TDE용 WALLET_ROOT와 audit용 UNIFIED_AUDIT_SYSTEMLOG 정적 파라미터는 데이터베이스 재시작이 필요합니다….… RAC에서는 데이터베이스 재시작을 노드별(rolling)로 할 수 있습니다: srvctl stop instance -db … -node <node> / start.…
- TDE, RMAN 백업 암호화, Data Pump 암호화는 Oracle Advanced Security 라이선스가 필요합니다(Enterprise Edition + 추가 라이선스, Oracle Cloud / Exadata Cloud에서는 포함). 라이선스가 없으면 이 단계를 적용하지 말고 디스크 수준 암호화(LUKS)나 스토리지 암호화를 사용하십시오. Native Network Encryption과 TLS는 모든 에디션에서 라이선스가 필요 없습니다(11gR2부터).
- 데이터베이스에 접속하는 애플리케이션, Data Guard/OEM/백업 서버의 주소 목록과 클라이언트 버전. 점검 단계에서 현재 세션을 보여줍니다.
- 최신이며 복구 테스트를 마친 RMAN 백업이 있습니다(RMAN 백업 전략). TDE 이전에 받은 백업은 keystore 없이 열 수 있지만, TDE 이후의 새 백업은 keystore 백업 없이는 열 수 없습니다.
가이드 단계
- 상태 점검 (읽기 전용) — 데이터베이스 내부 발견 사항 조회 · 운영체제와 Net 측면 점검
- 시작 전: 복귀 지점 — Net 파일과 파라미터 저장 · 사용자, 프로파일, 권한 덤프 생성
- 권한 — 1. 진단 — 애플리케이션 계정의 권한과 PUBLIC에 부여된 PL/SQL 패키지 표시
- 권한 — 2. 안전장치 — PUBLIC 권한에 의존하는 객체 찾기
- 권한 — 3. 적용 — 스키마 소유자, 롤, 계정 생성 · 롤에 테이블 권한 부여 · 애플리케이션 계정에서 과도한 권한 회수 · PUBLIC에서 UTL_* 및 위험한 PL/SQL 패키지 권한 회수 · 권한 보고서
- 권한 — 4. 검증 — 애플리케이션 계정의 유효 권한 검증 · 애플리케이션 서버에서 DDL 시도
- 인증 — 1. 진단 — 계정 상태, verifier, 프로파일 표시
- 인증 — 2. 안전장치 — 클라이언트 버전 확인
- 인증 — 3. 적용 — 기본 비밀번호, 샘플, 미사용 Oracle 계정 잠금 · 비밀번호 프로파일 생성 · CDB root에서 DEFAULT 프로파일 강화 · 비밀번호 verifier를 12C로 강제 (sqlnet.ora) · 애플리케이션 계정 비밀번호 설정 · 개인 DBA 계정 생성 …
- 인증 — 4. 검증 — 계정과 verifier 상태 검증 · 애플리케이션 서버에서 로그인 시도 (새 세션)
- 네트워크 암호화 — 1. 진단 — 세션의 암호화 상태 표시
- 네트워크 암호화 — 3. 적용 — Native network encryption 필수화 · 서버 wallet 생성 · CA에서 받은 인증서를 wallet에 추가 · listener 소유자에게 wallet 접근 허용… 및 다른 노드로 복사… · listener용 TLS 설정 기록 · 데이터베이스 home용 TLS 설정 기록 …
- 네트워크 암호화 — 4. 검증 — 새 접속이 암호화되었는지 검증
- 네트워크 암호화 — 5. 사후 조치 — 암호화되지 않은 1521 차단과 인증서 갱신
- 네트워크 — 1. 진단: 누가 어디서 접속하는가? — listener와 접속 출발지 표시
- 네트워크 — 3. 적용 — listener가 허용된 주소만 받도록 설정 (valid node checking) · listener 재시작 · firewall에서 포트를 허용된 네트워크에만 개방
- 네트워크 — 4. 검증 — 애플리케이션 서버에서 접속 시도 (새 세션)
- Audit — 1. 진단 — audit 모드, 정책, AUDSYS 크기 표시
- Audit — 3. 적용 — audit 정책 정의 및 활성화 · AUDSYS를 별도 tablespace로 옮기고 정리 작업 예약 · CDB root에서 사전 정의 정책과 정리 작업 활성화 · audit 요약을 syslog에 기록 (UNIFIED_AUDIT_SYSTEMLOG) · rsyslog: local3을 중앙 서버로 전달 · rsyslog 재시작 및 데이터베이스 재시작
- Audit — 4. 검증 — 변경을 하나 수행하고 레코드 확인
- 운영체제 — 1. 진단 — oracle 계정, 파일 권한, core dump, SELinux
- 운영체제 — 3. 적용 — oracle 계정 비밀번호 잠금 · 비밀번호 파일과 Net 파일 권한 수정 · oracle 사용자의 core dump 비활성화 · SELinux를 Enforcing으로 유지
- 운영체제 — 4. 검증 — 변경 사항 검증
- TDE — 1. 진단 — keystore와 tablespace 암호화 상태 표시
- TDE — 2. 안전장치 — TDE 전 백업과 공간 확인
- TDE — 3. 적용 — WALLET_ROOT 설정 · WALLET_ROOT 적용을 위한 데이터베이스 재시작 · keystore 생성, open 및 master key 설정 · keystore를 다른 RAC 노드로 복사 · tablespace 암호화 · keystore 백업
- TDE — 4. 검증 — keystore와 암호화된 tablespace 검증
- 백업 — 1. 진단 — RMAN 암호화 설정과 백업 상태 표시
- 백업 — 3. 적용 — RMAN 백업 암호화 활성화 · 암호화된 백업 테스트 · Data Pump export 암호화 · 스크립트용 비밀번호 없는 접속 (Secure External Password Store) · 백업 및 wallet 디렉터리 권한 수정
- 패치와 버전 — 1. 진단 — 설치된 RU와 datapatch 상태 표시