문서유형ㅣ기술 정보
분야ㅣ보안
적용제품버전ㅣTibero6, Tibero7
문서번호ㅣTSETI021
개요
| 분류 | 점검 항목 | 중요도 | 코드 |
|---|---|---|---|
| 접근 관리 | 원격에서 DB 서버로의 접속 제한 | 상 | D-05 |
| DBA 이외의 인가되지 않은 사용자 시스템 테이블에 접근할 수 없도록 설정 | 상 | D-06 | |
| 오라클 데이터베이스의 경우 리스너의 패스워드를 설정하여 사용 | 상 | D-07 | |
| 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거하고 사용하고 있는가? | 중 | D-14 | |
| 일정 횟수의 로그인 실패 시 이에 대한 잠금 정책이 설정되어 있는가? | 중 | D-15 | |
| 데이터베이스의 주요 파일 보호 등을 위해 DB 계정의 umask를 022 이상으로 설정하여 있는가? | 하 | D-16 | |
| 데이터베이스의 주요 설정파일,패스워드 파일 등과 같은 주요 파일들의 접근 권한 설정되어 있는가? | 중 | D-17 | |
| 관리자 이외의 사용자가 오라클 리스너의 접속을 통해 리스너 로그 및 trace 파일에 대한 변경이 가능하지 않는가? | 하 | D-18 |
본 문서에서는 접근 관리 - 일정 횟수의 로그인 실패 시 이에 대한 잠금 정책이 설정 되어 있는가? (D-15) 항목에 대한 보안 취약점 조치 방안에 대해 기술하였습니다.
점검 목적
- DBMS 설정 중 일정 횟수의 로그인 실패 시 계정 잠금 정책에 대한 설정이 되어 있는지 점검합니다.
- 일정 횟수의 로그인 실패 시 계정 잠금 정책을 설정하여 비인가 자의 자동화된 무작위 대입 공격, 사전 대입 공격 등을 통한 사용자 계정 패스워드 유출을 방지할 수 있습니다.
점검 기준
| 기준 | 내용 |
|---|---|
| 양호 | 로그인 시도 횟수를 제한하는 값을 설정한 경우 |
| 취약 | 로그인 시도 횟수를 제한하는 값을 설정하지 않은 경우 |
주의 사항
- 데이터베이스의 DBA 권한이 있는 계정으로 진행 하셔야 합니다.
- 데이터베이스 계정에 로그인 시도 횟수를 제한하는 경우 해당 계정으로 접속 시 비밀번호를 제한 횟수 만큼 틀린 경우 계정이 잠기는 현상이 발생할 수 있습니다.
TBR-17006: Account is locked.,JDBC-17006:Account is locked. - 계정이 잠기기 전의 세션 연결을 유지하고 있다면 문제 없지만, 새로운 세션을 연결하는 경우 접속이 제한됩니다.
- 반드시 해당 보안 취약점을 조치 하기 전에 애플리케이션의 데이터베이스 접속 정보를 검토하셔야 합니다.
방법
반드시 주의 사항 검토가 진행 된 후 진행하시길 바랍니다.
확인
- 다음 SQL을 통해 로그인 횟수 제한에 필요한 계정들에 대해 확인 합니다.
- UNLIMITED에 해당한다면, 로그인 횟수 제한이 적용되어 있지 않은 상태입니다.
-- tbssql 사용 시 포맷
set linesize 300
col username for a30
col profile for a30
col resource_name for a30
col limit for a30
-- 로그인 횟수 제한이 없는 계정 정보 확인 SQL
select
du.username,
du.profile,
dp.resource_name,
dp.limit
from
dba_users du, dba_profiles dp
where
du.profile = dp.profile
and dp.resource_name='FAILED_LOGIN_ATTEMPTS'
and dp.limit = 'UNLIMITED'
-- du.username not in 조건에 해당하는 계정은 데이터베이스 시스템 계정
and du.username not in ('SYS','SYSCAT','SYSGIS','OUTLN','PUBLIC','SYSBACKUP','WMSYS','LBACSYS')
order by
dp.limit, du.profile, du.username;
ex) UNLIMITED에 해당 된다면, 로그인 횟수 제한이 적용되지 않은 계정
USERNAME PROFILE RESOURCE_NAME LIMIT
--------------- ------------------------------ ------------------------------ ------------------------------
test1 DEFAULT FAILED_LOGIN_ATTEMPTS UNLIMITED
test2 DEFAULT FAILED_LOGIN_ATTEMPTS UNLIMITED
test3 DEFAULT FAILED_LOGIN_ATTEMPTS UNLIMITED
조치
반드시 주의 사항 검토가 진행 된 후 진행하시길 바랍니다.
PROFILE 생성
- DEFAULT 프로파일은 원복을 위해 별도로 수정하지 않고, 새롭게 작성하여 사용 합니다.
- 단, 기존에 사용 중인 프로파일에
FAILED_LOGIN_ATTEMPTS매개 변수만 추가할 수도 있습니다.
새롭게 프로파일을 생성하는 경우
create profile {profile name} limit FAILED_LOGIN_ATTEMPTS {제한횟수};
ex) create profile pf_security limit FAILED_LOGIN_ATTEMPTS 10;
기존 프로파일에
FAILED_LOGIN_ATTEMPTS매개변수 추가하는 방법
- 이 방법으로 적용 시 PROFILE 적용 부분은 넘어가도 됩니다.
alter profile {profile name} limit
FAILED_LOGIN_ATTEMPTS 10;
ex) alter profile modify_profile limit
FAILED_LOGIN_ATTEMPTS 10;
PROFILE 적용
- 새롭게 작성된 프로파일을 아래와 같이 적용할 수 있습니다.
- 적용하는 순간 새롭게 연결되는 세션에 대해 제한이 적용됩니다.
alter user {user name} profile {profile name};
ex) alter user user_security profile pf_security;
로그인 횟수 확인
- 프로파일 적용 이후 일정 기간 동안 계정에 비밀번호 틀린 횟수를 점검 합니다.
login_fail_count가 적용된FAILED_LOGIN_ATTEMPTS도달하면 계정이 잠기기 때문에 아래 SQL을 사용하여 점검할 수 있습니다.
-- tbssql 사용 시 포맷
set linesize 300
col username for a30
col login_fail_count for 99
col status for a20
-- 로그인 실패 횟수 확인 SQL
select
ddu.name username,
ddu.lcount login_fail_count,
du.account_status status
from
_dd_user ddu, dba_users du
where
-- du.username not in 조건에 해당하는 계정은 데이터베이스 시스템 계정
du.username not in ('SYS','SYSCAT','SYSGIS','OUTLN','PUBLIC','SYSBACKUP','WMSYS','LBACSYS')
and ddu.name = du.username
/* 특정 계정만 조회
* and du.username = '{user name}'
*/
order by
ddu.lcount;
ex) LOCKED가 발생하면, 새로운 세션 연결의 경우 오류 발생
USERNAME LOG STATUS
------------------------------ --- --------------------
TEST1 0 OPEN
TEST2 0 OPEN
TEST3 0 OPEN
USER_SECURITY 5 LOCKED(TIMED)
- 로그인 시도 시 비밀번호가 틀린 경우
sys.log파일을 통해 메시지를 확인할 수 있습니다. - 두 가지 로그 중
-17006에러에 해당하는 로그를 통해 어떠한 계정으로 접속을 시도했는지 확인할 수 있습니다.THROW. ec=ERROR_SECU_LOGIN_FAILED(-17001) [ Login failed: invalid user name or password.]ERROR_SECU_ACCOUNT_LOCKED(-17006) during a user authentication process. client ip:127.0.0.1, port:52542, prog_name:tbsql, user_name:USER_SECURITY, osuser_name:root, terminal:
원복
프로파일 적용 이후 계정이 잠기거나, 프로파일을 원복해야하는 경우 사용할 수 있습니다.
PROFILE 원복
- 프로파일을 원복하는 방법입니다.
- 새롭게 만든 프로파일을 적용한 경우 기존의 프로파일로 변경하시면 됩니다.
- 또한 기존에 사용하던 프로파일에
FAILED_LOGIN_ATTEMPTS매개변수를 추가한 경우에도 해당 합니다.
새롭게 프로파일을 생성한 경우의 원복
alter user {user name} profile default;
ex) alter user user_security profile default;기존 프로파일에
FAILED_LOGIN_ATTEMPTS매개변수를 추가하여, 사용한 경우의 원복
alter profile {profile name} limit
FAILED_LOGIN_ATTEMPTS unlimited;
ex) alter profile modify_profile limit
FAILED_LOGIN_ATTEMPTS unlimited;
USER 잠금 해제
- 계정이 잠기게 되면 애플리케이션에서 다음과 같은 에러를 확인할 수 있습니다.
TBR-17006: Account is locked.,JDBC-17006:Account is locked. - 계정이 잠긴 경우 아래의 SQL을 사용하여 잠금 해제를 수행 합니다.
alter user {user name} account unlock;
ex) alter user user_security account unlock;