콘텐츠로 이동

13. Altibase의 보안#

이 장에서는 Altibase의 보안을 위해 사용 가능한 방법들과 보안 모듈 사용 방법에 대해 설명한다.

보안의 개요#

정보 보호의 중요성이 높아지고 개인 정보 등 민감하고 중요한 정보를 법령으로 제정하여 보호함에 따라 데이터베이스의 보안 관리 기능이 필수적으로 요구되고 있다.

데이터베이스의 보안은 의도하지 않은 내, 외부적 활동으로부터 데이터베이스를 보호하는 것을 목적으로 하며, Altibase에서는 사용자의 필요에 적합한 보안 모듈을 연동하여 데이터베이스를 효과적으로 보호할 수 있도록 보안 모듈 연동 기능을 제공한다.

이 장에서는 데이터 암호화를 위한 보안 모듈 연동 기능에 대해 설명한다.

Altibase의 보안 모듈 연동 기능은 기존 Altibase 시스템과의 독립적인 보안 모듈 구성과 응용 프로그램과의 완벽한 독립성을 바탕으로, 개인 정보 보호를 위한 강력한 암호화 관리를 지원한다. Altibase는 취약한 데이터베이스의 보안을 강화하기 위하여 신뢰할 수 있는 외부의 보안 모듈을 Altibase 시스템과 연동을 지원하며, 보안 모듈을 효과적으로 연동할 수 있는 인터페이스를 제공한다.

Altibase는 보안 모듈을 통한 데이터 암호화, 접근 제어 및 감사 기능을 위한 기반 구조를 데이터베이스 레벨에서 지원한다. 보안과 관련된 모든 작업은 Altibase 서버 내에서가 아니라 보안 모듈을 통해서 이루어진다.

암호화는 테이블의 칼럼을 대상으로 수행되며, 암호화가 적용된 칼럼의 데이터는 디스크뿐만 아니라 메모리 상에서도 암호화를 유지한다.

접근 제어 기능은 크게 보안 대상의 선정 과정과 보안 대상에 대한 접근 권한의 분류를 통해 객체에 대한 사용자의 접근 유효성을 판단하는 두 과정으로 나뉘어진다.

접근 제어의 대상은 테이블 내의 칼럼 단위로 설정되며, 보안이 설정된 칼럼에 대해 접근을 하기 위해서 각 사용자는 해당 객체에 대한 필요 접근 권한을 부여 받아야 한다.

보안 대상의 설정과 보안 대상의 접근, 암호화 작업에 대해서는 감사 기록이 남겨진다.

Altibase가 제공하는 보안 관련 기능은 다음과 같다.

  • 디스크 및 메모리의 데이터를 암호화하여 저장 관리
  • 보안 권한에 따른 출력 데이터의 복호화
  • 원래 데이터의 순서를 보장하는 인덱스 구성
  • 암호 칼럼을 가지는 테이블의 이중화 가능

보안 기능의 구성#

Altibase와 보안 모듈은 서로 독립적이다. 암호 키, 보안 정책과 보안 권한에 대한 정보는 보안 모듈에서 별도로 관리한다.

보안 모듈이 연동되어 있지 않더라도, Altibase는 정상적으로 동작한다. 단, 암호 칼럼에 대한 질의 처리시 보안 모듈이 연동되어 있지 않으면, 해당 질의는 실패하게 된다.

Altibase는 보안 모듈 관련 속성들의 설정과 SQL문 실행을 통해 보안 모듈을 연동한다. Altibase는 보안 모듈이 연동되는 과정에서 두 모듈 간의 연결의 유효성을 평가하여 해당 연결에 대한 신뢰성을 보장한다.

Altibase는 자신이 가진 보안 모듈에 대한 정보(모듈 이름, 버전, 암호 칼럼들의 정보)와 보안 모듈이 가진 정보를 비교하여 보안 모듈과의 연결을 평가한다.

Altibase에 연결하는 기존 응용프로그램을 수정할 필요 없이 데이터를 칼럼 단위로 암호화할 수 있다. 암호 칼럼의 생성 및 삭제는 SQL로 지원된다. 이 외의 기존 응용 프로그램에서 사용하는 질의를 변경할 필요는 없다.

보안 관련 Altibase 메인 모듈의 역할은 다음과 같다.

  • 데이터베이스 운영 중 보안 모듈 연동을 위한 환경변수 및 SQL 구문 지원
  • 암호화된 데이터를 관리하기 위한 자료구조 및 메타 정보 지원
  • 보안 관련 확장된 질의 구문 지원
  • 이중화 지원

외부 보안 모듈의 역할은 다음과 같다.

  • 암호화 알고리즘 설정 (암호화 알고리즘의 종류, 초기화 벡터 사용 여부 결정)
  • 칼럼의 암호화 정보 설정 (암호화 알고리즘 선택, 암호화 및 복호화 권한 설정)
  • 데이터의 암호화 및 복호화
  • 접근 제어 설정 (IP 접근 제어, 사용자 접근 제어)
  • 감사 (암호화 및 복호화 로그, 접근 제어 로그)

보안 모듈 연동 방법#

이 절에서는 보안 모듈을 연동하기 위해 필요한 절차들을 설명한다.

하나의 서버에는 하나의 보안 모듈만 연동될 수 있다. 보안 모듈을 연동하기 위해서는 보안 모듈의 이름, 보안 모듈의 위치 경로, 암호화된 데이터의 순서가 원본 데이터의 순서와 같음을 보장하는 ECC 알고리즘의 보안 정책 (Altibase의 ECC 알고리즘은 Order Preserving Encryption방식이다)을 설정한다. 그 다음에 보안 모듈의 연동을 시작한다.

여기서 ECC란 Encrypted Comparison Code의 약자로 암호화된 데이터의 순서가 원본 데이터의 순서와 같음을 보장하는 해시값이다. ECC로부터 원본으로의 변환이 불가능한 단방향 해시 알고리즘을 적용하여 ECC를 구성한다. ECC는 DBMS내부에서 암호 칼럼에 대한 빠른 비교연산을 위해 이용되며, 관리자 또는 사용자에 노출되지 않는다.

ECC 알고리즘은 ECC를 생성하기 위해 적용된 해시 알고리즘을 의미한다. 외부 보안 모듈로부터 다양한 ECC 알고리즘의 지원이 가능하며, 서버 단위로 하나의 ECC 알고리즘이 선택되어 적용된다.

보안 모듈을 Altibase에 연동하려면 다음의 과정을 수행한다.

  • 외부 보안 모듈 설치
  • Altibase 환경 설정
  • 보안 모듈 구동
  • 암호 칼럼 생성

이 과정 중 외부 보안 모듈 설치 방법은 보안 모듈의 종류에 따라 다르므로 사용할 외부 보안 모듈의 설치 문서를 참고한다. 여기에서는 그 다음 과정인 Altibase 환경 설정, 보안 모듈 구동 및 암호 칼럼 생성에 더하여 보안 모듈 종료와 암호 칼럼 해제에 대해서 설명한다.

Altibase 보안 환경 설정#

연동할 외부 보안 모듈의 경로를 Altibase 프로퍼티 파일인 $ALTIBASE_HOME/conf/altibase.properties에 다음과 같이 정의한다.

SECURITY_MODULE_NAME        = altibase 
SECURITY_MODULE_LIBRARY     = libsecurity.so
SECURITY_ECC_POLICY_NAME    = ecc_policy1

프로퍼티의 값은 대, 소문자를 구별하므로 이에 주의해야 한다. SECURITY_MODULE_NAME프로퍼티는 외부 보안 모듈의 식별자로 보안 보듈에 따라 달리 설정한다.

SECURITY_MODULE_LIBRARY는 설치된 외부 보안 모듈 라이브러리의 이름을 나타낸다. SECURITY_ECC_POLICY_NAME은 Altibase 내부에서 보안 정책을 구분하기 위한 이름으로 반드시 정의해야 한다.

이 프로퍼티들의 값은 ALTER SYSTEM 구문으로 운영 도중에 설정하거나 변경할 수 있다. ALTER SYSTEM 구문으로 변경할 경우, SECURITY_MODULE_LIBRARY에는 파일의 절대 경로를 지정해야 한다.

ALTER SYSTEM SET SECURITY_MODULE_NAME = 'altibase';
ALTER SYSTEM SET SECURITY_MODULE_LIBRARY = '/altibase_home/lib/libsecurity.so';
ALTER SYSTEM SET SECURITY_ECC_POLICY_NAME = 'ecc_policy1';

보안 모듈 구동과 데이터 암호화#

이 절에서는 보안 모듈 구동 및 데이터 암호화 방법에 대해 설명하고 관련 구문을 소개한다.

보안 모듈 구동#

보안 모듈 관련 프로퍼티가 모두 설정되었다면 보안 모듈을 구동할 수 있다. 보안 모듈을 구동하면 내부적으로 다음 기능들이 수행된다.

보안 모듈 인증#

상호 허용되지 않은 보안 모듈을 사용할 수 없도록 인증한다.

보안 모듈 초기화와 유효성 검사#

보안 모듈 자체의 설정 파일이나 라이센스를 검사한다.

ECC 보안 정책 검증#

보안 모듈에 프로퍼티로 설정된 ECC 보안 정책이 유효한지 검사한다.

ALTER SYSTEM START SECURITY 문으로 보안 모듈을 구동한다. 이 구문은 적절한 권한을 가진 관리자로 접속해서 실행해야 한다.

예제#

적절한 권한이 있는 관리자로 Altibase에 접속한다.

iSQL> CONNECT sys/manager

보안 모듈 관련 프로퍼티를 설정한다.

iSQL> ALTER SYSTEM SET SECURITY_MODULE_NAME = 'altibase';
iSQL> ALTER SYSTEM SET SECURITY_MODULE_LIBRARY = '/altibase_home/lib/libsecurity.so';
iSQL> ALTER SYSTEM SET SECURITY_ECC_POLICY_NAME = 'ecc_policy1';

보안 모듈을 구동한다.

iSQL> ALTER SYSTEM START SECURITY;

보안 모듈 구동 상태를 확인한다.

iSQL> SELECT * FROM SYSTEM_.SYS_SECURITY_;
MODULE_NAME  MODULE_VERSION  ECC_POLICY_NAME  ECC_POLICY_CODE  
--------------------------------------------------------------------
altibase     1.0             ecc_policy1      abcde12345

보안 모듈 종료#

보안 모듈 구동과 마찬가지로 보안 모듈을 종료하고자 할 때는 적절한 권한이 있는 관리자로 접속해야 한다. 그 다음에 다음 구문을 실행한다.

iSQL> ALTER SYSTEM STOP SECURITY;

다음과 같이 보안 모듈 연동 상태를 확인할 수 있다.

iSQL> SELECT * FROM SYSTEM_.SYS_SECURITY_;
MODULE_NAME  MODULE_VERSION  ECC_POLICY_NAME  ECC_POLICY_CODE  
--------------------------------------------------------------------
No rows selected.

Note: 보안 모듈의 종료는 암호화 칼럼이 존재하지 않는 경우에만 수행할 수 있다.

암호 칼럼 생성#

데이터를 보호해야 하는 중요한 칼럼의 경우, 칼럼을 암호화하여 데이터를 보호할 수 있다. CHAR, VARCHAR 두 가지 자료형에 대해 암호화를 지원한다.

CREATE TABLE 문으로 칼럼 생성시 암호 칼럼으로 지정하여 생성하거나, ALTER TABLE 문으로 이미 생성된 테이블의 칼럼을 암호 칼럼으로 변경할 수 있다. 두 경우 모두 사용할 보안 정책 이름(SECURITY_ECC_POLICY_NAME)을 암호화할 칼럼의 ENCRYPT USING 절에 지정한다.

칼럼의 암호화 여부는 DESC 구문을 통해 확인할 수 있다.

구문#

CREATE TABLE table_name (column_name datatype [ENCRYPT USING 'policy_name']);
주의사항#

암호화된 칼럼의 데이터 타입을 변경할 수 없다.

예제#

질의 1> 테이블 생성시에 empID1, ssn1칼럼을 암호 칼럼으로 지정한다.

CREATE TABLE t1 
(
    name1   VARCHAR(5), 
    empid1  VARCHAR(10)     ENCRYPT USING 'POLICY_ID',
    ssn1    CHAR(12)        ENCRYPT USING 'POLICY_SSN'
);

질의 2> 테이블에 암호 칼럼이 있는지 확인한다.

iSQL> DESC t1
----------------------------------------------------------------
NAME            TYPE                                    IS NULL
----------------------------------------------------------------
NAME1           VARCHAR(10)                 FIXED
EMPID1          VARCHAR(8)      ENCRYPT     FIXED
SSN             CHAR(12)        ENCRYPT     FIXED

암호 칼럼으로 변경#

일반 칼럼의 경우, ALTER TABLE 문을 사용하여 암호 칼럼으로 변경할 수 있다.

구문#

ALTER TABLE table_name MODIFY (column_name [ENCRYPT USING 'policy_name']); 
주의사항#
  • 암호 칼럼을 다시 암호화할 수 없다.
  • 암호화된 칼럼의 데이터 타입을 변경할 수 없다.

예제#

질의> 기존의 t1 테이블의 empID1 칼럼을 보안 정책 policy_ssn을 사용하여 암호 칼럼으로 변경한다.

ALTER TABLE t1 MODIFY (empID1 ENCRYPT USING 'policy_ssn');

암호 칼럼의 해제#

ALTER TABLE 구문을 사용하여 암호화된 칼럼을 일반 칼럼으로 변경할 수 있다.

구문#

ALTER TABLE table_name MODIFY (column_name [DECRYPT]); 

예제#

질의> t1 테이블의 empID1 칼럼의 암호화 설정을 해제한다.

ALTER TABLE t1 MODIFY (empID1 DECRYPT);