R's Hacking Daily Log

Active Reconnaissance (3) 본문

TryHackMe/Walkthroughs

Active Reconnaissance (3)

hanhxx 2023. 3. 31. 15:14

Traceroute

Traceroute은 이름에서 유추할 수 있듯이 sender의 system에서 다른 호스트에 이르기까지

패킷이 이동한 루트를 추적하는 역할을 한다. 

 

 

Traceroute의 목적은 

1. sender에서부터 receiver까지 packet을 전달한 router의 IP 주소를 찾거나 

2. sender에서부터 receiver까지의 packet이 전달된 횟수 [= *Hop]를 찾는 것이다.

 

 

*Hop이란 네트워크 상에서 packet이 전달될 때 카운트되는 수로,

router A에서 router B로 packet이 보내지면 이때 packet의 Hop이 1 증가했다고 할 수 있다. 

즉, packet이 Router들에 의해 몇 번 이동되었는가를 나타낸다.

 

 

Target system까지의 경로를 검색할 수 있는 직접적인 방법이 없기 때문에

ICMP를 이용해 IP 주소를 알아내게 되고 이는 IP Header에 "TTL" 값을 작은 값으로 설정하여 수행한다. 

 

 

*TTL이란, 위에서 설명한 Hop과 관련되어있다.

TTL은 "Time to live"의 약자로 packet이 버려지지 않고(Drop) 통과할 수 있는 최대 Hop 수를 의미한다.

다른 말로 하면, packet이 최대로 통과할 수 있는 Router의 수를 지정하는 것이 TTL이다.

 

여기서 한 가지 주의할 점은 Time의 스펠링 T를 사용하지만 TTL이 의미하는 단위는 시간이 아니라 

count/Hop라는 걸 조심해야 한다. 

 

 

기본적으로 TTL은 64를 기본값으로 가지는데 만약 어떤 packet이 receiver에게 도착했을 때

"TTL = 58"이라고 하면 총 6(=64-58)개의 라우터를 통과했다고 할 수 있다.

 

 

직접 traceroute command를 실행해 보면 더 직관적으로 이해되겠지만

같은 target에 대해 traceroute을 실행한다고 해도 결과는 시도할 때마다 달라질 수 있다.

 

router에서 packet을 다음 router로 전달할 때 Dynamic routing protocol을 사용하기 때문에 

전달 경로는 network 상태에 따라 계속해서 변하게 된다. 

 

따라서 command를 실행했을 때 나오는 router의 개수, 통과한 router의 정보가 달라질 수 있다.

 

 


Usage Treacroute

리눅스나 맥 환경에서는 traceroute IP_address

MS 윈도우 환경에서는 tracert IP_address

 

 

user@AttackBox$ traceroute tryhackme.com
traceroute to tryhackme.com (172.67.69.208), 30 hops max, 60 byte packets
 1  ec2-3-248-240-5.eu-west-1.compute.amazonaws.com (3.248.240.5)  2.663 ms * ec2-3-248-240-13.eu-west-1.compute.amazonaws.com (3.248.240.13)  7.468 ms
 2  100.66.8.86 (100.66.8.86)  43.231 ms 100.65.21.64 (100.65.21.64)  18.886 ms 100.65.22.160 (100.65.22.160)  14.556 ms
 3  * 100.66.16.176 (100.66.16.176)  8.006 ms *
 4  100.66.11.34 (100.66.11.34)  17.401 ms 100.66.10.14 (100.66.10.14)  23.614 ms 100.66.19.236 (100.66.19.236)  17.524 ms
 5  100.66.7.35 (100.66.7.35)  12.808 ms 100.66.6.109 (100.66.6.109)  14.791 ms *
 6  100.65.14.131 (100.65.14.131)  1.026 ms 100.66.5.189 (100.66.5.189)  19.246 ms 100.66.5.243 (100.66.5.243)  19.805 ms
 7  100.65.13.143 (100.65.13.143)  14.254 ms 100.95.18.131 (100.95.18.131)  0.944 ms 100.95.18.129 (100.95.18.129)  0.778 ms
 8  100.95.2.143 (100.95.2.143)  0.680 ms 100.100.4.46 (100.100.4.46)  1.392 ms 100.95.18.143 (100.95.18.143)  0.878 ms
 9  100.100.20.76 (100.100.20.76)  7.819 ms 100.92.11.36 (100.92.11.36)  18.669 ms 100.100.20.26 (100.100.20.26)  0.842 ms
10  100.92.11.112 (100.92.11.112)  17.852 ms * 100.92.11.158 (100.92.11.158)  16.687 ms
11  100.92.211.82 (100.92.211.82)  19.713 ms 100.92.0.126 (100.92.0.126)  18.603 ms 52.93.112.182 (52.93.112.182)  17.738 ms
12  99.83.69.207 (99.83.69.207)  17.603 ms  15.827 ms  17.351 ms
13  100.92.9.83 (100.92.9.83)  17.894 ms 100.92.79.136 (100.92.79.136)  21.250 ms 100.92.9.118 (100.92.9.118)  18.166 ms
14  172.67.69.208 (172.67.69.208)  17.976 ms  16.945 ms 100.92.9.3 (100.92.9.3)  17.709 ms

tryhackme에 나와있는 예제 중 하나이다.

위의 결과를 보면 tryhackme.com을 target으로 traceroute를 실행하였고 총 14개의 router를 거쳐 도달한 걸 알 수 있다.

 

1번 째줄 위에 나와있는 부분을 보면 전송한 packet의 크기나 hops max 정보도 볼 수 있다.

 

 

 

이쯤에서 궁금할 수 있는 게 그렇다면 TTL이 0이 되어버리면 어떻게 되느냐..!!

"TTL이 0이다"라는 건 안타깝지만 그 packet의 수명이 다 되었다는 것과 같은 의미이다...

그렇기 때문에 TTL = 0인 packet은 다음 router로 전달되지 못하고 처분된다.(=discard)

 

TTL은 Router A에서 Router B로 packet이 전달되고 나서 1이 감소하게 되는 순서로 계산되고

packet이 수명을 다해 처분되면 packet을 버린 router에서 sender에게  

"ICMP time exceeded in-transit error message"를 보낸다. 

 

이 부분을 이용해 receiver로 가는 경로에 놓여있는 router들의 IP address를 알아내게 된다.

(여기서 말하는 receiver는 최종적인 목적지이다.)

 

 


처음에 sender가 receiver에게 packet을 보내는데 TTL을 1로 설정해서 보낸다.

이렇게 되면 첫 번째로 마주하게 되는 router에 도착하면 TTL 값이 1 감소하고 이 packet의 TTL이 0이 된다.

 

 

그러면 첫 번째 router에서는 해당 packet에 대한 ICMP message를 sender에게 보내게 되는 데

이때 이 message를 보내는 packet에는 첫 번째 router의 IP address가 적혀있다는 것..!!!!

 

 

처음엔 [ sender → receiver ] 주소가 적혀있었는 데 이 packet이 수명을 다하고 해당 정보를 알려주기 위해

router가 sender에게 메세지를 써서 보내면

 

 

결국 [ first rounter → sender ] 주소가 적히게 되니 sender는 이 메세지를 받으면서

동시에 router의 IP를 얻을 수 있게 되는 것이다.

 

 

두 번째 router의 IP를 얻기 위해서는 TTL을 2로 설정해서 보내면 된다. 

그러면 이 packet을 전달받은 두 번째 router가 sender에게 답장을 보내줄 것이다.

 

 

모든 router가 TTL이 0이 된 packet에 대해 메세지를 만들어 보내지는 않지만

위와 같은 과정을 역으로 이용해서 중간에 놓여있는 router의 IP address를 얻어낼 수 있다는 것이 핵심!!

'TryHackMe > Walkthroughs' 카테고리의 다른 글

Traffic Analysis Essentials (1)  (0) 2023.04.01
Active Reconnaissance (4)  (0) 2023.04.01
Active Reconnaissance (2)  (0) 2023.03.29
Active Reconnaissance (1)  (0) 2023.03.27
Passive Reconnaissance (3)  (0) 2023.03.26
Comments