7) 파일과 친해지기
Last updated
Last updated
지금까지는 파일시스템에 대해서 알아보았습니다. 그렇다면 이번에는 파일과 조금 친해져 보도록 해봅시다!
간단히 생각하면 파일은 비트의 나열을 묶은 것으로, 0과 1로 구성된 이진데이터의 연속적인 비트 스트립입니다. 비트스트립은 특정 형식과 구조를 갖고, 이 구조에 따라 파일의 내용이 해석되는 것입니다. 파일 형식은 이 데이터를 어떻게 해석하고 사용할지 정의하는 일종의 규약인 것입니다.
가장 단순한 구조를 갖는 파일과의 일반적인 파일 구조를 살펴봅시다.
메모장으로 간단한 영문이나 숫자 등을 하나 저장해봅시다. 그리고 HxD로 열어보도록 합시다.
그렇다면 실제 저장된 내용을 확인할 수 있습니다. 기본적인 데이터의 표현 방법 >
워드패드 프로그램을 실행하여 봅시다. wordpad를 검색하거나 [Win + R ] 또는 CMD를 실행하여 "wordpad"를 입력하여 실행할 수 있습니다.
워드패드에서도 똑같이 작성 후 저장하여 봅시다.
저장한 파일을 HxD로 살펴봅시다. 중간쯤 어딘가에 우리가 작성한 내용을 확인할 수 있습니다. HxD에서 다른 부분은 그대로 두고 우리가 작성한 부분 중 일부를 원하는 글자로 수정 후 저장하여봅시다.
해당 내용이 수정된 것을 확인할 수 있습니다.
사실 메모장에서 저장한 것과, 워드패드에서 저장한 비트의 나열이 다른 것을 확인할 수 있습니다. 워드패드로 저장한 파일의 확장자를 txt로 변경 후 메모장으로 연 뒤에 데이터 영역의 숫자를 원하는 숫자로 변경하여 봅시다.
메모장으로 수정 한 뒤 다시 확장자를 rtf로 변경 후 워드패드로 보면 내용이 변경된어 있습니다.
이렇듯워드패드 파일의 구조들 중 어딘가에 데이터를 저장하고 있습니다. 워드패드 프로그램이 이러한 구조를 분석하여 데이터 영역을 보여주고, 다른 구조들에 들어간 데이터를 이용하여 여러가지 서식 등을 적용하여 보여주게 되는 것입니다.
한 가지 더 살펴보도록 하겠습니다. 우리가 저장하는 데이터가 압축되어 어딘가에 저장되어 있을 수도 있습니다. 엑셀을 이용하여 데이터를 하나 입력 하여봅시다.
우리가 입력한 내용을 검색하여도 발견되지 않고 있습니다.
xlsx 엑셀 파일의 확장자를 zip로 변경하여 봅시다. 그 이후에 압축을 해제하면 압축이 해제됩니다. 압축해제된 폴더 내에서 xl 폴더안에 있는 sharedStrings.xml 을 우클릭 후 편집하여 봅시다. 또는 sharedStrings.xml을 메모장으로 열 수 있습니다.
우리가 입력한 텍스트를 발견할 수 있습니다. 이 파일을 수정한 뒤 수정한 폴더를 압축한다고 해서 다시 엑셀 파일로 저장되진 않습니다. (그냥 압축파일로 저장되기 때문에 엑셀에서 열리지 않습니다.(
엑셀파일로 한번 보는 것을 해본 이유는 데이터를 저장하는 방식이 파일마다 다르다는 것입니다. 무조건 우리가 입력한 값을 Hex로 검색한다고 해서 보이지는 않더라도, 이런식으로 압축되어 변형되어 저장되는 파일들도 존재하기 때문입니다.
거의 모든 파일이 엑셀과 같이 특정 프로그램을 통해 해석되어 활용되고 있습니다. 다만 윈도우의 메모장은 다른 기타 구조 없이 데이터를 저장하거나, 데이터를 그대로 hex 값이 아닌 아스킷 코드나 유니코드로 해당 파일을 모두 읽어오게 되는 것입니다.
엑셀파일을 생성 후 HxD와 메모장에서 파일을 열어보면 비교를 할 수 있으실 것 입니다. (참고로 용량이 큰 파일은 메모장에서 제대로 열리지 않을 수 있습니다.)
그렇다면 파일들이 어떤 프로그램으로 만들어졌고, 어디에서 데이터를 해석할 수 있는지 알고 있으면 분석할 때 매우 유용합니다.
만약 그림 파일 중 JPG 파일은 무조건 파일의 경우 어떤 구조로 시작하고, 어떤 구조로 끝나는지 알고 있다면, 확장자나 파일명 같은 메타데이터랑 관계 없이 파일 데이터를 분석을 할 수 있을 것입니다.
파일은 일반적으로 시그니처, 헤더, 푸터(푸터가 없을 수도 있음) 를 포함하고 있습니다. 간단하게, 가장 처음에 시그니처, 가장 마지막에 푸터가 위치합니다. 한번 살펴보도록 합시다.
이미지 파일로 유명한 JPG 파일의 구조 중 시그니처, 헤더, 푸터를 한번 살펴봅시다. 먼저 그림판에서 JPG 파일을 생성해보도록 합시다. 저장할 때 파일형식을 JPG로 설정합시다.
JPG 헤더 부분의 일부분입니다. 다만 여기서 JPG의 경우 항상 고정적으로 시작하는 데이터는 SOI(Start Of Image)인 FF D8에 해당합니다. APP0 marker 또한 보통 고정값을 갖습니다.
맨 마지막에는 EOI(End Of Image) 는 FF D9로 끝나는 구조입니다.
정리하면 JPG Image의 경우 FF D8 로 시작하여 FF D9로 끝나게 되는 것입니다. 여기서 푸터는 맨마지막에 있는 EOI에 해당하는 값인 FF D9 입니다. 그렇다면 시그니처와 헤더는 무엇이고 차이는 무엇일까요?
헤더의 경우 파일시스템 분석 시 활용하였던 다양한 헤더처럼 여러가지 구조를 가지고 있습니다. 만약 우리가 파일을 분석하는 과정에서 일부분이 훼손되어 있거나 덮어쓰여 있어서 제대로 복구가 안되었을 경우 헤더와 구조를 파악한 뒤 훼손된 부분이 포함되더라도 다른 일부가 복구 될 수 있도록 수정하는데 활용할 수 있습니다.
시그니처는 파일의 시작 부분에 위치하는 고유한 값이나 문자열로, 파일 형식을 식별하기 위한 값으로, 파일의 구조에서 고정되는 값을 의합니다. 이를 이용하면 파일명의 확장자와 실제 데이터의 구조가 다른 파일을 찾거나 혹은 이미 삭제된 파일이라고 하더라도, 데이터 영역에서 해당 구조가 발견된 다면 추출을 하여 복구(카빙) 시도를 해볼 수 있습니다.
한번 흥미로운 실습을 해보도록 하겠습니다. 사실은 잘 일어나는 경우는 아니지만 포렌식 첼린지나, 자격증 시험 등에서 출제되는 파일분석을 한번 해보도록 하겠습니다.
JPG 파일을 한번 HxD로 열어보도록 하겠습니다. 그리고 맨 마지막 영역인 FF D9가 있는 곳으로 가보도록 하겠습니다. 그뒤에 이어서 원하는 글자를 입력하거나, 원하는 데이터를 작성해보도록 하겠습니다.
이후 파일을 저장 한 뒤 해당 파일을 열어보도록 합시다. 파일을 열어보면 그림파일에는 어떠한 영향도 없습니다.
다시 이 파일을 HxD로 열어보도록 하겠습니다. 여전히 남아 있습니다.
만약 이 파일에 맨 뒤에 매우 중요한 정보를 담아서 파일을 전송하고, 반대로 HxD를 이용하여 맨 마지막 부분을 보도록 서로 약속을 한 뒤 주고 받을 경우 일반 사람들은 이 파일에 중요한 정보가 있다는 것을 쉽게 알 수 없게 되는 것입니다. 이렇게 간단히 정상적인 파일내에 정보를 은닉하는 기술로 보일 수도 있는 것입니다. 이러한 기술을 스테가노그래피(Steganography)라고 할 수 있습니다. 물론 이렇게 간단하게 스테가노그래피를 한다면 당연하게도 검출하기도 매우 쉬울 것입니다. 다만 이렇게 될 수 있는 이유를 한번은 살펴볼 필요가 있을 것입니다.
당연하게도 그림판에서는 FF D9 뒤에 이어지는 영역을 추가하거나 수정하지 않습니다. 반면 HxD의 경우 데이터 영역을 읽어오고 bit의 나열을 추가하여 저장할 수 있게 됩니다. 이렇게 저장할 수 있는 건 파일시스템에서 그림 파일이 넘어간 영역이라고 하더라고 단순히 bit의 나열로 인식하여 저장하고, 논리적으로 접근이 가능한 것입니다. 그리고 그림을 보여주는 프로그램은 FFD8~ FFD9로 끝난 이후의 영역은 크게 신경 쓰지 않고 해석을 하여 우리에게 보여주는 것입니다.
만약 어떤 그림 파일이 FF D9로 끝나더라도 뒤에 추가적인 내용이 있다면, 알람을 띄워주거나, 다른 표시를 해줄 수도 있을 것입니다만 대부분의 이미지 관련 프로그램들은 그렇게 까지 표시하지는 않는 경우가 대부분입니다
확장자는 파일 이름의 끝에 붙는 짧은 문자열로, 파일의 형식이나 용도를 나타냅니다.
확장자의 경우 운영체제에서 이 파일을 실행할 때, 어떤 프로그램으로 이 파일을 실행할 지를 정할때 주로 사용하게 됩니다. 물론 어떤 프로그램으로 열 수 있는지, 힌트가 되기도 합니다.
그러나 무조건 확장자를 믿을 수 없는 것은 얼마든지 확장자는 변경이 가능하기 때문입니다. 만약 개인적으로 저장해둔 특정 파일을 다른 사람이 쉽게 열 수 없도록 하고 싶은 경우 확장자를 변경할 수도 있을 것입니다.
윈도우에서는 확장자에 해당하는 프로그램을 실행한 뒤 해당 파일을 열어주는 것입니다. Win 키를 누른 뒤 "레지스트리 편집기"를 선택하거나, Win+R에서 "regedit"를 실행하여 레지스트리 편집기에서 확장자별로 실행하는 파일을 확인할 수 있습니다.
컴퓨터\HKEY_CLASSES_ROOT 경로에 .XXX 으로 많은 확장자가 있습니다.
아래와 같이 txt 파일은 notepad 에서 실행되는 것을 알 수 있습니다. 최근의 윈도우의 경우 레지스트리의 OpenWithProgids 에서 앱으로 실행하기도 합니다. 이렇게 윈도우는레지스트리를 이용하여 해당 확장자가 어떤 프로그램으로 실행하게 할지 관리합니다.
파일에 있어서 확장자는 사실 확장자 자체가 파일의 접근, 파일의 데이터에 영향을 주는 것 보다는 운영체제에서 해당 파일이 어떤 프로그램으로 실행되게 할 것인지에 대해 주요한 역할을 합니다.
그러나 우리가 포렌식 관점에서 파일, 데이터를 분석을 하는데 있어서 확장자와 상관없이 잘 분석할 수 있어야 합니다. 상황에 따라서는 알려진 확장자와 시그니처가 다른, 즉 고의로 확장자를 변경한 것처럼 보이는 것들도 빠르게 파악할 수 있어야 합니다. 따라서 많은 도구들이 이러한 기능을 제공하고 있습니다.
일반적으로 디지털포렌식 도구의 경우 실제 파일의 시그니처와 확장자를 매핑해두고 만약 파일의 실제 시그니처와 확장자가 다른 경우 표시를 하여 빠르게 찾을 수 있게 하는 경우가 많이 있습니다. 예를 들어 JPG의 확장자를 가진 파일이 정상이라면 FF D8로 시작해야 하는데 그렇지 않은 경우를 정상파일이 아니라고 표시해주는 것이죠.
만약 파일의 시그니처를 훼손하였을 때 어떻게 되는지 증상을 한번 살펴보도록 하겠습니다.
간단한 JPG 파일 생성 후 HxD를 이용하여 시그니처 부분을 훼손하여 봅시다.
당연하게도 파일을 실행하면 우리는 내용을 확인할 수 없습니다. 즉, 실행하는 프로그램이 처음에 FF D8이 없을 경우 정상적으로 파일구조를 볼 수 없는 것입니다.
당연히 시그니처를 정상화 한다면 복구되어 내용을 확인할 수 있을 것입니다. 그러나 만약 해당 섹터가 비활성화 영역이라 다른 데이터가 일부 덮어 써져있다면, 헤더의 구조를 맞춰서 복구시도를 해봐야하는 것입니다.
사실 많지는 않지만 시그니처가 동일한 경우가 있습니다. 압축파일의 시그니처를 한번 살펴보도록 하겠습니다.
그리고 엑셀(.xlsx), 워드(.docx), 파워포인트(.pptx) 등 MS오피스 문서의 파일의 시그니처 부분을 한번 살펴보겠습니다.
단순히 비교하면 둘다 PK(50 4B)로 동일하게 시작하고 있습니다. 다만 압축파일의 경우 00 이 많지 않고 빽빽(?)히 데이터가 있는 반면 MS오피스 문서의 경우 [Content Types].xml 이라는게 보이는 구조를 갖습니다.
그렇다면.. 한번 오피스 파일의 확장자를 압축파일로 변경한 뒤 압축해제를 해볼 수 있을까요? 이미 위에서도 실습해 보았지만 압축해제가 잘 되는 것을 볼 수 있고 내부 구조도 확인 가능 합니다.
참고로 압축파일 형식은 아니지만 위와 동일하게 압축해제 되는 파일 구조가 있습니다. 사실 윈도우가 압축해제 기능을 지원하는 것은 아니나 많은 압축 프로그램들이 지원하는 구조로 오피스 97-2003 버전 그리고 한글파일의 경우 확장자를 압축파일 형식으로 변경 후 압축해제를 통해 내부 구조를 살펴볼 수 있습니다.
여러가지 구조를 볼 수 있습니다.
해당 파일들을 HxD를 열어보다보면 여러가지 정보를 얻을 수 있는데 그 중 PrvImage를 한번 살펴보겠습니다. HxD로 열었더니 시그니처가 GIF 라고 나오네요!
해당파일을 그림판에서 열어보도록 하겠습니다. 그림판에서 큰 문제 없이 이미지를 보여주네요!
위에서 살펴본 파일은 사실 주로 다른 프로그램에 의해 수정되고 저장되는 파일을 살펴보았습니다. 잘보다보면 참 컴퓨터는 단순무식하구나.. 라고 생각이 왔다갔다 하기도 합니다.
실행파일을 분석할 경우 조금 더 복잡한 구조를 가지게 되며, 윈도우와 같은 운영체제가 실행 파일(혹은 프로그램)을 이 실행하면 해당 기능을 할 수 있게 해주며, 필요시 리버스 엔지니어링, 악성코드 분석등을 하여 파일/프로그램이 무슨 일을 하는지 또한 파악을 할 수 있을 것입니다. (포렌식 친해지기에서는 리버싱, 악성코드 분석등은 하지 않을 것입니다. 너무 범위가 넓어요 ㅠㅠ)
증거 수집하는 디지털 포렌식 관점에서는 주로 이미 저장된 파일, 흔적등에 대해 분석하는 빈도가 높을 것이며, 보안관제, 침해사고 대응 쪽에서는 증거수집도 중요하겠지만, 다시는 침해사고가 발생하지 않도록 원인 규명이 중요한 방향으로 포렌식적으로 여러가지 분석 기술을 활용하게 됩니다.
여하튼 이런 분석을 위해 최소한 알아야 할 개념으로 파일, 그리고 파일시스템부터 시작되게 됩니다.
많이 알려진 확장자와 시그니처를 많이 알 수록 처음 보는 데이터 등을 발견하였을 때 어떤 파일인지, 어떻게 해석하거나 복구할 것인지 등에 대한 감각이 생기게 될 것입니다. 사실 외울 필요는 없고 Hex값으로 많이 보다보면 자연스럽게 알게 됩니다. 필요시 같은 구조의파일을 생성해서 시그니처 등을 살펴보면 됩니다.