Versions Compared

Key

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

Table of Contents
maxLevel3

 

 

 

개요

...

DB 취약점 진단 항목 별 점검 방법에 대한 가이드입니다.
진단 항목은 고객의 문의 항목을 기준으로 작성하였습니다.

 

 

 

계정 관리

...

 

계정의 목록화(비인가자의 접근 차단을 위한 사용자 계정 관리)

...

Code Block
languagesql
-- 사용자 삭제
DROP USER user_name ;

-- 사용자와 사용자가 생성한 모든 객체 삭제
DROP USER user_name CASCADE;

 

 

취약한 패스워드 사용 (기본 계정 및 패스워드 변경)

...

Info

SYS 사용자 패스워드 변경 방법은 'sys 유저 패스워드 변경 방법' 페이지를 참고하세요.

 

 

 

권한 관리

...

 

DBA 권한 관리(System Privilege 권한 제한)

...

Code Block
titleSYSTEM 권한 제거
languagesql
REVODE '시스템 권한' FROM 사용자;

-- 수행 예
REVOKE CREATE TABLE FROM USER1;

 

 

WITH GRANT OPTION 사용

...

WITH GRANT OPTION은 객체 접근 권한을 부여 받은 사용자가 해당 권한을 다른 사용자에게 부여할 수 있으므로 객체 접근 권한을 DBA 관리 없이 남용할 수 있습니다.

...

Code Block
titleWITH GRANT OPTION 제거 후 WITH GRANT OPTION 없이 권한 부여
languagesql
-- user6 사용자가 employees 테이블의 SELECT, DELETE 권한을 다른 사용자에게 부여할 수 있는 권한을 가지고 있는 경우
REVOKE SELECT, DELETE ON employees FROM user6;
GRANT SELECT, DELETE ON employees TO user6;

 

 

 

환경 파일 점검

...

 

altibase.properties 파일 접근 권한 설정

...

Code Block
title파일 권한 설정 예
languagebash
$ ls -l $ALTIBASE_HOME/conf/altibase.properties
-rw-r--r-- 1 heejung.lee heejung.lee 27652 2014-09-26 12:52 /data/heejung.lee/63119/conf/altibase.properties

$ find $ALTIBASE_HOME -name altibase.properties -exec chmod 600 {} \;

$ ls -l $ALTIBASE_HOME/conf/altibase.properties
-rw------- 1 heejung.lee heejung.lee 27652 2014-09-26 12:52 /data/heejung.lee/63119/conf/altibase.properties

 

Log Anchor, Logfile, Datafile 접근 권한 설정

...

Code Block
title권한 설정 예
languagebash
$ ls -l $ALTIBASE_HOME/logs/loganchor*
-rw-r----- 1 heejung.lee heejung.lee 14156 2014-09-26 12:53 /data/heejung.lee/63119/logs/loganchor0
-rw-r----- 1 heejung.lee heejung.lee 14156 2014-09-26 12:53 /data/heejung.lee/63119/logs/loganchor1
-rw-r----- 1 heejung.lee heejung.lee 14156 2014-09-26 12:53 /data/heejung.lee/63119/logs/loganchor2


$ find $ALTIBASE_HOME --name loganchor* -exec chmod 600 {} \;

$ ls -l $ALTIBASE_HOME/logs/loganchor*
-rw------- 1 heejung.lee heejung.lee 14156 2014-09-26 12:53 /data/heejung.lee/63119/logs/loganchor0
-rw------- 1 heejung.lee heejung.lee 14156 2014-09-26 12:53 /data/heejung.lee/63119/logs/loganchor1
-rw------- 1 heejung.lee heejung.lee 14156 2014-09-26 12:53 /data/heejung.lee/63119/logs/loganchor2

 

 

iSQL 명령 쉘 히스토리 검사

...

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

...

Code Block
languagebash
$ chmod 600 ~/.sh_history

 

 

 

DBMS 보안 설정

...

 

Public Synonym 사용

...

점검 방법

Code Block
titlePublic Synonym확인
languagesql
SELECT OBJECT_OWNER_NAME, SYNONYM_NAME FROM SYSTEM_.SYS_SYNONYMS_ WHERE OBJECT_OWNER_NAME = 'SYSTEM_';

...

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

 

 

로그인 실패 횟수에 따른 잠금시간 등 계정 잠금 정책 설정

...

Code Block
titleALTER USER 수행 시
languagesql
ALTER USER USER1 LIMIT (FAILED_LOGIN_ATTEMPTS 3, PASSWORD_LOCK_TIME 3);

 

 

패스워드 복잡도 설정

...

적용 버전

  • 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

...

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;
isPunction    boolean;
digitArray    varchar(20);
punctionArray varchar(25);
charArray     varchar(52);

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

    -- 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>>
    isPunction := FALSE;
    FOR i IN 1...length(punctionArray) LOOP
    FOR j IN 1...pwdLength LOOP
    IF substr(password,j,1) = substr(punctionArray,i,1) THEN
        isPunction := TRUE;
        GOTO endsearch;
    END IF;
    END LOOP;
    END LOOP;
    IF isPunction = 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

...

Code Block
titleALTER USER 수행 시
languagesql
ALTER USER USER1 LIMIT (PASSWORD_LIFE_TIME 7);

 

 

ALTIBASE HDB 서비스 포트 기본값 변경

...

$ALTIBASE_HOME/conf/altibase.properties 에서 PORT_NO 의 값을 변경 후 알티베이스 서버 프로세스를 재시작

 

 

세션 IDLE_TIMEOUT 설정

...

IDLE_TIMEOUT 은 세션 별로 설정 변경이 가능하여 접속 시 ALTIBASE HDB 서버 프로퍼티의 영향을 받더라도 세션에서 변경할 수 있습니다.

...

  • 알티베이스 서버 프로세스 재시작 시에도 변경 값을 반영하려면 $ALTIBASE_HOME/conf/altibase.properties 에서 IDLE_TIMEOUT 프로퍼티의 값을 변경해야 합니다.

 

 

기본적인 감사(사용자 문장, 권한, 객체 등) 설정

...

감사 설정이 안되어 있는 경우 Administrator's Manual 의 '14. 데이터베이스 감사 (Database Auditing)' 부분과 SQL Reference 매뉴얼의 '5. 데이터 제어' 부분을 참고하여 설정하세요.
매뉴얼 다운로드 페이지 : http://support.altibase.com/kr/manual

 

 

원격에서 DB 서버로의 접속 제한

...

이 기능은 ALTIBASE HDB 5 부터 제공합니다.

...

  • 알티베이스 서버 프로세스 재시작 시에도 변경 값을 반영하려면 $ALTIBASE_HOME/conf/altibase.properties 에서 REMOTE_SYSDBA_ENABLE 프로퍼티의 값을 변경해야 합니다.

 

 

 

보안 패치

...

 

최신 패치 적용

...

ALTIBASE HDB 최신 버전은 고객지원서비스포털 에서 확인할 수 있습니다. 

...

  • 메이저 버전 릴리즈 시
  • 크리티컬한 버그가 반영된 경우