콘텐츠로 이동

D-03: 비밀번호 사용 기간 및 복잡도를 기관의 정책에 맞도록 설정

분류: DBMS

중요도: 상


개요

점검 내용

기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용되어 있는지 점검

점검 목적

비밀번호 사용 기간 및 복잡도 설정 유무를 점검하여 비인가자의 비밀번호 추측 공격(무차별 대입 공격, 사전 대입 공격 등)에 대한 대비가 되어있는지 확인하기 위함

보안 위협

비밀번호 사용 기간 및 복잡도 설정이 되어있지 않으면 비인가자가 비밀번호 추측 공격을 통해 획득한 계정의 비밀번호를 이용하여 DB에 접근할 수 있는 위험이 존재함

참고

용어 설명

  • 무차별 대입 공격(Brute Force Attack): 특정 암호를 해독하기 위해 가능한 모든 값을 대입하는 공격 방법
  • 사전 대입 공격(Dictionary Attack): 사전에 있는 단어를 입력하여 비밀번호를 알아내거나 암호를 해독하는데 사용되는 컴퓨터 공격 방법

점검 대상 및 판단 기준

대상

Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL 등

판단 기준

✅ 양호: 기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용된 경우

❌ 취약: 기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용되지 않은 경우

조치 방법

기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 정책 설정

조치 시 영향

주기적인 비밀번호 변경 필요

점검 및 조치 사례

Oracle DB

Step 1) PASSWORD_LIFE_TIME Profile 파라미터 변경

SQL> ALTER PROFILE <프로파일명> LIMIT PASSWORD_LIFE_TIME xx;

Step 2) Profile 값과 관련된 사용자 변경

SQL> ALTER PROFILE <계정명> PROFILE <변경할 프로파일명>;

Step 3) 비밀번호 정책 설정 변경

SQL> ALTER PROFILE <프로파일명> LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LIFE_TIME 30
PASSWORD_REUSE_TIME 30
PASSWORD_VERIFY_FUNCTION verify_function
PASSWORD_GRACE_TIME 5;
  • 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일 동안 메시지를 보여줌)

MSSQL

Step 1) 비밀번호 변경 주기는 '암호 만료 강제 적용'을 적용함으로써 주기적으로 변경할 수 있으며, 변경 기간은 OS의 '암호 정책'에서 적용받으므로 '암호 정책 > 최대 암호 사용 기간' 설정도 변경해야 함

Step 2) 암호 만료 강제 적용

보안 > 로그인 > 각 로그인 계정 > 속성 > “암호 만료 강제 적용” 설정

암호 만료 강제 적용 설정

Step 3) OS 암호 정책 설정

[관리 도구] > [로컬 보안 정책] > [보안 설정] > [계정 정책] > [암호 정책] > 최대 암호 사용 기간 : '60일' 설정

최대 암호 사용 기간 설정

MySQL

[비밀번호 복잡도 정책 설정]

Step 1) 비밀번호 정책 확인

mysql> SHOW VARIABLES LIKE 'validate_password%';

참고

component_validate_password가 설치되어 있지 않은 경우 아래와 같이 해당 컴포넌트 설치

mysql> INSTALL COMPONENT 'file://component_validate_password';

Step 2) 비밀번호 정책 설정

다음과 같은 방법으로 각각의 비밀번호 정책을 설정

SET GLOBAL validate_password.policy = 'MEDIUM'; -- 비밀번호 정책의 강도 LOW/MEDIUM/STRONG
SET GLOBAL validate_password.length = 8; -- 비밀번호 최소 길이
SET GLOBAL validate_password.mixed_case_count = 1; -- 포함되어야 하는 영문 대소문자 최소 개수
SET GLOBAL validate_password.number_count = 1; -- 포함되어야 하는 숫자 최소 개수
SET GLOBAL validate_password.special_char_count = 1; -- 포함되어야 하는 특수문자 최소 개수

참고

  • Linux계열(/etc/my.cnf 또는 /etc/mysql/my.cnf), Windows(C:\ProgramData\MySQL\MySQL Server <설치된 버전>\my.ini)의 <mysqld> 섹션에 설정을 추가하여 정책 설정 가능
  • 비밀번호 신규 적용 및 초기화 시 설정 규칙에 맞추어 관리하고, 저장 시에는 일방향 암호화 알고리즘을 통해 암호화 처리(One-Way Encryption)함

[비밀번호 LifeTime 정책 적용]

Step 1) 비밀번호 정책 확인

mysql> SHOW VARIABLES LIKE 'default_password_lifetime';

Step 2) 비밀번호 LifeTime 설정

mysql> SET GLOBAL default_password_lifetime=90;

기본 값

  • 5.7.11 이전 버전 : 0
  • 5.7.11 이후 버전 및 8.0 이후 버전 : 360

Step 3) 정책 적용전에 생성된 계정의 LifeTime 변경

mysql> ALTER USER <계정명>'@'<호스트명 or IP>' PASSWORD EXPIRE INTERVAL 91 DAY;

Altibase

Step 1) 다음 명령어를 통해 비밀번호 정책 설정 여부 확인

SELECT * FROM system_.sys_users_;

Step 2) 아래 Property에 대해 비밀번호 정책 설정

  • CASE_SENSITIVE_PASSWORD = 1
  • FAILED_LOGIN_ATTEMPTS
  • PASSWORD_LOCK_TIME
  • PASSWORD_LIFE_TIME
  • PASSWORD_GRACE_TIME
  • PASSWORD_REUSE_TIME
  • PASSWORD_REUSE_MAX
  • PASSWORD_VERIFY_FUNCTION

정책 적용 시 다음 명령어를 사용

ALTER USER 계정명 LIMIT (Property 숫자);
-- 예시)
ALTER USER TESTUSER LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7);

Tibero

Step 1) 사용자별 비밀번호 PROFILE 적용 여부 확인

비밀번호 설정 규칙에 맞추어 비밀번호를 설정할 수 있도록 시스템 차원에서 기능 제공

SELECT * FROM dba_users;

사용자별 비밀번호 PROFILE 적용 여부 확인

Step 2) 설정되어 있을 경우 PROFILE 설정 내용 확인

SELECT * FROM dba_profiles;

PROFILE 설정 내용 확인

Step 3) 설정되어 있지 않을 경우 PROFILE 생성 또는 수정 시(ALTER PROFILE) 비밀번호 정책 설정 적용 시

다음 명령어를 사용

CREATE PROFILE prof LIMIT
-- 예시)
CREATE PROFILE prof LIMIT
failed_login_attempts 3
password_lock_time 1/1440
password_life_time 90
password_reuse_time unlimited
password_reuse_max 10
password_grace_time 10
password_verify_function verify_function;