본문 바로가기

보안

보안기사 - IPv4, IPv6, ICMP

IP (IPv4)


비연결형(Connectionless) 프로토콜. ~ 패킷 전송 순서 보장 X
비신뢰적(Unreliable) 프로토콜. ~ 신뢰성 있는 통신 보장 X (신뢰성 <= 흐름제어, 오류제어, 혼잡제어)
IP 주소를 기반으로 라우팅을 담당하는 인터넷 계층의 대표 프로토콜
라우팅 = 라우팅 알고리즘을 통해 최적의 경로를 선정하여 목적지를 찾아가는 것

IP 프로토콜 구조



필드명 설명
VER IP 버전 정보
HLEN 헤더 길이
Service type 서비스 품질(QoS)을 위한 용도지만 현재 사용X
Total length IP Packet 전체 길이 (헤더+데이터)
Identificatoin 단편화/재조합 관련 필드 - 단편화 전 원본 IP 데이터그램을 식별하기 위한 ID
Flags 첫번째 비트 : 사용X(예약)
두번째 비트 : Don't fragment bit(1 = 패킷 단편화하지 말라)
세번째 비트 : More fragemtns bit(1 = 재조합할 단편이 남아있다, 0 = 단편이 더 이상 없다)
Fragemntation offset 단편화/재조합 관련 필드 - 단편을 순서대로 조합하기 위한 현재 단편의 상대위치(offset) 저장
Time to live 생존시간을 지정하는 필드. 라우터/L3 스위치 통과 횟수(hop count)
패킷이 라우터/L3스위치에 도착하면 1 감소시키고 0이 되면 해당 패킷 폐기 (-> 최초 출발지에 "ICMP Destination Unreachable")
=> 목적지에 도달할 수 없는 패킷이 무한히 생존하여 네트워크 대역만 차지하는 상태 방지하기 위함
OS 별로 부여하는 기본 TTL 값이 달라 해당 필드를 'OS 핑거프린트' 목적으로 사용 가능
Protocol 상위 프로토콜 식별 위함 -> Multiplexing, Demultiplexing
ex - ICMP(1), TCP(6), UDP(17)
Header checksum 데이터부 제외 헤더 부분의 오류 검사값
Source IP address 출발지 IP 주소
Destination IP address 목적지 IP 주소
주요 IP 옵션 헤더 Loose Source Route, Strict Source Route
옵션필드는 보안상의 이유로 대부분 허용X

IP 단편화 (Fragmentation)

IP 패킷(데이터그램)은 MTU에 따른 단편화(Fragmentation)가 발생

  • MTU (Maximum Transmission Unit)
    물리적 네트워크 프로토콜 (Network interface 계층의 프로토콜) 프레임의 데이터부(payload)의 최대크기
    이더넷의 경우 1500 바이트
    -> IP 패킷이 이보다 크다면 1500 바이트 이하의 크기로 단편화해 전송해야 함

단편화는 최초 출발지 뿐만 아니라 라우터/L3스위치 중계 구간의 MTU에 따라 추가적으로 발생하지만, 단편화된 패킷은 통신 효율을 위해 중계 구간의 MTU가 달라진다고 해도 재조합되지 않으며 최종 목적지에서만 재조합된다


IP 단편화 동작방식(tcpdump 패킷 캡처)

IP 라우팅 (Routing)

  • 라우팅 규칙
    1. 목적지 주소가 자신과 동일한 네트워크에 있다면 직접 전송
    2. 아니라면 직접 전송이 불가하므로 1차 경유지(Gateway) 주소를 라우팅 테이블을 참조하여 탐색
      라우팅 테이블은 임의의 목적지로 가기 위한 경로 정보를 저장하고 있는 자료구조 (netstat -rn 명령으로 확인 가능)
    3. 목적지 주소와 자신의 주소가 서로 동일하면 목적지가 자신의 호스트이므로 상위 계층으로 데이터 전달
  • 라우팅 테이블 검색 방식 및 우선순위
    1. 검색 방식
      IP 패킷의 목적지 IP와 라우팅 테이블의 netmask/genmask를 bit and(&) 연산 수행하여 목적지 IP에서 네트워크 ID 부분만을 추출
      -> 라우팅 테이블의 destination 필드와 비교하여 일치하는 경로를 선택해 패킷을 전송
    2. 검색 우선순위
      목적지 호스트(IP) 주소와 일치하는 경로 찾기
      없으면 목적지 네트워크 주소와 일치하는 경로 찾기
      없으면 default gateway(0.0.0.0)으로 전송
  • 실습
    1. 목적지 IP 주소와 Genmask AND 연산
    2. 해당 Destination과 일치하면 해당 GW 로 전송
    3. 일치하지 않으면 다음 행과 1번부터 반복
    4. 없으면 default gateway로 전송


      Destination : 목적지 호스트 또는 네트워크 주소
      Gateway : 목적지로 전송하기 위한 Gateway 주소
      Genmask : 범용 목적의 마스크
          - 목적지 host를 식별 : 255.255.255.255
          - 목적지 Network를 식별 : Netmask
          - default gateway를 식별 : 0.0.0.0
      Flags : 해당 경로에 대한 상태정보 플래그
          - U(route is Up) : 경로 활성화 (GW 사용X, 직접 전송)
          - G(use Gateway)
          - H(target is a Host)
      Interface : 해당 목적지로 보내기 위한 인터페이스 이름
    • 10.0.96.100 목적지로 패킷 전송
      1. 목적지 주소(10.0.96.100)와 첫 번째 행 Genmask(255.255.255.255)와의 bit AND 연산 수행
      2. 연산 결과(10.0.96.100)와 해당 Destination 주소(10.0.96.100)가 일치하므로 해당 경로의 Gateway(10.0.160.1)로 전송
    • 10.0.122.100 목적지로 패킷 전송
      1. 목적지 주소(10.0.122.100)와 세 번째 행 Genmask(255.255.192.0)와의 bit AND 연산 수행
      2. 연산 결과(10.0.64.0)와 해당 Destination 주소(10.0.64.0) 일치하므로 해당 경로의 Gateway(10.0.160.3)로 전송
    • 10.0.192.100 목적지로 패킷 전송
      1. 목적지 주소(10.0.192.100)와 모든 행의 Genmask(255.255.192.0)와의 bit AND 연산 수행
      2. 일치하는 Destination 주소가 없으므로 default gateway(10.0.160.5)로 패킷 전송

IP Spoofing

IP를 속이고 통신하는 공격
시스템 간의 trust 관계를 이용, trust 관계가 맺어진 서버와 클라이언트를 확인 후 신뢰관계가 있는 클라이언트를 연결 불가능한 상태로 만들고(DoS 공격 등 이용) 공격자가 클라이언트의 IP로 위조(spoofing)하여 서버에 접속

* trust 관계 설정은 ID, PW 기반의 로그인이 아닌 신뢰 관계에 있는 IP를 등록하여 해당 IP로 접근하는 것을 허용해주는 방식. 즉, IP주소로 인증하고 로그인 없이 접속이 가능하도록 해주는 방식 (r 계열 서비스)
=> 다수의 시스템을 관리하는 관리자의 입장에서 ID와 PW를 관리해야하는 어려움을 해결하고 접속 과정에서 ID, PW의 스니핑 위험을 차단하지만 IP spoofing에는 매우 취약하기 때문에 사용하지 않는 것을 권장

  • Trust 설정
    유닉스, 리눅스 시스템에서 trust 관계 설정파일로 /etc/hosts.equiv와 $HOME/.rhost 파일이 있다
    호스트명 계정명 형식으로 설정
    +는 모두 허용한다는 의미이므로 + +로 설정한다면 모든 호스트에 대해서 모든 계정을 신뢰한다는 의미로 매우 취약한 설정
  • rlogin 서비스 활성화
    r 계열 서비스(rlogin, rsh, rexec 등)는 인증 없이 신뢰 관계에 있는 시스템들의 원격접속을 허용해주는 서비스
    => ID, PW 확인 없이 바로 원격 접속 가능
    /etc/xinetd.d/rlogin 파일에서 disable = no로 설정하면 xinetd 데몬의 rlogin 서비스를 활성화하게 됨

  • 대응책
    시스템 간 Trust 설정 사용하지 않기 + r 계열 서비스 사용하지 않기
    반드시 사용해야할 경우에는 trust 된 시스템의 MAC 주소를 static으로 구성하여 단순히 IP 만을 위조한 접속을 차단
  • $HOME/.rhosts, hosts.equiv 사용 금지
    r계열 서비스를 통한 원격 접속은 보안상 매우 취약하므로 허용X
    만약 불가피하게 사용할 경우에는 trust 관계설정파일인 $HOME/.rhosts, hosts.equiv에 적절한 보안 조치를 해야함
    • 보안조치
      /etc/hosts.equiv, $HOME/.rhosts 파일 소유자를 root 또는 해당 계정으로 변경 (chown root /etc/hosts.equiv)
      /etc/hosts.equiv, $HOME/.rhosts 파일 권한을 600 이하로 변경 (chmod 600 /etc/hosts.equiv)
      /etc/hosts.equiv, $HOME/.rhosts 파일에서 '+'를 제거하고 반드시 필요한 호스트 및 계정만 등록

IPv6


IPv4 주소가 고갈되는 문제를 해결하기 위하여 새로운 128비트 체계로 2^128개의 주소를 갖는 인터넷 프로토콜 주소
16비트 단위로 구분, 각 단위는 16진수로 변환되어 콜론(:)으로 구분하여 표기
앞의 64비트는 네트워크 주소, 뒤의 64비트는 인터페이스 주소를 의미

* IPv4주소 고갈 문제 임시 해결
: CIDR, 사설 IP주소, NAT 도입

  • IPv6 장점
    구분 내용
    확대된 주소 공간 주소길이가 128비트로 증가하여 2^128개의 주소 사용 가능
    단순해진 헤더 포멧 IPv4 주소 헤더의 불필요한 필드를 제거하여 보다 빠른 처리 가능
    간편해진 주소 설정 기능 IPv6 프로토콜에 내장된 주소 자동 설정 기능을 이용해 플러그 앤 플레이 설치가 가능
    (NW 대역정보 + 인터페이스의 MAC 조합해 자동으로 주소 생성)
    강화된 보안성 IPv6에서는 IPsec 기능을 기본사항으로 제공
    개선된 모바일 IP IPv6주소 헤더에서 이동성 지원
  • IPv6 전환 기술

    1. Dual Stack
        IPv4와 IPv6을 동시에 설정해 통신 상대에 따라 선택적으로 사용
        호스트, 라우터 등에 듀얼스택을 적용해 IPv4와 IPv6 패킷을 모두 처리할 수 있도록

    2. Tunneling
        IPv4 네트워크를 경유하여 IPv6 네트워크 간 통신을 위한 방식
        호스트와 라우터에서 IPv6 패킷을 IPv4 패킷으로 캡슐화하여 전송함으로써 캡슐화된 IPv6 패킷이 IPv4 네트워크를 통과하게..

    3. Address Translation (또는 Header Translation)
        IPv4주소를 IPv6주소로 변환하거나 IPv6주소를 IPv4주소로 변환하여 통신
        패킷의 앞부분에 변환헤더를 추가함으로써 주소를 변환하여 송신하고, 수신측에서는 변환헤더를 제거하는 방식으로 통신


  • IPv6 기본헤더
    40 바이트 (IPv4 기본헤더의 2배)
    단순 -> 성능 개선, 효율적 라우팅
    (version, traffic class, flow label, payload length, next header, hop limit, source add., dest add.) 기본 헤더 + extension header


  • IPv6 종류 : 유니캐스트, 멀티캐스트, 애니캐스트
    1. 유니캐스트 (1 : 1)
      - 글로벌 주소
          IPv4의 공인IP주소와 유사, 범용적으로 IPv6 인터넷 상에서 사용
      - 링크로컬주소
          직접 연결된 동일 링크/서브넷에서 사용, 다른 링크의 글로벌 주소, 링크로컬주소와는 통신 불가
          고정대역(FE90::/10)과 interface의 EUI-64ID (MAC주소 확장하여 생성)의 결합으로 사용
    2. 멀티캐스트 (1 : N)
      IPv4 브로드캐스트 대체 기능 수행 위해 새로운 그룹 추가
    3. 애니캐스트 (1 : 가장 가까운 1)
      동일 주소 가지는 여러 목적지 장비들 중 출발지 장비와 가장 가까운 장비가 응답하는 통신 방식
      멀티캐스트는 동일 그룹에 소속된 장비들만 응답, 애니캐스트는 동일 주소 장비 중 가장 가까운 장비 하나만 응답

ICMP (Internet Control Message Protocol)


3계층(Network Layer)의 IP 프로토콜은 신뢰할 수 없는 프로토콜 -> 전송상태에 대한 관리가 이루어지지 않음
이를 보완하기 위한 프로토콜이 ICMP

  1. Error-Reporting Message 기능
    패킷 전송 중 오류 발생 시 에러 메시지 생성하여 응답 (발생원인 포함)
  2. Query Message 기능
    네트워크 상태를 진단하기 위한 쿼리 요청 및 응답 메시지 생성 (ex - ping)
    ICMP 메시지는 Type 필드(메시지 유형 의미)와 Code 필드(유형별 세부내용)로 구성

ICMP 프로토콜 구조


필드명 설명
Type ICMP 메시지의 유형/용도
예) Type 3 : Destination Unreachable
Code Type의 세부 내용. Type과 Code가 조합되어 ICMP 메시지의 목적과 용도를 나타낸다
예) Type 3의 Code 3 : Port Unreachable (UDP 포트가 열려있지 않음)
Checksum ICMP 메시지 오류를 검사하기 위한 값
Rest of the header Type과 Code에 따라 추가되는 헤더
Data section 데이터가 위치하는 영역

주요 ICMP Error-Reporting 메시지

  • Destination Unreachable (Type 3)
    해당 목적지에 도달할 수 없음을 의미
    • Code 1 (Host Unreachable) : 최종 단계의 라우터가 목적지 호스트로 패킷 전송 실패
    • Code 2 (Protocol Unreachable) : 목적지 호스트에서 특정 프로토콜을 사용할 수 없는 경우
    • Code 3 (Port Unreachable) : 목적지 호스트에 해당 UDP 포트가 열려있지 않은 경우 (TCP의 경우 TCP RST 패킷(= RST + ACK)을 반환)
    • 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 0 (Time To Live exceeded in Transit) : 최종 목적지에 도달하기 전 TTL 값이 0이 되어 해당 패킷이 폐기
    • Code 1 (Fragment Reassembly time exceeded) : IP 패킷 재조합 과정에서 타임아웃이 발생해 해당 IP 데이터그램 모두 폐기 (일부 단편이 전송과정에서 손실될 경우 재조합에 실패하여 발생)

주요 ICMP Query 메시지

  • Echo Request (Type 8), Reply (Type0)
    ping 유틸리티 프로그램에 사용 (code 0)
    end node 간 네트워크 및 호스트 상태진단 목적으로 사용
    별도의 code는 없으며 이외의 쿼리 타입들은 거의 사용X

* 윈도우 기본 TTL = 128
* 리눅스 기본 TTL = 64
* 유닉스 기본 TTL = 255

ICMP Redirect 공격

ICMP Redirection 메시지(Type 5)를 이용해 패킷 경로를 악의적으로 재설정하는 공격

ICMP Redirection 메시지를 수신한 호스트는 자신의 라우팅 테이블에 특정 목적지로 나가는 gateway 주소를 변경하는데 공격자는 이를 이용해 자신이 원하는 형태의 ICMP Redirection 메시지를 만들어 특정 목적지로 가는 패킷을 공격자로 향하도록 한다

ex) 공격자 IP = A, 희생자 IP = B, 희생자의 default GW = G 일 때.. 공격자는 희생자가 8.8.8.8로 전송하는 패킷을 스니핑하려 한다.

  1. 공격자는 source IP주소를 G로 위조(spoofing)하여 Type 5, Code 1이고 Gateway address: A, Dst: 8.8.8.8인 ICMP 메시지를 희생자에게 전송
  2. 위 메시지를 수신한 희생자의 라우팅 테이블에서 Network Destination이 8.8.8.8의 Gateway는 A로 변경된다
  3. 희생자PC에서 8.8.8.8 목적지로 패킷 전송시 공격자 PC로 패킷이 전달(라우팅)되어 공격자는 스니핑이 가능하게 된다

ARP Redirect는 희생자의 ARP Cache Table 정보를 변조하여 스니핑
ICMP Redirect는 희생자의 라우팅 테이블을 변조하여 스니핑

  • 대응 방법
    ICMP Redirection 메시지에 의해 라우팅 테이블이 변경되지 않도록 ICMP Redirect 옵션 해제
    (대부분의 OS에서 보안상 이유로 기본적으로 해제)
    리눅스 커널 파라미터 중 ICMP Redirect 설정인 accept_redirects를 0으로 설정 - sysctl -w net.ipv4.conf.all.accept_redirects=0