D-04 데이터베이스 관리자 권한을 꼭 필요한 계정 및 그룹에 허용
■ 점검영역 : 계정관리
■ 항목 중요도 : 상
■ 점검내용
관리자 권한이 필요한 계정 및 그룹에만 관리자 권한을 부여하였는지 점검
■ 점검목적
관리자 권한이 필요한 계정과 그룹에만 관리자 권한을 부여하였는지 점검하여 관리자 권한의 남용을 방지하여 계정 유출로 인한 비인가자의 DB접근 가능성을 최소화하고자 함
■ 보안위협
관리자 권한이 필요한 계정 및 그룹에만 관리자 권한을 부여하지 않을 경우 관리자 권한이 부여된 계정이 비인가자에게 유출될 경우 DB에 접근할 수 있는 위험이 존재함
■ 참고
-
점검대상 및 판단기준(데이터베이스/dbms 취약점 진단)
■ 대상 : Oracle, MSSQL, MySQL, ALTIBASE, TIBERO, PostgreSQL 등
양호
관리자 권한이 필요한 계정 및 그룹에만 관리자 권한이 부여된 경우
취약
관리자 권한이 필요 없는 계정 및 그룹에 권한이 부여된 경우
■ 조치방법
관리자 권한이 필요한 계정 및 그룹에만 관리자 권한 부여
점검 및 조치 방법(oracle, mssql, mysql 등)
■ Oracle
Step 1) SYSDBA 권한 점검
SQL> SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME NOT IN (SELECT GRANTEE FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE='DBA') and USERNAME
!='INTERNAL' and sysdba='TRUE'; (어떠한 계정이라도 나오는 경우 취약)
Step 2) Admin에 부적합 계정 존재 여부 점검
SQL> select grantee, privilege from dba_sys_privs where grantee not in ( 'SYS', 'SYSTEM', 'AQ_ADMINISTRATOR_ROLE' , 'DBA ' ,'MDSYS' , 'LBACSYS', 'SCHEDULER_ADMIN', 'WMSYS') and admin_option='YES' and grantee not in (select grantee from dba_role_privs where granted_role='DBA'); (어떠한 계정이라도 나오는 경우 취약)
Step 3) 관리자 권한이 불필요한 계정에서 관련 권한을 제거
※ 불필요하게 시스템 권한을 부여한 계정의 권한 변경 필요
※ 시스템 권한 부여가 필요한 경우 필요한 테이블별 권한 부여
※ 인가된 사용자는 관리자 권한에 role을 grant한 후, 시스템 권한을 grant하고 role을 인가된 사용자에게 grant 함
■ MSSQL
Step 1) sysadmin 서버 역할의 계정 목록을 확인 후 해당 서버 역할에 불필요한 계정이 있는 경우 서버 역할에서 삭제
sysadmin 서버 역할에서 불필요한 계정 삭제
(명령어) Exec sp_droprolemember ‘user_name’, ‘sysadmin’;
(예) Exec sp_dropsrvrolemember 'user01', 'sysadmin';
(user01 계정을 sysadmin 서버 역할에서 삭제)
■ MySQL
Step 1) mysql.user 테이블에 적용된 권한은 모든 데이터베이스에 적용되므로 host, user, password를 제외한 나머지 권한은 허용하지 않음(‘N’)으로 설정
1. 사용자 등록
mysql> insert into mysql.user (host, name, password) values(‘%’, ’user
name’, password (‘password’); ※ 디폴트로 모든 권한 ‘N’ 설정
2. 권한 변경
mysql> update mysql.user set <권한>=’N’ where user=’user name’;
Step 2) 각 사용자는 접근하고자 하는 DB를 mysql.db에 등록 후 접근 권한을 부여하여 사용
1. DB등록 시 권한 부여
mysql> insert into mysql.db values(‘%’,’DB name’, ’username’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’);
mysql> flush privileges;
2. DB 권한 업데이트
mysql> update mysql.db set <권한>=’Y’ where db=<DB name> and user=’user name’;
mysql> flush privileges;
■ Altibase
Step 1) 계정별 부여된 시스템 권한 목록 확인 후, 아래 명령어 모두 입력
select * from system_.sys_grant_system_;
select * from system_.sys_users_;
select * from system_.sys_privileges_;
Step 2) sys_users_ 결과값에서 user_id 확인
Step 3) sys_grant_system_ 결과값에서 user_id 와 동일한 grantee_id 확인하여 priv_id 확인
Step 4) 일반사용자 계정 생성 시 시스템에 의해 부여되는 기본 권한 외 입력되어 있을 경우 해당 권한 삭제
시스템에 의해 자동으로 부여되는 권한 | privileged_id |
create session | 215 |
create table | 217 |
create sequence | 210 |
create procedure | 205 |
create view | 229 |
create trigger | 241 |
create synonym | 245 |
create materialized view | 252 |
create library | 256 |
■ Tibero
Step 1) 계정별 부여된 시스템 권한 목록 확인 후, 아래 명령어 모두 입력
select * from dba_users;
select * from dba_sys_privs;
Step 2) dbs_users 결과값에서 시스템 계정, 일반 계정 확인
Step 3) dba_sys_privs 결과값에서 일반 계정임에도 시스템 권한을 불필요하게 부여받고 있는지 확인
Step 4) 일반 계정에 불필요한 시스템 권한이 부여되어 있을 경우 권한 삭제
■ PostgreSQL
계정의 용도 파악 후 불필요한 계정은 삭제, 새로운 계정 생성시 적절한 권한을 부여하여 생성
Step 1) 모든 사용자 확인
쿼리문 조회 : select *from pg_shadow;
명령어 조회 : \du
Step 2) 불필요 계정 삭제
DROP ROLE ‘삭제할 계정’;
Step 3) 계정 생성 및 권한 추가
create user ‘생성할 계정’;
alter role ‘계정명’ ‘권한명’ ‘권한명’ ····;
\du (계정 생성 및 권한 확인)
■ 조치 시 영향 : 일반적인 경우 영향 없음