Professional Documents
Culture Documents
DBMS 취약성 점검표
DBMS 취약성 점검표
5.1. 계정관리
5.1.1. 기본 계정의 패스워드, 정책 등을 변경하여 사용
ERROR:
= ORA-01017: invalid username/password; logon denied
진단결과 양호
2. 패스워드 복잡도 확인
SQL> SELECT resource_name, limit,
CASE
WHEN resource_name LIKE 'PASSWORD_VERIFY_FU%'
AND limit = 'VERIFY_FUNCTION' THEN 'good'
ELSE 'vul'
END
FROM USER_PASSWORD_LIMITS
WHERE resource_name IN (
'PASSWORD_VERIFY_FUNCTION'
);
RESOURCE_NAME LIMIT CASEWHENRESOURCE_NAMELIKE'PASS
--------------------------------
= 양호 PASSWORD_VERIFY_FUNCTION NULL vul
진단결과 암호주기적 변경은 취약, 패스워드 복잡도는 양호(10 자리이상)
조치방법 1. PASSWORD_LIFE_TIME 프로파일 파라미터 변경
SCREATE PROFILE grace_5 LIMIT
FAILED_LOGIN_ATTEMPTS 3 (패스워드 실패 3번 까지만 가능)
PASSWORD_LIFE_TIME 30 (30일 동안만 패스워드 사용 가능)
PASSWORD_REUSE_TIME 30 (사용한 패스워드 30일 후부터 재사용 가능)
PASSWORD_VERIFY_FUNCTION verify_function
PASSWORD_GRACE_TIME 5 ; (life time 이 끝나고 5 일 동안 메시지를 보여줌)
2. Admin 에 부적합 계정 존재 여부 점검
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
=취약 ORANGE SELECT ANY DICTIONARY
ORANGE SELECT ANY TABLE
진단결과 1.양호, 2:취약
조치방법
계정별 관리자 권한 차등 부여, 삭제
■ Oracle
1. 불필요하게 시스템 권한을 부여한 계정의 권한 변경
2. 반드시 필요한 경우 필요한 테이블에만 권한 한정
3. 인가된 사용자는 관리자의 권한에 role을 grant 한 후, 시스템 권한을 grant 하고,
role 을 인가된 사용자에게 grant 를 함
= 15 rows selected.
= no rows selected
= no rows selected
진단결과 취약
조치방법 PASSWORD_REUSE_TIME 및 프로파일 파라미터 설정
SQL> alter profile default limit
password_reuse_time 365
password_reuse_max 10;
SQL> alter profile [profile name] limit
password_reuse_time default
password_reuse_max default;
USERNAME
------------------------------
BIGAD
BIGFILE
CTXSYS
DBSNMP
DIP
OGG_ADMIN107
OGG_ADMIN109
OGG_BIGFILE
ORACLE_OCM
ORANGE
OUTLN
USERNAME
------------------------------
SYS
SYSTEM
TSMSYS
WMSYS
15 rows selected.
진단결과 양호
조치방법 ■ Oracle
1. 공통으로 사용하는 계정 삭제
SQL> DROP USER username
2. 각 응용에 적합한 계정 생성
SQL> Create user username identified by passwd
3. 권한 부여
SQL> grant connect, resource to username
5.2. 권한관리
진단결과 양호
조치방법
1. 원격 OS 인증 방식이 불필요한 경우, SYS 계정으로 접속하여
‘REMOTE_OS_AUTHENT=FALSE’로 설정
2. 원격 OS 인증 방식이 필요한 경우
• 방화벽을 통한 원격 접근 IP 제한
• NAT(Network Address Translation)를 사용하여 비공인 IP 부여 후 외부 접근 제한
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
BIGFILE WRITE
SYS PUMP_DIR
BIGFILE READ
SYS PUMP_DIR
ORACLE_OCM READ
SYS ORACLE_OCM_CONFIG_DIR
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORACLE_OCM WRITE
SYS ORACLE_OCM_CONFIG_DIR
ORANGE_MONITORING_ROLE SELECT
SYS AUDIT_ACTIONS
ORANGE_MONITORING_ROLE SELECT
SYS V_$SQLTEXT_WITH_NEWLINES
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SQLTEXT_WITH_NEWLINES
ORANGE_MONITORING_ROLE SELECT
SYS V_$LATCHHOLDER
ORANGE_MONITORING_ROLE SELECT
SYS GV_$LATCHHOLDER
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS V_$LIBRARYCACHE
ORANGE_MONITORING_ROLE SELECT
SYS GV_$LIBRARYCACHE
ORANGE_MONITORING_ROLE SELECT
SYS V_$LOCK
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS GV_$LOCK
ORANGE_MONITORING_ROLE SELECT
SYS V_$LOCKED_OBJECT
ORANGE_MONITORING_ROLE SELECT
SYS GV_$LOCKED_OBJECT
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS V_$OPEN_CURSOR
ORANGE_MONITORING_ROLE SELECT
SYS GV_$OPEN_CURSOR
ORANGE_MONITORING_ROLE SELECT
SYS V_$PARAMETER
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS GV_$PARAMETER
ORANGE_MONITORING_ROLE SELECT
SYS V_$PROCESS
ORANGE_MONITORING_ROLE SELECT
SYS OX$BH
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS V_$ROLLNAME
ORANGE_MONITORING_ROLE SELECT
SYS V_$ROWCACHE
ORANGE_MONITORING_ROLE SELECT
SYS GV_$ROWCACHE
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS V_$SESSION
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SESSION
ORANGE_MONITORING_ROLE SELECT
SYS V_$SESSION_EVENT
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SESSION_EVENT
ORANGE_MONITORING_ROLE SELECT
SYS V_$SESSION_WAIT
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SESSION_WAIT
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS V_$SESSTAT
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SESSTAT
ORANGE_MONITORING_ROLE SELECT
SYS V_$SGASTAT
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SGASTAT
ORANGE_MONITORING_ROLE SELECT
SYS V_$SQL
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SQL
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS V_$STATNAME
ORANGE_MONITORING_ROLE SELECT
SYS GV_$STATNAME
ORANGE_MONITORING_ROLE SELECT
SYS V_$SYSSTAT
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SYSSTAT
ORANGE_MONITORING_ROLE SELECT
SYS V_$SYSTEM_EVENT
ORANGE_MONITORING_ROLE SELECT
SYS GV_$SYSTEM_EVENT
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS V_$TRANSACTION
ORANGE_MONITORING_ROLE SELECT
SYS GV_$TRANSACTION
ORANGE_MONITORING_ROLE SELECT SYS OX$KTFBUE
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS DBA_OBJECTS
ORANGE_MONITORING_ROLE SELECT
SYS ALL_USERS
ORANGE_MONITORING_ROLE SELECT
SYS USER$
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
OWNER TABLE_NAME
------------------------------ ------------------------------
ORANGE_MONITORING_ROLE SELECT
SYS OBJ$
ORANGE_MONITORING_ROLE SELECT
SYS GV_$PROCESS
50 rows selected.
진단결과 취약
조치방법 불필요하게 테이블 접근 권한이 사용자 계정에 할당된 경우
SQL> REVOKE 권한 on 객체 FROM User
cat $ORACLE_HOME/network/admin/listener.ora
= 리눅스서버이므로 해당사항 없음
진단결과 양호
PROFILE
------------------------------
= 양호 DEFAULT
진단결과 양호
조치방법 1. FAILED_LOGIN_ATTEMPTS 프로파일 파라미터 변경
SQL> ALTER PROFILE LIMIT FAILED_LOGIN_ATTEMPTS xx
2. 프로파일 값과 관련된 사용자들 변경
SQL> ALTER USER PROFILE
3. SQL*Plus를 통한 확인 예시
SQL> CREATE PROFILE grace_5 LIMIT
FAILED_LOGIN_ATTEMPTS 3 (패스워드 실패를 3번까지만 가능)
PASSWORD_LIFE_TIME 30 (30일동안만 패스워드를 사용)
PASSWORD_REUSE_TIME 30 (한번 사용한 패스워드를 다시 사용
하려면 30일 후부터 재사용 가능)
PASSWORD_VERIFY_FUNCTION verify_function
PASSWORD_GRACE_TIME 5;
(life time 이 끝나고 5 일동안 메시지를 보여줌)
VALUE
---------------------------------------------------------------------
= /dev/raw/raw19
SQL> Select 'Control Files: '||value from v$parameter where name='control_files';
'CONTROLFILES:'||VALUE
---------------------------------------------------------------------
= Control Files: /dev/raw/raw6, /dev/raw/raw7, /dev/raw/raw8
SQL> select 'Control Files: '||value from v$parameter where name='spfile';
'CONTROLFILES:'||VALUE
---------------------------------------------------------------------
= Control Files: /dev/raw/raw19
SQL> select 'Logfile: '||member from v$logfile;
= 'LOGFILE:'||MEMBER
---------------------------------------------------------------------
Logfile: /dev/raw/raw13
Logfile: /dev/raw/raw12
Logfile: /dev/raw/raw11
Logfile: /dev/raw/raw10
Logfile: /dev/raw/raw9
Logfile: /dev/raw/raw14
Logfile: /dev/raw/raw15
Logfile: /dev/raw/raw16
Logfile: /dev/raw/raw17
Logfile: /dev/raw/raw18
10 rows selected.
진단결과 양호
조치방법 해당 파일 및 디렉터리의 퍼미션 설정 변경
진단결과 양호
5.2.8. Registry procedure permission
진단결과 양호
진단결과 양호
5.3. 보안 관리
3. REMOTE_OS_ROLES에 대한 확인
show parameter remote_os_roles;
또는 Select value from v$parameter where name='remote_os_roles';
결과가 FALSE 가 아니면 취약함
---------------------------------------------------------------------
= FALSE
진단결과 양호
5.3.3. 세션 Idle timeout 설정
grep –I SQLNET.AUTHENTICATION_SERVICES
$ORACLE_HOME/network/admin/SQLNET.ORA
SYSDBA 계정으로 DBMS 접근 시도
$ > sqlplus '/as sysdba'
vi $ORACLE_HOME/network/admin/SQLNET.ORA
SQLNET.AUTHENTICATION_SERVICES=(NONE)
$sqlplus / as sysdba
다음과 같은 에러를 확인
ERROR:ORA‐01031: insufficient privileges
Enter user‐name:scott
Enter password:
성공적인 연결을 위해서 SYS 계정과 패스워드를 입력해야 함
5.3.5. OS 명령 수행 제한
5.3.7. Sample DB 사용
5.3.8. 외부 DB 와의 연동
5.4. 운영관리
5.4.1. Listener 감사 설정
설명 DBMS의 Listener Audit Trail Log가 설정되어 DBMS로 로그인하는 계정의 DBMS 리모
트 로그인 내역이 기록되고 있는지 점검한다
진단기준 양호 – DBMS 리모트 로그인 내역이 기록되고 있는 경우
취약 – DBMS 리모트 로그인 내역이 기록되고 있지 않은 경우
점검방법 Listener 감사 설정 확인
grep ‐i logging_listener listener.ora
진단결과 양호(상단방화벽에서 접근제어함)
조치방법 1. Oracle환경파일(Lintener.ora) 설정
Vi $ORACLE_HOME/network/admin/listener.ora
logging_listener=ON 으로 설정한다.
2. 솔루션을 이용한 변경 방안
DB접근통제 솔루션을 이용하여 DB에 접근하는 사용자의 접근ID, 시간, IP 등을 솔루션
에서 통제 경우 예외처리함.
5.4.4. 백업 및 복구 설정
5.5. 패치관리