2016년 11월 22일 화요일

MySQL의 현황 및 포렌식적 의미


[Tech Report] 그들은 왜 아직도 MySQL을 사용하는가?



  • AhnLab


  • 2013-12-03

MySQL의 현황 및 포렌식적 의미

 


데이터베이스(Database, 이하 DB)는 방대한 양의 데이터에 빠르고 쉽게 접근하고 처리할 수 있도록 구성된 데이터의 집합체이다. 데이터의 홍수 속에서 대부분의 기업은 물론 일반 사용자들도 크고 작은 다양한 DB를 이용하여 데이터를 관리 및 저장한다. 일반적으로 각각의 DB는 고유의 데이터 관리 체계를 갖고 있으며, 이를 통해 데이터를 파일에 담아 저장 및 관리한다. 이 같은 DB의 데이터 관리 체계를 분석하여 DB 내에 저장된 데이터에 직접적으로 접근할 수 있으며 다양한 분석이 가능하다. DB는 빠른 성능을 유지하기 위해 데이터 삭제 시 실제로 삭제하는 대신 삭제된 것으로 ‘표시’만 하는 경우가 대부분이다. 따라서 데이터의 복구가 가능하다. 대부분의 공격자들은 데이터를 삭제하기 때문에 삭제된 데이터를 복구하는 것은 분석가에게 매우 중요하다. 이에 월간 안에서는 총 3회에 걸쳐 관계형 DB 중 MySQL의 데이터 복구 포렌식에 대하여 알아본다.


<연재 목차>

1부_MySQL의 현황 및 포렌식적 의미(이번 호)

2부_MySQL InnoDB Type의 데이터 파일 구조 분석과 삭제된 레코드의 복구 방안

3부_ MySQL MyISAM Type의 데이터 파일 구조 분석과 삭제된 레코드의 복구 방안

 

 

정보가 중요한 역할을 하는 시대다. 이 중요한 정보를 체계적이고 효과적으로 관리하기 위한 수많은 DB가 있다. 오라클(Oracle)사의 DB 제품군과 마이크로소프트(Microsoft)사의 MSSQL, IBM사의 DB2, 그리고 SQLite 등의 RDBMS를 비롯하여 Mongo DB, 카산드라, 카우치베이스 등의 NoSQL이 그 예이다. 그러나 수많은 DB들이 모두 시장에서 살아남을 수 있는 것은 아니다. 시장 점유율이 낮은, 즉 사용자가 적은 DB는 분석가들에게는 중요성이 떨어질 수 밖에 없다. 모든 DB들을 일일이 분석하는 것은 결코 쉽지 않은 일이다. 게다가 대부분의 DB들은 지속적으로 수정되거나 새롭게 추가된다. 따라서 분석가들은 최근 가장 많이 사용되고 있는 DB의 현황을 항상 파악하고 있어야 하며, 특히 주로 사용되는 DB들의 저장 방식과 파일 구조 등을 분석하여 유사 시 언제든 대응할 수 있도록 준비해야 한다.

 

[그림 1]은 2012년 5월부터 2013년 5월까지의 오픈소스 기반 DB의 시장 점유율이다. 모든 DB 영역에서의 시장 점유율을 나타내는 자료는 아니지만, 이를 통하여 현재 어떤 DB가 주로 사용되고 있는지를 한눈에 확인할 수 있다. [그림 1]에 따르면 MySQL은 현재 60% 이상의 점유율로 오픈소스 기반 DB 중에서 가장 높은 점유율을 기록하고 있으며 꾸준한 상승세를 보이고 있다. 이로써 디지털 포렌식 관점에서 MySQL의 분석이 얼만큼 중요한 부분인지 짐작할 수 있다.



 

[그림 1] 데이터베이스 시장 점유율(출처: Jelastic 블로그, http://blog.jelastic.com)

 

 

왜 아직도 MySQL인가?



MySQL은 표준 DB 질의 언어 SQL(Structured Query Language)을 사용하는 DB 관리 시스템(Relational Database Management System, RDBMS)이다. 1994년 처음 개발된 이후 오픈소스 라이선스의 무료 DB로 개발되어 왔다. 2008년 선 마이크로시스템스(Sun Microsystems)사에 인수 합병되었으며 2010년에는 오라클사가 선 마이크로시스템스와 함께 MySQL을 인수했다. MySQL의 GUI 버전인 MySQL WorkBench는 오라클에서 개발되었으며, 상업적인 용도로 이용할 경우에는 유료로 사용해야 한다. MySQL은 기본적으로 C, C++, PHP 등 다양한 언어에 대해 API를 제공하고 있으며, 유닉스(Unix) 및 리눅스(Linux), 윈도우(Windows) 등의 운영체제를 지원한다.

 

 

[그림 2] MySQL 로고

 

MySQL은 20여년 동안 발전해 오면서 수많은 기능과 함께 DB로서의 완성도를 높여왔다. 가장 최근에 개발된 MySQL의 저장 방식 중 하나인 InnoDB는 MySQL 내부에서 데이터의 생성 및 수정 등의 과정을 트랜잭션 단위로 처리할 수 있는 기능을 추가했다. 이를 통해 오류에 의해 데이터에 손상을 입은 경우 트랜잭션 로그의 복구를 통해 오류 이전 상태로의 회복이 가능하게 되었다. 이 밖에도 수십 테라 바이트 크기의 데이터를 저장할 수 있는 등 다양한 장점을 갖춘 DB로 거듭나기 시작했다. MySQL의 특징은 무엇보다 오픈소스로 개발되어왔다는 점으로, 수많은 개발자에 의해 가장 최적화된 형태로 개발될 수 있었다. 현재는 오라클에 인수되어 상업적인 용도의 DB도 출시되고 있지만 기존의 오픈소스는 그대로 유지함으로써 수많은 개발자 및 관리자들이 쉽게 접할 수 있다. 또한 MySQL은 표준 SQL을 사용하고 있기 때문에 SQL 문법만 이해하고 있으면 [그림 3]과 같이 MySQL 콘솔 및 GUI 버전 등을 통하여 손쉽게 쿼리를 수행해 원하는 결과값을 얻을 수 있다.

 



[그림 3] MySQL 콘솔(Console)

 

[그림 4]는 MySQL의 GUI 버전인 MySQL WorkBench이다. MySQL WorkBench는 SQL 개발과 관리를 위한 단일 개발 통합 환경을 제공하는 그래픽 기반의 데이터베이스 설계 툴이다. 오라클은 기존의 MySQL GUI를 대체하기 위해 MySQL WorkBench를 제작했는데 사용이 편리해 초보자들도 쉽게 이용할 수 있다.

 



[그림 4] MySQL WorkBench

 

MySQL은 LAMP(Linux-Apache-MySQL-PHP/Perl/Python), 즉 리눅스 운영체제와 아파치(Apache) 서버 프로그램, MySQL, PHP와 같은 스크립트 언어를 통합한 형태로 웹 개발에도 널리 이용되고 있다. 특히 PHP는 MySQL과의 연동이 뛰어나 수많은 웹사이트에 사용되고 있다. 이 밖에도 윈도우 운영체제와 OS X(Mac OS)에서 WAMP, MAMP라는 이름으로 많이 활용되고 있다.

 

오픈소스 라이선스인 MySQL은 비교적 사용이 자유롭기 때문에 누구나 쉽게 DB를 사용할 수 있으며 지속적으로 업데이트 되기 때문에 기존의 사용자들이 계속 MySQL을 사용하도록 하는 매력이 있다. 이처럼 다양한 장점과 매력 때문에 수많은 개발자 및 관리자들은 오랫동안 MySQL을 사용하고 있다.

 

 

MySQL의 포렌식적 의미



MySQL은 일반적으로 정해진 구조에 따라 데이터를 파일에 저장한다. 데이터의 파일 저장 방식에 따라 MySQL은 InnoDB 저장 방식과 MyISAM 저장 방식 등 크게 두 가지로 구분할 수 있다. 물론 이들 외에도 다양한 저장 방식이 있지만 현존하는 대부분의 MySQL DB가 InnoDB와 MyISAM 저장 방식을 사용한다.

 

 

[그림 5] MySQL 설치 폴더

 

InnoDB는 [그림 5]와 같이 MySQL 설치 폴더의 하위 폴더인 ‘data 폴더’의 ibdata라는 파일에 데이터를 저장한다. ibdata 파일에는 InnoDB에 관련된 데이터만 저장되며 MyISAM 저장 방식은 별도로 관리된다.

 



[그림 6] DB명으로 생성되는 폴더

 

대부분의 DB 프로그램들은 데이터를 체계적으로 관리하기 위하여 가장 상위 개념의 데이터 그룹을 생성한다. DB 사용자는 상위 개념의 데이터 그룹을 DB라고 정의하며 일반적으로 데이터의 가장 큰 범주 이름을 DB명으로 정하여 사용한다. DB는 구체적인 데이터를 저장하기 위한 용도로 분류된 여러 개의 테이블을 구성하며 각각의 테이블은 정해진 용도에 따라 각각의 데이터를 테이블 내부에 저장한다.

 

[그림 6]은 MySQL 관리자가 ‘step1’이라는 DB를 생성하였을 경우 시스템에 의하여 ‘step1’이라는 이름의 폴더가 MySQL이 설치된 경로 하위 폴더에 생성된 것이다. DB 내부에 friend와 fristart라는 테이블이 생성되어 있음을 확인할 수 있다.

 

 

[그림 7] MySQL의 ‘Format 파일'

 

[그림 7]은 InnoDB와 MyISAM 저장 방식이 공통적으로 생성하는 frm 확장자 파일을 나타내고 있다. frm 확장자 파일은 테이블명을 파일명으로 사용하며 해당 테이블의 테이블 정보(스키마 정보)를 기록하고 있다. 따라서 frm 파일은 DB를 분석하는데 중요한 역할을 담당하는 파일이라 할 수 있다.

 

이처럼 저장 방식에 따라 각각의 데이터는 정해진 위치에 파일로 저장된다. 이렇게 저장된 데이터는 각각의 파일로 존재하거나 모두 ibdata 파일 안에 존재한다. 따라서 파일 구조에 대한 분석은 디지털 포렌식 관점에서 유용하다.

 

또한 MySQL은 삭제 데이터를 완전히 삭제하지 않기 때문에 파일 내부에는 삭제된 데이터가 남아있다. 이 같은 특징을 이용하여 데이터 복구(Data Recovery)가 가능하며 이를 활용한 데이터 복구 툴이 있다. [그림 8]은 MySQL InnoDB의 복구를 위해 구현되어 있는 실제 Percona의 데이터 복구 툴이다. 비록 데이터 복구 툴의 기능이 제한적이며 사용법이 어렵기 때문에 효용성은 떨어지지만 포렌식 관점에서 삭제된 데이터를 복구하는 것은 매우 중요하기 때문에 데이터 복구 툴에 상당한 포렌식적인 의미를 부여할 수 있다.

 

 

[그림 8] Percona toolkit

 

MySQL의 데이터 복구와 관련해 MySQL의 현황 및 구조 등 기본적인 사항을 살펴보고 이것이 포렌식적으로 어떠한 의미가 있는지 알아보았다. 다음 호에서는 보다 구체적인 MySQL의 구조를 살펴보면서 데이터를 복구하기 위한 방안에 대해 살펴보도록 하겠다.@










  • AhnLab 로고



  • 클라우드분석팀 남궁재웅 연구원




이 정보에 대한 저작권은 AhnLab에 있으며 무단 사용 및 도용을 금합니다.

단, 개인이 비상업적인 목적으로 일부 내용을 사용하는 것은 허용하고 있으나, 이 경우 반드시 출처가 AhnLab임을 밝혀야 합니다.

기업이 이 정보를 사용할 때에는 반드시 AhnLab 의 허가를 받아야 하며, 허가 없이 정보를 이용할 경우 저작권 침해로 간주되어 법적인 제재를 받을 수 있습니다. 자세한 내용은 컨텐츠 이용약관을 참고하시기 바랍니다.

정보 이용 문의 : contents@ahnlab.com


홈페이지 jQuery 라이브러리에서 CVE-2019-11358 취약점 패치 여부 확인 방법

현재 홈페이지에서 사용 중인 jQuery 라이브러리가 CVE-2019-11358 취약점 패치를 적용했는지 확인하는 방법은 다음과 같습니다. 1. jQuery 버전 확인 홈페이지 소스 코드를 확인하여 jQuery 라이브러리 버전을 직접 확인합니다. 웹 ...