정보보안기사

[정보보안기사(실기)] SECTION 11 데이터베이스 보안

tnvori 2026. 6. 10. 23:01

이 부분 참고해서 조만간 점검 한 번 해봐도 좋을 거 같다

260517 이승윤 "밖" 콘서트. 조명이 없어서 그런지 사진이 아쉽다

1. 데이터베이스 보안 위협과 통제

  1. 데이터베이스 보안 위협
    • 집성
      • 낮은 보안 등급의 정보 조각을 조합하여 높은 보안 등급의 정보를 알아내는 것
      • 개별 데이터 항목보다 종합 정보의 보안 등급이 높은 경우 기밀 정보 유출 발생
    • 추론
      • 일반 사용자가 분류되지 않은 정보를 정당하게 접근하여 기밀 정보를 유추해내는 행위
      • 정보로부터 개개의 개체에 대한 정보를 추적하지 못하도록 해야 함
  2. 데이터베이스 보안 통제
    • 접근 통제
      • 사용자가 가진 접근 권한의 범위 내에서 데이터 접근을 허용하는 기술적인 방법
      • 관리자는 접는 통제를 위해 개별 사용자 또는 그룹별로 사항 결정 — 접근 가능한 데이터, 데이터의 접근 수준, 데이터에 허용할 작업
    • 추론 통제
      • 간접적으로 노출된 데이터를 통해 민감/기밀 데이터가 유추되어 공개되는 것 방지하는 것
      • 일반적인 추론 방지 방법
        • 허용 가능한 질의 제한
        • 질의의 응답으로 제공되는 데이터 한정
        • 데이터가 숫자인 경우 반올림하거나 일관성 없는 질의 결과 제공
    • 흐름 통제 — 접근이 가능한 객체 간의 정보의 흐름을 조정하는 것

2. DBMS 보안 통제

  1. SQL문 분류
    • DML문 — 데이터 조작어
      • DBMS를 통해 원하는 데이터를 조작하는 데 사용하는 SQL문
      • SELECT, UPDATE, INSERT, DELETE
    • DDL문 — 데이터 정의어
      • 데이터베이스 객체를 정의하거나 삭제 또는 변경하기 위해 사용하는 SQL문
      • CREATE, DROP, ALTER
    • DCL문 — 데이터 제어어
      • 데이터베이스 관리 목적으로 사용자에게 데이터베이스 객체에 대한 권한을 부여하거나 제거할 때 사용하는 SQL문
      • GRANT, REVOKE
    • TCL문 — 트랜잭션 제어어
      • 논리적인 작업의 단위를 묶어서 DML에 의해 처리된 결과를 작업 단위로 제어하는 명령어
      • COMMIT, ROLLBACK
  2. 뷰 기반 접근 통제
    1. 개요
        • 하나 이상의 기본 테이블로부터 유도되어 만들어지는 가상의 테이블
        • 뷰의 내용은 실제로 존재하는 것이 아니라 뷰에 대한 조작 요구 시마다 기본 테이블의 데이터를 이용하여 만들어짐
        • 기본 테이블에 직접 접근하는 것을 차단하고 기본 테이블에서 허용하는 일부 컬럼에 대해서만 뷰를 통해 제공함으로써 권한 없는 사용자로부터 민감 데이터 은닉
    2. 뷰를 통한 접근 통제 예(MySQL 기준) — create view
  3. SQL 기반의 접근 통제(GRANT/REVOKE 기법)
    1. 개요 — DCL문을 이용하여 데이터베이스 객체에 대한 작업 권한 제한
    2. GRANT 문을 이용한 사용자 권한 부여(MySQL 기준)
      • 권한 종류(MySQL 기준)
        • CREATE, ALTER, DROP — 데이터베이스 객체 생성, 변경, 삭제 권한
        • SELECT, INSERT, UPDATE, DELETE — 테이블 레코드 조회, 입력, 수정, 삭제 권한
        • ALL
        • USAGE — 계정만 생성된 상태. 부여된 권한 없음
    3. REVOKE문을 이용한 사용자 권한 해제(MySQL 기준)

3. 데이터베이스 암호화 기술

  1. 개요
    • 컬럼 암호화 방식 — 테이블의 컬럼 단위로 데이터를 암호화하여 저장하는 방식
      • API 방식
      • Plug-In 방식
      • Hybrid 방식
    • 블록 암호화 방식 — DBMS 블록 또는 파일 블록 단위로 암호화하여 저장하는 방식
      • TDE 방식
      • 파일 암호화 방식
  2. 컬럼 암호화 방식
    1. API 방식 — 응용 프로그램 자체 암호화 방식
      • 암복호화 모듈이 API 라이브러리 형태로 각 애플리케이션 서버에 설치되어 응용 프로그램에서 해당 모듈을 호출하는 방식
      • 애플리케이션 서버와 DB 서버 간의 통신에서 암호화된 데이터 전송을 보장할 수 있음
      • DB 서버에 영향을 주지 않아 DB 서버 성능 저하가 적은 편이지만 구축 시 응용 프로그램 전체 또는 일부의 수정이 필요함
      • 차세대 개발 등 기존 애플리케이션에 대한 전면적인 수정이 가능한 경우 적용 시 효과적
    2. Plug-In 방식 — DB 서버 암호화 방식
      • 암복호화 모듈이 DB 서버에 설치되고 DB 서버에서 플러그인으로 연결된 암복호화 모듈을 호출하는 방식
      • 구축 시 응용 프로그램의 수정을 최소화할 수 있으나 기존 DB 스키마와 대응하는 뷰를 생성하고 암호화할 테이블을 추가하는 등의 작업 필요
      • DB서버에서 암복호화 모듈을 플러그인으로 호출할 때 추가적인 부하가 발생하여 성능 저하 가능
      • 트랜잭션 처리량이 많지 않아 성능에 대한 민감성이 낮은 시스템에 적합
    3. Hybrid 방식 — API 방식과 Plug-In 방식 혼용 — 대용량 트랜잭션 처리와 같이 Plug-In 방식을 사용하면 성능 저하가 발생할 수 있는 부분은 API 방식을 사용하여 성능을 보장하고, 나머지 부분들은 Plug-In 방식을 사용하여 애플리케이션 수정 최소화
  3. 블록 암호화 방식
    1. TDE 방식 — DBMS 자체 암호화 방식
      • DBMS에 내장된 암호화 기능을 이용하여 DB 내부에서 데이터 파일 저장 시 암호화하고 파일에 저장된 내용을 메모리 영역으로 가져올 때 DBMS에 의해 자동으로 복호화
      • DBMS 커널 수준에서 처리되므로 기존 응용 프로그램의 수정이나 DB 스키마의 변경이 거의 필요하지 않고 DBMS 엔진에 최적화된 성능 제공 가능
      • DBMS 종류 및 버전에 따라 기능 지원 여부 결정
    2. 파일 암호화 방식
      • OS에서 파일을 암호화하는 방식
      • 다양한 비정형 데이터에 대한 암호화 적용 가능
      • 응용 프로그램이나 DB 스키마의 수정 불필요
      • 파일 전체를 암호화하는 데 DB 서버에 추가적인 부하 발생 가능
      • OS에 따라 지원 여부 다름

4. 데이터베이스(MySQL) 취약점 점검

  1. 개요
    • 기본 테이블
      • user 테이블
      • host 테이블 — 호스트 전체에 대한 데이터베이스 접근 권한 정보
      • db 테이블 — 각각의 데이터베이스에 대한 접근 권한 정보
      • table_priv 테이블 — 테이블에 대한 접근 권한 정보
      • columns_priv — 테이블의 컬럼에 대한 접근 권한 정보
  2. mysql DBMS 취약점 점검
    1. root 패스워드 및 계정명 변경
    2. mysql 설치 시 서버에 자동으로 생성되는 mysql 계정의 로그인 차단
    3. 원격에서 mysql 서버로의 접근 차단
    4. 데이터베이스의 사용자별 접속/권한 설정 확인
      • user 테이블에 있는 host 칼럼 — 해당 사용자가 데이터베이스에 접근할 수 있는 호스트를 지정하는 컬럼
      • Select_priv, Insert_priv, Update_priv, Delete_priv
      • Create_priv, Drop_priv
      • File_priv — select into outfile과 load data infile과 같은 명령을 이용하여 파일에 데이터를 읽고 쓸 수 있는 권한
      • Process_priv
        • mysql 서버 프로세스/스레드 정보를 보거나 중지시킬 수 있는 권한
        • 해당 사용자가 show processlist 명령 실행을 통해 실행 중인 질의를 모니터링할 수 있게 되어 비밀번호와 같은 중요 정보 노출 위험
        • Shutdown_priv — mysqladmin shutdown 명령을 이용하여 mysql 서버를 종료시킬 수 있는 권한
    5. mysql 버전 확인 및 보안 패치 적용 여부 점검
    6. mysql 데이터 디렉터리 보호 여부 점검 — /var/lib/mysql 디렉터리의 접근 권한을 750으로 설정하여 mysql 계정 및 그룹 사용자에 대해서만 적절히 접근할 수 있도록 설정