Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel3

 

 

 

개요

...

DB 보안 점검 및 조치 방법에 대한 가이드입니다.

...

ALTIBASE HDB 설치 시 생성되는 사용자 디폴트 패스워드는 아래와 같습니다.

USER

PASSWORD

SYSsys

MANAGERmanager

 

데이터베이스에 접속하여 디폴트 패스워드 사용 여부를 확인합니다.

Code Block
languagesql
iSQL> CONNECT SYSsys/MANAGERmanager;
Connect success.

조치 방법

디폴트 패스워드로 접속이 가능하다면 어플리케이션과의 연관성 확인 후 해당 사용자의 패스워드를 변경합니다.

Code Block
title패스워드 변경 예
languagesql
iSQL> ALTER USER user1sys IDENTIFIED BY password1234$;
Alter success.
 
$ALTIBASE_HOME/conf 디렉토리 밑에 altipasswd 실행 후 패스워드 변경

...

Code Block
title파일 권한 설정 예
languagebash
$ chmod 600 $ALTIBASE_HOME/conf/altibase.properties

 

Log Anchor,

...

Log File,

...

Data File 접근 권한 설정

...

ALTIBASE HDB 데이터베이스 운용에 중요 파일인 하나인 Log Anchor, LogfileLog File, Datafile Data File 파일을 악의적인 의도로 변경하면 데이터베이스 장애가 발생할 수 있습니다.

...

logs, dbs 디렉토리 권한 설정을 700 또는 750 으로 한다.

Log Anchor, LogfileLog File, Datafile Data File 파일 권한 설정을 600 또는 640 으로 설정한다.

...

6.5.1 버전 이상부터 트레이스 로그파일에 대해서 TRC_ACCESS_PERMISSION 프로퍼티로 권한 설정이 가능합니다. 설정 후 DB 재 기동이 필요합니다. 

Code Block
title파일 권한 설정 예
languagebash
$> vi $ALTIBASE_HOME/conf/altibase.properties  
         TRC_ACCESS_PERMISSION = 640    # 속성 추가          
$> server restart
Code Block
title주의 사항
languagebash
만약 데이터베이스에 접속하는 사용자 중에 다른 그룹에 속한 사용자가 IPC 방식으로 접속할 계획이 있는 경우,

...


altibase_ipc.log

...

 파일의 권한 설정을 변경할  주의가 필요합니다. 
권한을 잘못 설정하면 해당 사용자가 IPC로 데이터베이스에 연결하지 못하는 문제가 발생할  있습니다.

 

iSQL 명령 쉘 히스토리 검사

...

iSQL을 사용하여 데이터베이스에 접속 할 때 계정 및 패스워드를 함께 입력하면 쉘 히스토리 파일에 기록이 남기 때문에 패스워드가 유출될 수 있습니다.

...

Code Block
title쉘 히스토리 파일에서 isql 수행 기록 확인
languagebash
$ isql -u sys -p manager -s 127.0.0.1 -port 31109          # 이와 같이 접속하면 사용자 이름과 패스워드가 노출될 수 있습니다.

# 아래와 같이 iSQL 명령만 수행 한 후 계정 및 패스워드를 개별 입력하도록 합니다.

$ isql
…
Write Server Name (default:127.0.0.1) :
Write UserID : sys
Write Password :
ISQL_CONNECTION = TCP, SERVER = 127.0.0.1, PORT_NO = 20300
iSQL>

쉘 히스토리 파일 보호를 위하여 접근 권한을 권한이 설정되어 있지 않다면 600으로 설정합니다.

Code Block
languagebash
$ ls -al ~/*.*history
$ chmod 600 ~/.*history

 

 

 

DBMS 보안 설정

...

PUBLIC SYNONYM은 데이터베이스 사용 편의를 위해 자동으로 생성되는 객체입니다.
이들은 DUAL 테이블 조회, PRINT 또는 PRINTLN 같은 프로시저 내에서 널리 사용되므로 삭제를 권장하지 않습니다.
하지만 부득이하게 삭제해야 할 경우, 운영자 및 개발자와 충분히 협의한 후 아래 DROP 하시기 바랍니다.

Code Block
titlePUBLIC SYNONYM 제거
languagesql
DROP PUBLIC SYNONYM synonym_name;

...

이러한 상황에서는 PUBLIC이 아닌 PRIVATE SYNONYM을 생성하시면 됩니다.

PRIVATE SYNONYM 을 생성하기 위해서는 해당 계정으로 로그인한 후 PRIVATE SYNONYM을 생성할 수 있습니다로그인 후 synonym 을 생성하면 됩니다.

Code Block
titlePRIVATE SYNONYM 생성
languagesql
connect user_id/user_passwd;
CREATE SYNONYM PRINT FOR synonym_name;
 
 
-- 아래 세 개의 SYNONYM은 sys 계정만 실행 가능합니다.
CREATE SYNONYM SET_SYSTEM_STATS FOR SYSTEM_.SET_SYSTEM_STATS;
CREATE SYNONYM GATHER_SYSTEM_STATS FOR SYSTEM_.GATHER_SYSTEM_STATS;
CREATE SYNONYM GATHER_DATABASE_STATS FOR SYSTEM_.GATHER_DATABASE_STATS;

...

  • ALTIBASE HDB 4.3.9.211 부터
  • ALTIBASE HDB 5.3.3.89 부터
  • ALTIBASE HDB 5.5.1.5.1 부터
  • ALTIBASE HDB 6.1.1.2.1 부터
  • ALTIBASE HDB 6.3.1
  • ALTIBASE HDB 6.5.1
  • ALTIBASE HDB 7.1
  • ALTIBASE HDB 7.3
  • 이상 모든 버전

점검 방법

Code Block
title데이터베이스 사용자에게 해당 설정이 되어 있는 지 확인
languagesql
-- SELECT USER_NAME, 
       FAILED_LOGIN_ATTEMPTS,    -- 접속 실패 수가 설정 값을 초과하는 경우 해당 사용자의 패스워드가 잠김.
--        PASSWORD_LOCK_TIME        -- 패스워드 잠금 기간(일)을 의미. -- 0인 경우 설정되어 있지 않음을 의미.
SELECT USER_NAME, FAILED_LOGIN_ATTEMPTS, PASSWORD_LOCK_TIME FROM SYSTEM_.SYS_USERS_;

조치 방법

...

title관련 프로퍼티 설정

...

$ALTIBASE_HOME/conf/altibase.properties

...

에서

...

FAILED_LOGIN_ATTEMPTS,

...

PASSWORD_LOCK_TIME

...

프로퍼티

...

추가

...

...

ALTIBASE

...

HDB

...

서버를

...

...

시작

...

합니다.

...

...

프로퍼티

...

설정

...

...

데이터베이스

...

사용자를

...

생성하면

...

...

값을

...

기준으로

...

패스워드

...

잠김이

...

설정됩니다.

...

Code Block
title프로퍼티 설정 확인
SELECT NAME, VALUE1 FROM V$PROPERTY WHERE NAME IN ('FAILED_LOGIN_ATTEMPTS', 'PASSWORD_LOCK_TIME');

...

  • ALTIBASE HDB 4.3.9.211 부터
  • ALTIBASE HDB 5.3.3.89 부터
  • ALTIBASE HDB 5.5.1.5.1 부터
  • ALTIBASE HDB 6.1.1.2.1 부터
  • ALTIBASE HDB 6.3.1
  • ALTIBASE HDB 6.5.1
  • ALTIBASE HDB 7.1
  • ALTIBASE HDB 7.3
  • 1 이상 모든 버전

점검 방법

Code Block
title유저 별 PASSWORD_VERIFY_FUNCTION 가 설정되어 있는 지 확인합니다.
languagesql
SELECT USER_NAME, 
       PASSWORD_VERIFY_FUNCTION FROM SYSTEM_.SYS_USERS_;         -- PASSWORD_VERIFY_FUNCTION 컬럼이 패스워드 복잡도 설정을 의미하며
                                                                            -- NULL 인 경우 설정되어 있지 않음을 의미합니다.

...

Code Block
titleALTER USER 수행 시
languagesql
ALTER USER 사용자명 LIMIT (PASSWORD_VERIFY_FUNCTION 사용자 콜백함수);

-- 수행 예
ALTER USER user1 LIMIT (PASSWORD_VERIFY_FUNCTION pwd_verify_function);
Code Block
title콜백함수 생성 예시
languagesql
CREATE OR REPLACE FUNCTION pwd_verify_function
( username varchar(20),
  password varchar(20))
RETURN varchar(100)
AS
result        varchar(100);
pwdLength     integer;
isDigit       boolean;
isChar        boolean;
isPunctuation    boolean;
digitArray    varchar(20);
punctuationArray varchar(25);
charArray     varchar(52);

BEGIN
    digitArray    := '0123456789';
    charArray     := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    punctuationArray :='!"#$%&()``*+,-/:;<=>?_';

    -- Check if the password is same as the username
    IF LOWER(password) = LOWER(username) THEN
        result := 'Password same as or similar to user';
        RETURN result;
    END IF;

    -- Check for the minimum length of the password
    IF LENGTH(password) < 4 THEN
        result := 'Password length less than 4';
        RETURN result;
    END IF;

    -- Check if the password is too simple.
    IF LOWER(password) IN ('welcome', 'database', 'account', 'user', 'password', 'altibase', 'computer', 'abcd') THEN
        result := 'Password too simple';
        RETURN result;
    END IF;

    -- Check if the password contains at least one letter, one digit and one
    -- punctuation mark.
    -- 1. Check for the digit
    isDigit := FALSE;
    pwdLength := length(password);
    FOR i IN 1...10 LOOP
    FOR j IN 1...pwdLength LOOP
    IF substr(password,j,1) = substr(digitArray,i,1) THEN
        isDigit := TRUE;
        GOTO findchar;
    END IF;
    END LOOP;
    END LOOP;
    IF isDigit = FALSE THEN
        result := 'Password should contain at least one digit, one character and one punctuation';
        RETURN result;
    END IF;

    -- 2. Check for the character
    <<findchar>>
    isChar := FALSE;
    FOR i IN 1...length(charArray) LOOP
    FOR j IN 1...pwdLength LOOP
    IF substr(password,j,1) = substr(charArray,i,1) THEN
        isChar := TRUE;
        --GOTO findpunct;
    END IF;
    END LOOP;
    END LOOP;
    IF isChar = FALSE THEN
        result := 'Password should contain at least one digit, one character and one punctuation';
        RETURN result;
    END IF;

    -- 3. Check for the punctuation
    <<findpunct>>
    isPunctuation := FALSE;
    FOR i IN 1...length(punctuationArray) LOOP
    FOR j IN 1...pwdLength LOOP
    IF substr(password,j,1) = substr(punctuationArray,i,1) THEN
        isPunctuation := TRUE;
        GOTO endsearch;
    END IF;
    END LOOP;
    END LOOP;
    IF isPunctuation = FALSE THEN
        result := 'Password should contain at least one digit, one character and one punctuation';
        RETURN result;
    END IF;

    <<endsearch>>

    result := 'TRUE';
    RETURN result;
END;
/

...

  • ALTIBASE HDB 4.3.9.211
  • ALTIBASE HDB 5.3.3.89
  • ALTIBASE HDB 5.5.1.5.1
  • ALTIBASE HDB 6.1.1.2.1
  • ALTIBASE HDB 6.3.1
  • ALTIBASE HDB 6.5.1
  • ALTIBASE HDB 7.1
  • ALTIBASE HDB 7.3
  • 이상 모든 버전

점검 방법

Code Block
title유저 별 PASSWORD_LIFE_TIME가 설정되어 있는 지 확인합니다.
languagesql
--select PASSWORD_LIFE_TIME 과 PASSWORD_GRACE_TIME 의 user_name, 
       PASSWORD_LIFE_TIME,   -- 값은 일 단위이며단위, 00인 경우 설정되어미설정 있지상태
않음을 의미합니다. select user_name, PASSWORD_LIFE_TIME,    PASSWORD_GRACE_TIME   -- 값은 일 단위, 0인 경우 미설정 상태
from system_.sys_users_;

조치 방법 아래 명령어로 PASSWORD_LIFE_TIME 프로퍼티를 확인하여 값이 0 이라면 패스워드의 만료일이 설정되어 있지 않음을 의미합니다.

...

보안 패치

...

보안 패치 적용

...

Altibase 보안 패치는 고객지원서비스포털Altibase Performance Solutions(패치노트) 에서 확인할 수 있습니다. 

  • 보안관련 버그를 포함한 주요한 버그가 반영된 경우에 고객지원서비스포털에 신규 패치를 업로드 합니다.

...