2. Ann Skips Bail / SMTP 패킷 분석
1. 개요
문제로는 아래와 같습니다.
Ann이란 인물이 보석으로 석방 뒤 사라지게 됩니다. 그리고 Ann의 애인 X씨와 소통을 했을 것이라고 경찰서장은 추측하였고 Ann이 네트워크 통신으로 어떤 행위를 했는지를 캡쳐 한 pcap을 이용하여 Ann이 어디로 갔는지 파악하고 증거를 수집하는 과정입니다.
2. 분석과정
2.1 개요
분석할 파일이 pcap파일 밖에 주어지지 않았으니 pcap 파일을 분석해 보았고, 해당 캡쳐에는 여러 패킷이 있었지만 그 중 외부와 연결한 흔적이 있는 프로토콜로는 TCP, SMTP가 있었고 프로토콜 사용 IP는 아래와 같았습니다.
192.168.1.159 : 사설 IP로 내부 망, Ann
64.12.102.142 : 공인 IP로 외부 망, SMTP Server
위와 같이 추정이 가능하고 크게 TCP Stream이 2개있었습니다. 이 Stream은 SMTP가 어떤 정보를 주고 받았는지를 담고 있었고 이를 바탕으로 분석을 진행하였습니다.
2.2 SMTP 패킷 분석
2.2.1 SMTP 동작 과정
pcap에서 뽑아낸 Stream 0의 일부분입니다.
위 빨간 박스 안을 확인해보면 여러 정보를 주고 받은 걸 확인해볼 수 있는데 앞의 숫자는 Respons code라고 불리우는 이메일 모니터링을 위한 코드 입니다. 이 코드들을 주고 받으면서 서로 통신에 필요한 것을 요청하고 응답이 가능하게 됩니다. 일단 이러한 상태코드들은 나중에 보도록 하고 SMTP의 동작 과정부터 확인해 보도록 하겠습니다.
설명에 앞서 위 그림에서는 Bob과 Alice가 메일을 주고받는 상황입니다. 위 과정을 정리해 아래에 풀어 보았습니다. 각 코드에 대한 설명은 조금 더 아래에서 할 예정이니 어떤 행위를 하는지 정리하겠습니다. 정리과정에 앞서 Bob의 SMTP Server를 B Server, Alice는 A Server라고 편의상 줄여 말하겠습니다.
1. Bob이 Alice와 통신을 위해 A Server에 ‘EHLO’ 라는 명령을 담은 패킷을 보냄
* EHLO는 Exteneded Helo라는 뜻
2. EHLO 명령을 받은 A Server는 250 응답 코드를 보내게 됨
3. 누가 A Server에 메일을 보내는지 MAIL FROM 명령과 함께 E-mail 주소를 알려줌
4. A Server에서 B Server로 250 응답 코드를 보내게 됨
5. B Server에서는 보내는 사람이 누구인지 RCPT TO 명령과 함께 E-mail 주소를 알려줌
6. A Server에서 B Server로 250 응답 코드를 보내게 됨
7. B Server에서는 DATA 명령을 담은 패킷을 A Server로 보냄
8. A Server에서는 B Server로 354 응답코드를 회신
9. B Server에서 A Server로 한 줄씩 메일 내용을 보내게 됨, 이 행위는 ‘.’ 문자가 나올 때 까지 지속
10. ‘.’ 문자가 B Server로 오게 되면 250 응답코드를 A Server로 보냄
11. B Server에서는 세션을 종료하기 위해 QUIT 명령을 담은 패킷을 A Server로 전송
12. A Server에서는 221 응답 코드를 B Server로 보내고 동시에 세션을 종료
위에서 나온 명령과 응답 코드에 관한 내용으로는 아래와 같습니다.
명령 |
설명 |
EHLO |
ESMTP Server에서 사용되는 HELO명령 |
HELO |
도메인 이름을 사용하여 Client 식별하기 위한 명령 |
MAIL FROM |
메시지를 보낸 사람을 식별하기위해 사용 |
RCPT TO |
메시지를 받는 사람을 식별하기위해 사용 |
DATA |
Client의 메시지를 받기 직전 내용 초기화를 위해 사용 |
QUIT |
세션 종료를 위해 사용 |
위 EHLO 명령의 설명에 ESMTP란 Extended SMTP로 확장 SMTP로 해석이 가능합니다. 초기 SMTP에서는 Text를 주고받는게 전부였지만 시대가 발전하면서 첨부파일을 추가하기 위해 만들어지게 되었습니다. 이를 사용하기 위해서는 Server측이 ESMTP를 지원하는지를 알아야 Client와 통신이 가능합니다.
참고한 사이트는 아래에 정리할 예정이고 위의 명령어 외에도 많은 명령어를 추가로 원하신다면 위 사이트에 정리가 잘 되어 있습니다.
다음으로는 SMTP 응답 코드를 알아보도록 하겠습니다. 이 또한 표로 아래에 정리하였습니다.
코드 |
설명 |
220 |
SMTP가 준비 되었음을 알려주는 코드 |
250 |
해당 요청에 관한 명령을 수행 하였음을 알리는 코드, 명령에 따라 여러 개의 코드 전송 가능 |
354 |
메시지를 받을 준비가 되었고 어떠한 문자가 끝으로 전송될 시 끝남을 알려줌 |
221 |
세션 종료를 알리는 코드 |
여기 까지가 응답 코드로 더 많은 응답 코드를 알고 싶으면 참고한 사이트를 아래 첨부할 예정이니 그쪽으로 가서 확인하시면 될 것 같습니다.
일단 응답 코드와 명령을 위 과정에 조합하면 전체적인 동작 과정이 이해가 될 것입니다. 하지만 해당 분석에서 사용되는 SMTP 패킷에는 좀더 많은 Data를 포함하고 있고 이 과정은 다음 장에서 확인해 보도록 하겠습니다.
2.2.2 PCAP SMTP packet 분석
2.2.1 장의 첫번째 그림의 빨간 상자를 확대한 모습입니다. 2.2.1에서 공부한 과정도 있고 아닌 부분도 있습니다. 일단 줄 단위로 나누어 정리하여 설명하겠습니다.
1 : 220 응답코드로 SMTP Server가 준비가 되었음을 알림. SMTP Server의 도메인과 함께 ESMTP를 지원 하는것을 알림
2 : ESMTP에서 사용하는 HELO 명령인 EHLO 명령을 자신의 host가 누구인지와 함께 Server로 보냄
3 : SMTP Server 측에서 OK 명령이 내려옴
4 ~ 5 : 해당 SMTP Server에는 인증을 사용하고 있고 메커니즘으로는 XAOL-UAS-MB를 사용하고 있음. 해당 메커니즘은 AOL Mail이라는 웹 기반 메일 서비스에서 사용하고있는 메커니즘으로 자세한 내용은 얻기 힘듬
6 : TLSSTART 명령을 Client측으로 보냈음. Client 측에서 TLS를 지원해야 하고 만약 명령이 수행되면 Server로 StartTLS 라는 명령을 회신하며 TLS가 시작됨
7 ~ 8 : 해당 라인의 설명은 길어 아래 따로 첨부
9 ~ 11 : AOL mail에서 사용되는 명령으로 뜻은 모름
12 : SMTP 에서 지원하는 명령 목록을 반환해주는 명령(AOL mail에서 사용되는듯)
13 : 위 4 ~ 5 라인에 대한 응답으로 로그인 요청을 수행
14 : 334 응답코드는 요청 된 메커니즘이 수락 되었음을 알리고 인증 요청을 수행. 위에서 사용된 XAOL-UAS-MB 메커니즘에서는 인증 시 Base64 Encoding되어 실행이 되는 듯함. 해당 문자열을 Decoding 진행 시 ‘Username:’ 이라는 문자열이 나오는 것을 봐서 사용자 이름을 묻는 명령으로 해석 가능
15 : 해당 문자열도 Decoding 진행 시 ‘sneakyg33k@aol.com’ 라는 문자열을 얻을 수 있음
16 ~ 17 : 이 부분은 Decoding 진행 시 각각 ‘Password:’, ‘558r00lz’ 라는 문자열을 얻을 수 있음
18 : 235 응답코드는 인증에 성공했을 시 나오는 응답코드로 반대로 인증 실패 시 나오는 코드는 535
19 : E-Mail을 보내는 사람을 식별
20 : SMTP Server에서 OK sign
21 : E-Mail 받을 사람을 식별
22 : SMTP Server에서 OK sign
23 : 메시지 전송을 시작해도 좋다는 명령인 DATA 명령
24 : 354 응답코드로 메시지의 끝 문자를 알리고 SMTP Server로 전송 시작
상당히 많은 작업을 거치게 되어 메시지가 전송되는 모습입니다. 위 패킷에서는 Ann측에서 상대방에게 메일을 보내기 위해서 서버와 세션을 맺는 상황이고 24 Line이 끝나고 나면 메시지 전송이 아래와 같이 시작됩니다.
아까 위에서 설명하지 못한 7 ~ 8 Line에 대한 설명은 다음과 같습니다. CHUNKING은 대용량 E-Mail을 위해 사용되는 Framework입니다. BINARYMIME 명령 사용시 무조건 사용해야 하고 BINARYMIME 명령 외에도 쓸 수 있는 명령이 있고 이는 아래에 관련 사이트를 첨부하겠습니다. BINARYMIME은 메시지를 MIME format으로 만들어주는 명령으로 MIME format은 E-Mail을 위한 표준 format입니다. MIME format을 사용시 전송할 때 수용할 수 있는 bit수가 늘어나 대용량 메시지가 첨부 가능하게 됩니다. 또한 CHUNKING 사용시 DATA 명령 대신 BDAT(Binary DATA) 명령으로 대체되고 DATA 명령이 '.'을 이용해 메시지의 끝을 알았던 반면 BDAT은 메시지의 크기를 같이 첨부하여 보내고 받는 쪽에서 받은 메시지의 크기를 검사 후 첨부된 메시지 크기와 동일하면 메시지의 끝을 알 수 있습니다.
여기까지 오면서 많은 정보를 얻었고 그걸 토대로 정답을 몇 칸 채울 수 있습니다.
Q1. Ann의 E-Mail 주소는? : sneakyg33k@aol.com
근거 : 해당 IP를 사용하여 E-Mail을 하는게 Ann이라는 추측을 위에서 했었고 무엇보다 메시지의 From 부분에 ‘Ann Dercover’ 라고 쓰여 있음
Q2. Ann의 E-Mail Password? : 558r00lz
근거 : 해당 E-Mail을 사용하여 인증 진행 시 사용된 Password
여기 까지 채울 수 있을 것 같습니다. 나머지는 조금 더 분석하여 찾아보도록 합시다. 다음으로는 3번 Ann의 비밀애인의 E-Mail 주소를 알아내기 위해서 E-Mail 내용을 하나씩 읽어보도록 합시다. 확인해 보니 아래와 같은 문구가 작성된 것을 알 수 있습니다.
해석해보면 연인이라고 하는 인물에게 인사하고 가짜 여권과 수영복을 가져오라고 합니다. 그리고 주소는 첨부되어 있다고 되어있습니다. 이를 통해서 해당 E-Mail은 숨겨진 연인에게 보낸 E-Mail임을 추측할 수 있습니다. 확실하지는 않지만 정황상의 근거로 답을 채울 수 있습니다. 또한 가져오라고 한 두가지 물건도 알 수 있습니다.
Q3. Ann의 숨겨진 연인의 E-Mail 주소? : mistersecretx@aol.com
근거 : E-Mail 내용 중 Sweetheart라는 문구가 있음 이를 통해 해당 E-Mail이 숨겨진 연인에게 보낸 메시지임을 추측할 수 있음
Q4. Ann이 연인에게 가져오라고 한 두 가지 물건 : Fake passport(가짜 여권), Bathing suit(수영복)
다음으로 넘어가 숨겨진 연인에게 보낸 첨부 파일의 이름도 알아보도록 합시다. 이것 또한 메시지 내용에서 간단하게 찾을 수 있습니다. 해당 부분은 아래와 같습니다.
위 사진에서 보듯 파일이 첨부되어 있고 파일이름은 ‘secretrendezvous.docx’ 라고 적혀 있습니다. 이를 토대로 다음 문제인 5번도 채울 수 있습니다.
Q5. Ann이 숨겨진 연인에게 보낸 첨부 파일 이름? : secretrendezvous.docx
근거 : Content가 있고 해당 Content 처리를 첨부한다고 명시되어 있으며, 첨부되어 있는 파일은 해당 파일 밖에 없음
여기까지 패킷 분석을 통하여 알아낼 수 있는 답이고 다음으로 넘어가 File Carving을 진행하여 Packet 상에 있는 Raw data를 사용해 해당 파일을 복구하여 나머지 답을 알아낼 수 있습니다.
2.2.3 File Carving
전 문제 1번에서도 File Carving을 진행하여 파일을 얻었었는데 이번 문제에서도 나왔으니 비슷한 방식으로 진행해 볼까 합니다. 일단 1번 문제에서는 Raw data를 HxD에 넣고 Signature 값을 찾아 파일을 원본 형태로 깎아서 파일 복구를 진행하였지만 이번 문제는 조금 다릅니다. 바로 위의 그림에서 ‘Content-Transfer-Encoding: base64’ 문자열은 파일을 base64로 인코딩하여 전송하게 설정되어 있음을 알려주고 확인해 보면 전송 파일의 내용이 base64로 Encoding 되어 있는 것을 알 수 있습니다.
그럼 이 문자열을 가지고 와서 Decoding을 진행한 뒤 복구를 진행하여야 하기 때문에 해당 TCP Stream의 Save as.. 버튼을 클릭하여 저장하도록 하겠습니다.
아무 이름으로 저장하고 저 같은 경우에는 평소에 자주 애용하는 Text editor가 있어서 해당 툴을 가지고 진행하였습니다. 툴 이름은 notepad++로 여러 플러그인들이 있고 많은 format 지원 등등 많은 기능이 있으니 사용해 보신적이 없으시다면 추천합니다. 본론으로 넘어와서 저장한 파일을 열어보면 Ecoding된 문자열 외에 다른 Packet들의 Data들이 많이 있습니다. 파일 복구를 위해 필요 없는 부분을 전부 지워 줍시다.
이렇게 파일의 본 문자열만 가지고 온 뒤 Decoding을 진행하면 위와 같이 16진수가 들어가 있는 문자열이 나오게 됩니다. 저는 Notepad++의 Decoding 기능을 사용하였지만 구글에 검색하면 여러 웹 Decoder가 있으니 필요 하신분은 참고하시기 바랍니다.
이렇게 Decoding된 파일을 저장 후 확인해 보도록 합시다. 일단 .docx 파일의 Signature는 ‘50 4B 03 04’ 이고 HxD로 확인해본 결과 바로 Signature가 바로 앞에 존재하는 것을 알 수 있습니다. 하지만 해당 Signature 값은 다른 PK파일들도 많이 사용하는 Signature값이라 확실한지는 알 수 없습니다. 그래서 다른 docx 파일과 구조를 비교해 보았습니다.
이 그림에 나온 Signature는 복구한 docx 파일이고
이 사진은 우 클릭으로 생성한 빈 docx파일 입니다 문자 Encoding 문제로 조금 다르지만 앞의 Content_Types라는 문구가 똑같은 것을 보니 신뢰가 조금 가기 시작합니다. 그럼 복구한 파일을 메일의 첨부파일과 똑 같은 이름과 확장자로 변형 후 열어 보겠습니다.
파일을 열어보았더니 한 줄의 문구와 사진이 첨부되어 있습니다. 아무런 오류 없이 열린 것으로 보아 복구는 성공적으로 진행되었고 이로서 6번 문제의 답을 적을 수 있습니다.
Q6. Ann이 숨겨진 연인에게 보낸 첨부 파일의 MD5 : 9E423E11DB88F01BBFF81172839E1923
근거 : 모든 문제가 끝나고 마지막 8번과 함께 작성
또한 파일의 사진을 보면 7번 문제의 정답도 알 수 있습니다.
Q7. 어느 도시, 국가에서 만남? : Playa del carmen, Mexico (플라야 델 카르멘, 멕시코)
근거 : 첨부 된 사진
이렇게 마지막 한 문제인 8번만을 남겨 두고 있습니다. 문서에 포함된 이미지의 MD5를 구하면 되는데 이 부분은 쉬워 보이지만 지식이 조금 필요합니다. 풀기에 앞서 docx 파일의 구조를 먼저 알아야 합니다. docx 파일은 기본적으로 많은 xml 파일이 모여 압축된 파일이라고 볼 수 있습니다. 그래서 HxD로 둘러보면 .xml 확장자가 많습니다. 이렇게 압축된 형태이다 보니 zip 파일과 Signature또한 같습니다. 정확하지는 않지만 이러한 Signature를 가진 바이너리 파일은 알집, 반디집 등으로 열어볼 수 있습니다. 아래는 복구한 파일을 알집으로 열어본 결과 입니다.
아까 HxD에서 보았던 Content_Types라는 이름의 xml파일이 눈에 보입니다. 그렇다면 이 docx 파일의 내부에 사진이 첨부가 되어있으니 찾아보도록 하겠습니다.
Word/media 경로에 이미지가 하나 확인되었습니다. 압축을 풀어서 확인해 보니 첨부되어 있는 파일이 맞습니다.
이제 문제 8번의 답도 적을 수 있게 되었습니다.
Q8. 문서에 포함 된 이미지의 MD5? : AADEACE50997B1BA24B09AC2EF1940B7
6번에 대한 근거로는 이러한 docx 파일의 구조가 근거이자 증명으로 말할 수 있습니다. 파일의 복구가 제대로 되지 않았을 경우 word에서 파일을 열여 볼 경우 파일 복구 경고 팝업이 나타나고 알집에서는 오류가 나면서 제대로 열리지 않게 됩니다. 이러한 실행 결과를 근거로 조금 억지스럽지만 내세울 수 있습니다.
다음으로 8번은 6번의 근거가 정확하다는 전제하에 docx 파일의 구조가 근거가 될 수 있습니다.
3. 정답 정리
Q1 : Ann의 E-Mail 주소는?
Q2 : Ann의 E-Mail Password?
A : 558r00lz
Q3 : Ann의 숨겨진 연인의 E-Mail 주소?
Q4 : Ann이 연인에게 가져오라고 한 두 가지 물건
A : Fake passport(가짜 여권), Bathing suit(수영복)
Q5 : Ann이 숨겨진 연인에게 보낸 첨부 파일 이름?
A : secretrendezvous.docx
Q6 : Ann이 숨겨진 연인에게 보낸 첨부 파일의 MD5?
A : 9E423E11DB88F01BBFF81172839E1923
Q7 : 어느 도시, 국가에서 만남?
A : Playa del carmen, Mexico (플라야 델 카르멘, 멕시코)
Q8 : 문서에 포함 된 이미지의 MD5?
A : AADEACE50997B1BA24B09AC2EF1940B7
4. 후기 및 참고 사이트
생각보다 SMTP 동작방식이 이해가 잘 안가서 조금 힘들었습니다. 하지만 연관 지으면서 천천히 풀어나가니 잘 풀렸던 것 같습니다. 또한 ESMTP와의 차이와 명령어들이 찾아봐도 잘 안 나오는게 많아서 애먹기도 했지만 조금 오래된 문서들을 찾아보니 나오기도 하더군요. 역시 검색으로 안 나오는게 없는 것 같습니다. 추가적으로 문제 3번을 가져오기위해 공식 사이트로 들어가니 11월 중순 쯤부터 에러인지 일부러 한건지는 모르겠지만 내용이 전부 사라졌습니다. 혹시 다시 퍼즐이 나온다면 다음 문제를 풀어볼 예정입니다.
아래는 참고 사이트 들입니다.
SMTP 명령
SMTP 설명
응답 코드
로그인 인증
Chunking
'포렌식 > LMG Forensicscontest Puzzle' 카테고리의 다른 글
1. Ann’s Bad AIM (0) | 2020.09.11 |
---|