https://forensicscontest.com/2010/05/21/puzzle-6-anns-aurora
Puzzle #6: Ann’s Aurora – Network Forensics Puzzle Contest
Our latest puzzle was written by Sherri Davidoff, Eric Fulton and Jonathan Ham. Hi! Recently we were challenged by SANS Fellow Rob Lee (author of “Computer Forensics” 508) to create a puzzle based on an Advanced Persistent Threat (APT). We thought this
forensicscontest.com

앤 더커버는 SaucyCorp의 비밀 소스 레시피를 찾고 있습니다. 그녀는 수석 개발자인 빅 팀즈를 따라다니며 SaucyCorp의 서버에 원격으로 액세스하는 방법을 알아내고 있습니다. 어느 날 밤, 정찰을 하던 중 그가 노트북(10.10.10.70)과 VPN에 로그인하는 것을 보게 됩니다.
국제 해킹 조직과의 연결을 활용하여 앤은 인터넷 익스플로러의 0-day exploit을 획득하고 빅 팀즈를 상대로 클라이언트 측 스피어 피싱 공격을 시작합니다.
앤은 비밀 소스 레시피를 개선하는 방법에 대한 팁이 담긴 이메일을 조심스럽게 작성하여 빅에게 보냅니다. 그가 탐내던 제품 개발 부사장 직함(및 코너 오피스)을 얻을 수 있는 기회를 발견한 빅은 링크를 클릭합니다. 앤은 공격할 준비가 되었습니다...
당신은 forensic 조사관입니다. 당신의 임무는 Ann의 익스플로잇이 포함된 패킷 캡처를 분석하고, 타임라인을 작성한 후, 증거를 제출하는 것입니다.
먼저 스피어 피싱이란?
불특정 다수의 개인정보를 빼내는 피싱과 달리 특정인의 정보를 캐내기 위한 피싱 공격을 뜻한다.
고로 현재 Ann이 특정인 Vick을 상대로 피싱을 시도해(탐내던 url 링크 클릭 유도) 정보를 캐내고자 하는 것으로 보인다.


hashcheck
1. 빅 팀즈의 원래 웹 요청의 전체 URI는 무엇이었나요? (URI에 포트를 포함해 주세요.)
2. 이에 악성 웹 서버는 난독화된 JavaScript를 다시 보냈습니다. 이 코드가 시작될 무렵, 공격자는 "COMMON"이라는 라벨이 붙은 1300개의 요소로 배열을 만든 다음 데이터 요소를 문자열로 채웠습니다. 이 문자열의 값은 얼마였나요?
3. 빅의 컴퓨터는 객체에 대해 두 번째 HTTP 요청을 했습니다.
a. 요청된 객체의 파일 이름은 무엇입니까?
b. 반환된 객체의 MD5sum은 얼마입니까?
4. 포트 4444에서 TCP 세션이 언제 열렸나요? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
5. 포트 4444에서 TCP 세션이 언제 종료되었나요? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
6. 패킷 17에서 악성 서버는 클라이언트에게 파일을 보냈습니다.
a. 어떤 유형의 파일이었나요? 하나를 선택하세요:
● Windows 실행 파일
● GIF image
● PHP script
● Zip file
● 암호화된 데이터
b. 파일의 MD5sum은 무엇이었나요?
7. 빅의 컴퓨터는 포트 4444의 원래 연결이 종료된 후에도 포트 4445의 악성 서버에 다시 연결하려고 반복적으로 시도했습니다. 이러한 반복적인 실패한 연결 시도와 관련하여:
a. TCP 초기 시퀀스 번호(ISN)는 얼마나 자주 변경되나요? (하나를 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
b. IP ID는 얼마나 자주 변경되나요? (하나를 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
c. 소스 포트는 얼마나 자주 변경되나요? (하나 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
8. 결국 악성 서버가 응답하여 새 연결을 열었습니다. 포트 4445에서 TCP 연결이 처음 성공적으로 완료된 시점은 언제인가요? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
9. 그 후 악성 서버는 포트 4445에서 클라이언트에게 실행 파일을 보냈습니다. 이 실행 파일의 MD5 합계는 얼마였나요?
10. 포트 4445에서 TCP 연결이 언제 닫혔습니까? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
문제가 좀 길고 뭐가 많다. 뭐라는거지... 일단 풀어보자!

일단 1번 문제는 패킷 거의 상단에서 바로 찾을 수 있었다.
9번 패킷을 보면 10.10.10.70이 10.10.10에게 GET 요청을 보낸 것을 확인할 수 있고 확인한 결과 port를 포함한 url을 획득할 수 있었다.
1. 빅 팀즈의 원래 웹 요청의 전체 URI는 무엇이었나요? (URI에 포트를 포함해 주세요.)
http://10.10.10.10:8080/index.php
2번 문제
2. 이에 악성 웹 서버는 난독화된 JavaScript를 다시 보냈습니다. 이 코드가 시작될 무렵, 공격자는 "COMMON"이라는 라벨이 붙은 1300개의 요소로 배열을 만든 다음 데이터 요소를 문자열로 채웠습니다. 이 문자열의 값은 얼마였나요?
를 풀기 위해 일단 HTTP 스트림을 따라가본다. TCP 에 js를 포함할 순 없을테니까?

예상과 같이 JS code가 심어져 있는 것을 볼 수 있다.
UW... 변수에 COMMENT 문자열을 넣고 qSNg... 변수로 배열을 생성한 후 1300 번 for문을 돌리는 형태이다.
이 qSNg.. 배열의 data 객체는 문자열 "vEI"인 것을 볼 수 있고 이 데이터 요소가 for문을 돌며 채워지는 코드 형태인 것으로 보인다.
2. 이에 악성 웹 서버는 난독화된 JavaScript를 다시 보냈습니다. 이 코드가 시작될 무렵, 공격자는 "COMMON"이라는 라벨이 붙은 1300개의 요소로 배열을 만든 다음 데이터 요소를 문자열로 채웠습니다. 이 문자열의 값은 얼마였나요?
vEI
이제 3번 문제를 풀어보자
3. 빅의 컴퓨터는 객체에 대해 두 번째 HTTP 요청을 했습니다.
a. 요청된 객체의 파일 이름은 무엇입니까?
b. 반환된 객체의 MD5sum은 얼마입니까?
HTTP 객체를 추출 해보쟈

두 번째로 요청된 객체는 gif 파일인 것을 볼 수 있고 파일 이름은
index.phpmfKSxSANkeTeNrah.gif 이다.

gif 확장자를 붙여 저장해준 후 해시값을 확인해보자

이렇게 해시값까지 구하며 3번 문제를 마무리 했다.
3. 빅의 컴퓨터는 객체에 대해 두 번째 HTTP 요청을 했습니다.
a. 요청된 객체의 파일 이름은 무엇입니까?
index.phpmfKSxSANkeTeNrah.gif
b. 반환된 객체의 MD5sum은 얼마입니까?
df3e567d6f16d040326c7a0ea29a4f41
4. 포트 4444에서 TCP 세션이 언제 열렸나요? (패킷 캡처가 시작된 후 0.1초로 반올림한 초 수, 즉 49.5초)
5. 포트 4444에서 TCP 세션이 언제 종료되었나요? (패킷 캡처가 시작된 후 0.1초로 반올림한 초 수, 즉 49.5초)
4번 문제와 5번 문제를 같이 살펴보도록 하자.

4444번 포트로 필터링을 걸고 패킷을 확인한다.
15번 패킷을 확인하면 3wayhandshake 과정이 끝나고 ACK를 반환함으로써 4444번 포트와 연결되었음을 확인할 수 있다.
1.266218초 이므로 반올림하면 1.3초가 되겠다.
종료된 시각도 쉽게 찾을 수 있다.
연결을 해제할 때에는 4wayhandshake 과정을 거친다.

1. FIN (Client -> Server)
클라이언트가 연결을 종료하기 위해 서버에 FIN 요청을 보냄
2. ACK (Server -> Client)
서버는 오키 알겠어~ 하는 신호로 ACK를 보냄
3. FIN (Server -> Client)
일정 시간 이후 서버가 이제 끝낼게~ 하는 신호로 FIN을 보냄
4. ACK (Client -> Server)
클라이언트가 확인을 하며 최종적으로 연결이 끊김
자 이제 그럼 FIN 패킷을 찾으면 된다.

이렇게 약 1600개의 패킷 통신을 한 후 연결 해제를 했음을 확인할 수 있다. 87.6초가 되겠다.
4. 포트 4444에서 TCP 세션이 언제 열렸나요? (패킷 캡처가 시작된 후 0.1초로 반올림한 초 수, 즉 49.5초)
1.3초
5. 포트 4444에서 TCP 세션이 언제 종료되었나요? (패킷 캡처가 시작된 후 0.1초로 반올림한 초 수, 즉 49.5초)
87.6초
이제 6번 문제를 풀어보쟈
6. 패킷 17에서 악성 서버는 클라이언트에게 파일을 보냈습니다.
a. 어떤 유형의 파일이었나요? 하나를 선택하세요:
● Windows 실행 파일
● GIF image
● PHP script
● Zip file
● 암호화된 데이터
b. 파일의 MD5sum은 무엇이었나요?
문제에서 친절하게 17번 패킷이라고 알려주니 17번 패킷을 보러 간다.

그렇게 17번 패킷을 보러 갔는데 4d 5a ... 어딘가 익숙한 헤더 시그니처다
그렇다 이 값은 exe 파일을 나타낸다.
그럼 a의 정답은 windows 실행 파일이 될 것이다.
해당 파일을 추출해 md 값을 확인해보자.
첨부된 파일을 더 쉽게 확인하기 위해 networkminer를 사용하였다.

networkminer로 패킷 파일을 로드해준 후 [Files]탭을 들어가게 되면 이렇게 첨부된 파일들이 카빙되어 나타나는 것을 볼 수 있다.
아까 문제 풀때 다뤘던 gif 파일 이후로 dll 파일이 카빙된 것을 볼 수 있는데
이 dll 파일 역시 헤더 시그니처 값이 4D 5A 로 exe 확장자와 같기 때문에 해당 파일이 문제에서 묻는 파일임을 유추할 수 있다.

폴더를 열어서

파일의 hash 값을 구한다.

6. 패킷 17에서 악성 서버는 클라이언트에게 파일을 보냈습니다.
a. 어떤 유형의 파일이었나요? 하나를 선택하세요:
● Windows 실행 파일
● GIF image
● PHP script
● Zip file
● 암호화된 데이터
Windows 실행 파일
b. 파일의 MD5sum은 무엇이었나요?
b062cb8344cd3e296d8868fbef289c7c
7번 문제를 풀자.
7. 빅의 컴퓨터는 포트 4444의 원래 연결이 종료된 후에도 포트 4445의 악성 서버에 다시 연결하려고 반복적으로 시도했습니다. 이러한 반복적인 실패한 연결 시도와 관련하여:
a. TCP 초기 시퀀스 번호(ISN)는 얼마나 자주 변경되나요? (하나를 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
b. IP ID는 얼마나 자주 변경되나요? (하나를 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
c. 소스 포트는 얼마나 자주 변경되나요? (하나 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
빅의 컴퓨터는 4444번 포트와 연결이 종료된 후에도 4445번 포트의 악성 서버와 다시 연결하려고 반복적으로 시도했다고 한다.
하지만 이 연결은 계속 실패했나보다.
먼저 TCP 초기 시퀀스 번호 ISN ( Initial Sequence Number ) 이란?

tcp 연결이 시작될 때 데이터 흐름을 순서대로 관리하기 위해 tcp header에 포함되어 사용되는 32비트의 난수이다.

4445번 포트로 필터를 걸고 패킷을 살펴본다.
제일 윗 패킷을 잡고 상세 정보를 확인해보면

이렇게 raw 형식의 sequence number를 확인할 수 있다.

정확히 3번째 패킷 이후 isn 값이 바뀌는 걸 볼 수 있었고 (553522758 -> 553800369)

또 정확히 3번의 패킷 이후 isn 값이 바뀌는 것을 확인했다. (553522758 -> 553800369 -> 554100968)
IP ID를 확인해보면



IP ID 는 패킷마다 1씩 증가하며 바뀌는 것을 볼 수 있다.
소스포트를 살펴보자.

1154번 패킷을 보면 35.947106 time에 1037 포트를 사용한 것을 볼 수 있고

1199번 패킷에 47.732575 time에 1038 포트로 변경되는 것을 볼 수 있다. (약 11s 차이)

다시 1314번 패킷을 보면 59.463005 time에 1039 포트로 변경되는 것을 볼 수 있다. (약 12s 차이)
7. 빅의 컴퓨터는 포트 4444의 원래 연결이 종료된 후에도 포트 4445의 악성 서버에 다시 연결하려고 반복적으로 시도했습니다. 이러한 반복적인 실패한 연결 시도와 관련하여:
a. TCP 초기 시퀀스 번호(ISN)는 얼마나 자주 변경되나요? (하나를 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
매 세 번째 패킷마다
b. IP ID는 얼마나 자주 변경되나요? (하나를 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
모든 패킷
c. 소스 포트는 얼마나 자주 변경되나요? (하나 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
매 10-15초마다
8번 문제를 풀어보겠다.
8. 결국 악성 서버가 응답하여 새 연결을 열었습니다. 포트 4445에서 TCP 연결이 처음 성공적으로 완료된 시점은 언제인가요? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
먼저 위의 패킷들을 보게되면 재연결 시도 [RST, ACK]를 지속적으로 보냄에도 Seq=0으로 연결이 계속 닫혀있는 것을 볼 수 있다.

계속해서 연결이 실패하다가 (빨간색, 검정색 패킷) 1657번 패킷에서 악성 서버가 syn ack 응답을 주었고 1044번 포트에서 ack 사인을 하며 결국 tcp 연결이 완료되었다.
0.1초 반올림을 하게되면 123.7초라고 할 수 있겠다.
8. 결국 악성 서버가 응답하여 새 연결을 열었습니다. 포트 4445에서 TCP 연결이 처음 성공적으로 완료된 시점은 언제인가요? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
123.7초
9번 문제를 보자.
9. 그 후 악성 서버는 포트 4445에서 클라이언트에게 실행 파일을 보냈습니다. 이 실행 파일의 MD5 합계는 얼마였나요?

다시 NetworkMiner로 살펴보면 S.port 4445로 되어있는 저 파일이 악성 서버가 보낸 실행 파일인가보다.
해당 파일을 아까와 같은 방식으로 해시값을 찾아본다.

9. 그 후 악성 서버는 포트 4445에서 클라이언트에게 실행 파일을 보냈습니다. 이 실행 파일의 MD5 합계는 얼마였나요?
b062cb8344cd3e296d8868fbef289c7c
10. 포트 4445에서 TCP 연결이 언제 닫혔습니까? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
포트가 닫힌 시간을 확인해보자.

서버와 클라이언트 서로 FIN 플래그를 주고받고 연결을 종료했다. 198.4초라고 볼 수 있겠다.
10. 포트 4445에서 TCP 연결이 언제 닫혔습니까? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
198.4초
정리!
1. 빅 팀즈의 원래 웹 요청의 전체 URI는 무엇이었나요? (URI에 포트를 포함해 주세요.)
http://10.10.10.10:8080/index.php
2. 이에 악성 웹 서버는 난독화된 JavaScript를 다시 보냈습니다. 이 코드가 시작될 무렵, 공격자는 "COMMON"이라는 라벨이 붙은 1300개의 요소로 배열을 만든 다음 데이터 요소를 문자열로 채웠습니다. 이 문자열의 값은 얼마였나요?
vEI
3. 빅의 컴퓨터는 객체에 대해 두 번째 HTTP 요청을 했습니다.
a. 요청된 객체의 파일 이름은 무엇입니까?
index.phpmfKSxSANkeTeNrah.gif
b. 반환된 객체의 MD5sum은 얼마입니까?
df3e567d6f16d040326c7a0ea29a4f41
4. 포트 4444에서 TCP 세션이 언제 열렸나요? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
1.3s
5. 포트 4444에서 TCP 세션이 언제 종료되었나요? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
87.6s
6. 패킷 17에서 악성 서버는 클라이언트에게 파일을 보냈습니다.
a. 어떤 유형의 파일이었나요? 하나를 선택하세요:
● Windows 실행 파일
● GIF image
● PHP script
● Zip file
● 암호화된 데이터
b. 파일의 MD5sum은 무엇이었나요?
b062cb8344cd3e296d8868fbef289c7c
7. 빅의 컴퓨터는 포트 4444의 원래 연결이 종료된 후에도 포트 4445의 악성 서버에 다시 연결하려고 반복적으로 시도했습니다. 이러한 반복적인 실패한 연결 시도와 관련하여:
a. TCP 초기 시퀀스 번호(ISN)는 얼마나 자주 변경되나요? (하나를 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
b. IP ID는 얼마나 자주 변경되나요? (하나를 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
c. 소스 포트는 얼마나 자주 변경되나요? (하나 선택하세요.)
● 모든 패킷
● 매 세 번째 패킷마다
● 매 10-15초마다
● 30-35초마다
● 60초마다
8. 결국 악성 서버가 응답하여 새 연결을 열었습니다. 포트 4445에서 TCP 연결이 처음 성공적으로 완료된 시점은 언제인가요? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
123.7s
9. 그 후 악성 서버는 포트 4445에서 클라이언트에게 실행 파일을 보냈습니다. 이 실행 파일의 MD5 합계는 얼마였나요?
b062cb8344cd3e296d8868fbef289c7c
10. 포트 4445에서 TCP 연결이 언제 닫혔습니까? (패킷 캡처가 시작된 후 10분의 1초로 반올림한 초 수, 즉 49.5초)
198.4s

전부 정답이당!
'Security Study > forensics' 카테고리의 다른 글
| [SANS Forensic Contest Puzzle] #5: Ms. Moneymany’s Mysterious Malware (0) | 2025.11.25 |
|---|---|
| [SANS Forensic Contest Puzzle] #4: The Curious Mr. X (0) | 2025.11.18 |
| [SANS Forensic Contest Puzzle] #3: Ann’s AppleTV (1) | 2025.11.14 |
| [SANS Forensic Contest Puzzle] #2: Ann Skips Bail (0) | 2025.11.05 |
| [SANS Forensic Contest Puzzle] #1: Ann’s Bad AIM (6) | 2025.08.02 |