본문 바로가기

정보보안/네트워크 보안

[네트워크 기본학습] IP 프로토콜

IPv4 프로토콜

 

① 개념 

  • 비연결형(연결상태 유지x)/비신뢰적(신뢰성 통신 x) 프로토콜
  • 목적지 주소(IP Address)를 기반으로 라우팅을 담당하는 인터넷 계층의 대표 프로토콜
  • 라우팅: 라우팅 알고리즘을 통해 최적의 경로를 선정하여 목적지를 찾아가는 것

 

② 구조

  • VER : IP 버전 정보
  • HLEN : 헤더길이
  • Service Type: QoS를 위한 용도. 현재 사용 x
  • Total Length: 헤더 + 데이터 전체 길이
  • (단편화/재조합) Identification : 단편화 전 IP 데이터그램을 식별하기 위한 ID
  • (단편화/재조합) Flags
    • 첫 번째 비트 : 사용 안함
    • 두 번째 비트 : Don't fragment (1 : 패킷 단편화 하지마 0 : 패킷 단편화 해)
    • 세 번째 비트 : More fragments bit (1 : 재조합할 단편화 뒤에 더 있다. 0: 더 없다.)
  • (단편화/재조합) Fragmentation offset : IP 특성상 원본 단편들이 순서대로 전송되지 않기때문에 순서조합을 위해 만들어진 현재 단편의 상대위치(offset)
  • Time to live: IP 생존시간을 지정하는 필드
    • 최초엔 초단위 -> 홉카운트(라우터/l3 스위치 통과개수)로 의미 바뀜
    • 목적은 루핑이 발생해 목적지에 도달할 수 없는 패킷이 무한히 생존하여 네트워크 대역만 차지하는 상태를 방지하기 위해서다.
    • linux(64) window(128) unix (255)로 설정. -> OS 핑거 프린터로 사용
  • Protocol : 상위 프로토콜을 식별하기 위한 프로토콜 번호 저장하는 필드. ICMP(1), TCP(6) UDP(17)
  • Header Checksum : 데이터부 제외한 헤더부분의 오류 검사값
  • Source IP address : 출발지 IP 주소
  • Destination IP address : 출발지 IP 주소
  • 주요 IP 옵션 헤더
    • Loose Source Route : 라우팅 경로를 출발지에서 지정하며 경우에 따라 다른 경로로 라우팅
    • Strict Source Route : 출발지에서 지정한 경로로 무조건 라우팅

 

③ 라우팅

  • 규칙
    1. 첫째로 목적지 주소가 자신과 동일한 네트워크에 있다면 ->  직접전송한다.
    2. 둘째로 목적지 주소가 자신과 동일한 네트워크에 속하지 않는다면 -> 직접 전송이 불가하기 때문에 1차 경유지(gateway)주소를 라우팅 테이블을 참조하여 찾는다.(netstat -rn을 통해 호스트의 라우팅테이블 정보 확인 가능)
    3. 셋째로 목적지 주소와 자신의 주소가 동일한 경우 목적지가 자신이므로 상위계층으로 데이터를 전달한다.
  • 라우팅 테이블 검색 방식 및 우선순위
    • 검색방식 : IP 패킷의 목적지 IP와 라우팅 테이블의 netmask/genmask를 bit and 연산 수행 후 라우팅 테이블의 destination 필드와 비교, 일치하는 경로를 선택하여 패킷을 전송한다.
      • 패킷의 목적지 IP와 netmask/genmask 간에 bit and 연산 : 목적지 IP에서 네트워크 ID 부문만을 추축하기 위한 과정
    • 검색 우선순위
      1. 목적지 호스트(IP) 주소와 일치하는 경로를 찾는다.
      2. 목적지 호스트(IP) 주소와 일치하는 경로가 없으면 목적지 네트워크 주소와 일치하는 경로를 찾는다.
      3. 일치하는 경로가 없으면 Default gateway(0.0.0.0)로 보낸다. 
    • 실습
      • 라우팅 테이블 설정 일부(Linux/netstat -rn 명령)
        Destination Gateway Genmask Flags Interface
        10.0.96.100 10.0.160.1 255.255.255.255 UGH eth0
        10.0.64.0 10.0.160.2 255.255.224.0 UG eth0
        10.0.64.0 10.0.160.3 255.255.192.0 UG eth0
        0.0.0.0 10.0.160.4 0.0.0.0 UG eth0

        • Destination : 목적지 호스트 또는 네트워크 주소
        • Gateway : 목적지로 전송하기 위한 Gateway 주소
        • Genmask : 범용(General) 목적의 마스크
          • 목적지 Host를 식별하기 위한 마스크 : 255.255.255.255
          • 목적지 Network를 식별하기 위한 마스크 : 넷마스크(Netmask)
          • default gateway를 식별하기 위한 마스크 : 0.0.0.0 
        • Flags : 해당 경로에 대한 상태정보 플래그
          • U(route is Up) : 경로가 활성화되어 있음
          • G(use Gateway) : gateway를 사용함
          • H(target is a Host) : 목적지가 호스트를 의미
        • Interface : 해당 목적지로 보내기 위한 인터페이스 이름
      • 라우팅 경로 계산 1 : 10.0.122.100 목적지로 패킷 전송 시 gateway 주소
        • 목적지 주소(10.0.122.100)와 세 번쨰 행의 Genmask 결과 : 10.0.64.0. 즉, Destination 주소와 일치한다. -> 해당 경로의 Gateway (10.0.160.3)로 전송
      • 라우팅 경로 계산 2 : 10.0.192.199 목적지로 패킷 전송 시 gateway 주소
        • 목적지주소와 모든 행의 genmask간에 bit and 연산 수행 시 일치하는 Destination이 없다. -> default gateway(10.0.160.4)로 전송
      • 라우팅 경로 계산 3 : 10.0.96.100 목적지로 패킷 전송 시 gateway 주소
        • 첫번째 행의 호스트 주소와 일치 genmask (255.255.255.255) -> gateway(10.0.160.1)에 전송

 

④ 공격

  1. IP Spoofing
    • 개념 
      • IP를 속이고 통신하는 공격. 1995년 캐빈 미트닉이 이를 이요해 실제 해킹을 시도함으로써 널리 알려짐
      • 시스템 간의 트러스트 관계를 이용
      • 트러스트 관계가 맺어진 서버와 클라이언트를 확인한 후 신뢰 관계가 있는 클라이언트를 연결 불가능한 상태로 만들고(Dos 공격 등) 공격자가 클라이언트의 IP로 위조(스푸핑)하여 서버에 접속하는 공격 방식
        • 트러스트 관계 : ID/PWD 기반 로그인 x, 신뢰관계에 있는 IP를 등록해 해당 IP로 접근하는 것을 허용 -> ID/PWD 스니핑엔 강하지만 IP 스푸핑엔 매우 취약하여 보안상 권장 x
    • 실습
      1. 트러스트 설정(hosts.equiv/.rhost 파일)
        • 유닉스, 리눅스 시스템에서 트러스트 관계 설정 파일로 /etc/hosts.equiv와 $HOME/.rhost 파일이 있다
          • /etc/hosts.equiv : 시스템 전체에 영향
          • $HOME/.rhost : 사용자별로 설정하는 파일
            레코드 형식 의미
            host_name 해당 호스트(IP/호스트명)의 접근 허용
            host_name user_name 해당 호스트에 해당 사용자로 접근 허용
            + 모든 호스트의 접근 허용(계정은 아이디, 패스워드 인증 필요)
            + User_name 모든 호스트의 해당 사용자로 접근 허용
            -host_name 해당 호스트의 접근 차단
            host_name -username 해당 호스트에서 해당 사용자만 접근 차단
            + @group 모든 호스트에서 해당 group 사용자로 접근허용
             
          • 설정방식을 보면 앞에 있는 것이 호스트명, 띄어쓰기 후 나오는 것이 사용자명(계정명)이다. 
          • +는 모두 허용, -(호스트명 or 계정명)는 차단. 만약 "+ +"으로 설정하면 모든 호스트에 대해 모든 계정을 신뢰한다는 의미로 매우 취약한 설정이다.
      2. rlogin 서비스 활성화
        • r계열 서비스 (rlogin, rsh, rexec 등)는 인증 없이 신뢰 관계에 있는 시스템들의 원격 접속을 허용해주는 서비스들이다. rlogin의 경우 telnet과 유사하지만, 인증 없이 접속할 수 있다.
        • xined 데몬의 rlogin 서비스를 활성화한 후, xinetd 데몬을 재기동한다. netstat명령으로 소켓 상태를 확인해보면 513.tcp 포트가 리슨 상태에 있는 것을 확인할 수 있다.
      3. rlogin 클라이언트 명령어를 통한 원격 접속
        •  "rlogin 서버IP" 명령을 통해 접속하면 아이디, 패스워드 확인 없이 해당 IP에 연결되는 것을 확인할 수 있다. 공격자는 신뢰관계에 있는 클라이언트를 사용 불능 상태로 만든 후 해당 클라이언트의 IP로 위조하여 해당 서버에 접속할 수 있다.
    • 대응책
      • 시스템 간 트러스트 설정을 사용하지 않는다. 반드시 사용해야 할 경우에는 트러스트된 시스템의 MAC 주소를 정적으로 구성하여 단순히 IP만을 위조한 접속을 차단한다.
      • $HOME/.rhosts, hosts.equiv 사용 금지
        • r계열 서비스(rlogin,rsh,rexec 등)을 통한 원격접속은 보안상 매우 취약하여 서비스 포트가 열려있을 경우 중요 정보 유출 등 침해사고의 원인이 될 수 있다. 따라서 R계열 서비스를 허용하지 않는다. 만약, 불가피하게 사용할 경우에는 트러스트 관계 설정 파일인 $HOME/.rhosts, hosts.equiv에 적절한 보안 조치를 해야 한다.
        • 보안 조치
          • /etc/hosts.equiv 및 $HOME/.rhosts 파일 소유자를 root 또는 해당 계정으로 변경한다. (ex. chown root /etc/hosts.equiv
          • /etc/hosts.equiv 및 $HOME/.rhosts 파일 권한을 600이하로 변경한다. (ex. chmod 600 /etc/hosts.equiv)
          • /etc/hosts.equiv 및 $HOME/.rhosts 파일에서 "+"를 제거하고 반드시 필요한 호스트 및 꼐정만 등록한다

 

IPv6 기본

 

① 개념

  • IPv4 주소가 고갈되는 문제를 해결하기 위하여 새로운 128비트 체계로 2^128개의 주소를 갖는 인터넷 프로토콜 주소를 갖는다.
  • 16bit 단위로 구분하며 각 단위는 16진수로 변환되어 콜론(:)으로 구분하여 표시한다.
  • 앞의 64bit는 네트워크 주소를 의미하고 뒤의 64비트는 네트워크에 연결된 통신장비 등에 할당되는 인터페이스 주소를 의미한다.

② 장점

  • 확대된 주소공간 :주소길이가 128비트로 증가하여 2^128개의 주소 사용 가능
  • 단순해진 헤더 포멧 : IPv4 주소 헤더의 불필요한 필드를 제거하여 보다 빠른 처리 가능
  • 간편해진 주소 설정 기능 : IPv6 프로토콜에 내장된 주소 자동 설정 기능을 이용하여 플러그 앤 플레이 설치 가능(IPv4의 경우 DHCP를 통해 할당)
  • 강화된 보안성 : IPsec을 기본 사항으로 제공
  • 개선된 모바일 IP : IPv6 주소 헤더에서 이동성 지원 

③ IPv6 전환기술(<-> IPv4)

  • 듀얼스택 : IPv4와 IPv6 프로토콜을 동시에 설정. 통신 상대에 따라 선택정 사용 -> 장기적으로 봤을 때 가장 추천
  • 터널링 :IPv6가 IPv4 네트워크 경유 시, 가상의 경로를 만들어 IPv6를 IPv4 패킷으로 캡슐화 해 전송 (IPv6 -> IPv4 -> IPv6) 
  • 주소 변환/헤더 변환 : IPv4 주소를 IPv6로 변환하거나 IPv6주소를 IPv4 주소로 변환하여 통신하는 방식. 패킷 앞부분에 변환 헤더를 추가해 송신하고 수신측에서는 변환 헤더를 제거하는 방식으로 통신한다. (IPv6 -> IPv4 / IPv4->IPv6 통신할 때 사용)