데이터베이스

Digital Forensic Wikipedia
(DB에서 넘어옴)
둘러보기로 가기 검색하러 가기

정의 및 설명

데이터베이스는 통합하여 관리되는 데이터 집합을 말한다. 자료의 형식을 만들고 중복된 사항을 제거하여 효율적인 데이터 관리가 이루어질 수 있게 한다. 오늘날 기업의 비즈니스 환경이 모두 전산화 되고, 모든 업무 활동은 데이터베이스나 ERP 시스템을 통해 관리한다. 포렌식 관점에 있어서 해당 조사 기관의 모든 업무에 대한 정보를 획득할 수 있으며, 삭제된 레코드의 복구 기술에 대한 연구가 진행 중이다. 데이터베이스는 모든 이벤트를 트랜잭션(Transaction) 단위로 실행하며, 모든 트랜잭션에 대하여 로그파일에 기록된다. 데이터베이스 파일과 로그파일을 이용하여 데이터베이스 포렌식 조사가 가능하다.

데이터베이스 모델

데이터베이스 모델(database model)은 데이터베이스 관리 시스템(Data Base Management System)이 지원하는 공식 언어로 기술된 데이터베이스의 자료 구조나 형식을 말한다. 데이터베이스 모델의 발전은 아래와 같이 제시되었다.

  • 1세대 파일 시스템 (File system)
  • 2세대 계층형 모델 (Hierarchical model)
  • 3세대 네트워크형 모델 (Network model)
  • 4세대 관계형 모델 (Relational model)
  • 5세대 비관계형 모델 (Non relational model)

현재 관계형 데이터베이스가 주로 사용되고 있으며, 차세대 데이터베이스 모델인 비관계형 데이터베이스가 등장하였다.

관계형 데이터 모델

관계형 모델(relational model)은 프레디커트 로직과 집합 이론에 기반을 둔 일종의 데이터베이스 모델이다. 이 모델은 에드거 커드( Edgar Codd)에 의해 최초로 제안되고 체계화되었다. 그는 당시 데이터베이스 질의를 표현하거나 무결성 원칙을 실시하기 위한 컴퓨터 프로그램을 작성할 필요를 완전성의 손실 없이 제거하고자 하는 목적도 가지고 있었다.

DB-Engines[1] 참고

DBMS 개발자 라이센스 기술문서 구현 언어
Oracle Oracle 유료 링크 C and C++
MySQL Oracle 무료 링크 C and C++
PostgreSQL PostgreSQL Global Development Group 무료 링크 C
DB2 IBM 유료 링크 C and C++
SQLite Dwayne Richard Hipp 무료 링크 C
Sybase SAP 유료 링크 C and C++
Teradata Teradata 유료 링크 -
FileMaker FileMaker 유료 링크 -
Informix IBM 유료 링크 C and C++
Hiv Apache Software Foundation 무료 링크 JAVA
MariaDB Monty Program AB 무료 링크 C and C++

비관계형 데이터 모델

1998년 Carlo Strozzi가 언급한 데이터 모델이다. 2009년 Eric Evans와 Rackspace Company가 NoSQL이라는 용어를 사용하였으다. 관계형 데이터 모델과 달리 특정 스키마가 정해져 있지 않으며 기존 SQL 문법을 대체하기 위해 별도의 Query문이 존재한다. 데이터 모델에 따라 크게 Key-Value, Document, Column, Graph Store로 구분된다.

구분 DBMS 개발자 기술문서 구현 언어
Key-Value Redis Salvatore Sanfilippo 링크 C
Memcached Danga interactive 링크 C
Riak Basho Technologies 링크 Erlang
DynamoDB Amazon 링크 -
Document MongoDB MongoDB, Inc 링크 C++
CouchDB Apache Software Foundation 링크 Erlang
Couchbase Couchbase, Inc. 링크 C, C++ and Erlang
RavenDB Hibernating Rhinos 링크 .Net
Graph Neo4j Neo Technology 링크 JAVA
OrientDB Orient Technologies LTD 링크 JAVA
Titan Aurelius 링크 JAVA
Column Cassandra Apache Software Foundation 링크 JAVA
HBase Apache Software Foundation 링크 JAVA
Hypertable Hypertable Inc. 링크 C++

기술 현황

데이터베이스 내부 구조 분석

일반적으로 관계형 데이터베이스(RDBMS)에서는 MS-SQL, MySQL, Oracle, SQLite등이 많이 쓰이고 있으며 비관계형 데이터베이스(NoSQL)에서는 MongoDB, HBase, Voldemort 등이 주로 많이 쓰인다. 관계형 데이터베이스 MS-SQL의 컨설팅을 담당하는 Klaus Aschenbrenner[2] 는 MS-SQL의 내부 구조에 대하여 분석하였고 블로그 등을 통해 웹으로 공개하고 있다. 이 밖에 다른 관계형 데이터베이스인 MySQL은 홈페이지를 통하여 DB의 MyISAM [3] 타입과 InnoDB [4] 타입의 내부 구조에 대하여 공개하였다. David Litchfield는 Oracle DB [5] 의 내부 구조를 분석하였고 전상준 외 4명은 내부 구조와 삭제된 레코드의 복구 기법에 관하여 제안하였다. 비관계형 데이터베이스 Mongo DB [6] 는 홈페이지를 통하여 내부의 파일 형식에 대하여 소개하고 있으며 Mongo DB가 자체적으로 제공하는 도구를 통하여 DB의 덤프 및 추출이 가능하다. Apache [7] 는 홈페이지를 통하여 HBase의 내부의 파일 포맷과 DB의 주요 기능을 소개하고 있다. Project Voldemort [8] 는 Voldermort DB의 내부 구조와 DB를 이루고 있는 JSON에 대하여 설명하였다. 각 데이터베이스의 구조를 파악한다는 것은 DB 파일 내부의 실제 데이터가 존재하는 위치로 바로 접근할 수 있음을 의미하며 접근을 통하여 각 DB의 데이터의 추출이 가능하다.

개체-관계 다이어그램(ERD) 추출

일반적으로 데이터베이스는 구조화된 데이터를 저장하고 관리하기 위하여 사용된다. 데이터베이스를 통하여 저장된 데이터들은 다양한 기법을 통하여 구조적인 설계가 가능하다. 개체-관계 모델링(ERM)은 이러한 기법들 중 하나로 각각의 개체들의 관계를 구성한다. ERM을 통하여 산출된 결과는 개체-관계 다이어그램(ERD)이라 일컫는다. 이와 같이 각각의 데이터베이스의 데이터는 ERM을 통하여 개체-관계 다이어그램을 구성하는 것이 가능하며 구성된 다이어그램을 통해 각 개체간의 관계를 시각적으로 분석하는데 용이하다. 따라서 데이터베이스로부터 이러한 개체-관계 다이어그램을 추출하는 것은 포렌식 관점에서 의미가 있다. 최근에는 상용 또는 무료로 개체-관계 다이어그램을 생성해 주는 다양한 도구들이 있으며 각 도구들의 특징을 활용하여 편리한 분석이 가능하다.

구분 도구명 특징
상용 마이크로디자이너 IE 및 IDEF1X 표기법을 따르는 모델링 도구 제공
eXERD ERD 툴, 논리, 물리, 논리와 물리 통합 모델링 지원
CA ERwin Data Modeler ERD 툴, HTML 리포트를 생성하는 기능
ConceptDraw ER 다이어그램을 만들기 위한 크로스 플랫폼
DB Visual ARCHITECT UML 클래스 다이어그램과 ERD 지원
MS Visio 마이크로 소프트의 ERD 지원 소프트웨어
ModelRight 물리 모델링 도구
OmniGraffle Mac OS용 다이어그램 작성 소프트웨어
무료 DBDesigner-Fork DBDesigner의 변종으로 다양한 기능 제공
다이어 ERD, 다양한 다이어그램 작성 도구
페렛 데비안, 우분투와 같이 배포되는 ERM 도구
MySQL WorkBench 그래픽하게 스키마와 리버스 엔지니어링 스키마들을 작성
Toad for Oracle ERD 툴, DB의 종합적인 관리를 위한 기능 제공

데이터베이스, 트랜잭션 로그 분석

데이터베이스는 여러 테이블에 연속적으로 데이터를 저장하거나 하나의 테이블에서 데이터를 감소시키고 다른 테이블에서 데이터를 증가시키는 등의 수많은 작업들을 연속적으로 처리한다. 따라서 연속적으로 수행되는 작업 중, 하나의 작업이 실패하는 경우 전체 데이터에 대하여 심각한 오류를 초래할 수 있다. 트랜잭션은 시작에서 종료까지 한 번에 수행되어야 할 하나의 작업 단위를 의미하며 데이터베이스는 트랜잭션 단위로 작업을 진행하고 트랜잭션이 정상적으로 완료되면 이 후, 데이터베이스에 실제 데이터를 반영한다. 트랜잭션 로그는 트랜잭션 역할을 수행하기 위하여 데이터베이스가 수행해야 하는 데이터를 임시로 보관하기 때문에 실제 데이터베이스의 존재하는 데이터의 일부를 갖는다. 데이터베이스들은 이러한 트랜잭션 로그를 통하여 롤백 기능을 제공하기도 한다. 트랜잭션 로그는 실제 데이터의 일부를 가지고 있는 로그이기 때문에 데이터베이스에서 데이터의 획득이 불가능한 경우에 다른 획득경로로 활용할 수 있다. 그리고 트랜잭션 로그는 데이터베이스에서는 삭제되어 존재하지 않는 데이터도 롤백 기능을 위하여 가지고 있는 경우가 많기 때문에 획득 시, 포렌식 관점에서도 중요한 역할을 수행할 수 있다. Microsoft [9] 는 MS-SQL의 트랜잭션 로그의 구조를 소개하고 있으며 Brad M.McGehee [10] 는 MS-SQL의 트랜잭션 로그에 대하여 분석하였다. MySQL은 바이너리 로그 [11] 와 쿼리 로그 [12] 에 대하여 소개하고 있으며 PSOUG.org [13] 에서는 Oracle의 로그에 대하여 분석하였다. SQLite [14] 는 저널 로그를 통하여 롤백이 동작하는 방식에 대하여 소개하였다. Mongo DB는 로그 데이터 [15] 에 관하여 소개하고 있다. 각 데이터베이스들은 데이터베이스의 종류에 따라 트랜잭션 이외에 다른 로그를 남기기도 한다. 따라서 트랜잭션 이외에 다른 로그들의 분석은 다른 데이터의 획득을 가능하게 한다.

삭제된 테이블 및 레코드 복구

데이터베이스는 삭제된 테이블 및 레코드를 복구하는 방법론은 크게 2가지가 있다. 첫 번째는 데이터베이스 트랜잭션 로그파일을 분석하여 데이터베이스에서 발생한 변화를 역추적하면서 이전 상태가 어떠했는가를 확인하는 방법이다. 두 번째는 실제 데이터가 포함되어 있는 데이터베이스 파일의 구조를 분석하여, 비할당 영역에 잔존하는 삭제된 레코드들을 복원하는 방법이다. SQLite나 MS-SQL의 경우, 데이터 페이지 내에서 정상 레코드와 정상 레코드 사이에 존재하는 비할당 영역에 삭제된 데이터가 있는가 여부를 확인하여 삭제된 레코드를 복구해 오는 것이 가능하다. 삭제된 데이터를 복구하는 것은 포렌식적으로 매우 의미가 있을 수 있다.

손상된 데이터베이스 복구

데이터베이스가 손상되었을 경우를 대비하여, 각각의 데이터베이스 제품군들은 복구 기능을 제공한다. MySQL에서 테이블이 손상되었을 경우, repair 명령어를 통해 테이블을 복구하는 기능을 지원한다. 또는, mysql 서비스를 정지한 상태에서 myisamchk 명령어나 isamchk 명령어를 사용하여 테이블을 복구할 수 있다. MySQL 3.23. 버전 이상의 경우는 myisamchk 명령어를 사용하며, MySQL 3.23 버전 이하의 경우는 isamchk 명령어를 사용하여 복구한다. [16] MS-SQL의 경우, 손상된 페이지를 복원하는 기능을 지원한다. 페이지는 DBCC CHECKDB와 DBCC CHECKTABLE 명령어를 사용하여 복구할 수 있다. [17] 그러나 트랜잭션 로그, GAM 페이지, SGAM 페이지, PFS 페이지, 모든 데이터의 부트 페이지, 전체 텍스트 카탈로그 등은 복원이 되지 않는다. 그리고 페이지 복원에 성공하려면 복원된 페이지가 데이터베이스와 동일한 상태로 복구되어야 한다.

계정 정보 관리 메커니즘 분석

대부분의 데이터베이스의 인증 방법은 아이디/패스워드 인증 방법과 컴퓨터 인증 방법이 있다. 아이디/패스워드 인증 방법은 데이터베이스에 접근하기 위해서 해당 계정의 아이디와 패스워드의 정보가 필요한 방법이다. 컴퓨터 인증 방법은 계정의 정보 없이 서버 인증으로 데이터베이스에 접근이 가능한 방법이다. MySQL의 경우, 서비스 시작 시에 특정 옵션을 지정하면 관리자 계정으로 접속하는 것이 가능하다. 또는 Sergei Golubchik는 memcmp() 함수로 인해 발생하는, MySQL 인증 우회 방법에 대하여 소개하였다. [18] MS-SQL의 경우, 온라인 상태에서 대상 서버에 접근이 가능하고 로그인이 되어 있으면, 윈도우즈 인증 방식을 이용하여 계정정보 없이 데이터를 열람할 수 있다. 혹은, 오프라인 상태에서 데이터베이스 관련 파일을 열람한 경우, 타 SQL 서버에서 관리자 도구에 있는 ‘Attach’ 기능을 이용하여 데이터를 열람하는 것이 가능하다. 한국정보보호진흥원의 인터넷침해사고대응센터에서는 Oracle DBMS 로그인의 접근제어 우회 방법에 대하여 소개하였다. [19] IBM DB2에서 인증 방식은 윈도우즈에서 db2admin 계정과 사용자 기본 계정을 통해 이루어진다. 이 때 해당 데이터베이스에 접근하기 위해서는 사용자 계정의 아이디와 패스워드가 필요한 방식이며, DB2 Server 계정에 해당하는 db2admin의 패스워드에 대한 정보가 없어도 추가적인 설정이 이루어지지 않았다면, 다른 관리자 권한의 계정으로 로그인 접근하여 db2admin의 패스워드를 변경할 수 있으며, 변경된 패스워드로 DB2 서버의 데이터에 접근할 수 있다.

관련 도구

각 데이터베이스별로 기본 관리 도구가 존재한다. 그리고 기본 관리 도구 외에, 삭제된 레코드 복구나 손상된 데이터베이스 복구 등과 같이 목적에 따라 각 데이터베이스 별로 특수한 기능들을 가지고 있는 도구들이 존재한다.

향후 연구

데이터베이스의 종류별로, 비슷한 기능들이 다양한 형태로 존재하며, 동일한 기능일지라도 다른 접근방법을 사용하여 문제가 해결되는 경우가 많다. 현재까지 많은 데이터베이스들의 구조 및 기능, 로그 분석 및 복구 등에 대하여 많은 연구가 진행되어 왔는데, 대부분은 모두 비슷한 구조를 띄고 있으나, 세부적인 부분들은 데이터베이스 종류에 따라 매우 상이하게 달라지고 있다. 그러므로 데이터베이스 종류 각각에 대하여 분석이 진행되어야 할 필요가 있다.

참고문헌