오라클 KISA 계정관리 1~5번: 확인 SQL과 조치 SQL 정리

반응형
오라클 KISA 계정관리 1~5번: 확인 SQL과 조치 SQL 정리

DB 보안 점검 · 계정관리

오라클 KISA 계정관리 1~5번: 확인 방법과 조치 방법(SQL)

아래는 KISA 점검표 중 계정관리 1~5번(D-01~D-05)을 대상으로, 확인 SQL(점검)조치 SQL(권고)를 바로 적용 가능한 형태로 정리한 내용이다.

범위: D-01 ~ D-05 대상: Oracle DB 운영/관리 계정

적용 전 주의사항

운영 환경에서는
계정 잠금/삭제, 프로파일 변경은 서비스 장애로 이어질 수 있다.
변경 전에는 반드시 “대상 계정의 용도(업무/연동/배치)”, “영향 범위”, “롤백 절차”를 함께 정리한 뒤 적용한다.
  • 권한 조회 뷰: DBA_USERS, DBA_PROFILES, DBA_ROLE_PRIVS, DBA_SYS_PRIVS
  • 조회 권한이 없으면 ALL_* / USER_*로 대체 가능하나, 점검 정확도는 떨어질 수 있음
  • 일부 컬럼(예: LAST_LOGIN)은 DB 버전/옵션에 따라 존재 여부가 다름

D-01 기본 계정의 패스워드·정책 변경

설치/샘플/기본 계정이 남아 있거나 초기 정책이 그대로면, 공격자가 계정 목록을 바탕으로 침투를 시도하기 쉽다.

확인 방법(SQL)

-- 잠재적 기본/샘플 계정 상태 확인(환경에 따라 목록 조정)
SELECT username, account_status, profile
FROM dba_users
WHERE username IN ('SCOTT','HR','OE','PM','SH','OUTLN','ANONYMOUS')
ORDER BY username;

-- 패스워드 정책(프로파일) 확인
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_name IN (
  'FAILED_LOGIN_ATTEMPTS','PASSWORD_LIFE_TIME','PASSWORD_GRACE_TIME',
  'PASSWORD_LOCK_TIME','PASSWORD_REUSE_TIME','PASSWORD_REUSE_MAX',
  'PASSWORD_VERIFY_FUNCTION'
)
ORDER BY profile, resource_name;

조치 방법(SQL 예시)

-- 불필요하면 잠금(삭제는 영향도 확인 후)
ALTER USER SCOTT ACCOUNT LOCK;

-- 필요 시 비밀번호 변경(예시)
ALTER USER HR IDENTIFIED BY "강력한비밀번호_예시!2026";

-- 표준 프로파일 적용(예시: 사전 생성된 SECURE_PROFILE 가정)
ALTER USER HR PROFILE SECURE_PROFILE;

D-02 불필요 계정 제거 또는 잠금 설정

미사용 계정은 사고 시 가장 먼저 악용되는 공격면이다. “잠금 → 유예기간 → 삭제”처럼 단계화하는 방식이 안전하다.

확인 방법(SQL)

-- 사용자 계정 현황(시스템 계정 제외: oracle_maintained='N')
SELECT username, account_status, created, profile
FROM dba_users
WHERE oracle_maintained = 'N'
ORDER BY created DESC;

-- (가능한 경우) 마지막 로그인 확인: 버전에 따라 LAST_LOGIN 존재
-- 컬럼이 없으면 이 쿼리는 실패할 수 있으니, 환경 확인 후 사용
SELECT username, account_status, last_login
FROM dba_users
WHERE oracle_maintained = 'N'
ORDER BY last_login NULLS FIRST;

조치 방법(SQL 예시)

-- 1) 즉시 삭제 대신 잠금으로 1차 차단
ALTER USER SOME_USER ACCOUNT LOCK;

-- 2) 계정 만료(정책에 따라 사용)
ALTER USER SOME_USER PASSWORD EXPIRE;

-- 3) 유예기간 후 제거(객체 소유 여부/연동 영향 확인 필수)
-- DROP USER SOME_USER CASCADE;

* DROP USER CASCADE는 스키마 오브젝트까지 제거할 수 있으므로, 운영에서는 소유 오브젝트/연동 영향 분석 후 진행 권고.

D-03 비밀번호 사용기간·복잡도 정책 설정

기관 정책(주기, 복잡도, 잠금, 유예기간)에 맞춘 프로파일을 표준화하면, 예외 계정이 줄고 점검/감사도 단순해진다.

확인 방법(SQL)

-- 프로파일별 패스워드 정책 확인
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_name IN (
  'PASSWORD_LIFE_TIME',
  'PASSWORD_GRACE_TIME',
  'PASSWORD_VERIFY_FUNCTION',
  'FAILED_LOGIN_ATTEMPTS',
  'PASSWORD_LOCK_TIME'
)
ORDER BY profile, resource_name;

-- 사용자별 적용 프로파일 확인
SELECT username, profile
FROM dba_users
WHERE oracle_maintained = 'N'
ORDER BY profile, username;

조치 방법(SQL 예시)

-- 표준 프로파일 생성/수정(예시 값은 정책에 맞게 조정)
CREATE PROFILE SECURE_PROFILE LIMIT
  PASSWORD_LIFE_TIME       90
  PASSWORD_GRACE_TIME      7
  FAILED_LOGIN_ATTEMPTS    10
  PASSWORD_LOCK_TIME       1/24
  PASSWORD_VERIFY_FUNCTION ORA12C_VERIFY_FUNCTION;

-- 적용(예시)
ALTER USER APP_USER PROFILE SECURE_PROFILE;

* VERIFY_FUNCTION은 버전별 기본 함수가 다를 수 있다. 운영 정책에 맞춘 커스텀 함수 사용 여부도 함께 관리하는 것이 좋다.

D-04 DBA 권한 최소화(필요 계정/그룹에만 허용)

DBA 권한은 침해 시 파급이 매우 크다. 계정 개수 자체를 줄이고, 업무 분리(운영/개발/감사)까지 함께 설계하는 것이 핵심이다.

확인 방법(SQL)

-- DBA 롤 보유 계정 확인
SELECT grantee, granted_role, admin_option
FROM dba_role_privs
WHERE granted_role = 'DBA'
ORDER BY grantee;

-- 강한 시스템 권한 보유 계정 확인(대표 예시)
SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE privilege IN ('CREATE USER','ALTER USER','DROP USER','GRANT ANY PRIVILEGE','GRANT ANY ROLE')
ORDER BY grantee, privilege;

조치 방법(SQL 예시)

-- 불필요한 DBA 롤 회수
REVOKE DBA FROM SOME_USER;

-- 권한 재위임 방지(ADMIN OPTION 제거가 필요한 경우: 재부여 구조 점검)
-- REVOKE ... 는 동일, 구조를 재설계한 뒤 필요한 최소 권한만 부여

-- 대안: 업무용 롤을 분리해 최소 권한만 부여(예시)
-- CREATE ROLE OPS_USER_MGMT;
-- GRANT CREATE USER, ALTER USER TO OPS_USER_MGMT;
-- GRANT OPS_USER_MGMT TO OPS_ADMIN;

D-05 패스워드 재사용 제약 설정

비밀번호를 “돌려쓰기”하면 정책의 실효성이 떨어진다. 재사용 제한은 이력(횟수) 또는 기간(일수) 기준으로 설계한다.

확인 방법(SQL)

-- 재사용 정책 확인(프로파일별)
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_name IN ('PASSWORD_REUSE_TIME','PASSWORD_REUSE_MAX')
ORDER BY profile, resource_name;

조치 방법(SQL 예시)

-- 예시: 재사용 금지 정책(정책에 맞게 조정)
ALTER PROFILE SECURE_PROFILE LIMIT
  PASSWORD_REUSE_TIME 365
  PASSWORD_REUSE_MAX  10;

-- 특정 사용자에 적용
ALTER USER APP_USER PROFILE SECURE_PROFILE;

* PASSWORD_REUSE_TIME / PASSWORD_REUSE_MAX는 함께 설계하는 경우가 많다. “기간 기반” vs “이력 기반” 중 기관 정책에 맞춰 선택/조합 권고.

반응형