https://forensicscontest.com/2009/10/10/puzzle-2-ann-skips-bail
네트워크 포렌식 문제 해당 링크다. 오늘 이것을 풀어보겠다.
웹사이트에 들어가면 위 사진과 같은 창이 뜬다. 스크롤을 내리면 단서나 방향성이 더 존재한다.
또한 packet capture를 클릭하면 파일을 받을 수 있다. (파일명 : evidence02.pcap)
* pcap 파일이란?
Packet capture의 약자이다. 네트워크 트래픽을 캡쳐하기 위한 API로 구성되어 있다.
[Tool] - wireshark
wireshark는 Window : Winpcap / Linux : libpcap 를 각각 사용하여 패킷을 수집한다. 이때 수집된 데이터 포맷이 pcap이라는 파일 포맷을 가진다.
pcap 파일 포멧
[Global header] - 24bytes
typedef struct pcap_hdr_s {
guint32 magic_number; /* magic number */
guint16 version_major; /* major version number */
guint16 version_minor; /* minor version number */
gint32 thiszone; /* GMT to local correction */
guint32 sigfigs; /* accuracy of timestamps */
guint32 snaplen; /* max length of captured packets, in octets */
guint32 network; /* data link type */
} pcap_hdr_t;
gunit32 : 32bit 라고 생각하면 된다.
- magic_number : 0xa1b2c3d4 (고정된 값)
- version_major, minor : 파일 포맷 버전
- thiszone, sigfigs : 시간과 관련된 것
- snaplen : 캡쳐된 패킷의 길이
- network : data-link type
[Packet Header] - 16bytes
typedef struct pcaprec_hdr_s {
guint32 ts_sec; /* timestamp seconds */
guint32 ts_usec; /* timestamp microseconds */
guint32 incl_len; /* number of octets of packet saved in file */
guint32 orig_len; /* actual length of packet */
} pcaprec_hdr_t;
- ts_sec : 패킷이 캡쳐된 시간
- ts_usec : microseconds로 나타낸 시간
- incl_len : pcap에 저장된 packet data의 길이 (snaplen 보다 클 수 없음)
- orig_len : 네트워크에서 캡쳐했을 때의 패킷 데이터의 길이. (incl_len과 다르면 snaplen의 값으로 패킷 사이즈 결정)
우선 pcap 파일을 HxD를 사용하여 Hex 분석부터 해보았다.
[Global header]
시작 부분이 little endian으로 0xa1b2c3d4가 되어있는 것을 확인할 수 있다. -> Global header의 Magic number 고정값
Global header는 24바이트의 값을 가지고 있는데 주요 정보만 확인해보면
snaplen = 0xFFFF (65535) 임을 확인할 수 있다.
[Packet header]
time 정보가 0x18 ~ 0x1F까지 저장되어 있다.
incl_len, orig_len : 0xE6으로 같은 값을 가지고 있다.
여기까지가 Packet Data 부분에 해당되며 이후 또다른 Packet header에서는 0x2A의 길이를 가지는 Packet이 존재하는 것을 알 수 있다.
이런식으로 구조 분석을 끝냈는데 옆에 decoded text에 우리가 쉽게 알 수 있는 정보들이 문자열로 포함되어 있어서 이를 더 자세히 알아보기 위해 Detect it Easy를 써서 분석해보겠다.
문제를 푸는 데에 쓸모있어 보이는 문자열들이 많이 보였다. 특히 gateway나 MAC과 같은 정보들이 담겨있는 것을 봤을 때 네트워크 관련 포렌식 문제임을 확실히 인지할 수 있었다.
[Write Up]
여기서 구해야 할 것들에 대해서 다시 살펴보자
1. What is Ann’s email address?
2. What is Ann’s email password?
3. What is Ann’s secret lover’s email address?
4. What two items did Ann tell her secret lover to bring?
5. What is the NAME of the attachment Ann sent to her secret lover?
6. What is the MD5sum of the attachment Ann sent to her secret lover?
7. In what CITY and COUNTRY is their rendez-ous point?
8. What is the MD5sum of the image embedded in the document?
1. Ann의 이메일 주소
2. Ann의 이메일 password
3. Ann의 secret lover의 이메일 주소
4. Ann이 secret lover에게 가져오라고 한 2개의 items
5. Ann이 secret lover에게 보내준 attachment의 NAME
6. Ann이 secret lover에게 보낸 attachment의 MD5 값
7. 비밀 만남 CITY와 COUNTRY
8. document에 포함된 image의 MD5 값
8개나 살펴봐야 된다. 네트워크 전용 pcap 파일을 분석하기에 용이한 tool인 wireshark를 설치하고 분석해보겠다.
https://www.wireshark.org/download.html
* Wireshark 란?
- 네트워크 패킷을 캡쳐하고, 분석하는 것에 특화된 프로그램
Wireshark를 설치한 후 실행 파일 살펴보면 다음과 같이 열 수 없던 파일이 Wireshark를 통해 열 수 있게 된다.
파일을 열어보면 이러한 것들이 많이 보이는데 네트워크 프로토콜 정리했던 것들의 유형이 Syslog에 많이 보이는 것을 확인할 수 있다. 여기서 우리는 Ann이 이메일로 주고 받았다는 문제 내용을 알고 있기 때문에 이메일 유형을 주고 받을 때 사용되는 SMTP만 filter를 통해 살펴보겠다.
* SMTP란?
Simple Mail Transfer Protocol의 약자.
네트워크를 통해 이메일을 주고 받을 때 사용하는 프로토콜이다.
SMTP가 사용된 것에서 가장 처음 것을 보니 패킷 분석 창에서 From과 To에 이메일 정보가 포함되어 있는 것을 확인할 수 있다.
✨ 1. What is Ann’s email address?
-> sneakyg33k@aol.com
✨ 3. What is Ann’s secret lover’s email address?
-> mistersecretx@aol.com
내리다 보면 "Password : NTU4cjAwbHo=" 라고 되어있는 부분이 있는데 이 부분이 2번 답이 되는 것을 짐작했다.
더 자세한 것을 보기 위해 User에 대한 정보도 찾게 되었다. User 역시 난독화되어 있는 것을 봤을 때 앞서 봤던 password도 난독화되어 있음을 짐작했다. 그럼 어떤 방식으로 난독화 되어 있는지 이걸 어떻게 decode할지 고민해보았다.
Username : c25lYWt5ZzMza0Bhb2wuY29t
좋은 디코더 사이트를 찾을 수 있었다. 여러 암호화방식으로 디코딩 및 인코딩을 진행해준다.
User 에 해당되는 부분을 넣어보니 Base64에 해당되는 것을 알 수 있었고 'sneakyg33k@aol.com' 으로 위에서 찾았던 이메일과 동일한 것을 알 수 있었다. 따라서 password에 대한 정보도 이 사이트에서 디코딩하는 과정을 통해 구할 수 있었다.
✨ 2. What is Ann’s email password?
-> 558r00lz
이거 이후로 좀 많이 막혔다. 아직 Wireshark를 쓰는 법이 미숙해서 찾아보고 이것 저것 건들면서 시간이 많이 소비되었다.
그러다가 와이어샤크 메뉴에서 (통계 -> 대화) 를 클릭해봤는데
TCP 부분에서 주소 A를 가지는 Ann이 주소 B를 가지는 상대방에게 보내는 것이 두 번 있었다는 것을 확인할 수 있었다. 이걸 기점으로 분석을 해봤는데 이 때 사용하기 좋은 기능이 와이어샤크 메뉴에서 (분석 -> 따라가기 -> TCP 스트림) 인 것을 확인할 수 있었다.
첫 번째 대화이다. From에 적힌 mail 주소는 같은데 To 주소가 조금 다른 것을 확인할 수 있었다. (sec558@gmail.com)
내용을 확인해보니 대충 점심 먹자는 것을 주제로 대화를 나누고 있었고 별 큰 소득은 없었다.
오른쪽 아래에 스트림 0 되어있는 것을 1로 올려보았다. (대화가 2개라고 했으니)
초반부에 찾았던 상대방의 이메일 주소를 확인할 수 있었다. 두번째에 보냈을 때 상대방의 이메일 주소가 달라진 것 같다.
Subject를 주목해볼만 하다. rendezvous -> 랑데부, 특정 시간 및 장소에서 밀회를 의미하는 것인 만큼 이 부분에 우리가 찾는 중요한 정보들이 있음을 짐작할 수 있었다.
✨ 4. What two items did Ann tell her secret lover to bring?
-> fake passport, bathing suit
를 확인할 수 있다.
내리다 보면 새로운 내용들과 난수들이 보인다.
이중 name = "secretrendezvous.docx"를 확인할 수 있다.
✨ 5. What is the NAME of the attachment Ann sent to her secret lover?
-> secretrendezvous.docx
이제 다음의 3개만 구하면 된다.
6. Ann이 secret lover에게 보낸 attachment의 MD5 값
7. 비밀 만남 CITY와 COUNTRY
8. document에 포함된 image의 MD5 값
밑의 엄청난 길이의 난수 역시 암호화되어 있다 생각했고, 앞서 BASE64로 password를 찾아냈던 것 처럼 전체를 복사해서 해독해보았다.
역시 알 수 없는 문양으로 나온다. 파일 자체를 다운받아야 되는데 어떻게 해야할 지 고민하다가 찾아보았다.
찾아보니 wireshark에서 저 부분을 다른 이름으로 저장 할 때 .eml 파일로 저장하면 된다고 한다.
.eml 파일이란?
이메일 확장자 : 이메일을 하나의 문서로 저장할 때 사용되는 확장자이다.
USB나 컴퓨터에 보관 가능
.eml 파일로 저장하고 열어보니 아래와 같은 화면이 뜬다.
우리가 찾았던 file 명에 해당하는 파일을 다운받을 수 있었다.
docx 파일을 열어보면 다음과 같은 글과 이미지가 존재한다.
6번을 풀기 위해서는 파일의 MD5 sum을 알아야 한다. 전에 MD5를 사용했을 때는 string에 대해서만 가능한 사이트에서 사용했기 때문에 새롭게 사이트를 찾아보았다.
https://www.strerr.com/ko/md5_file.html#google_vignette
이 사이트에서 파일을 선택하여 MD5를 구한 결과는 다음과 같다. (이미지 파일도 동일)
✨ 6. What is the MD5sum of the attachment Ann sent to her secret lover?
-> 9e423e11db88f01bbff81172839e1923
✨ 7. In what CITY and COUNTRY is their rendez-ous point?
-> Country : Mexico / City : playa del carmen
마지막 고민이었다. 삽입되어 있는 img 파일을 따로 빼서 MD5sum을 구하자니 값이 달라지고 경로도 이상해질 것이 뻔하기 때문에 그렇게 하지 못했다. 8번에 대한 답을 찾기 위해 고민을 많이 해보았다.
찾아보다가 docx파일과 zip파일의 구조가 동일하다는 정보를 발견했다.
다음은 워드 파일에 삽입된 모든 그림을 일괄적으로 추출하는 방법이다.
1. Windows 탐색기에서 원본 docx 파일을 복사한다.
2. 사본 파일의 확장자를 .docx에서 .zip으로 바꾼다.
3. zip 파일의 압축을 푼다.
4. word\media 폴더에 가보면 image1과 같은 이름의 이미지 파일이 있을 것이다.
그렇기 때문에 docx 파일을 zip파일로 바꿔서 그 내부에서 이미지 파일을 추출할 수 있게 되는 것이다.
zip파일로 바꾸고 압축을 해제핸 다음 경로를 따라가보니(word\media) image파일이 원본으로 존재함을 확인할 수 있었다.
아까와 같은 MD5 계산 사이트에서 해본 결과 다음과 같다.
✨ 8. What is the MD5sum of the image embedded in the document?
-> aadeace50997b1ba24b09ac2ef1940b7
기초적인 문제일지라도 모든 것을 처음 하다보니 접근하는 방식이 굉장히 어렵고 낯설다. 하나하나 고민을 먼저 해보고 검색하면서 알아가는 과정을 거치니 배우는게 많은 문제인 것 같다.
참고
https://dragon82.tistory.com/10
https://wiki.wireshark.org/Development/LibpcapFileFormat#record-packet-header
https://leehojune.tistory.com/6
'Forensic' 카테고리의 다른 글
[Forensic] USB 패킷 분석 (wireshark) / What did I write??? - Network (0) | 2024.07.29 |
---|---|
[Forensic] Ann’s AppleTV 문제 풀이 (evidence03) - Network (0) | 2024.07.29 |
[Forensic] suninatas 29번 (써니나타스 29번 - Disk 문제) (0) | 2024.07.25 |
[Forensic] FAT32 / NTFS / exFAT 파일시스템 정리 (2) | 2024.07.25 |
[Forensic] zipper (3) | 2024.07.24 |