Ⅲ. Exif Format
3.1 JPEG의 구조
3.1.1 JPEG 이미지와 마커(Marker)
JPEG 이미지는 마커(Marker)의 집합으로 구성되어있다.
위 그림처럼 모든 마커는 0xFF로 시작하며 데이터의 크기가 마커에 명시되어 있어 오프셋(offset)으로 다음 마커의 위치를 알 수 있다. JPEG 이미지는 SOI 마커로 시작하여 SOS 마커로 끝나는 형태를 띄고 있다.
마커 |
마커 번호 |
SOI(Start of Image) |
D8 |
APP1 |
E1 |
APP2 |
|
DQT(Quantization Table) |
DB |
DHT(Huffman Table) |
C4 |
DRI(Restart Interval) |
DD |
SOF(Frame Header) |
C0 |
SOS(Scan Header) |
DA |
EOI(End of Image) |
D9 |
이 중 SOI, EOI 마커는 Size of Data, Size 영역이 없다.
그래서 JPEG 이미지를 바이너리 환경에서 보게 되면 SOI 마커 바로 뒤에 APP1 마커가 등장하는 것을 볼 수 있다.
마찬가지로 마지막 부분을 바이너리 환경에서 살펴보게 되면 압축된 데이터 뒤에 EOI 마커가 존재하며 이로써 JPEG 이미지의 끝을 표시해주고 있다.
3.1.2 어플리케이션 마커(Application Marker)
마커번호가 0xFFE0 ~ 0xFFEF에 해당하는 마커를 어플리케이션 마커라 한다. 이는 JPEG이미지의 인코딩/디코딩과는 상관없다. 따라서 이 부분을 손상시켜도 이미지의 재생에는 영향을 끼치지 않는다.
위처럼 어플리케이션 마커를 0으로 덮어쓴 경우에도 해당 이미지를 재행하는데는 문제가 없다. 이처럼 어플리케이션 마커는 이미지의 인코딩/디코딩과는 상관없기 때문에 이 영역에 이미지의 부가정보를 기입할 수 있으며 이 어플리케이션 마커를 이용한 것이 Exif Format이다.
그런데 JPEG 이미지 Format 중 하나인 JFIF 이미지에서 마커번호가 0xFFE0인 APP0 마커를 자체적으로 사용하기 때문에 이와의 혼란을 피하기 위해 Exif Format에서는 APP1(마커번호가 0xFFE1)을 사용한다.
즉, Exif Format은 JPEG Format의 일부인 APP1마커를 이용하여 이미지에 대한 부가정보를 저장하는 방식이다.
3.2 Exif Format의 개요
3.2.1 Exif Format의 개발
Exif Format은 일본전자산업진흥협회(JEIDA)에서 개발한 Format으로써 1995년 Exif ver1.0을 시작으로 2003년 Exif ver 2.21 까지 개발된 상태이다. 이미지에 썸네일(thumbnail) 이미지, GPS 정보, 시각 정보, 촬영환경 정보 등을 저장할 수 있으며 JPEG, TIFF 6.0, RIFF, WAV 파일 Format에 적용될 수 있다. 디지털카메라의 경우 JPEG, TIFF 6.0 방식으로 촬영할 경우 Exif 데이터를 삽입할 수 있다.
3.2.2 Intel 방식과 Motorola 방식
바이너리 데이터를 저장할때에 Intel 방식과 Motorola 방식 2가지 중 하나의 방법으로 데이터가 쓰여진다. Intel 방식은 소위 리틀 엔디언(little Endian)방식으로 바이너리 데이터를 입력하는 방법을 말하며, Motorola 방식은 빅 엔디언(Big Endian)방식을 의미한다.
그런데 순수 JPEG 이미지의 바이너리 데이터는 빅엔디언 즉, Motorola 방식으로 쓰여있지만 Exif 데이터는 리틀엔디언 방식으로 쓰여있는 경우가 있다. 따라서 Exif Format의 바이너리 데이터를 분석할 시에 이에 유의하여야 한다.
3.2.2 Exif Format 의 구조
Exif Format는 APP1 마커의 데이터 영역이 삽입되어 있다. 썸네일(Thumnail) 이미지 JPEG Format으로 구성되어 있으므로 원본 이미지와 마찬가지로 SOI마커로 시작해서 EOI마커로 끝나게 된다.
Exif Format의 시작인 Exif Header는 4bytes로 '45 78 69 66' 즉, 아스키 코드로 'E x i f'이다.
3.2.2.1 TIFF Header
TIFF Header는 Exif 데이터가 Intel 방식(Big Endian)으로 쓰여졌을 경우에는 '0x4949'로 되어있으며, Motorola 방식(Little Endian)으로 쓰여졌을 경우에는 '0x4d4d'로 되어있다.
바이너리 기입방식 (2bytes) |
TAG Mark (2bytes) |
0th IFD 까지의 offset (4bytes) |
II(0x4949) |
0x002a |
(일반적으로 0x00000008) |
MM(0x4d4d) |
0x002a |
(일반적으로 0x00000008) |
그 뒤를 TAG Mark와 0th IFD 까지의 offset이 따르고 있다. 보통 TIFF Header 바로 뒤에 1st IFD가 따르는 구조로 되어 있으므로 0th IFD는 'II' 혹은 'MM'에서 부터 8바이트 뒤에서부터 시작하게 된다. 그리하여 일반적으로 offset은 0x00000008이 기입된다.
3.2.2.2 IFD(Image File Directory)의 구조
IFD란 이미지에 대한 정보를 기록하는 일종의 틀로서 일반적인 Exif Format에서 IFD 영역은 0th IFD와 Exif IFD 그리고 1th IFD 가지로 구성되어 있다. 0th IFD는 원본 이미지에 대한 간단한 정보가 기재되어 있으며 Exif IFD에는 셔터스피드, 노출시간 등 원본 이미지에 대한 보다 자세한 정보를 담고 있으며 1st IFD에는 썸네일 이미지에 대한 정보를 기록하고 있다.
각각의 IFD는 디렉토리 엔트리(Directory Entry)로 구성되어 있으며 1개의 디렉토리 엔트리는 12bytes를 이용하여 데이터를 저장한다.
0th IFD와 Exif IFD, 그리고 1st IFD 또한 위와 같은 구조로 이루어져 있으며, 각 IFD에 속한 디렉토리 엔트리의 종류는 각각 다르다.
3.2 Exif Format에 삽입될 수 있는 정보
Exif Format에 삽입될 수 있는 정보는 0th IFD의 경우는 32가지, EXIF IFD의 경우 57가지, 1th IFD의 경우는 32가지 등 약 120여 가지의 정보가 삽입될 수 있다. 이 중 디지털 포렌식 적으로 중요한 GPS 정보 및 시각정보가 EXIF Format에 기록되어 있다.
3.2.1 GPS(Global Positioning System) 정보
GPS란 3곳 이상의 인공위성에서 위치정보를 조합하여 특정한 위치를 전자정보로써 표현하는 것을 의미한다. 일반적으로 GPS 정보는 도(°)분(')초(")로 기록하며 우리나라의 경우 1초는 약 37미터 거리에 해당한다.
Exif format에서는 0.001초 차이까지 기록할 수 있도록 되어 있다. 즉, GPS 장비가 오차없이 현재의 위치를 정확히 측정할 수 있다고 가정하면 약 3.7센티미터의 미세한 위치정보의 차이를 탐지해 낼 수 있다. 따라서 GPS 정보만으로도 이미지에 찍힌 피사체가 해당 위치에 존재했음을 증명할 수 있게 된다.
Exif format에서는 30가지의 필드를 통하여 GPS 정보를 나타낸다.
태그 ID |
변수명 |
변수타입 |
크기 |
설명 |
0 |
GPSVersionID |
BYTE |
4 |
GPS version |
1 |
GPSLatitudeRef |
ASCII |
2 |
N(북쪽), S(남쪽) |
2 |
GPSLatitude |
RATIONAL |
3 |
위도 |
3 |
GPSLongitudeRef |
ASCII |
2 |
E(동쪽), W(서쪽) |
4 |
GPSLongitude |
RATIONAL |
3 |
경도 |
5 |
GPSAltitudeRef |
BYTE |
1 |
고도와 해수면과의 관계 |
6 |
GPSAltitude |
RATIONAL |
1 |
고도 |
7 |
GPSTimeStamp |
RATIONAL |
3 |
UTC(세계협정시)로 변환한 GPS촬영시간(시,분,초) |
8 |
GPSSatellites |
ASCII |
무관 |
측정에 사용된 위성 |
9 |
GPSStatus |
ASCII |
2 |
촬영에 사용된 GPS 수신기의 상태 |
10 |
GPSMeasureMode |
ASCII |
2 |
GPS 측정 모드 |
11 |
GPSDOP |
RATIONAL |
1 |
GPS 데이터의 정확도 |
12 |
GPSSpeedRef |
ASCII |
2 |
GPS 수신기 속도에 관한 부호 |
13 |
GPSSpeed |
RATIONAL |
1 |
GPS 수신기의 속도 |
14 |
GPSTrackRef |
ASCII |
2 |
GPS 수신기 방향에 관한 부호 |
15 |
GPSTrack |
RATIONAL |
1 |
GPS 수신기의 방향 |
16 |
GPSImgDirectionRef |
ASCII |
2 |
피사체의 방향에 관한 부호 |
17 |
GPSImgDirection |
RATIONAL |
1 |
피사체의 방향 |
18 |
GPSMapDatum |
ASCII |
무관 |
지정학적 위치에 관한 정보 |
19 |
GPSDestLatitudeRef |
ASCII |
2 |
N(북쪽), S(남쪽) |
20 |
GPSDestLatitude |
RATIONAL |
3 |
목표 지점의 위도 |
21 |
GPSDestLongitudeRef |
ASCII |
2 |
E(동쪽), W(서쪽) |
22 |
GPSDestLongitude |
RATIONAL |
3 |
목표 지점의 경도 |
23 |
GPSDestBearingRef |
ASCII |
2 |
목표 지점의 Bearing에 관한 부호 |
24 |
GPSDestBearing |
RATIONAL |
1 |
목표 지점의 Bearing |
25 |
GPSDestDistanceRef |
ASCII |
2 |
목표 지점까지의 거리에 관한 부호 |
26 |
GPSDestDistance |
RATIONAL |
1 |
목표 지점까지의 거리 |
27 |
GPSProcessingMethod |
UNDEFINED |
무관 |
거리측정에 사용된 방법 |
28 |
GPSAreaInformation |
UNDEFINED |
무관 |
GPS Area에 관한 정보 |
29 |
GPSDataStamp |
ASCII |
11 |
UTC(세계협정시)로 변환한 GPS촬영시간(년,월,일) |
30 |
GPSDifferential |
SHORT |
1 |
"GPS Differential Correction"기술의 적용여부 |
위처럼 30가지의 필드를 이용하여 GPS 정보를 기록하고 있는데, Exif 정보를 보여주는 툴의 대부분은 1, 2, 3, 4, 7, 16, 17번 필드를 추출하여 GPS를 표시한다.
3.2.2 시각 정보
보통 파일의 시각정보는 파일의 내부가 아닌 메타데이터에 기록한다. 그리하여 파일시스템의 수준에서 파일의 시각정보를 조작할 수 있다. 지난 7·7 DDOS 공격에 사용되었던 코드 등 일부 악성코드는 메타데이터를 조작하여 파일의 시각정보를 조작하기도 한다.
태그 ID |
변수명 |
변수타입 |
크기 |
설명 |
132 |
DateTime |
ASCII |
20 |
이미지의 생성시각 |
9003 |
DateTimeOriginal |
ASCII |
20 |
피사체가 촬영된 시각 |
9004 |
DateTimeDigitized |
ASCII |
20 |
피사체가 디지털이미지로 처리된 시각 |
'Digital Forensics > Forensics Generalization' 카테고리의 다른 글
CSI Effect!? (2) | 2010.12.16 |
---|---|
포렌식 관점에서 바라본 Exif Format-4 [Exif Data의 무결성 검증은 어떻게 할것인가] (0) | 2010.12.14 |
포렌식 관점에서 바라본 Exif Format -3 [Exif Data의 조작] (0) | 2010.12.14 |
로카르의 교환법칙 (0) | 2009.10.26 |