본문 바로가기

Information Security/Hacking

Database 보안

반응형

* Database 보안 위협

DB 보안 위협 내용
집성 (Aggregation) * 낮은 보안 등급의 정보들을 조합하여, 높은 보안 등급의 정보를 알아냄
추론 (Inference) * 보안등급이 없는 사용자가, 보안으로 분류되지 않은 정보를 정당하게 접근, 기밀 정보를 유추하는 행위

 

 

 

* DB 보안 통제

DB 보안 통제(제어) 내용
접근 통제 * 사용자의 접근 권한의 범위 내에서 DB 데이터 접근을 허용하는 기술적 방법


* DBA(DataBase Administrator)은 개별 사용자 또는 역할/그룹별 접근통제를 위해 아래의 사항 결정
- 접근 가능한 데이터

- 데이터의 접근 수준 (ex. 필드 또는 레코드 수준 접근 통제)

- 데이터에 허용할 작업(ex. 읽기/변경/삽입/추가 등)
추론 통제 * 추론(Inference)에 따른 보안 위협을 방지하는 것
- 허용 가능한 질의를 제한

- 질의의 응답으로 제공되는 데이터를 한정

- 데이터가 숫자인 경우, 반올림 하거나 일관성이 없는 질의 결과를 제공
흐름 통제 * 접근이 가능한 객체들 간, 정보 흐름을 조정
- 보안 등급이 높은 객체에서, 낮은 객체로의 정보 흐름을 제어해야 함


* 정보 흐름의 예로, A 테이블의 데이터가 B 테이블에 기록되었을 시, "A에서 B로 흐름이 발생했다" 라고 함

 

 

 

* DBMS 보안 통제

1) SQL문 분류

데이터 조작어 (DML)
Data Manipulation Language
* 사용자가 DBMS를 통해, 원하는 데이터를 조작(조회, 수정, 삽입, 삭제) 하는 구문
- SELECT / UPDATE / INSERT / DELETE
데이터 정의어 (DDL)
Data Definition Language
* DB 객체(테이블, 뷰, 인덱스 등)을 정의(생성)하거나 삭제/변경 하는 구문
- CREATE, DROP, ALTER
데이터 제어어 (DCL)
Data Control Language
* DB 관리 목적(보안, 무결성 등)으로 사용자에게 DB 객체에 대한 권한을 부여/제거
- GRANT, REVOKE
트랜잭션 제어어 (TCL)
Transaction Control Language
* 논리적 작업의 단위(트랜잭션)을 묶어서 DML에 의해 처리된 결과를 작업 단위별로 제어
- COMMIT, ROLLBACK

2) View 기반 접근 통제 : 하나 이상의 Base Table로 부터, 유도되어 만들어지는 가상의 테이블 (실제 존재하는 것이 아닌, 뷰에 대한 조작 요구시 마다, 기본 테이블의 데이터를 이용해 실행 시에 만들어짐)

- 기본 테이블의 접근을 차단하고, 기본 테이블에서 허용하는 일부 컬럼(필드)에 대해서만 뷰를 통해 제공하여 민감 데이터 은닉에 사용

- 단, 권한 없는 사용자에 대한 데이터 노출은 제한할 수 있으나, DML/DDL로 DB 객체에 수행하는 작업을 제한할 수는 없음


3) SQL문 기반 접근 통제 : DCL(GRANT/REVOKE)를 이용하여, DB 객체에 대한 작업 권한을 제한

사용 명령어 내용
GRANT * 사용자 권한 부여에 사용
- 형식 : GRANT 부여할 권한 ON 데이터베이스 객체(테이블 등) TO 사용자 [WITH GRANT OPTION]


* WITH GRANT OPTION : 사용자가 부여받은 권한을 다른 사용자에게 또 다시 부여하는 권한


* GRANT에서 할당 가능한 권한
- DB 객체 생성/변경/삭제 : CREATE, ALTER, DROP

- 테이블의 레코드 조회/입력/수정/삭제 : SELECT, INSERT, UPDATE, DELETE

- ALL : 모든 권한

- USAGE : 계정만 생성된 상태로 부여 권한 없음


* 부여된 권한 확인
- 형식 : SHOW GRANTS FOR 사용자
REVOKE * 사용자 권한 해제에 사용
- 형식 : REVOKE 해제할 권한 ON 데이터베이스 객체(테이블 등) FROM 사용자

 

 

 

* DB 암호화 기술

1) 컬럼 암호화 방식 : 테이블의 컬럼 단위로 데이터를 암호화하여 저장하는 방식

구분 특징 장점 단점
API 방식
(응용프로그램
자체 암호화)
* 암/복호화 모듈이 API 라이브러리 형태로 각 어플리케이션 서버에 설치되어 호출하여 사용
(즉, 응용프로그램 소스를 수정하여 암/복호화 수행)
* 암/복호화 속도가 빨라 대용량 트랜잭션 처리에 적합


* 암/복호화가 서버에서 수행되어 DBMS 부하가 적음


* 암호화 구간이 길다
* 어플리케이션 변경에 따른 개발 비용 발생


* 적용된 어플리케이션(미들웨어)의 패치에 영향을 받음
Plug-In 방식
(DB 서버
암호화 방식)
* 암/복호화 모듈이 DB 서버에 설치되어, 플러그인으로 연결된 암/복호화 모듈 호출하여 사용


* View가 암호화된 테이블에 저장된 데이터를 복호화하여 보여주는 통로 역할을 수행, DML로 데이터 변경 발생 시, 트리거를 통해 암호화하여 처리


* 기존 테이블/컬럼이 암호화되면 기존 테이블 이름과 동일한 View 생성 및 변경된 이름의 암호화 테이블이 생성되며, 기존 원본들은 삭제됨
* 어플리케이션(응용프로그램)의 변경을 최소화 * 대용량 처리 시, 암/복호화 처리에 따른 DB서버 부하가 큼 (민감성이 낮은 시스템에 적합)


* DBMS 패치 시 영향을 받음


* 암호화 구간이 짧음
Hybrid 방식 * API와 Plug-IN 방식을 혼합하여 사용 * 대용량 트랜잭션 처리에 API 방식 사용, 나머지 부분은 Plug-In 방식으로 앱 수정 최소화  

API 방식 암호화
Plug-In 방식 암호화
Hybrid 방식


2) 블록 암호화 방식 : DBMS 블록 또는 파일 블록 단위로 암호화하여 저장하는 방식

구분 특징
TDE (Transparent Data Encryption)
- DBMS 자체 암호화 방식
* DBMS 자체 내장 암호화 기능을 이용, DB 내부에서 데이터 파일 저장 시, 암호화하며 저장된 내용을 메모리 영역으로 가져올 시, DBMS에 의해 자동으로 복호화


* DBMS 커널 수준에서 처리하여 기존 응용프로그램이나 DB 스키마의 수정/변경이 거의 필요하지 않으며, DBMS 엔진에 최적화된 성능 제공 가능


* DBMS 종류 및 버전에 따른 기능 지원 여부 결정
파일 암호화 방식
- 운영체제 암호화 방식
* OS에서 파일을 암호화하는 방식으로, 다양한 비정형 데이터(음성, 영상, 이미지 등)에 대한 암호화 적용 가능


* 거의 모든 DBMS에서 적용 가능하며, 기존 응용프로그램이나 DB 스키마의 수정/변경이 거의 필요하지 않으나, OS에 따른 지원 여부 차이(부하 발생)이 있을 수 있음

TDE 방식 암호화
파일 암호화 방식

 

 

 

* DB(MySQL) 취약점 점검

1) MySQL 개요 : Oracle에서 관리/배포하는 오픈소스 RDBMS(관계형 데이터베이스 관리시스템)로 최초 설치 시, mysql이라는 DB를 생성하며 아래의 주요 기본 테이블을 생성

주요 기본 테이블 설명
user * 전체 DB에 적용되는 사용자 정보와 권한 정보 보유
host * 호스트 전체에 대한 DB 접근권한 정보 보유
db * 각각의 DB에 대한 접근권한 정보 보유
table_priv * 테이블에 대한 접근권한 정보 보유
columns_priv * 테이블의 컬럼에 대한 접근권한 정보 보유

2) mysql DBMS 취약점 점검

mysql DBMS 취약점 점검 내용(예시)
Default root(관리자) 패스워드 변경 * mysql 설치 시, 비어있는(NULL) DB 관리자(root) 패스워드 설정 필요
mysql > select host,user,password from user;



* 주요 계정의 패스워드가 비어있을 시, 변경 필요
mysql > update user set password=password('변경 패스워드') where user='root';
mysql > flush privileges;
- flush privileges의 경우, 사용자 정보 insert/update/delete 등을 즉각 반영


* Default 관리자 계정에 대해 추측하기 어려운 이름으로 변경 (BruteForce, Dictionary Attack등에 대한 대비)
mysql > update user set user='변경 이름' where user='root';
mysql > flush privileges;
mysql 설치 시, 자동 생성 계정 차단 * 기본 생성 계정에 대해서는 /etc/passwd 파일을 점검하여, mysql 계정의 로그인 쉘이 정상 쉘로 설정되어 있을 시, 로그인이 불가능한 쉘(/bin/false 또는 /sbin/nologin)로 변경
원격을 통한 mysql 서버 접속 차단 * mysql default 서비스 포트(3306/TCP)를 차단하여, 로컬에서만 접근 가능하도록 함


* 설정 파일(my.cnf)에서 [mysqld]항목에 skip-networking을 추가 후, 서비스 재기동을 하면 네트워킹 기능을 비활성화(서비스 포트 오픈하지 않음)


* local에서는 mysql.sock 이라는 Unix 도메인 소켓(파일타입:s)를 이용하여 통신하기 때문에 skip-networking에도 영향을 받지 않고 통신 가능
DB 사용자별 접속/권한 설정 * user table의 host 컬럼은 해당 사용자의 DB 접근이 가능한 호스트를 지정하는 컬럼이며, 아래 방식으로 구분 됨
mysql > select host,user,password from user where user="조회할 계정명';


- localhost : 로컬 호스트에서 접근 가능
- % : (와일드 카드 문자) 모든 이름을 의미(로컬 호스트를 제외한 모든 원격 호스트)
- 특정 IP : 특정 IP에서만 원격 호스트 접근 가능
- IP.IP.IP.% : 특정 IP 대역의 원격 호스트 접근 가능


* DB 테이블 조작에 대한 권한 설정 (특히 File, Process, Shutdown 권한 등)이 필요하며, Y는 허용으로 N 불허 표시로 변경이 필요
> select host,user,password,file_priv,process_priv,shutdown_priv from user where user='조회할 계정명"


- Select_priv, Insert_Priv, Update_priv, Delete_priv : select/insert/update/delete 문 수행에 대한 권한
- Create_priv, Drop_priv : create/drop 문 수행에 대한 권한
- File_priv : select into outfile 출력파일명 또는 load data infile 입력파일명 등의 파일 데이터를 읽고 쓸 수 있는 권한
- Process_priv : mysql 서버의 프로세스/스레드 정보에 대한 읽기/중지 권한 (show processlist 명령을 통해 실행중인 쿼리 모니터링 등으로 패스워드 갈취 가능)
- shutdown_priv : mysqladmin shutdown 명령을 이용, mysql을 종료시킬 수 있는 권한
mysql 버전 확인 및 보안패치 적용 * mysql -V 또는 mysql --version 명령어를 통해 취약한 버전은 보안패치 필요
mysql 데이터 디렉터리 보호 * mysql은 테이블의 데이터 및 로그를 '파일'형태로 관리하며, 데이터 디렉터리에 저장하여 이 디렉터리의 권한 설정이 중요


* 설정 파일(my.cnf)의 [mysqld] 항목에서 datadir=경로 부분에서 위치 확인이 가능하며, 
반응형