Information Security/Hacking
Database 보안
Project_S
2021. 5. 28. 03:32
반응형
* 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 방식으로 앱 수정 최소화 |
2) 블록 암호화 방식 : DBMS 블록 또는 파일 블록 단위로 암호화하여 저장하는 방식
구분 | 특징 |
TDE (Transparent Data Encryption) - DBMS 자체 암호화 방식 |
* DBMS 자체 내장 암호화 기능을 이용, DB 내부에서 데이터 파일 저장 시, 암호화하며 저장된 내용을 메모리 영역으로 가져올 시, DBMS에 의해 자동으로 복호화 * DBMS 커널 수준에서 처리하여 기존 응용프로그램이나 DB 스키마의 수정/변경이 거의 필요하지 않으며, DBMS 엔진에 최적화된 성능 제공 가능 * DBMS 종류 및 버전에 따른 기능 지원 여부 결정 |
파일 암호화 방식 - 운영체제 암호화 방식 |
* OS에서 파일을 암호화하는 방식으로, 다양한 비정형 데이터(음성, 영상, 이미지 등)에 대한 암호화 적용 가능 * 거의 모든 DBMS에서 적용 가능하며, 기존 응용프로그램이나 DB 스키마의 수정/변경이 거의 필요하지 않으나, OS에 따른 지원 여부 차이(부하 발생)이 있을 수 있음 |
* 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=경로 부분에서 위치 확인이 가능하며, |
반응형