공부/정보보안기사 실기

[Section 04] 네트워크 기본 학습 (173 ~ 198pg)

남쪽마을밤송이 2022. 4. 17. 10:41

 [07 ICMP 프로토콜] 

개요

  • 3계층의 IP프로토콜은 신뢰할 수 없는 프로토콜이다. 즉 전송상태에 대한 관리가 이루어지지 않는다. 이러한 IP 프로토콜의 단점을 보완하기 위한 프로토콜ICMP 프로토콜이다.
  • IP 패킷 전송 중 에러 발생 시 에러 발생 원인을 알려주거나 네트워크 상태를 진단해주는 기능을 제공해준다.
    • Error-Reporting Message 기능 : 전송 중 오류 발생 시 에러 메시지를 생성하여 응답
    • Query Message 기능 : 네트워크 상태를 진단하기 위한 쿼리 요청 및 응답메시지 생성
  • ICMP 메시지는 메시지의 유형을 의미하는 Type 필드와 유형별 세부내용을 담고 있는 Code 필드로 구성이 된다.

ICMP 프로토콜 구조

  • Type : ICMP 메시지의 유형/용도
  • Code : Type의 세부 내용으로  Type과 Code가 조합되어 ICMP 메시지의 목적과 용도를 나타낸다.
  • Checksum : ICMP 메시지 오류를 검사하기 위한 값
  • Rest of the header : Type과 Code에 따라 추가되는 헤더
  • Data section : 데이터가 위치하는 영역

주요 ICMP Error-Reporting 메시지

  • Destination Unreachable(Type 3)
    1. 해당 목적지에 도달할 수 없음을 의미한다.
    2. 목적지 도달 불가 사유에 따라 다양한 Code로 구성이 되어 있다.
      • Code 1 : host unreachable, 최종 단계의 라우터가 목적지 호스트로 패킷 전송에 실패한 경우
      • Code 2 : protocol unreachable, 목적지 호스트에서 특정 프로토콜을 사용할 수 없는 경우
      • Code 3 : port unreachable, 목적지 호스트에 해당 UDP 포트가 열려있지 않는 경우, TCP의 경우에는 포트가 열려있지 않으면 TCP RST 패킷을 반환한다.
      • Code 4 : fragmentation needed and don't fragment was set, IP 패킷의 단편화가 반드시 필요하나 IP 헤더의 Don't fragment(DF) 플래그가 설정되어 단편화할 수 없는 경우 라우터에 의해 반환된다.
  • Redirection(Type 5)
    • 라우팅 경로가 잘못되어 새로운 경로를 이전 경유지 또는 호스트에게 알려주는 메시지이다.
    • ICMP Redirect 공격 시 이용하는 메시지이다.
  • Time Exceeded(Type 11)
    • 타임아웃이 발생하여 IP 패킷이 폐기되었음을 알리는 메시지이다. 타임아웃 사유는 Code를 통해 알 수 있다.
      • Code 0 : Time To Live exceeded in Transit, IP 패킷이 최종 목적지에 도달하기 전에 TTL 값이 0이 되어 해당 패킷이 폐기되었음을 알리는 메시지이다.
      • Code 1 : Fragment reassembly time exceeded, IP 패킷 재조합 과정에서 타임아웃이 발생하여 해당 IP 데이터그램이 모두 폐기되었음을 알리는 메시지이다. 일반적으로 IP 데이터그램의 일부 단편이 전송과정에서 손실될 경우 재조합에 실패하여 발생한다.

주요 ICMP Query 메시지

  • Echo Request(Type 8) and Reply(Type 0)
    • ping 유틸리티 프로그램에 사용되는 메시지로 종단 노드 간에 네트워크 및 호스트 상태진단을 목적으로 사용한다.
    • 별도의 Code는 없으며 이외의 쿼리 타입들은 거의 사용되지 않는다.
    • Echo Request 예시
      • ICMP 기본 헤더 이외에 전송한 Echo Request 메시지를 식별하기 위한 ID 필드와 메시지 순번을 식별하기 위한 Sequence number 필드가 추가된 것을 볼 수 있다.
      • TTL 값이 128 이하인 것으로 보아 윈도우 시스템에서 보낸 메시지임을 추측할 수 있다.
    • Echo Reply 예시
      • Echo Request 메시지 전송 시 설정한 id와 sequence number가 동일하게 설정되어 있는 것을 볼 수 있다.
      • TTL 값이 64 이하인 것으로 보아 리눅스 시스템에서 보낸 메시지임을 추측할 수 있다.

ICMP Redirect 공격

  • 개요
    • ICMP Redirect 공격이란 ICMP Redirection 메시지(Type 5)를 이용하여 패킷 경로를 악의적으로 재설정하는 공격을 말한다. IMCP Redirection 메시지를 수신한 호스트는 자신의 라우팅 테이블에 특정 목적지로 나가는 gateway 주소를 변경하는데 공격자는 이를 이용하여 자신이 원하는 형태의 ICMP Redirection 메시지를 만들어 특정 목적지로 가는 패킷을 공격자로 향하도록 한다.
    • ARP Redirect 와 ICMP Redirect 공격의 차이점을 살펴보면, ARP Redirect는 희생자의 ARP 캐시 테이블 정보를 변조하여 스니핑하는 것이고, ICMP Redirect는 희생자의 라우팅 테이블을 변조하여 스니핑한다는 차이점이 있다.
  • ICMP Redirect 공격 시 희생자 PC 패킷 캡처
    • 공격자에 의해 조작된 ICMP Redirection 메시지(Type : 5, code : 1)가 희생자에게 전달되고 있다. ICMP Redirection 메시지는 게이트웨이/라우터만이 보낼 수 있으므로 공격자는 출발지 IP를 희생자의 게이트웨이 주소로 위조(스푸핑)하고 있다.
    • ICMP Redirection 메시지를 분석해보면, 목적지 주소에 대한 gateway 주소를 공격자의 주소로 조작한 것을 알 수 있다.
  • 공격 후 희생자 PC의 라우팅 테이블 정보
    • netstat -rn으로 희생자 PC의 라우팅 테이블 정보를 살펴보면, 8.8.8.8 목적지의 경로가 정상적인 gateway 주소(192.168.197.2)가 아닌 공격자의 주소(192.168.197.134)로 변경된 것을 확인할 수 있다.
    • 따라서 희생자 PC에서 8.8.8.8 목적지로 패킷 전송 시 공격자 PC로 패킷이 전달되어(라우팅되어) 공격자는 스니핑이 가능하게 된다.
  • 대응방법
    • ICMP Redirection 메시지에 의해 라우팅 테이블이 변경되지 않도록 ICMP Redirect 옵션을 해제한다.
    • 현재 대부분의 OS에서 보안상의 이유로 ICMP Redirect 옵션을 기본적으로 해제하고 있다.
      • 리눅스 커널 파라미터 중 ICMP Redirect 설정인 accept_redirects를 0(허용안함)으로 설정한다.

 [08 TCP 프로토콜] 

개요

  • Connection Oriented Protocol(연결 지향 프로토콜)
    • 물리적으로 전용회선이 연결되어 있는 것처럼 가상의(논리적인) 연결통로를 설정해서 통신하는 방식으로 가상의 연결통로를 가상회선이라 한다.
      • 가상회선방식 : 물리적으로 전용회선이 연결되어 있는 것처럼 논리적으로 동작하는 방식을 말한다.
    • 논리적인 연결통로를 통해 데이터를 주고받음으로써 데이터의 전송순서를 보장해준다. 이를 순서제어라고 한다.
    • 스트림 기반의 전송방식을 사용한다. 즉 데이터를 정해진 크기로 전송하는 것이 아니라 임의의 크기로 나누어 연속해서 전송하는 방식을 사용한다.
  • Reliable Protocol(신뢰할 수 있는 프로토콜)
    • 흐름제어 수행
      • 흐름제어란 상대방이 받을 수 있을 만큼만 데이터를 효율적으로 전송하는 것을 말한다.
      • 흐름제어를 위해 슬라이딩 윈도우 제어방식을 사용한다. 이는 상대방이 수신 가능한 크기 (Window size) 내에서 데이터를 연속해서 전송하는 방식으로 매 세그먼크 전송 시마다 수신확인응답(ACK)을 수신한 후 전송하게 되면 왕복시간이 길 경우 단위시간당 데이터 전송량이 매우 떨어지므로 효율적으로 전송하기 위해 상대방이 받을 수 있는 범위 내에서 연속적으로 전송한다.
    • 오류제어 수행
      • 오류제어란 데이터의 오류나 누락 없이 안전한 전송을 보장해주는 것을 말한다.
      • 오류 또는 누락 발생 시 재전송을 수행하여 이를 보정한다.
    • 혼잡제어 수행
      • 혼잡제어란 네트워크의 혼잡정도에 따라 송신자가 데이터 전송량을 제어하는 것을 말한다.
      • 혼잡정도에 대한 판단기준은 데이터의 손실 발생 유무로 판단한다. 전송한 데이터에 누락이 발생하면 네트워크가 혼잡한 상태로 판단하여 전송량을 조절한다.

TCP 프로토콜 구조

  • Source Port : 출발지 포트 번호
  • Destination Port : 목적지 포트 번호
  • Sequence Number : 송신 데이터 순서 번호, 연결 설정 단계에서 초기 순서번호(ISN)를 상호간에 주고받는다. 초기 순서번호는 0부터 시작하는 것이 아니라 임의의 수를 할당해서 사용한다.
  • Acknowledgment Number : 상대방이 다음에 전송할 순서 번호, ACK와 함께 해당 필드에 상대방이 다음에 전송할 순서 번호를 담아서 보낸다.
  • HLEN : 헤더의 길이
  • Reversed : 예약, 사용하지 않음
  • Control Flags : URG - ACK - PSH - RST - SYN - FIN
  • Windows Size : 수신측에서 송신측에 보내는 Receiver Window Size로 수신버퍼의 여유 공간 크기를 의미한다. 송신측에서는 상대방의 여유 공간 크기를 통해서 흐름제어를 수행할 수 있다. 따라서 송신측에서는 상대방의 윈도우 사이즈 범위 내에서 수신측의 수신 확인 응답(ACK)을 기다리지 않고 연속적으로 전송할 수 있는데 이를 슬라이딩 윈도우 제어방식이라 한다.
  • Checksum : 헤더를 포함한 전체 세그먼트에 대한 오류를 검사하기 위한 필드
  • Urgent Pointer : 세그먼트가 긴급 데이터를 포함하고 있는 경우에 사용되는 필드로 긴급 데이터의 위치값을 담고 있다.

TCP 분할(segmentation)과 재조합(reassembly)

  • MSS
    • TCP 세그먼트 데이터부의 최대 바이트수를 의미하여 연결 설정 과정에서 상호간에 MSS 정보를 주고받는다.(TCP 옵션 헤더의 MSS 필드)
    • MSS는 프레임의 MTU에 영향을 받는다. MTU 크기에서 IP헤더(기본 20bytes)와 TCP 헤더(기본 20bytes)를 빼면 MSS 크기를 알 수 있다.
  • 어플리케이션 계층에서 전달된 데이터는 TCP 계층에서 MSS 크기에 따라 분할이 발생한다. 분할된 세그먼트는 수신측에서 재조합되어 어플리케이션 계층으로 전달된다.

연결 설정 과정(3-way handshake)

  • 첫 번째 단계
    • 최초 클라이언트는 서버와 연결 설정을 위한 연결 요청 패킷(syn)을 보낸다. 연결 요청을 수용하기 위해 수동적으로 포트를 열고 있는 상태를 Passive Open, 능동적으로 포트를 열고 있는 상태를 Active Open이라고 한다.
    • SYN은 동기화의 줄임말로 상호간에 순서 번호르 동기화하자는 의미이다. 상호간의 초기 순서번호(ISN)는 0부터 가 아닌 랜덤한 값으로 시작한다.
    • 최초 SYN 패킷을 보낸 TCP 소켓 상태를 SYN_SENT 상태라 한다.
  • 두 번째 단계
    • 클라이언트의 연결 요청(SYN 패킷)에 대한 수신 확인 응답(ACK)와 함께 서버에서 클라이언트로 연결 요청(SYN) 패킷을 보내 상호간에 연결 요청을 수행한다.
    • 수신 확인 응답(ACK)을 하게 되면 반드시 Ack~ Number를 설정하는데 그 의미는 상대방이 다음에 보낼 패킷의 순서 번호를 의미한다. 위 예를 보면 Ack.Num:1001로 설정되어 있는데 그 의미는 1000번까지 수신 완료했고(첫 번째 SYN 패킷) 1001을 보내라는 의미가 된다.
    • 상대방의 SYN 패킷을 수신한 TCP 소켓 상태를 SYN_RECEIVED 상태라고 한다.
  • 세 번째 단계
    • server의 연결 요청(SYN 패킷)에 대해 수신 확인 응답(ACK)을 전송한 후 최종적으로 연결 설정이 완료된다.
    • 연결 설정이 완료되면 TCP 소켓 상태는 ESTABLISHED상태가 된다.

데이터 송수신 과정

  • 재전송(Retransmission) 과정
    • TCP는 모든 세그먼트 전송시마다 재전송 타이머가 동작한다. 재전송 타임아웃 동안 상대방으로부터 ACK 응답이 없으면 송신자는 해당 패킷이 누락된 것으로 판단하여 재전송을 수행한다.
    • 위 예를 보면, 클라이언트가 DataB 전송 후 재전송 타임아웃이 발생하여 DataB를 다시 전송하고 있다.
    • 재전송은 일정 시간/횟수 동안 발생하며 더이상 상대방으로부터 ACK 응답이 없으면 연결을 종료한다.
    • 혼잡제어 관점에서는 재전송 타이머 만료에 따른 재전송이 발생하는 상황은 매우 혼잡한 상태로 판단한다.
  • 빠른 재전송 과정
    • TCP는 수신측이 기대했던 순서 번호가 아닌 그 이후 순서 번호의 세그먼트를 수신하면 (일부 세그먼트의 손실/지연 발생이나 순서가 맞지 않는 상황 발생) 즉시 기대하는 순서 번호의 세그먼트를 요청하는 ACK 패킷을 전송한다.
    • 예를 들면, 클라이언트가 전송한 세그먼트 중 B세그먼트의 손실이 발생했을 때 그 이후 순서번호를 가진 C, D, E 세그먼트가 도착할 떄마다 서버는 B세그먼트를 요청하는 ACK 패킷을 클라이언트에 즉시 전송하고 있다.
    • 클라이언트는 중복 ACK가 두 번 발생할 때까지는 일시적으로 서버에 전달한 세그먼트의 순서가 맞지 않는 상태로 판단하다가 세 번 발생하면 해당 세그먼트가 누락된 것으로 판단하여 재전송을 수행한다. 재전송 타임아웃 발생 이전에 중복 ACK가 세번 발생하면 즉시 재전송을 수행하므로 이를 빠른 재전송이라 한다.
    • 혼잡제어 관점에서는 중복 ACK가 3회 발생에 따른 빠른 재전송이 발생하는 상황은 재전송 타이머 만료에 따른 재전송에 비해 덜 혼잡한 상태로 판단한다. 이는 일부 세그먼트의 누락은 발생했지만 나머지 세그먼트는 정상적으로 수신되었기 때문에 덜 혼잡한 상태로 본다.

연결 종료 과정(4-way Handshake)

  • 연결 종료 단계
    • 첫 번째 단계
      • 클라이언트는 서버와의 연결 설정을 종료하기 위한 연결 종료 패킷(FIN+ACK)을 보낸다. 능동적인 연결 종료 수행을 Active Close, 수동적으로 수행하는 것을 Passive Close라고 한다.
    • 두 번째 / 세 번째 단계
      • 클라이언트의 연결 종료 요청에 대한 수신 확인 응답(ACK)을 보낸다.
      • 서버는 해당 서버 어플리케이션에서 TCP 연결 종료를 할 때까지 대기한 후 종료되면 클라이언트에 연결 종료 패킷(FIN+ACK)을 보낸다.
    • 네 번째 단계
      • 서버의 연결 종료 패킷을 수신한 클라이언트는 즉시 연결을 종료하는 것이 아니라 서버에 마지막 ACK 패킷을 보낸 후 2MSL(Maximum Segment Lifetime) 시간동안 대기한다.
      • 2MSL(통상 1~4분) 대기하는 이유는 마지막 ACK응답이 안전하게 상대방에게 전송됨을 보장해주기 위한 것으로 만약 서버가 마지막 ACK를 수신하지 못했다면 FIN+ACK 재전송이 발생할 것이고 이를 처리하기 위해 일정 시간 대기한다.

연결 요청 거부(강제 종료)

  • 클라이언트 TCP가 연결을 위해 SYN 요청을 전송했으나 서버에 해당 포트(서비스)가 준비되어 있지 않으면(리슨하고 있지 않음) "RST+ACK" 패킷을 클라이언트에 전송하여 연결 요청을 거부하게 된다.
  • RST+ACK를 수신한 클라이언트 TCP는 즉시 종료(CLOSED) 상태가 된다.

연결 중단(abort)

  • 연결 상태에 있는 클라이언트가 연결을 즉시 중단해야할 필요가 있을 경우 RST+ACK 또는 RST 패킷을 서버에 전송할 수 있다. TCP 표준에 따른 차이점은 다음과 같다.
    • RST 플래그만 설정하는 경우 : 상대방으로부터 수신한 세그먼트에 Acknowledgment Number 필드가 설정되어 있는 경우 RST 플래그와 Sequence Number 필드를 설정하여 응답한다.
    • RST+ACK 플래그를 설정하는 경우 : 상대방으로부터 수신한 세그먼트에 Acknowledgment Number 필드가 설정되어 있지 않은 경우 Sequence Number 필드를 0으로 설정하고 Acknowlegment Number 필드를 수신한 세그먼트의 Sequence Number와 세그먼트 길이의 합으로 설정하여 응답한다.
  • RST+ACK 또는 RST 패킷을 수신한 서버 TCP는 즉시 종료(CLOSED) 상태가 된다.

TCP 세션 하이재킹

  • 개요
    • 세계적으로 유명한 해커 케빈 미트닉이 사용했던 공격 방법 중 하나로 TCP의 세션 관리 취약점을 이용한 공격이다.
    • TCP는 연결 설정 과정을 통해 상호간에 세션을 생성한 후 다음 식별자를 통해 상호간에 인식하게 된다.
      • 출발지 IP와 Port, 목적지 IP와 Port
      • Sequence Number와 Acknowledgement Number
    • TCP 세션 하이재킹은 위와 같은 세션 식별정보를 공격자가 위조하여 세션을 탈취하는 공격이다. 즉 공격자는 정상적인 사용자의 출발지 IP와 Port로 위조하고 Sequence Number를 예측하여 세션을 탈취하게 된다.
  • 실습
    • 정상적으로 클라이언트와 서버가 통신하고 있는 상황
      • 공격자는 클라이언트와 서버 사이에서 ARP 스푸핑을 통해 둘 사이의 TCP 식별정보를 탈취하기 위한 스니핑을 진행한다.
    • 패킷을 스니핑하던 공격자는 정상적인 클라이언트의 IP 주소로 위장한 TCP 패킷에 정상적인 클라이언트의 TCP 식별정보(포트, sequence number, acknowledgment number)를 담아서 서버로 전달한다.
    • 서버는 공격자의 위조된 패킷에 대해 정상 응답(ACK)을 준다. 해당 응답은 공격자뿐만 아니라 정상 클라이언트에게도 전달되고 클라이언트 입장에서는 데이터를 보내지 않았는데 Acknowledgment number가 증가된 응답을 받게 되는 상황이 발생한다.
    • 잘못된 응답을 받은 정상 클라이언트는 이를 교정하기 위한 ACK를 보낸다.
    • 서버 입장에서는 정상 클라이언트가 보낸 잘못된 ACK(교정용) 패킷을 다시 교정하기 위해 ACK 메시지를 보내게 된다. 이러한 괒어이 반복적으로 대량 발생하게 되는데 이를 ACK STORM이라 한다.
      • 공격자에 의해서 해당 세션의 Sequence Number와 Acknowledgment Number가 조작된 것이기 때문에 정상 클라이언트와 서버 간에는 아무리 교정을 위한 ACK를 보낸다고 해도 이를 해결할 수 없다.
    • 공격자는 최종적으로 정상 클라이언트에게 RST 메시지를 전달하여 연결을 강제로 종료하고 자신은 서버와의 세션을 유지한다.

 [09 UDP 프로토콜] 

개요

  • Connectionless Oriented Protocol(비연결 지향 프로토콜)
    • 논리적인 연결 설정 과정이 없기 때문에 데이터그램 전송 시마다 주소 정보를 설정해서 전송한다.
    • 데이터의 순차적 전송을 보장해주지 않는다.
    • 데이터그램 기반의 전송방식을 사용한다. 즉 데이터를 정해진 크기로 전송하는 방식을 사용한다.
  • Unreliable Protocol(신뢰할 수 없는 프로토콜)
    • 신뢰성 있는 TCP와는 달리 흐름제어, 오류제어, 혼잡제어 등을 수행하지 않는다.
    • 실질적으로 IP 기반에 포트 정보를 이용하여 상위 송수신 어플리케이션(IP/Port를 통한)을 식별해주는 역할 정도만 수행한다.
  • UDP 프로토콜의 장점
    • 단순하고 가벼운 프로토콜로 전송속도가 빠르다.
      • TCP의 경우 내부 처리 메커니즘에 의해 프로토콜이 복잡하고 무거운 반면에 UDP의 경우에는 상대적으로 가볍고 단순한 프로토콜로 빠른 전송이 장점이다.
    • 비신뢰적인 특성으로 인해 대량 데이터의 송수신은 부적절하며 주로 한 번의 패킷 송수신으로 완료되는 서비스에 많이 사용된다.
      • ex) DNS 53/UDP, NTP 123/UDP, DHCP 67,68/UDP 등

UDP 프로토콜 구조

  • Source Port : 출발지 송신 포트 번호
  • Destination Port : 목적지 수신 포트 번호
  • Total Length : 헤더와 헤더부를 포함한 전체 길이
  • Checksum : 전체 데이터그램에 대한 오류를 검사하기 위한 필드

 [10 네트워크 관리 명령어] 

 (1) ping 명령 

개요

  • 종단 노드 간에 네트워크 상태를 관리하기 위한 명령어
  • Target 시스템에 대한 접근성, 해당 구간에 대한 네트워크 속도 및 품질(손실률)을 검사하기 위한 명령어
  • ICMP Echo Request(Type 8)와 ICMP Echo Reply(Type 0) 메시지 이용

실습

  • 윈도우 ping 명령 : default 4번, 32bytes
  • 리눅스 ping 명령 : default 무한, 56bytes

 (2) traceroute/tracert 명령 

개요

  • 종단 노드 간에 사이에 있는 여러 중계 노드(라우터) 각 구간에 대한 네트워크 상태를 관리하기 위한 명령어로 네트워크의 라우팅 문제점을 찾아내는 목적으로 많이 사용한다.
    • 최종 목적지 노드에 도달하는데 경유하는 중계 노드(라우터)의 개수, IP 주소, 응답시간 등을 파악할 수 있다.
  • 각 구간에 대한 접근성 및 네트워크 속도를 검사
  • 유닉스/리눅스의 경우 traceroute 명령어를 사용하고 윈도우의 경우 tracert 명령어를 사용한다.

유닉스/리눅스 traceroute 동작방식

  • 각 중계 노드(라우터) 구간에 대한 상태를 측정하기 위해 IP의 TTL 필드를 1로 설정한 UDP 패킷을 보낸다.
    • 라우터는 패킷의 생존기간을 계산하기 위해 패킷을 수신하면 TTL값을 1 감소시킨 후 그 결과가 0이 되면 TTL 초과로 판단하여 해당 패킷을 폐기한 후 ICMP Time Exceeded(Type 11) 패킷을 최초 출발지로 보낸다.
    • 따라서 TTL값을 1로 설정하면 첫 번째 라우터에서 패킷이 폐기되고 ICMP 응답이 오기 때문에 이를 이용하여 출발지 호스트와 첫 번째 라우터간의 네트워크 상태를 판단한다.
    • 보안상의 이유로 라우터에서 ICMP 응답을 주지 않는 경우가 많다. traceroute 명령 수행 시 응답 시간이 *로 표시되는 경우가 응답이 없는 경우로 보안상의 이유이거나 실제 해당 구간에 문제가 발생한 경우로 볼 수 있다.
  • TTL 값을 1씩 증가시키면서 UDP 패킷을 지속적으로 전송하여 다음 중계 구간에 대한 네트워크 상태를 판단한다.
  • 최종 목적지에 UDP 패킷이 도달하면 해당 UDP 포트가 닫혀있으므로 ICMP Destination Unreachable(Type 3) 패킷이 반환되며 최초 출발지 호스트는 이 정보를 이용하여 최종 목적지 호스트에 도달했음을 알 수 있게 된다.

윈도우 tracert 동작방식

  • 각 중계 노드(라우터) 구간에 대한 상태를 측정하기 위해 IP의 TTL 필드를 1로 설정한 ICMP Echo Request 패킷을 보낸다.
    • 라우터는 패킷의 생존기간을 계산하기 위해 패킷을 수신하면 TTL값을 1 감소시킨 후 그 결과 0이 되면 TTL 초과로 판단하여 해당 패킷을 퍠기한 후 ICMP Time Exceeded 메시지를 최초 출발지로 보낸다.
    • 따라서 TTL값을 1로 설정하면 첫 번째 라우터에서 패킷이 폐기되고 ICMP 응답이 오기 때문에 이를 이용하여 출발지 호스트와 첫 번째 라우터간의 네트워크 상태를 판단한다.
    • 보안상의 이유로 라우터에서 ICMP 응답을 주지 않는 경우가 많다. traceroute 명령 수행 시 응답 시간이 *로 표시되는 경우가 응답이 없는 경우로 보안상의 이유이거나 실제 해당 구간에 문제가 발생한 경우로 볼 수 있다.
  • TTL 값을 1씩 증가시키면서 UDP 패킷을 지속적으로 전송하여 다음 중계 구간에 대한 네트워크 상태를 판단한다.
  • 최종 목적지에 ICMP Echo Request 패킷이 도달하면 ICMP Echo Reply 패킷이 반환되며 최초 출발지 호스트는 이 정보를 이용하여 최종 목적지 호스트에 도달했음을 알 수 있게 된다.

 

 

 

 

 (3) netstat 명령 

개요

  • 시스템의 네트워크 관련 다양한 상태정보를 관리할 수 있는 명령어
  • 주요 제공정보는 다음과 같다.
    • 옵션 없음 : 모든 연결된 소켓 상태 정보
    • -a : 모든 소켓 상태 정보
    • -i : 네트워크 인터페이스 정보
    • -r : 시스템 라우팅 테이블 정보
    • -s : 각 프로토콜별 통계 정보

실습

  • 소켓 상태 정보 확인하기
    • netstat -t : 't' 옵션은 TCP 소켓을 출력하라는 옵션이다. 따라서 TCP 소켓 중 연결된 소켓만을 출력한다.
    • netstat -at : TCP 소켓을 모두 출력한다. 모두 출력한다는 것은 연결된 상태뿐만이 아니라 연결 대기, 연결 설정 및 종료중인 소켓도 모두 출력한다는 의미이다.
    • netstat -ant : n 옵션은 네트워크 주소를 숫자형식으로 출력하는 옵션이다. 따라서 숫자 형식의 네트워크 주소로 연결된 소켓과 연결 요청 대기 중인 TCP 소켓을 모두 출력한다.
    • netstat -antp : p 옵션은 해당 소켓의 프로세스명/pid 정보를 출력하는 옵션이다. TCP 소켓을 열고 있는 프로세스를 확인하는데 유용하게 사용한다.
  • 네트워크 인터페이스 정보 확인하기 : netstat -i
    • RX-OK/RX-ERR/RX-DRP/RX-OVR : RX는 수신한 패킷 수를 의미한다. OK는 오류없이 수신한 패킷 수, ERR는 오류가 발생한 수신 패킷 수, DRP는 폐기된 수신 패킷 수, OVR는 과도한 양의 수신 패킷에 의한 오버플로우 발생으로 폐기된 패킷 수를 의미한다.
  • 시스템 라우팅 테이블 정보 확인하기 : netstat -rn
  • 각 프로토콜별 통계 정보 : netstat -s
    • 시스템이 부팅된 이후부터 현재가지 누적된 프로토콜 통계정보를 출력한다.

 (4) ipconfig 명령 (유닉스/리눅스) 

개요

  • 유닉스/리눅스 시스템에서 네트워크 인터페이스 설정 정보를 조회하거나 IP 주소나 서브넷 마스크 등의 설정을 변경할 때 사용한다.

실습 I

  • UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    • UP은 현재 인터페이스가 활성화 상태임을 의미하며, BROADCAST는 인터페이스가 브로드캐스트를 지원하고 있음을 의미한다.
    • RUNNING은 인터페이스가 실행중임을 나타내고 MULTICAST는 멀티캐스트를 지원하고 있음을 나타낸다.
    • MTU는 1500bytes(이더넷)이고 메트릭 값은 1이다. 메트릭은 라우팅 경로의 효율성(우선순위)를 나타내는 값으로 이 값이 클수록 비용이 크다.(우선순위가 낮아진다.)

실습 II

  • 인터페이스에 프로미스큐어스 모드 설정 : ifconfig eth1 promisc
    • 인터페이스가 프로미스큐어스 모드로 동작하게 되면 "PROMISC"로 표시
    • /var/log/messages 로그 파일에 eth1 인터페이스가 promiscuous mode로 전환되었음을 보여주고 있다.
    • 외부 침입자에 의한 불법적인 스니핑 목적의 모드 전환이 발생할 수 있으므로 주의가 필요하다.
  • 인터페이스에 promiscuous 모드 해제 : ifconfig eth1 -promisc
    • /var/log/messages 로그 파일에 eth1 인터페이스가 promiscuous mode에서 해제되었음을 보여주고 있다.