D-08 응용프로그램 또는 DBA 계정의 Role이 Public으로 설정되지 않도록 설정
■ 점검영역 : 옵션관리
■ 항목 중요도 : 상
■ 점검내용
응용프로그램 또는 DBA 계정의 Role을 Public으로 설정했는지를 점검
■ 점검목적
응용프로그램 또는 DBA 계정의 Role을 점검하여 일반 계정으로 응용프로그램 테이블이나 DBA 테이블의 접근을 차단하기 위함
■ 보안위협
응용프로그램 또는 DBA 계정의 Role이 Public으로 설정되어 있으면, 일반 계정에서도 응용프로그램 테이블 및 DBA 테이블로 접근할 수 있어 주요 정보 유출이 발생할 수 있음
■ 참고
※ Role: 사용자에게 허가 할 수 있는 권한들의 집합
점검대상 및 판단기준(데이터베이스/dbms 취약점 진단)
■ 대상 : Oracle, MSSQL, MySQL, ALTIBASE, TIBERO, PostgreSQL 등
양호
DBA 계정의 Role이 Public으로 설정되어있지 않은 경우
취약
DBA 계정의 Role이 Public으로 설정되어있는 경우
■ 조치방법
DBA 계정의 Role 설정에서 Public 그룹 권한 취소
점검 및 조치 방법(oracle, mssql, mysql 등)
■ Oracle
Step 1) DBA Role 설정 확인(SQL*Plus)
SQL> Select granted_role from dba_role_privs where grantee='PUBLIC';
위와 같이 롤(Role)이 설정되어 있는 경우 취약
Step 2) public 그룹의 권한 취소(SQL*Plus)
SQL> Revoke role from public;
■ MSSQL
Step 1) 각 Object의 사용 권한이 불필요하게 Public, Guest에 부여된 경우 권한 제거
Use database name
1. 권한 제거
REVOKE <권한> on <object> FROM public|guest;
2. 권한 부여
GRANT <권한> on <object> TO public|guest;
(예) syscolumns 테이블에 대한 SELECT 권한 제거
USE master
REVOKE select on sys.syscolumns FROM public;
※ Object 사용 권한이 Public에 부여된 경우, 사용 권한이 없는 모든 계정이 Object에 접근 가능하여 Object의 정보를 획득할 수 있으므로 Object 사용 권한을 Public에 부여하는 것을 제한하여야 함
■ Altibase
Step 1) 사용자 정보를 조회하여 객체 권한, 시스템 권한이 public 또는 guest 에게 부여되어 있는지 확인
select * from system_.sys_users_;
select * from system_.sys_grant_object_;
select * from system_.sys_grant_system_;
GRANTOR_ID : 권한을 부여한 사용자의 식별자로, SYS_USERS_ 메타 테이블의 한 USER_ID 값과 동일하다
GRANTEE_ID : 권한을 부여받은 사용자의 식별자로, SYS_USERS_ 메타 테이블의 한 USER_ID 값과 동일하다. 단, 객체 권한을 public 에게 부여한 경우, SYS_USERS_ 메타 테이블에 존재하지 않는 USER_ID 값인 "0"이 칼럼에 나타난다.
Step 2) 불필요 권한 회수
revoke 권한 on 객체 from 유저
■ Tibero
Step 1) 사용자 정보를 조회하여 role 부여가 적절한지 확인
select * from dba_role_privs;
select * from user_role_privs;
Step 2) 불필요 권한 회수
revoke 권한 from 유저;
※ USER_ROLE_PRIVS : 현재 사용자나 PUBLIC 사용자에 부여된 역할의 정보를 조회하는 뷰
■ 조치 시 영향 : 일반적인 경우 영향 없음