오늘은 밑의 링크에 있는 문제를 풀어보겠다.
https://forensicscontest.com/2010/02/03/puzzle-4-the-curious-mr-x
들어가면 이러한 화면이 보인다. 패킷을 다운받게 되면 밑의 사진과 같은 파일이 하나 생긴다.
이 역시 Wireshark로 분석할 것이기 때문에 설치가 안된 사람들은 이전 게시글이나 Wireshark 공식 홈페이지에 가서 설치를 하고 오길 바란다.
https://www.wireshark.org/download.html
[Write Up]
어떤 것을 구해야 할지 살펴보겠다.
1. What was the IP address of Mr. X’s scanner?
2. For the FIRST port scan that Mr. X conducted, what type of port scan was it? (Note: the scan consisted of many thousands of packets.) Pick one:
- TCP SYN
- TCP ACK
- UDP
- TCP Connect
- TCP XMAS
- TCP RST
3. What were the IP addresses of the targets Mr. X discovered?
4. What was the MAC address of the Apple system he found?
5. What was the IP address of the Windows system he found?
6. What TCP ports were open on the Windows system? (Please list the decimal numbers from lowest to highest.)
1. Mr. X's scanner의 IP 주소는?
2. Mr. X가 처음으로 수행한 port scan에 대해서 어떤 타입인가? (scan은 수천개의 패킷으로 구성되어 있음)
-> TCP SYN, TCP ACK, UDP, TCP Connect, TCP XMAS, TCP RST 중 하나
3. Mr. X가 발견한 타겟의 IP 주소는?
4. 그가 찾은 Apple system의 MAC 주소는?
5. 그가 찾은 Windows system의 IP 주소는?
6. Windows system에서 열린 TCP의 포트는? (낮은 숫자에서 높은 숫자로 십진수로 나열)
Wireshark를 통해 살펴보니 TCP protocol만 존재하는 pcap파일이었다. 아무래도 TCP가 이번 문제의 핵심이 될 것 같다.
[TCP] - Flags, Inital & Final
TCP 프로토콜에 관련된 자료는 전 게시글에서 정리했었다. 다음 게시글을 참고해보자.
https://papya3086.tistory.com/8
위 사진에서의 Flags는 (SYN)으로 나타난다. 사진과 같이 각 Flags들이 무엇을 의미하는지 먼저 알아야 되기 때문에 이것을 자세히 알아보겠다.
SYN (Synchronization : 동기화)
- TCP에서 세션 연결 시 가장 먼저 보내는 패킷.
- 시퀀스 번호를 임의로 설정, 연결하는데 사용되며 초기에 시퀀스 번호를 보낸다.
ACK (Acknowlegment : 응답)
- 상대방으로 부터 패킷을 받았다는 것을 알려줌.
- 받는 사람은 보내는 사람의 시퀀스 번호에 일반적으로 +1을 하여 보낸다.
RST (Reset : 재 연결 종료)
- 재설정하는 과정, 양방향에서 동시에 일어나는 중단 작업.
- 비 정상적인 세션 연결 끊기에 해당 됨. 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊을 때 사용
PSH (Push : 밀어 넣기)
- TELNET과 같은 상호작용이 중요한 프로토콜의 경우 빠른 응답이 중요.
- 이때 받은 데이터를 즉시 OSI 7 layer의 Application 계층으로 전송하는 것.
- 대화형 트래픽에 사용, 버퍼 기다리기 X, 바로 전달
URG (Urgent : 긴급 데이터)
- Urgent Pointer(전송 데이터 중 긴급히 전달해야 할 내용이 있을 경우) 유효한지 판단
- 긴급 데이터 > 다른 데이터 (우선순위 측면에서 높아야 함) ex. ping 명령어 중 ctrl+c
FIN (Finish : 연결 종료 요청)
- 세션 연결 종료 시 사용.
- 더 이상 전송할 데이터가 없을 때 사용
TCP 연결이 Inital, Final 상태일 때는 다음과 같은 동작들이 나타난다.
연결되는 과정에서 3-way handshaking이 사용되기 때문에 [SYN], [SYN, ACK], [ACK] 상태가 나타나는 것이다.
종료될 때는 4-way handshaking이 사용되기 때문에 [FIN, ACK], [ACK], [FIN, ACK], [ACK]가 나타난다.
위 사진은 각각 시작될 때와 종료될 때의 시점을 나타낸 것이다. 이해에 도움이 되리라 생각해서 넣어보았다.
[다시 Write Up]
처음 Wireshark을 열었을 때를 살펴보면 [SYN]와 [RST, ACK]가 번갈아거면서 많이 나오는 것을 확인할 수 있다. 이는 TCP연결이 원할하게 되지 않았음을 의미한다.
이 때 연결을 시도하는 쪽을 살펴보면 [SYN]을 info로 가지고 있는 쪽이기 때문에 Source에서 10.42.42.253이라는 IP 주소를 찾을 수 있다. 따라서 Mr. X의 스캐너의 IP는 10.42.42.253인 것을 쉽게 구할 수 있다.
✨ 1. What was the IP address of Mr. X’s scanner?
-> 10.42.42.253
2번 문제를 보겠다.
2. Mr. X가 처음으로 수행한 port scan에 대해서 어떤 타입인가? (scan은 수천개의 패킷으로 구성되어 있음)
-> TCP SYN, TCP ACK, UDP, TCP Connect, TCP XMAS, TCP RST 중 하나
이전 상황에서 TCP 연결 요청에 다 [RST]로 인해 실패로 돌아간 것을 알았다. 정상적으로 수행하기 위해 우리가 찾아야 할 것은 위에서 봤던 것 처럼 [SYN] 요청에 대한 [SYS, ACK] 반응이다. 따라서 이것을 필터로 적용시켜서 해보겠다.
아무 패킷 잡고 Flags를 찾아서 확장시켰을 때 나오는 Flag 종류 중 Ack와 Syn에 (우측 클릭 -> 필터로 적용 -> 선택됨), (우측 클릭 -> 필터로 적용 -> 그리고 선택됨) 한 후 위에 Filter Command 창에서 False를 True로 바꿔주면 된다.
(tcp.flags.syn == True) && (tcp.flags.ack == True)
이러한 창이 뜬다. SYN, ACK가 되었던 가장 첫 번째 부분은 786번째 패킷으로 이 부분을 필터 없이 전체 과정에서 보겠다.
(786번 패킷을 클릭 후 위에 필터 command를 지우고 엔터 치면 그 부분으로 넘어간다)
786번째의 Info 부분의 port 번호를 잘 보면 이것이 어느 SYN을 받고 ACK 한 후 실행이 되는지를 볼 수 있다.
1. 779번째 패킷에서 SYN 보냄
2. 786번째에서 SYN, ACK로 보냈고
3. 791번째에서 ACK 통해 정상적으로 connect이 연결되었다.
따라서 답은 TCP Connect에 해당된다. (연결이 먼저 되어야 하니까)
✨ 2. For the FIRST port scan that Mr. X conducted, what type of port scan was it? (Note: the scan consisted of many thousands of packets.) Pick one: TCP SYN, TCP ACK, UDP, TCP Connect, TCP XMAS, TCP RST
-> TCP Connect
3번 문제인 Mr. X가 발견한 IP 주소를 모두 찾아보겠다.
Wireshark 상단 바에서 (통계 -> 대화 -> IPv4 클릭) 했을 때 IP주소에 따른 패킷 송수신 정보들이 쭉 나온다.
Mr. X의 IP주소가 10.42.42.253인 것을 확인했으니 이와 송수신을 시도했던 IP 주소를 찾아보면 쉽다.
10.42.42.25, 10.42.42.50, 10.42.42.56 이렇게 3개인 것을 확인할 수 있다.
✨ 3. What were the IP addresses of the targets Mr. X discovered?
-> 10.42.42.25, 10.42.42.50, 10.42.42.56
Apple system의 MAC주소에 대해 알아보겠다.
위 사진의 대화창에서 각각 하나씩 IP주소에 (우측 클릭 -> 필터로 적용 -> 선택됨 -> A<->B 클릭) 하면 본 창에 해당 IP들끼리 송수신한 정보를 확인할 수 있다.
확인 결과 10.42.42.25의 IP를 가진 기기가 Destination으로 있을 떄 Apple_92:6e:dc 로 뜨는 것을 확인할 수 있고 그 뒤에 MAC 주소가 뜨는 것을 볼 수 있다.
✨ 4. What was the MAC address of the Apple system he found?
-> 00:16:cb:92:6e:dc
4번과 비슷하게 Windows system에 대해서도 찾아보겠다. 10.42.42.50 이거나 10.42.42.56 둘 중 하나인 것 같은데 구분 방법을 잘 모르겠었다.
결국 OS를 확인하는 작업이 필요한데 어떻게 할지 고민하다가 찾아보았다.
찾아보니 시스템과 소통했을 때 나타나는 protocol로 ICMP가 있고, Time To Live 를 찾아보면 된다고 한다.
ICMP (Internet Control Message Protocol)
- IP 패킷 전송 중 에러 발생시 원인을 알려주거나 네트워크 상태를 진단할 때 쓰임.
- ping 을 통해 송수신시 발생하는 에러들을 알려주는 타입
- Wireshark에서 icmp로 필터링 가능
TTL (Time to Live)
- 네트워크에서 데이터의 유효 기간을 나타내기 위한 방법 (무한정 전달 방지) -> 패킷이 무한 순환하는 것 방지
- 라우터에서 패킷을 수신할 때마다 TTL에서 1을 빼면서 다음 위치로 전달. 0이 되면 패킷 드롭
- ping을 통해 TTL의 정보를 받을 수 있음. OS 구분 가능
- TTL = 64 : Linux
- TTL = 128 : Windows
- TTL = 256 : Cisco
자세한 OS별 TTL의 정보는 다음 링크를 참고하길 바란다.
https://letitkang.tistory.com/53
icmp command로 필터를 걸고 ttl 값을 살펴보니 10.42.42.50에서 ttl 값이 128인 것을 확인할 수 있다. 이것이 Windows system의 IP 주소임을 확인할 수 있다.
✨ 5. What was the IP address of the Windows system he found?
-> 10.42.42.50
마지막 6번째 문제이다. Windows system에서 열린 TCP port는 무엇인지 찾아내는 것이다.
(ip.src == 10.42.42.50) && (ip.dst == 10.42.42.253)
command를 통해 filter를 하고 열려있는 포트를 확인해보니 135, 139 두개만 열려있는 것을 확인할 수 있다.
✨ 6. What TCP ports were open on the Windows system? (Please list the decimal numbers from lowest to highest.)
-> 135, 139
[Extra 문제]
X-TRA CREDIT (You don’t have to answer this, but you get super bonus points if you do): What was the name of the tool Mr. X used to port scan? How can you tell? Can you reconstruct the output from the tool, roughly the way Mr. X would have seen it?
1. Mr. X가 포트 스캔에 사용한 도구의 이름은 무엇이고 어떻게 알 수 있나?
2. Mr. X가 보았을 도구의 출력을 대략적으로 재구성할 수 있나?
숨은 문제를 발견했다. 번호로 적혀있지 않아서 못 찾았는데 Extra 문제가 하나 더 있었다. 나름대로 문제를 해석해서 넘버링을 하여 재구성해보았다.
우선 포트 스캔에 사용하는 도구가 따로 있는 것으로 보인다.
Port Scan
운영 중인 서버에서 열려 있는 TCP/UDP 포트를 검색하는 것을 의미한다.
TCP 스캔
TCP 스캔은 TCP 처음 연결 시 일어나는 3-웨이 핸드쉐이킹을 탐지하는 기법이다. 만약 핸드쉐이킹이 정상적으로 완료되었다면, 해당 TCP 포트는 정상적으로 열려 있는 것으로 판단할 수 있다. DDOS 공격을 막기 위해, 포트 스캐너는 핸드쉐이킹 직후 연결을 종료한다. 이 방식은 일반적인 소켓 connect()를 이용하기 때문에, Nmap등의 프로그램에서는 이 방식을 연결 스캔(connect scan)으로 부른다.
SYN 스캔
SYN 스캔은 TCP 핸드쉐이킹을 완전히 수행하지 않고, 처음 SYN 패킷만을 받은 후 검사를 완료하는 방식이다. 이 방식은 실제 TCP 연결이 일어나지 않기 때문에 'half-open 스캔"으로 부르기도 한다. 이 방식을 사용하기 위해서는 TCP 스캔과 같이 connect() 함수를 이용할 수 없고, 포트 스캐너는 이 스캔 작업을 위해 TCP 패킷을 직접 생성한다.
UDP 스캔
UDP 프로토콜은 TCP와 다르게 핸드쉐이킹 과정이 존재하지 않고, 따라서 일반적으로는 포트가 열려 있다고 하더라도 서버에서 아무런 응답을 하지 않을 수도 있다. 하지만, 많은 시스템에서는 보낸 패킷에 대한 응답이 없을 때 ICMP unreachable 메시지를 보낸다. 많은 UDP 스캐너는 이 메시지를 탐지하는 방향으로 동작한다. 이 방식은 서버에서 ICMP 메시지를 보내지 않는 경우 닫혀 있는 포트를 열려 있다고 판단하는 경우가 존재한다.
다른 방식으로는 각 포트에 따라서 그에 대응하는 프로토콜 패킷을 전송하는 방식이다. 예를 들어, DNS 서버는 53번 포트에서 동작하며, UDP 스캐너는 해당 포트에 DNS 정보 요청 패킷을 보낸 후 응답을 받는 방식이다. 이러한 방식은 잘 알려진 포트와 대응 프로토콜에 대해서만 사용할 수 있다는 한계가 있지만, ICMP 메시지가 없는 경우 활용할 수 있다.
출처 : 위키백과
여기까지 알아보고 도저히 답이 안나와서 잠시 미뤄두기로 했다. 아무래도 EXTRA 문제인 만큼 난이도가 굉장히 어렵다.
소감
Wireshark에 어느정도 익숙해져서 그런지 처음 시작했을 때보다는 쉽게 접근은 가능했다. 다만 TCP에 대한 구조나 Flags 들에 대한 정보들을 다 알아야 하기때문에 이전에 정리했던 TCP 내용에서 조금 더 자세하게 추가하여 정리하는 부분이 존재했다. 이 과정에서 TCP에 대해 더 잘 알게 되었다.
또한 TTL에 대한 정보로 OS를 구분할 수 있다는 것도 새롭게 얻어간 점이었다.
참고
https://skstp35.tistory.com/250
'Forensic' 카테고리의 다른 글
[Forensic] Puzzle #5: Ms. Moneymany’s Mysterious Malware 문제 풀이 - Network (0) | 2024.07.31 |
---|---|
[Forensic] USB 패킷 분석 (wireshark) / What did I write??? - Network (0) | 2024.07.29 |
[Forensic] Ann’s AppleTV 문제 풀이 (evidence03) - Network (0) | 2024.07.29 |
[Forensic] Puzzle #2: Ann Skips Bail 문제 풀이 (evidence02 3-8) - Network (0) | 2024.07.28 |
[Forensic] suninatas 29번 (써니나타스 29번 - Disk 문제) (0) | 2024.07.25 |