블로그 이전했습니다. https://jeongzero.oopy.io/
LMG Network Forensic puzzle contest 6번
본문 바로가기
워게임/Puzzle contest

LMG Network Forensic puzzle contest 6번

728x90

1. 시나리오 

 

앤은 Vick의 컴퓨터에 VPN으로 접속해서 스피어 피싱 공격을 하려한다.

앤의 행동을 감시하라 !!

 

Vick의 아이피 : 10.10.10.70

 

 

2. 수집할 증거들

 

증거가 많아 바로 문제풀이로 넘어가겠음.

 

3. 문제풀이

 

1.Vick Timmes의 원래 웹 요청의 전체 URI는 무엇입니까? (URI에 포트를 포함하십시오.)

 

이건 머.. 그냥 패킷을 열자마자 맨 첫번째 패킷을 보면 알 수 있다..

 

그림 1

Vick의 아이피는 10.10.10.70이니

 

정답 : http://10.10.10.70:8080/index.php 

 

 

2.이에 대해 악의적 인 웹 서버는 난독 화 된 JavaScript를 다시 보냈습니다. 이 코드의 시작 부분에서 공격자는 "COMMENT"라고 표시된 1300 개의 요소가있는 배열을 만든 다음 데이터 요소에 문자열을 채 웁니다. 이 문자열의 값은 무엇입니까?

 

 

그림 2

자바 스크립트 코드를 심었을 것이므로 HTTP프로토콜로 필터링을 걸어보았다.

 

처음에 인덱스.php를 요청한뒤 index.phpmf~~~.gif 를 요청하는 걸 볼 수 있다. 

 

해당 HTTP 스트림을 확인해보면 자바스크립트 부분을 확인 가능하다.

 

 

그림 3

 

UW~~ 라는 변수에 "COMMENT" 문자열을 넣고 qSN~~ 배열을 생성한다.

 

생성한 배열도 다 객체이므로 디폴트로 멤버 변수 값을 가지고 있다.

 

개발자 도구로 해당 코드 실행 시

배열의 크기를 10개로 해놓고 인덱스 0의 멤버변수들을 보면 다음과 같다. 

 

맨 밑에 data 영역에 "vEI" 가 들어간 것을 볼 수 있다.

 

정답 : vEL

 

 

 

3. Vick의 컴퓨터는 객체에 대해 두 번째 HTTP 요청을 했습니다

   a. 두번째로 요청한 파일의 이름은?

   b. 해당 파일의 MD5sum 값은?

 

HTTP 오브젝트를 추출해보자.

 

그림 4

두번 쨰로 index.phpmfK~~ 라는 gif 파일을 요청했다.

 

a 정답 : index.phpmfKSxSANkeTeNrah.gif

 

해당 gif 파일을 다운 받아서 Md5 체크섬을 확인 해보자.

 

b 정답 : df3e567d6f16d040326c7a0ea29a4f41

 

 

 

4. 포트 4444의 TCP 세션은 언제 열렸습니까? (패킷 캡처가 시작된 이래로 초 수를 1/10로 반올림)

 

tcp.port==4444 로 필터링을 걸면

 

그림 5

15번 째 패킷은 1.266218초에 4444번에 대한 TCP세션이 성립되었다.

 

0.1 단위로 반올림 하라고 했으므로 

 

정답 : 1.3초

 

 

 

 

5.포트 4444의 TCP 세션이 언제 닫 혔습니까? (패킷 캡처가 시작된 이래로 초 수를 1/10로 반올림하여 49.5 초 제공)

 

이 역시 tcp.port==4444 로 필터를 걸어 확인해보면 FIN 패킷이 언제 나타나는 지를 통해 알 수 있다.

 

그림 6

정답 : 87.6초

 

 

 

6. 패킷 17에서 악성 서버가 파일을 클라이언트로 보냈습니다.

  1. 어떤 유형의 파일 이었습니까?
  2. 해당 파일의 Md5sum 값

17번 패킷의 TCP 스트림을 열어보면 다음과 같다.

 

그림 7

 

MZ 아스키 값이 있는 걸로 보아 해당 PE파일을 클라이언트에게 보낸 것 같다.

 

1) 답 : PE 파일

 

그렇다면 해당 파일을 저장하여 파일의 체크섬을 확인해 보자.

 

여기서 foremost라는 툴을 사용하였다.

 



 

17번 패킷을 raw 데이터로 저장한뒤 칼리리눅스에서 foremost명령어를 사용해보자.

 

파일이름 6666으로 저장함

6666이란 이름으로 저장했는데 foremost의 결과로

 

00000000.dll 파일 추출

 

dll 파일이 하나 추출되었고 해당 파일의 체크섬을 확인해보면 답이 된다

 

 

체크섬 계산

 

정답 : b062cb8344cd3e296d8868fbef289c7c 

 

 

 

 

7. Vick의 컴퓨터는 포트 4444의 원래 연결이 닫힌 후에도 포트 4445의 악성 서버로 다시 연결을 시도했습니다. 이러한 반복 된 실패한 연결 시도와 관련하여 :

 

 

a. TCP 초기 시퀀스 번호 (ISN)는 얼마나 자주 변경됩니까? (하나 선택하십시오.)

  • 모든 패킷
  • 매 3 번째 패킷
  • 매 10-15 초마다
  • 매 30-35 초마다
  • 매 60 초마다

 

 

tcp.port==4445 로 필터링을 걸어서 확인을 해보자.

 

 

그림 8

 

현재 10.10.10.70에서 4445번 포트에 대해서 SYN을 보내지만 해당 포트는 닫혀있기 때문에 RST,ACK를 보내게 된다

 

그 후에도 10.10.10.70은 계속 재전송을 하고 있다. 이때의 과정을 살펴보자면 

 

4445번 포트 연결 과정

 

처음에 SYN을 시퀀스 넘버 0 으로 해서 보내지만 서버는 닫혀있기 떄문에 RST,ACK를 시퀀스 넘버1로 해서 다시 보낸다.

그리고 빨간색 부분이 재전송하는 패킷으로 다시 시퀀스 넘버 0 으로 해서 SYN을 보내고 위 과정을 반복적으로 거친다.

 

따라서 TCP 시퀀스 넘버는 3번째 패킷마다 리셋되는 걸 확인 할 수 있다.

 

정답 : 매 3번째 패킷

 

 

 

b. IP ID는 얼마나 자주 변경됩니까? (하나 선택하십시오.)

  • 모든 패킷
  • 매 3 번째 패킷
  • 매 10-15 초마다
  • 매 30-35 초마다
  • 매 60 초마다

아이디 : 359

 

아이디 0

 

아이디 360

 

따라서 IP의 ID는 매 패킷마다 달라진다.

 

정답 : 모든 패킷

 

 

 

 

c 원본 포트는 얼마나 자주 변경됩니까? (하나 선택하십시오.)

  • 모든 패킷
  • 매 3 번째 패킷
  • 매 10-15 초마다
  • 매 30-35 초마다
  • 매 60 초마다

 

그림 8을 보면 처음 10.10.10.70 에서 1037의 포트번호로 4445 포트에 접근한다. 그렇다면 이 1037 포트, 즉 출발지 주소의 포트번호가 바뀌는 곳을 확인해보면 된다.

 

포트번호가 바뀌는 시간

 

따라서

 

- 1037포트를 사용한 시간 : 35.947030초 (그림8 참고)

- 1038포트를 사용한 시간 : 48.096126초

 

48.0 - 35.9 = 12.1 초(대략)

 

정답 : 매 10- 15초 마다

 

 

 

 

8. 결국, 악의적 인 서버가 응답하고 새로운 연결을 열었습니다. 포트 4445의 TCP 연결이 처음 성공적으로 완료된 시점은 언제입니까? (패킷 캡처가 시작된 이래로 초 수를 1/10로 반올림하여 49.5 초 제공)

 

 

그림 9

서버는 RST,ACK을 보낸다. 왜? 포트가 닫혀있기때문에. 하지만 서버가 SYN,ACK를 보냈다는 뜻은 결국 해당 포트에 접속이 열렸다는 소리이다.

 

123.674296초에 세션이 열렸다

 

정답 : 123.7초

 

 

 

9.그런 다음 악성 서버가 포트 4445에서 실행 파일을 클라이언트로 보냈습니다.이 실행 파일의 MD5sum는?

 

세션이 성립된 후 서버에서 먼가 보냈다고 한다. 해당 TCP 스트림을 확인해보자.

 

그림 10

 

따라서 해당 RAW데이터를 저장하고 foremost 툴을 사용하여 실행파일을 추출해보자.

 

 

그림 11

 

해당 패킷에서 dll 파일이 추출되었고 md5체크섬이 다음과 같이 나온걸 확인할 수 있다.

 

 

 

 

10. 포트 4445의 TCP 연결이 언제 닫 혔습니까? (패킷 캡처가 시작된 이래로 초 수를 1/10로 반올림)

 

그림 12

정답 : 198.5초
728x90