[Tech Report] 흩어진 이미지를 그려내다
2부_카빙, 복구와 복원: 이미지 카빙
|
‘똑딱이’를 거쳐 DSLR, 미러리스까지 카메라의 발달로 사진은 오늘날 대부분의 사람들에게 매우 친숙한 일상이 되었다. 기능과 편의성이 뛰어난 디지털 카메라를 통한 이미지 생성이 증가하고 있으며, 다량의 디지털 이미지들이 다양한 경로를 통해 사람들과 단말기로 공유되고 있다. 또한 스마트폰이 일상화되면서 디지털 카메라 못지 않은 스마트폰의 카메라로 생성한 이미지는 즉각적으로 소셜네트워크서비스(SNS)를 타고 더욱 빠르게 공유된다.
|
< 연재 목차 >
1부_ 카빙, 복구와 복원: PE 카빙(7/8월호)
2부_ 카빙, 복구와 복원: 이미지 카빙(이번 호)
3부_ 카빙, 복구와 복원: 음성 카빙
4부_ 카빙, 복구와 복원: 로그 카빙
다양한 디바이스를 통해 디지털 이미지를 생성하고 이용하는 사용자들이 증가함에 따라 포렌식 분석에서도 이미지 분석의 비중이 날로 높아지고 있다. 컴퓨터나 모바일 디바이스에서 주로 사용되는 이미지의 형태, 즉 포맷은 JPG(JPEG), PNG, BMP, GIF 등이다. 이들 4가지 포맷은 디바이스의 운영체제(OS)나 애플리케이션, 온라인 프로그램에 엮여 사진, 바탕화면, 아이콘 이미지, 사용자의 프로필 등 다양한 형태로 표시된다.
기능적인 측면에서 편리함과 즐거움을 제공하는 일반적인 이미지들이 있는가 하면, 성범죄 등 각종 범죄 현장을 담고 있는 이미지는 범죄 수사의 증거로 중요하게 활용되기도 한다. 증거로서의 이미지를 확보하기 위해 사용되는 기술이 바로 카빙(carving)이다. ‘조각하다, 깎아서 만들다’라는 단어의 본래 의미처럼 카빙을 통해 간단하게 더미 파일에서 이미지를 추출하고 포맷에 맞게 조각하거나 잘라내어 이미지 형태로 만들 수 있다. 물론 깎이고 잘리는 과정을 거쳐 완전한 파일이 될 수도, 불완전한 파일이 될 수도 있다. 하지만 일부분이라도 확인이 가능하다면 수사나 분석에 상당한 도움이 될 수 있다. 이미지를 카빙하는 방법을 알아보기에 앞서 포렌식에서 말하는 이미지란 무엇인지부터 알아보자.
포렌식의 이미지란?
‘이미지’는 어떤 형태로 만들어졌을까? 포렌식에 사용되는 이미지란 ‘디바이스에서 그림으로 표시되는 항목’을 의미한다. 다양한 형태의 이미지가 있지만 이 글에서는 대표적인 이미지 형태인 JPG, PNG, BMP, GIF포맷을 중심으로 살펴보고자 한다.
이미지 파일을 카빙하기 위해서는 카빙에 필요한 특정한 데이터가 있는지 파악하는 것이 중요하다. 즉, 고유한 값을 찾는 것이 카빙시 가장 먼저 해야 할 일이다. 고유 값을 확인하고 나면 해당 파일이 분석가가 원하는(찾고자 하는) 파일이 맞는지 확인하기 위한 검증 값을 알아내야 한다. 검증 값은 파일의 구조 곳곳에서 확인할 수 있다. 이러한 전제를 토대로 이미지 카빙 방법 및 각 포맷별 특징을 알아보자.
이미지 카빙 방법
1. JPG
| JPEG(Joint Photographic Experts Group)는 정지 화상을 위해 만들어진 손실 압축 방법 표준이다. 이 표준은 ISO와 ITU-T에서 제정하였다. JPEG를 사용하는 파일 형식들도 보통 JPEG 이미지라 불리며, .jpg, .jpeg, .jpe 등의 확장자를 사용한다. *출처: 위키피디아(https://ko.wikipedia.org/wiki/JPEG) |
JPG 파일의 시작은 FFD8이라는 SOI 값으로 시작한다. 이 값을 통해 더미 파일에서 JPG 파일을 찾을 수 있으며, 각각의 구조체 시그니처를 통해 검증한 후 파일을 카빙할 수 있다.
[그림 1] 더미 파일에 나타나는 JPEG 값
구조체 시그니처 다음의 오프셋(Offset)에는 구조체의 크기와 관련된 항목을 갖고 있는 시그니처들이 있다. 이러한 시그니처들은 JPG 파일의 크기를 확인하는데 중요한 역할을 한다. JPG 파일의 구조체 및 시그니처는 [그림 2]와 같다.
[그림 2] JPG 파일 구조체 및 시그니처
2. PNG
| PNG(Portable Network Graphics)는 비손실 그래픽 파일 포맷의 하나이다. 특허 문제가 얽힌 GIF 포맷의 문제를 해결하고 개선하기 위해서 고안되었다. 파일 확장자는 .PNG 또는 .png를 쓰며, MIME 타입은 image/png로 적는다. *출처: 위키피디아(http://ko.wikipedia.org/wiki/PNG) |
PNG 파일은 89504E470D0A1A0Ah라는 시그니처로 시작한다. 이 파일은 여러 개의 청크(chunk)로 나뉘어 있으며 각각의 청크에는 CRC32 값이 붙어있어 파일 검증에 사용된다. 또한 각각의 청크는 크기를 갖고 있으므로 파일의 크기 계산시 유용하다.
[그림 3] 더미 파일에 나타나는 PNG 값
[그림 4] PNG 파일의 시그니처 및 청크
3. BMP
| BMP(Bitmap Image File) 파일 포맷은 비트맵 디지털 그림을 저장하는 데 쓰이는 그림 파일 포맷이다. 특히 마이크로소프트 윈도, OS/2 운영 체제에 널리 쓰인다. 줄여서 비트맵, 또 장치 독립 비트맵의 경우 DIB 파일 포맷이라고 한다. .BMP, .DIB의 파일 확장자 이름을 가진다. *출처: 위키피디아(http://ko.wikipedia.org/wiki/BMP_파일_포맷) |
[그림 5] 더미 파일에 나타나는 BMP 값
BMP 파일은 시그니처로부터 4Byte에 있는 값을 통해 사이즈를 확인할 수 있으며, 인포헤더(Info Header)와 비트맵 라인(Bitmap Line)의 padByte로 검증을 할 수 있다.
[그림 6] BMP 파일 구조
4. GIF
|
GIF(Graphics Interchange Format)는 비트맵 그래픽 파일 포맷이다. 1987년 컴퓨서브가 발표하였으며, 월드와이드웹에서 가장 널리 쓰이는 파일 포맷이기도 하다. 최대 256색까지 저장할 수 있는 비손실 압축 형식이다. GIF에 쓰인 LZW 알고리즘에 대한 특허를 유니시스사가 갖고 있다는 것이 알려지고, 또한 256 색의 제한에 한계를 느끼면서 PNG라는 새로운 표준이 개발되었다. 확장자는 .gif 또는 .GIF를 사용한다. |
GIF 파일은 시그니처에서 버전을 확인할 수 있어 검증이 가능하다. 또한 ImageSeperator와 Extension Label, Terminator, 그리고 Trailer를 이용하여 추가 검증이 가능하다.
[그림 7] 더미 파일에 나타나는 GIF 값
[그림 8] GIF 구조
이미지 카빙을 위한 툴
이미지 카빙을 위한 툴은 기존 PE 카빙 도구에 이미지 카빙 툴을 붙인 형태로, 아래의 다운로드 주소를 통해 이용할 수 있다.
* 이미지 카빙 툴 다운로드: https://dorumugs-tools.googlecode.com/files/Safe8M_Carving.7z
해당 툴은 파이썬(Python)으로 제작된 것으로, 사용 방법은 다음과 같다.
위와 같은 카빙 방법에서 이해되지 않은 부분은 다음의 그림을 통해 공유한 코드에서 확인할 수 있다.
[그림 9] 카빙 도구 Help 페이지
해당 툴은 Carver.py에서 다른 파이선 프로그램들을 임포트(import)하는 방법을 사용하고 있다. 이 툴이 카빙을 지원하는 파일 포맷은 아래 [그림 10]과 같다.
[그림 10] 이미지 카빙 툴이 지원하는 파일 포맷
툴을 실행하면 인풋(input) 파일에서 오프셋 확인을 통한 검증을 거친 후, 검증이 완료되면 해당 파일을 엑스포트(export) 한다. 엑스포트된 파일은 해당 파일이 위치하고 있는 오프셋이 파일명으로 부여되며, 엑스포트된 목록은 아웃풋(output) 옵션으로 주어진 폴더명에서 확인할 수 있다. 다음은 각각의 이미지 포맷별로 툴을 이용해 카빙한 결과다.
[그림 11] JPG 파일의 카빙 결과
[그림 12] GIF 파일의 카빙 결과
[그림 13] PNG 파일의 카빙 결과
[그림 14] BMP 파일의 카빙 결과
카빙된 이미지 파일 활용 방안
1. 위치 정보 파악
물론 이미지 파일은 이미지 자체만으로도 증거로 활용이 가능하다. 여기에 포렌식 분석 결과까지 더해지면 이미지 파일은 더욱 중요한 가치를 갖는 증거가 된다.
특히 이미지 파일 중 JPG 파일은 사진을 촬영한 기기명, 촬영 장소의 GPS 정보, 촬영 시간 등 다양한 정보를 담고 있어 매우 유용하다.
ExifTool은 손쉽게 JPG 파일의 정보를 확인할 수 있는 툴로, 이 툴을 이용해 [그림 15]와 같은 유용한 정보를 확인할 수 있다.
[그림 15] ExifTool을 이용해 확인할 수 있는 JPG 파일의 다양한 정보
이 정보를 이용해 [그림 16]과 같이 실제 위치를 확인할 수 있어 범죄 장소를 확인하는데 유용하다.
[그림 16] JPG 파일의 위치 정보를 통해 확인한 실제 위치
2. 데이터 숨김 여부 확인
[그림 17]의 두 개의 이미지 파일은 동일한 것처럼 보인다. 그러나 사람의 눈에 보이는 이미지만 똑같을 뿐, 실제로 이들은 각기 다른 파일들이다. MD5로 해시(Hash) 값을 비교해보면 각각의 파일이 가진 값이 다르다는 것을 확인할 수 있다. 이는 곧 파일이 갖고 있는 데이터가 다르다는 의미다. 실제로 [그림 17]의 이미지 파일 중 아래의 파일에는 스테가노그라피(Steganography) 기술을 이용해 애국가 1절의 문자열이 삽입되어 있다. 스테가노그라피란 사진이나 음악 파일, 동영상 파일 등에 특정한 정보(데이터 또는 파일)을 숨기는 기술로, 자세한 내용은 아래의 링크에서 참고할 수 있다.
* 스테가노그라피 관련 참고 문서: http://en.wikipedia.org/wiki/Steganography
[그림 17] 동일한 파일로 보이는 두 파일의 실제 MD5 값
[그림 17]과 같이 이미지 파일에 문자열을 삽입해 전송하는 방식으로 기밀 정보를 유출하는 것도 가능하다. 이 경우, 각각의 파일을 분석해야 하기 때문에 상당한 분석 시간이 소요될 수도 있다.
한편 [그림 18]은 OpenStego(http://sourceforge.net/projects/openstego/files/
)라는 프로그램을 이용해 [그림 17]의 이미지 파일에 숨겨진 데이터를 확인한 내용이다.
[그림 18] OpenStego를 이용해 확인한 숨겨진 문자열
이미지 속에 내포된 포렌식 정보
특히 카빙을 수행하면 더미 파일에서 패턴에 맞는 내용을 무작위로 추출하게 된다. 이때 ‘내보내기’된 파일의 내용도 확인할 수 있어 보유하고 있던 불법적인 데이터의 수를 파악할 수 있다. 또한 아이콘이나 기타 이미지로 설치된 애플리케이션이나 장치 사용자의 프로필 정보 등도 확인할 수 있다. 이외에도 이미지 파일은 대표적인 악성코드 유포의 수단이자 악의적인 데이터 유출의 수단으로 이용될 수 있다는 점에서 이미지 카빙은 포렌식 분석에 있어 상당히 중요한 가치를 가진다.@
- AhnLab클라우드분석팀 소재현 주임 연구원