03.애플리케이션 보안 - 02.데이터베이스 보안

데이터베이스(Database) 개요

1. 데이터베이스(Database) 개요

  • 데이터베이스(Database)
    • 목적을 위해 각종 데이터를 일정한 규칙으로 저장하여 관리하는 것
    • 여러 사람들이 공동으로 사용, 데이터를 공유
    • SQL (Structured Query Language) : 데이터베이스에서 사용하는 표준 언어
      • 데이터 정의어 : 테이블 생성, 수정, 삭제
      • 데이터 조작어 : 조회, 삽입, 수정, 삭제
      • 데이터 제어어 : 사용자 생성, 권한 부여
  • 데이터베이스 기능

    요소 대응책
    지속성(Persistence) 영속성, 데이터베이스 재사용(Database reuse)
    데이터 공유(Data Sahring) ⦁ 동시 사용
    ⦁ 시뮬레이션 데이터베이스 유지(Simultaneous database use
    회복(Recovery) 원래 상태로 데이터베이스 복구(Restore database to original state
    데이터베이스 언어
    (DataBase Language)
    SQL, 질의처리 및 쿼리(Manipulate and query)
    보안&무결성
    (Security & Integrity)
    데이터베이스 쿼리 및 지속(Database query and consistency)
  • 데이터베이스 관리 시스템(DBMS, Database Management System)
    • 데이터베이스 생성,관리,응용하기 위해 구성된 소프트웨어 모임
  • 데이터베이스 관리 시스템 기능
    • 데이터의 형태, 구조, 효율적인 데이터베이스의 저장에 관한 내용 정의, 빠른 검색
    • 다양한 응용 프로그램과 데이터베이스가 서로 인터페이스 할 수 있는 방법 제공
    • 구현된 하나의 물리적 구조의 데이터베이스
  • 데이터베이스 관리 시스템 구성요소

    구성요소 내용
    DDL 컴파일러 DDL로 명세한 스키마를 내부 형태로 처리하여 시스템 카탈로그에 저장
    질의어 처리 터미널을 통해 일반 사용자가 요청한 고급 질의어를 처리
    예비 컴파일러 응용 프로그래머가 호스트 프로그래밍 언어로 작성한 응용 프로그램 속에 삽입시킨 DML 명령어를 추출
    데이터 조작어 컴파일러 데이터 조작어 명령어를 목적코드로 변환
    런타임 데이터베이스 처리기 실행 시간에 데이터베이스 접근을 취급
    트랜잭션 관리자 무결성 제약조건 만족 여부, 접근 권한 검사, 병행 제어, 장애 발생 시 회복 작업
    저장 데이터 관리자 디스크에 있는 데이터베이스 접근 제어, 기본 OS 모듈 이용, 로깅, 데이터 회복 등에 필요한 모듈을 호출

2. 데이터베이스 모델(Database Model)

  • 데이터베이스 모델(Database Model)
    • 데이터 구조를 논리적으로 표현해, 데이터, 데이터 관계, 데이터 의미 및 데이터 제약 조건을 기술하기 위한 개념적 도구들의 집단
      • 계층형
      • 관계형
      • 네트워크형
  • 개체관계 모델(ERD, Entity Relationship Diagram)
    • 현실 세계의 데이터를 컴퓨터 세계의 물리적인 데이터베이스로 변경하는 중간 과정(현실 세계의 추상화)
    • 데이터의 구조를 개념적으로 표현
    • 관리대상이 되는 정보 추출, 정보간 관계를 시각화
    • 구성 요소
      • 개체(Entity) : 관리할 대상
      • 관계(Relation) : Entity 간의 관계
      • 속성(Attribute) : Entity의 특성이나 속성

MySQL 데이터베이스

  • MySQL 데이터베이스 연결
    • mysql -u root -p
    • lsof -p 3615 | grep LISTEN
    • netstat -auntp | grep mysql
  • MySQL 사용자 생성
    • show databases;
    • use mysql;
    • show tables;
    • desc user;
    • select user, password from user;
    • create user "scott" identified by "1234";
    • drop user scott;
  • grant 와 revoke
    • grant select, insert on users to scott;
    • grant all privileges on test.* to scott;
    • show grants;
    • grant all privileges on test.* to scott with grant option;
    • revoke all on test to scott;
  • MySQL 설정 파일
    • /etc/mysql/my.cnf
      • bind-address = 127.0.0.1 : 시스템 내부에서만 접속 가능
  • MS-SQL xp_cmdshell 취약점 : 윈도우 명령 Shell을 생성, 실행 가능
    • EXEC xp_cmdshell 'ping www.abc.com'; : 운영체제 명령 실행

Oracle 데이터베이스

  • SQL*plus : 데이터베이스 연결
  • 기본 사용자
    • system : 데이터베이스 관리
    • sys : 데이터베이스 관리
    • scott : 테스트 용도
  • 절차
    • sqlplus
    • create user scott2 identified by 1234;
    • select username, password from dba_users : Data Dictionary 중 DBA_USERS
    • desc dba_users;
    • grant dba to scott2; : scott2 에게 dba 롤 부여
    • connect scott2/1234

데이터베이스 보안

1. 데이터베이스 보안(Database Security)

  • 각종 내,외부적 위협에서 데이터베이스의 기밀성, 무결성, 가용성 확보 활동
  • 인가되지 않은 접근, 의도적인 데이터 변경/파괴 및 일관성을 저해하는 사고로부터 보호

2. 데이터베이스 보안 위협요소

위협요소 설명
집합성(Aggregation) ⦁ 낮은 보안 등급의 정보들을 이용하여 높은 등급의 정보를 알아내는 것
⦁ 개별정보는 의미가 부족하나 합치면 중요 정보를 알 수 있음
⦁ 파트별 영업실적을 조회하여 회사의 전체 영업실적을 알아냄
추론(Inference) ⦁ 보안 등급이 없는 일반 사용자가 보안으로 분류되지 않은 정보에 정당하게 접근하여 기밀 정보를 유추해 내는 행위
⦁ 로우 데이터(Raw data)로부터 민감한 데이터를 유출하는 행위
⦁ 파티션(Partition), 셀 은닉(Cell suppression) 등을 방지
⦁ 파티션 내 보안대책을 암호화하여 정당하지 않은 사용자의 접근을 방지
⦁ 보안대책 : 다중인스턴스화(Polyinstantiation)
  • 다중 인스턴스화(Polyinstantiation) : 추론으로부터 정보 유출을 막기 위한 기술, 변수를 값 또는 다른 변수와 함께 있게 함으로써 상호 작용을 하도록 하는 프로세스

3. 데이터베이스 보안 요구사항

보안 요구사항 주요 내용
무결성 보장 ⦁ 처리 중 운영적 무결성 보장
⦁ 처리된 데이터의 의미적 무결성 보장
추론 방지 ⦁ 일반 정보에서 기밀정보를 추측하고 도출하는 추론 방지
⦁ 통계적 집계 정보에서 각 객체에 추론 방지
사용자 제한 ⦁ 인가된 사용자만이 접근 가능
⦁ 보다 엄격한 사용자 인증 기준 마련
감사 기능 ⦁ 모든 접근 기록(Write, Read)을 저장함
⦁ 접근 단계별 log trail 축적
암호화 주요 데이터의 암호화

데이터베이스 보안 솔루션

1. DB 암호화 솔루션

  • 개념
    • 민감 데이터가 입력되면 암호화키를 사용해서 암호화를 수행
    • 조회하는 경우 암호화키로 복호화를 시킨 후에 확인
    • 주민등록번호는 반드시 암호화를 수행하며 이 때 솔루션 사용
    • 패스워드의 경우 암호화 솔루션보다 SHA-256 이상 해시함수를 의무적으로 사용 (일방향 암호화)
  • 장점
    • 허가받지 않은 사용자가 불법적인 데이터를 취득해도 볼 수 없음
  • 단점
    • 운영 서버에 부하가 발생
    • DB 단위의 접근 제어가 안 됨
    • SQL 문장에 대한 로깅이 안 됨
  • 방식
    • Plug In 방식
      • 데이터베이스 서버에 별도의 암호화 솔루션을 설치
      • 애플리케이션이 데이터 조작어(insert, update, select 등)를 실행하면 암호화하거나 복호화
    • API 방식
      • 애플리케이션에서 암호화 API를 호출하여 암호화를 수행
      • 암호화가 필요한 애플리케이션을 모두 수정해야 함
  • 특징
    • 기업의 중요 데이터를 암호화하여 저장하는 솔루션
    • 두 가지 형태의 암호화를 제공
      • 특정 테이블에 데이터를 저장하면 암호화 솔루션이 해당 테이블 혹은 컬럼을 암호화
      • 데이터베이스 암호화 솔루션이 제공하는 API를 호출하면 암호문을 제공하여 암호화를 수행
    • 가장 큰 이슈는 데이터를 암복호화할 때 얼마나 빠른 성능을 제공하는지의 여부
    • DB에 저장되어 있는 패스워드는 무조건 암호화를 수행해야 하며 암호화 방식도 복호화가 될 수 없는 일방향 암호화를 수행

2. 데이터베이스 감사 솔루션

  • 개념
    • 데이터베이스의 모든 접근에 대해서 로그를 기록하여 추적성을 확보
    • SQL 실행 시 그 로그를 모두 기록, 관리
  • 장점
    • 스니핑 서버가 죽어도 업무에 지장이 없음
    • 운영서버에 부담이 없음
  • 단점
    • Packet Loss가 있음
    • 접근 제어가 안 됨
  • 방식
    • 스니퍼 소프트웨어 활용
      • Packet Loss가 발생
    • T-Sensor 라는 별도의 하드웨어를 활용, 네트워크 선로를 연결
      • 해당 네트워크 선로로 유입되는 패킷(Packet)을 하드웨어에 복제
      • 실제 기업에서 많이 사용하는 방식
      • Log 기록에 따른 성능저하를 최소화

3. 데이터베이스 접근 제어 솔루션

  • 개념
    • 권한이 없는 사용자가 데이터베이스 접근을 시도할 때 이를 차단
    • 사용자 ID와 PW 를 발급받고 해당 사용자 컴퓨터의 IP 주소를 등록해서 접근 제어를 수행
  • 장점
    • 다중 인스턴스에 대해 통제 가능한 독립된 서버
    • DB 단위의 접근 제어
    • 데이터베이스 접근에 대한 통제와 로그를 가장 완벽하게 관리
  • 단점
    • 독립된 서버이기 때문에 이중화 구성 필요
    • Telnet을 통하여 접근하는 SQL 명령에 대해서는 통제가 어려움
    • 우회해서 접근할 수 있으므로 보안 허점이 발생
    • 기업에서 잘 사용하지 않는 방식
      • 접근 제어 솔루션을 통해서만 DB 접근 가능 - 성능 저하

4. 데이터베이스 암호화 및 접근 통제

구분 내용
사용자 인증(Authentication) ⦁ 암호나 개인 신분 번호를 확인
⦁ 그 사용자만 가지고 있는 물건 제시 : 카드, 배지, 키 등
⦁ 사용자의 신체적 특징을 이용하는 방법 : 지문, 홍채 등
⦁ 사용자만이 알고 있는 함수(Function)를 이용하는 방법
권한 부여(Authorization) ⦁ 인증 과정을 거친 사용자를 대상으로 사용자가 해당 데이터 항목에 대한 연산을 수행할 권한이 있는지 확인하는 과정
⦁ 사전에 사용자/데이터 항목별 권한 부여 테이블을 유지
암호화(Encryption) 데이터의 내용을 암호화함으로써 불법적으로 데이터 취득 시 해독이 불가능하도록 하기 위함

데이터베이스 백업

  • 백업 방법

    백업 방법 월요일 화요일 수요일 목요일 금요일 토요일 일요일
    전체 백업 전체 백업 전체 백업 전체 백업 전체 백업 전체 백업 전체 백업 전체 백업
    증분 백업 전체 백업 인사 급여 복지 주문 계좌 고객
    차등 백업 전체 백업 인사 인사,급여 인사,급여,복지 인사,급여,복지,주문 인사,급여,복지,주문,계좌 인사,급여,복지,주문,계좌,고객
    • 전체 백업 (Full Backup)
      • 데이터베이스 전체를 백업받는 것
      • 가장 단순한 형태, 간단한 방법
      • 매일 전체 백업을 받으면 시간과 공간이 많이 필요
    • 차등 백업 (Differental Backup)
      • 가장 최근 전체 백업을 받은 후 이후에 변경된 모든 것을 백업
    • 증분 백업 (Incremental Backup)
      • 마지막 백업 이후 변경된 것만 백업
      • 저장 매체의 효율적 이용
      • 복구 시 많은 매체가 필요
  • mysqldump를 통한 MySQL 백업

    • mysqldump -u root -p 1234 test > test.sql : SQL문을 Text 형태로 백업
    • mysqldump -u root -p 1234 test < test.sql : 데이터 복구

댓글남기기