본문 바로가기

정보보안/Forensics

[forensicscontest.com] evidence04 (SKS 포렌식 스터디 week2)

이번에 풀어볼 문제는 forensicscontest.com의 evidence04 https://forensicscontest.com/2010/02/03/puzzle-4-the-curious-mr-x 문제입니다.

 

Puzzle #4: The Curious Mr. X – Network Forensics Puzzle Contest

While a fugitive in Mexico, Mr. X remotely infiltrates the Arctic Nuclear Fusion Research Facility’s (ANFRF) lab subnet over the Interwebs. Virtually inside the facility (pivoting through a compromised system), he conducts some noisy network reconnaissan

forensicscontest.com

 

evidence04.pcap
1.04MB

 

이번에도 문제 pcap 파일이 주어집니다. 10.42.42.253이라는 ip 주소에서 여러 주소로 패킷을 주고받고 있는데, 10.42.42.253 ip에서 syn 요청을 보내고 있고, 요청을 받은 주소에서는 syn ack 응답이 아니라 rst ack 응답을 보내고 있습니다. 10.42.42.253 ip 주소가 Mr.X의 스캐너 ip 주소고 여러 기기에서 응답을 거부하고 있는 것 같습니다. 

 

문제에서 Mr.X가 첫번째로 포트 스캔을 했을때 어떤 유형의 포트 스캔이었는지 묻는데요, 포트 스캐닝 방법에는 다음과 같은 종류가 있다고 합니다. 

  • TCP SYN
  • TCP ACK
  • UDP
  • TCP Connect
  • TCP XMAS
  • TCP RST

먼저 TCP SYN은 관리자 권한으로 TCP 패킷 헤더부분의 제어 비트를 직접 조작해서 3-Way Handshaking을 완전히 수행하지 않는 방법입니다.

즉 SYN 요청을 보내고 상대방이 SYN+ACK 응답을 보내면 원래는 ACK 응답을 보내 연결이 이루어지게 되는데, ACK 응답 대신 RST 응답을 보내서 연결을 끊어버리는 스캔 방법입니다. RST 응답으로 연결을 끊기 때문에 기록이 남지 않습니다.

 

다음으로 TCP ACK은 포트가 열려있는지를 스캐닝하는것이 아닌 방화벽 정책을 알아내는 스캔 방식입니다. 열려있는 포트에 ACK 요청만 보냈을때 RST 응답이 오는지 여부를 확인해 방화벽이 적용되어있는지 여부를 알아냅니다.

 

UDP 스캔은 포트에 UDP 요청을 보내 포트가 열려있는지 확인하는 방법입니다. 열려 있는 포트라면 응답이 없거나 UDP 응답을 보낼 것이고, 닫혀 있는 포트라면 ICMP가 unreachable하다고 합니다.

 

TCP Connect 방식은 TCP SYN 방식과 비슷하지만 일반 사용자 권한을 사용해 정상적인 TCP 연결 방식대로 포트와 연결하며 스캐닝하는 방식입니다. ACK 응답으로 연결을 완료한 뒤 연결을 끊기 때문에 TCP SYN 방식과는 반대로 기록이 남게 됩니다.

 

TCP XMAS는 스텔스 스캔 방식 중 하나로 제어 비트 URG, PSH, FIN 비트를 수정해 스캔을 수행합니다. 열려 있는 포트라면 응답을 보내지 않고, 닫혀 있는 포트라면 RST, ACK 응답을 보내게 됩니다. 

 

TCP RST 방식은 비연결형 스캐닝 방식으로 RST 요청을 보내 열려있는 포트라면 RST 신호가 오지 않고, 닫혀있는 포트라면 RST 신호가 오는 것을 이용해 스캐닝하는 방법입니다. 

 

참고 https://isc9511.tistory.com/126

 

포트 스캐닝 (Port Scanning)

* 포트 스캐닝 : 공격자가 침입 전, 대상 호스트에 어떤 포트(서비스)가 활성화 되어 있는지 확인하는 기법 - 취약점 분석을 위한 사전 작업 TCP 표준 (RFC 793) - 닫힌 포트로 RST 이외의 패킷 수신할

isc9511.tistory.com

 

 

문제 파일에서 사용된 스캐닝 방법을 찾기 위해서는 먼저 SYN, ACK 응답이 기록된 패킷을 찾아야겠습니다. 필터를 적용해서 찾아보니 10.42.42.50이라는 포트에서 SYN, ACK 응답을 보낸 것이 첫번째입니다. 따라가기 기능으로 Mr.X는 어떤 응답을 보냈는지 확인해보겠습니다. 

 

 

Mr.X는 ACK 응답을 먼저 보내 TCP 연결을 정상적으로 수행하고 그 뒤 RST 요청을 보내 연결을 종료했습니다. TCP Connect 방식의 포트 스캐닝을 수행했네요. 10.42.42.50 포트가 열려있다는 사실을 알게 되었습니다. 

 

다음 문제를 보면 첫번째 사진에서도 볼 수 있듯 Mr.X는 10.42.42.50, 10.42.42.56, 10.42.42.25 ip 주소에 계속해서 요청을 보내고 있는데요, 해당 ip 주소가 Mr.X의 타겟으로 보입니다. 10.42.42.50, 10.42.42.56 주소는 CompalInform이라는 기기고, 10.42.42.25 주소는 MAC 주소가 00:16:cb:92:6e:dc인 애플 기계입니다. 5번 문제에서는 그 중에서 윈도우 시스템의 ip 주소를 찾으라고 하는데, 10.42.42.25는 애플 시스템이니 10.42.42.50, 10.42.42.56 둘 중 하나일 것입니다.

 

 

 

와이어샤크에 나오는 패킷 내용만 봐서는 윈도우 시스템과 관련된 값을 찾을 수 없어서 검색해보니 패킷 내용 중 TTL(Time to leave) 값을 확인하면 운영 체제를 확인할 수 있다고 합니다. 리눅스는 64, 윈도우는 128, Cisco는 256의 값을 갖는다고 하니 ttl=128 필터를 적용해서 확인해주겠습니다. 10.42.42.50 ip 주소가 윈도우 시스템인것으로 확인되었습니다. 

 

 

 

여기서 열려있는 포트 번호는 SYN, ACK 응답을 보낸 포트를 확인하면 되는데, 135, 139번 포트가 열려 있었던 것으로 보입니다. 

 

 

마지막 문제는 tcp 스캔에 사용한 툴과 그 결과값을 재구성하는 것입니다. 대표적인 포트 스캐닝 툴로는 nmap, unicornscan, angry ip scan, netcat, zenmap 등이 있습니다. 각각의 툴마다 지원하는 기능이 조금씩 다르지만, 공통적으로는 특정 ip 주소들에서 어떤 포트가 열려있는지 스캔할 수 있습니다.  스캐닝 툴이 정확히 어떤 방식으로 포트 스캐닝을 하는지는 직접 툴을 사용해보며 네트워크 패킷을 캡쳐해서 살펴보아야 할 것 같습니다. 다음번에 기회가 되면 툴마다 포트 스캐닝 방식을 확인하고 결과값까지 재구성해봐야겠습니다.

 

참고 https://securitytrails.com/blog/best-port-scanners