본문 바로가기
정보보안기사 필기/1. 정보보안 일반

정보보안기사 필기 3-3. 네트워크 보안(ICMP, TCP, UDP 프로토콜)

by kkmin93 2022. 4. 19.
반응형

정보보안기사 필기 3-3. 네트워크 보안(ICMP, TCP, UDP 프로토콜)

1. ICMP(Internet Control Message Protocol) 프로토콜

 1) 개요 

  • 3계층 프로토콜 중 하나인 IP 프로토콜은 신뢰할 수 없는 프로토콜이기 때문에 전송상태에 대한 관리가 이루어지지 않는다.
  • 이러한 IP 프로토콜의 단점을 보완하기 위해 ICMP 프로토콜로 에러 발생 원인을 알려주거나 네트워크 상태를진단해주는 기능을 제공받는다.
    • Error-Reporting Message 기능 : 전송 중 오류 발생 시 에러 메시지를 생성하여 응답
    • Query Message 기능 : 네트워크 상태를 진단하기 위한 쿼리 요청 및 응답 메시지 생성

 

 2) ICMP 프로토콜 구조

 

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

 

 3) 주요 ICMP Error-Reporting 메시지

  3-1) Destination Unreachable(Type 3)

  • 해당 목적지에 도달할 수 없음을 의미한다.
  • 목적지 도달 불가 사유에 따라 다양한 Code(상세 유형)로 구성되어 있다.
    • Code 1(Host Unreachable) : 최종 단계의 라우터가 목적지 호스트로 패킷을 전송에 실패한 경우
    • Code 2(Protocol Unreachable) : 목적지 호스트에 특정 프로토콜을 사용할 수 없는 경우
    • Code 3(Port Unreachable) : 목적지 호스트에 해당 TCP, UDP 포트가 열러있지 않으면 RST 패킷을 반환
    • Code 4(Fragmentation needed) : IP 패킷의 단편화가 반드시 필요하나 DF 플래그가 설정되어 있는 경우

 

  3-2) Redirection(Type 5)

  • 라우팅 경로가 잘못되어 새로운 경로를 이전 경유지 또는 호스트에게 알려주는 메시지이다.
  • L2 스위치 환경에서 스니핑하기 위한 공격 중 하나인 ICMP Redirect 공격 시 이용하는 메시지

 

  3-3) Time Exceeded(Type 11)

  • 타임아웃이 발생하여 IP 패킷이 폐기되었음을 알리는 메시지이다.
    • Code 0(Time To Live Exceeded in Transit) : IP 패킷이 최종 목적지에 도달하기 전에 TTL값이 0이 되어 해당 패킷이 폐기되었음을 알리는 메시지이다.
    • Code 1(Fragment reassembly time Exceeded) : IP 패킷 재조합 과정에서 타임아웃이 발생하여 해당 IP 데이터그램이 모두 폐기되었음을 알리는 메시지이다.

 

 4) 주요 ICMP Query 메시지

  4-1) Echo Request(Type 8) and Echo Reply(Type 0)

  • ping에서 사용되는 메시지로 종단노드 간에 네트워크 및 호스트 상태진단을 목적으로 사용한다.
  • 별도의 Code는 없으며 이외의 쿼리 타입들은 거의 사용되지 않는다.

[ 그림 1-1. ICMP Request 패킷 보내기전 MAC 주소부터 업데이트 하는 모습 ]
[ 그림 1-2. ARP Request와 Reply로 192.168.0.129의 MAC 주소 업데이트 ]
[ 그림 1-3. ICMP Echo Request와 Reply ]

 

 5) ICMP Redirect 공격

  • 네트워크 통신 간 경로에 문제가 생길 시 라우터는 출발지 호스트에게 경로를 변경하라는 메시지를 보내는데 이 때 사용되는 메시지가 ICMP Redirect(Type 5)이다.
  • ARP Redirect와 ICMP Redirect의 차이점
    • ARP Redirect는 호스트의 ARP Cache Table정보를 변조하여 스니핑하는 것이고, ICMP Redirect는 라우팅 테이블을 변조하여 스니핑 한다는 차이점이 존재한다.
    • ARP Redirect에 공격이 성공하게 되면 거쳐가는 모든 트래픽을 스니핑할 수 있지만, ICMP Redirect는 특정 목적지로 나가는 트래픽에 대해서만 스니핑을 할 수 있다.
  • 대응방법
    • 리눅스의 경우 "sysctl -w net.ipv4.conf.all.accept_redirects=0"으로 변경해준다.

 

Traceroute 유틸리티
  • ICMP Time Exceeded 메시지와 Destination Unreachable 메시지를 이용하여 구간별 네트워크 상태를 진단하는 프로그램이다.

 

2. TCP 프로토콜

 1) 개요

  1-1) 연결 지향 프로토콜(Connection Oriented Protocol)

  • 가상의(논리적인) 연결통로를 설정해서 통신하는 방식으로 가상의 연결통로(Imaginary Tube)를 가상회선(Virtual Circuit)이라 한다.
  • 논리적인 연결통로를 통해 데이터를 주고받게되므로써 데이터의 순서제어(Sequence Control)가 가능하다.
  • 데이터를 정해진 크기로 전송하는 데이터 그램(Datagram) 기반의 전송방식과 달리 임의의 크기로 나누어 연속해서 전송하는 방식의 스트림(Stream) 기반의 전송방식을 사용한다. 

 

  1-2) 신뢰할 수 있는 프로토콜(Reliable Protocol)

  • 흐름제어(Flow Control)
    • 데이터를 보내기 전 연결성립 과정(3 Way-handshaking)에서 수신측은 수신 가능한 크기(Window size)를 송신측에 공유하게 된다.
    • 슬라이딩 윈도우(Sliding Window) 제어방식을 사용하며 매 단편화된 데이터마다 수신확인응답(ACK)을 수신한 후 전송하게 되면 왕복시간(RTT:Round Trip Time)이 길 경우 단위 시간 당 데이터 전송량(Throughput)이 매우 떨어지기 때문에 상대방이 받을 수 있는 범위 내에서 데이터를 연속적으로 전송하는 방식이다.
    • TCP 소켓 생성시 입력버퍼,출력버퍼라는 것이 생기며 이곳에 데이터들을 보관해두며 서로 통신하게 되며, Window size로 인해 버퍼가 오버플로우 될 경우는 없다고 보면된다.
  • 오류제어(Error Control)
    • 송신측에서 계산한 Checksum을 수신측에서 검증하여 오류 여부를 판단하고, 오류 또는 누락 발생 시 재전송(Retransmission)을 수행하여 이를 보장한다.
    • 손실(Loss) : 물리적인 네트워크 장애, TTL 초과 등
    • 폐기(Discard) : 데이터 오류 등에 의한 폐기
    • 지연(Delay) : 네트워크 혼잡 등에 의한 지연
  • 혼잡제어(Congestion Control)
    • 네트워크 혼잡정도에 따라 송신자가 데이터 전송량을 제어하는 기능을 말한다.
    • 혼잡정도에 대한 판단기준은 데이터의 손실 발생 유무로 판단한다.

 

 2) TCP 프로토콜 구조

 

그림

  • Source Port(16 bits) : 출발지 포트 번호
  • Destination Port(16 bits) : 목적지 포트 번호
  • Sequence Number(32 bits) : 송신 데이터 순서 번호
    • 송신 시 전송하는 데이터의 시작 바이트 순번을 담는다. 바이트 순번은 전송하는 데이터의 바이트 단위로 부여하는 연속된 번호를 의미한다.
    • 연결설정 단계에서 초기 순서 번호(ISN:Initial Sequence Number)를 상호간에 주고받는다.
  • Acknowledgement Number(32 bits) : 상대방이 다음에 전송할 순서 번호(Sequence Number)
    • 수신 확인 응답(ACK)과 함께 해당 필드에 상대방이 다음에 전송할 순서 번호를 담아서 보낸다.
  • HLEN(4 bits) : 헤더의 길이
    • 4 bytes 단위로 표시(20 ~ 60 bytes)하며 헤더는 기본 헤더 20 bytes와 옵션 헤더 최대 40 bytes로 구성된다.
  • Reserved(4 bits) : 예약(사용하지 않음)
  • Control Flags(6 bits)
    • URG(Urgent Pointer is valid) : 긴급 데이터(OOB:Out Of Band) 설정
    • ACK(Acknowledgment is valid) : 수신 확인 응답(ACK) 설정
    • PSH(Request for push) : 송수신 버퍼에 있는 데이터 즉시 처리
    • RST(Reset the connection) : 연결 중단(강제 종료), Out Of Path 방식의 보안장비들은 악의적인 패킷에 대하여 TCP RST 방식으로 차단한다.
    • SYN(Synchronize sequence numbers) : 연결 설정
    • FIN(Terminated the Connection) : 연결 종료(정상 종료)
  • Windows Size(16 bits)
    • 수신버퍼의 여유 공간 크기를 의미하며, 슬라이딩 윈도우 제어방식에 사용이 된다.
  • Checksum(16 bits)
    • 헤더를 포함한 전체 세그먼트에 대한 오류를 검사하기 위한 필드
  • Urgent Pointer(16 bits)
    • 세그먼트가 긴급 데이터(URG 플래그 설정)를 포함하고 있는 경우에 사용되는 필드로 긴급 데이터의 위치값을 담고 있다.

 

 3) TCP 분할(Segmentation)과 재조합(Reassembly)

  • MSS(Maximum Segment Size)
    • TCP 세그먼트 데이터부의 최대 바이트수를 의미하며 연결 설정 과정에서 상호간에 MSS 정보를 주고받는다.
    • MSS는 Frame의 MTU에 영향을 받으며, IP헤더와 TCP헤더를 제거하면 MSS 크기를 알 수 있다.
  • Application 계층에서 전달된 데이터는 TCP 계층에서 MSS 크기에 따라 분할이 발생하며, 분할된 세그먼트는 수신측에서 재조합(Reassembly)되어 Application 계층으로 전달된다.

 

 4) 연결 설정 과정(3-Way Handshake)

사진

  4-1) 첫 번째 단계

  • 최초 클라이언트는 서버와 연결 설정을 위한 연결 요청 패킷(SYN 패킷)을 보낸다. 연결 요청을 위해 능동적으로 포트를 열고 있는 상태를 'Active Open', 연결 요청을 수동적으로 포트를 열고 있는 상태를 'Passive Open'이라 한다.
  • 최초 SYN 패킷을 보낸 TCP(소켓) 상태를 'SYN_SENT' 상태라고 하며, 최초 SYN 패킷안에는 Sequence Number만 존재하고 Acknowledgment Number는 존재하지 않는다.

 

  4-2) 두 번째 단계

  • 클라이언트의 연결 요청(SYN 패킷)에 대한 수신 확인 응답(ACK)과 함께 서버에서 클라이언트로 연결 요청(SYN 패킷)을 보내 상호간에 연결 요청을 수행한다.
  • 수신 확인 응답(ACK)을 하게 되면 반드시 Acknowledgment Number를 설정하는데 그 의미는 상대방이 다음에 보낼 패킷의 순서 번호를 의미한다.
  • 클라이언트의 SYN 패킷을 수신한 TCP(소켓) 상태를 'SYN_RECEVIED' 상태라고 한다.

 

  4-3) 세 번째 단계

  • 서버의 연결 요청(SYN 패킷)에 대한 수신 확인 응답(ACK)을 클라이언트에서 전송하게 되면 최종적으로 연결 설정이 완료된다.
  • 연결 설정이 완료되면 TCP(소켓) 상태는 'ESTABLISHED' 상태가 된다.

 

 5) 데이터 송수신 과정

  5-1) 재전송(Retransmission) 과정

  • TCP는 모든 세그먼트 전송 시마다 재전송 타이머(Retransmission Timer)가 동작한다.
  • 재전송 타임아웃(RTO : Retransmission Time Out)동안 상대방으로부터 ACK 응답이 없으면 송신자는 해당 패킷이 누락된 것으로 판단하여 재전송을 수행한다.
  • 재전송은 일정 시간/횟수 동안 발생하며 더 이상 상대방으로부터 ACK 응답이 없으면 연결을 종료한다.
  • 혼잡제어 관점에서는 RTO 만료에 따른 재전송이 발생하는 상황은 매우 혼잡한 상태로 판단한다.

 

  5-2) 빠른 재전송(Fast Retransmission) 과정

  • TCP는 수신측이 기대했던 순서 번호가 아닌 그 이후의 순서 번호의 세그먼트를 수신하면 즉시 기대하는 순서 번호의 세그먼트를 요청하는 ACK 패킷을 전송한다.
  • 클라이언트는 중복(Duplication) ACK가 두 번 발생할 때까지는 일시적으로 서버에 전달한 세그먼트의 순서가 맞지 않는 상태로 판단하다가 세 번 발생하면 해당 세그먼트가 누락된 것으로 판단하여 재전송을 수행한다.
  • RTO 발생 이전에 중복 ACK가 세 번 발생하면 즉시 재전송을 수행하므로 이를 빠른 재전송이라 한다.
  • 혼잡제어 관점에서 중복 ACK 3회 발생에 따른 재전송이 발생하는 상황은 덜 혼잡한 상태로 판단한다.
    • 세그먼트의 누락은 발생했지만 나머지 세그먼트는 정상적으로 수신되었기 때문이다.

 

 6) 연결 종료 과정(4-Way Handshake)

그림

  6-1) 첫 번째 단계

  • 클라이언트는 서버와의 연결 설정을 종료하기 위한 연결 종료 패킷(FIN+ACK 패킷)을 서버에게 보낸다.
'FIN 패킷'이 아닌 'FIN+ACK'를 보내는 이유
  • 이미 클라이언트와 서버는 연결을 맺고 데이터를 주고받았기 때문에 순서 번호가 존재한다.
    • 반대로 최초 연결 설정을 맺을 때는 'SYN+ACK 패킷'이 아닌 'SYN 패킷'만 보내는 이유도 여기에 존재한다.
  • 때문에 클라이언트가 보내는 'FIN+ACK' 패킷에는 Sequence Number, Acknowledgment Number 둘 다 설정되어 보낸다.

 

  6-2) 두 번째 단계

  • 서버는 클라이언트의 연결 종료 요청에 대한 수신 확인 응답(ACK)을 보낸다.
  • 이 때 서버는 'CLOSE_WAIT' 상태가 되며 TCP Receive Buffer에 남아있는 데이터를 어플리케이션에게 전송이 다 끝날때까지 대기한 후 종료가 되면 클라이언트에게 연결 종료 패킷(FIN+ACK 패킷)을 보낸다.

그림

 

  6-3) 세 번째 단계

  • 서버의 연결 종료 패킷을 수신한 클라이언트는 즉시 연결을 종료하는 것이 아닌 서버에 마지막 ACK를 보낸 후 2MSL(Maximum Segment Lifetime) 시간동안 대기한다.
  • 대기하는 이유는 마지막 ACK 응답이 정상적으로 서버에게 도착했는지 보장해주기 위한 것으로 만약 서버가 마지막 ACK를 수신하지 못했다면 FIN+ACK 재전송이 발생하게 되고 이를 처리해주기 위해 일정 시간 대기한다.

 

  6-4) 연결 종료 단계의 TCP(소켓) 상태

상태 설명
FIN_WAIT_1 첫 번째 FIN+ACK 패킷에 대한 ACK를 대기하는 상태
FIN_WAIT_2 첫 번째 FIN+ACK 패킷에 대한 ACK 수신 후 두 번째 FIN+ACK 패킷을 수신할 때까지 대기하는 상태
TIME_WAIT 마지막 ACK 전송 후 2MSL 동안 대기하는 상태(연결을 종료한 쪽)
CLOSE_WAIT 상대방의 첫 번째 FIN+ACK 패킷에 대한 ACK 응답 후 두 번째 FIN+ACK 패킷을 전송할 때까지 대기하는 상태
LAST_ACK 두 번째 FIN+ACK 패킷 전송 후 마지막 ACK를 대기하는 상태
CLOSED 종료된 상태

 

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

RFC793(TCP 표준명세)에 따르면 닫힌 포트로 패킷을 수신하면 RST를 상대방에게 전송한다.
  • 연결 요청 패킷 내 Acknowledgment Number가 없는 경우
    • Sequence Number는 0, Acknowledgment Number는 수신한 Sequence Number + 1 한 값을 넣고 'RST+ACK' 패킷을 만들어 전송한다.
  • 연결 요청 패킷 내 Acknowledgment Number가 있는 경우
    • 수신된 연결 요청 패킷 내 Acknowledgment Number를 Sequence Number에 넣고 RST 패킷을 만들어 전송한다.

 

 8) 연결 중단(abort)

  • 연결 상태에 있는 클라이언트가 연결을 즉시 중단해야할 필요가 있을 경우 'RST+ACK' 또는 'RST' 패킷을 서버에 전송한다.
  • 'RST+ACK' 또는 'RST' 패킷을 수신한 서버 TCP는 즉시 종료(CLOSED) 상태가 된다.

 

 9) TCP 세션 하이재킹(Session Hijacking)

  9-1) 개요

  • TCP는 연결 설정 과정을 통해 상호간에 세션을 생성한 다음 식별자를 통해 상호간에 인식하게 된다.
  • 세션 식별정보 
    • 출발지 IP, Port와 목적지 IP, Port
    • Sequence/Acknowledgment Number
  • TCP 세션 하이재킹은 세션 식별정보를 공격자가 위조하여 세션을 탈취하는 공격이다.

 

  9-2) 실습

 

 

3. UDP 프로토콜

 1) 개요

  1-1) 비연결형 프로토콜(Connectionless Protocol)

  • 논리적인 연결 설정 과정이 없기 때문에 데이터그램 전송 시 마다 주소 정보를 설정해서 전송한다.
  • 데이터그램(Datagram) 기반의 전송방식을 사용하며, TCP 프로토콜처럼 제어 메커니즘이 존재하지 않는다.

 

  1-2) 신뢰할 수 없는 프로토콜(Unreliable Protocol)

  • 흐름제어, 오류제어, 혼잡제어 등을 수행하지 않는다.
  • 실질적으로 IP 기반에 포트 정보를 이용하여 상위 송수신 어플리케이션을 식별해주는 역할 정도만 수행한다.

 

 2) UDP 프로토콜의 장점

  • 단순하고 가벼운 프로토콜로 전송속도가 빠르다.
  • 비신뢰적인 특성으로 인해 대량 데이터의 송수신은 부적절하며 주로 한 번의 패킷 송수신으로 완료되는 서비스에 사용된다.
반응형