CTF-D/Network

[Network] 나는 힉스 입자가 발견되지 않을 것이라고

Ron Weasley 2022. 1. 25. 21:52

CTF-D에 있는 "나는 힉스 입자가 발견되지 않을 것이라고" 문제를 풀어 보겠습니다.

문제를 보겠습니다.

파일이 하나 주어졌네요. 다운을 받으면 다음과 같은 확장자가 없는 파일이 나옵니다.

hex에디터로 열어 보겠습니다.

열어보니 다음과 같이 빨간 사각형을 보면, 7zXZ라고 적혀있습니다.

그래서 왠지 7zip으로 압축을 풀 수 있을거 같아, 바로 풀어보았습니다.

또 다시 파일 확장자가 없는 파일이 생성 되었는데요. hex에디터로 열어봅시다. 

pcap파일인것을 알 수 있습니다. 근데 pcap으로 확장자를 변경하면 실행이 되질 않습니다. (7zip이 아닌가봐요 ㅎㅎ)

그래서 파일을 리눅스로 들고가겠습니다. 리눅스로 들고와서 file명령어를 통해서 파일의 유형을 살펴보겠습니다.

$ file [파일명]

명령어 사용결과 XZ파일인것을 알아냈고, XZ파일을 풀기 위해서는 unxz명령어를 사용해야 합니다.

단, 파일에다가 확장자를 .xz를 추가해줘야 합니다. unxz으로 xz파일을 풀고 다시 file명령어로 유형을 확인합니다.

$ unxz [파일명].xz

$ file [파일명]

그리고 나서 tar명령어를 사용해서 압축을 풀어줍니다.

$ tar xvf [파일명]

위에 7zip으로 압축파일을 풀었을 때, hex에디터로 본 파일명과 동일한 것을 알 수 있습니다.

pcap파일이 하나 나왔으니, 윈도우로 pcap파일을 들고가서 와이어샤크로 보겠습니다.

TCP프토로콜 패킷이 많이 잡혀있는 것을 볼 수 있는데, TCP는 OSI 7계층 중 4계층(전송) 프로토콜 입니다.

TCP 프로토콜의 가장 중요한 특징은 수신자에게 데이터를 정확히 주는 것이며, UDP 프로토콜과는 달리 데이터를 전달하기 전 준비 단계인 세션 연결 과정을 거치고, 세션 연결 이후 데이터를 전송하며, 데이터 전송 중 발생하는 데이터 손실 문제는 재전송 기능을 통해서 보완됩니다.

 

TCP프로토콜 핵심 과정을 간단하게 살펴보겠습니다.

3-way-handshake라고 불리는 세션을 연결하는 절차입니다. 패킷에 잡히듯이 SYN, SYN-ACK, ACK 과정으로 상대방의 요청 확인 및 승낙 등의 작업을 수행합니다. 그림을 보면 이해가 될것입니다.

( SYN = synchronize sequence numbers, ACK = acknowledgment )

출처 : https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

#1 SYN

A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보냅니다. 이때 클라이언트A는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT가 되는것입니다.

 

#2 SYN+ACK

B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다립니다. 이때 B서버는 SYN_RECEIVED상태가 됩니다.

 

#3 ACK

A클라이언트는 B서버에게 ACK를 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것입니다. 이때 B서버의 상태가 ESTABLISHED입니다. 

이 처럼 같은 방식으로 통신하는 것이 신뢰성 있는 연결을 맺어 준다는 3-way-handshake입니다.

 

본론으로 돌아 가겠습니다.

TCP프로토콜을 확인하기 위해서는 다음과 같이 이동을 합니다.

[Statistics] - [converstation]

이동을 하게되면 다음과 같은 화면이 보이게 됩니다.

여기서 젤 위에 패킷을 클릭한다음 Follow Stream을 누르면 TCP stream이 나오게 됩니다.

이 부분이 TCP stream 0번을 가르킵니다. 봐야할 부분은 형광펜으로 칠한 곳입니다.

Filename : Particles가 전송된 흔적이 보이는데, 그 밑에 SHA-1로 파일의 해쉬값이 존재합니다.

그래서 이 부분을 통해서 파일 이름은 Particles이고, 이 파일의 해쉬는 SHA-1으로 된 저 값이구나 할 수 있습니다.

 

이제 TCP stream 0번이 아닌 1번으로 넘어가서 보면 위 내용과 똑같은게 보입니다.

똑같이 Particles 파일을 전송했고, 파일의 해쉬값은 SHA-1으로 암호화가 되어있습니다.

그래서 다른 패킷도 다 찾아보니 똑같았습니다. 이로써 알 수 있는것이 Particles파일이 문제를 푸는 요소가 아닐까 싶어, 리눅스 환경에서 strings와 grep을 활용해 SHA-1만 필터링을 진행 해보겠습니다.

$ strings [파일명] | grep [찾을 단어]
예시 : strings forensic.pcap | grep 'MD5'

다음과 같이 필터링이 되었습니다.

총 6개의 SHA-1이 필터링이 되었는데, 해쉬함수는 단방향성을 띄고있어 복호화가 일반적으로 불가능합니다.

해쉬함수에 대해서 알고싶으면 여기를 참고하세요! https://lemonpoo22.tistory.com/73

그래서 저 해쉬값으로 뭘 할 수 있을지 고민을 하다가, OSINT CTF처럼 구글에 검색을 통해서 찾을 수 있을까 하고 해쉬값을 구글 서치창에 그대로 입력했습니다.

이런식으로 말이죠!!!

하나씩 대입하다 보니 마지막 해쉬값인 e8c7d65....c59가 의미심장한 웹 사이트를 하나 보여줍니다.

Hybrid-analysis는 악성코드를 분석해주는 사이트입니다. 즉, 다음과 같이 해쉬값을 가진게 분석 사이트에 있다는 것은 악성코드라고 생각할 수 있습니다.

이 악성코드는 문서로 위장한 악성코드 인것같네욤!!?

그래서 어떤 행위를 하는지 궁금해서 찾아보니까 Remote Access, Fingerprint등, 원격 엑세스, Windows계정 조회 같은 기능을 수행하는 악성파일이네욤!!

그래서 사이트를 좀 더 찾아보니 이런 스크린샷이 하나 나옵니다.

이것이 플래그 값입니다.

 

근데 저것만 넣게되면 틀렸다고 뜰겁니다. 그래서 저도 찾아본 결과, 플래그형식이 있었습니다.

FLAG = ASIS{c295c4f709efc00a54e77a027e36860c} 입니다.

 

-Reference-

디지털 포렌식 with CTF

'CTF-D > Network' 카테고리의 다른 글

[Network] DefCoN#21 #7  (0) 2022.09.25
[Network] 파일에서 플래그를 찾아라.  (0) 2022.01.26
[Network] 우리는 적군에 대한 첩보를...  (0) 2022.01.24
[Network] DefCon#21 #6  (0) 2021.10.17
[Network] DefCon#21 #5  (0) 2021.10.17