본문 바로가기

카테고리 없음

네트워크 기본

반응형

* 프로토콜 : 시스템 간 통신을 위한 규약(약속)

프로토콜 구성 요소 내용
구문 (Syntax) - 송수신 데이터 포맷을 의미
의미 (Sementic) - 데이터의 각 항목이 가지는 의미
타이밍 (Timing) - 데이터 송수신 동작 방식을 정의

 

 

 

* OSI 7 Layer (Open System Interconnection) : 국제 표준화 기구(ISO)에서 제정한 개방형(이기종 시스템과 상호 연동이 가능 <> 폐쇄형)시스템 간의 상호연결 모델로, 네트워크 상호 호환을 위해 기능에 따라 계층적으로 표준화한 아키텍처를 정의

OSI 7 Layer 구조

주요 용어 설명
Node - 네트워크에 연결된 장치를 의미
HOST - 일반적으로 Node중 컴퓨터(PC, Server)노드를 가리키는 명칭
End-Node - 통신의 양 끝단에 해당하는 노드
- 최초 송신, 최종 수신 노드를 의미
Intermediate Node - End-Node 사이에서 패킷 중계를 해주는 노드
Link - Node 사이의 물리적 통신 경로

 

 

 

* OSI 7 Layer 계층별 특징

계층 특징
물리
(Physical)
* 디지털 데이터를 물리적 장치를 통해 전기적, 광학적 신호로 변환하여 입출력을 담당하는 계층



* 주소정보가 없는 계층으로 목적지 인식이 불가능하며, 전기적 신호만 전달



* 데이터 단위(Data Unit) : bit



* 1계층 주요 장비
# Dummy Hub : 들어온 신호를 연결된 모든 포트로 단순히 전송하는 장치
- 장비의 NIC(Network Interface Card) 동작모드 설정
1) 기본 동작모드(자신의 MAC주소로 목적지가 잡힌 패킷이 아니면 모두 폐기)
2) 무차별 모드(Promiscuouse Mode : 자신이 목적지가 아닌 패킷도 모두 수신 - 스니핑 용도)


# Repeater : 감쇠된 전송 신호를 새롭게 재생, 다시 전달하는 재생 중계 장치
데이터 링크
(Data Link)
* 인접노드(adjacent node)간의 신뢰성 있는 Frame 전송을 담당



* 목적지 노드에 대한 물리적 주소가 필요하여 NIC의 MAC주소(변경이 불가능한 물리적 주소)를 통해 해당 역할을 수행



* 데이터 링크 계층은 두가지 계층으로 세분화 가능
1) LLC (Logical Link Control) Layer : 네트워크 계층과의 연결을 담당, 데이터 오류 검출 및 상위 프로토콜에 대한 타입 확인을 수행
2) MAC (Medai Access Control) Layer : 물리 계층과의 연결을 담당, 신호변환 및 MAC 주소를 통해 데이터 송수신에 대한 확인을 수행



* 데이터 단위(Data Unit) : Frame



* 데이터 링크 컨트롤(데이터의 안전한 전송보장) 수행
1) 흐름 제어(Flow Control) : 송신 노드가 수신노드의 처리속도를 고려, 이를 초과하지 않도록 제어
  ● 정지-대기(Stop and Wait) 방식 : 송신측에서 프레임을 전송한 후, ACK 수신 시 까지 대기
  ● Sliding Window 방식 : 수신측의 ACK를 받기 전, 수신 가능한 범위 내에서 여러 프레임을 전송

2) 오류 제어(Error Control) : 전송 중 여러 원인에 의한 오류나 손실 발생을 해결하기 위한 제어
  ● 후진 오류 방식(BEC - Backward Error Correction = ARQ(Automatic Repeat Request) : 송신측에        서 데이터 전송 시, 오류를 '검출' 할 수 있는 부가 정보를 함께 전송, 수신측에서 이를 점검, 오류        발생 시 재전송을 요청
  ● 전진 오류 방식(FEC - Forward Error Correction) : 송신측에서 오류 '검출 및 수정'까지 가능한
      부가 정보를 담아 전송하여, 재전송이 불필요한 방식

3) 회선 제어(Line Control) : 회선 구성방식과 전송방식을 분류하여, 전송링크에 대한 제어 규범 정의
  ● 회선 구성 방식(Line Configuration) : 둘 이상의 장치가 하나의 링크에 연결되는 방식
        ◎Point-to-Point : 두 장치 사이에 전용 링크를 사용
        ◎MultiPoint : 셋 이상의 장치가 하나의 링크를 공유(시간적 또는 공간적 방식)
  ● 전송 방식(Transmission Mode) : 연결된 두 개의 장치 간 신호 흐름의 방향을 정의
        ◎단방향(Simplex) : 한쪽 방향으로만 통신이 가능
        ◎반이중(Half-duplex) : 양방향 통신이 가능하나, 동시에 불가
        ◎전이중(Full-duplex) : 동시에 양방향 통신이 가능



* 2계층 주요 장비
# Bridge : 물리적으로 떨어진 동일한 LAN(Ethernet, TokenRing 등의 규격)을 연결해주는 장비


# L2 Switch : 포트에 연결된 노트의 MAC 정보를 내부의 MAC Address Table에 두고, 참조하며 목적지 MAC주소의 포트에 해당하는 노드에게만 패킷을 전송
  ● 스위치 환경 트래픽 모니터링
       ◎Monitoring Port 이용 : 스위치를 통과하는 모든 패킷 내용을 복제, 전달하는 포트로 네트워크
          사용량, 응답시간 등 장비 성능 관리에 사용(SPAN-Switch Port Analyzer 포트라고도 함)
       ◎TAP(Test Access Port)장비 이용 : 네트워크 구간에 직접 연결, 설치된 지점을 통과하는 모든
          패킷을 복제하여 모니터링하는 장비



* L2 Switch 패킷 스니핑 : 기본적으로 목적지로만 패킷을 전송하여 스니핑이 불가(아래 방법 이용)
1) Switch Jamming/Mac Flooding
- Source MAC 주소를 계속 변경하여 패킷을 지속적으로 전송, 대상의 MAC Address Table을 OverFlow시켜 허브처럼 모든 노드에게 패킷을 전송하게 만듬
- 스위치는 장비 장애 발생 시, Fail Safe(Fail Open) 정책을 따르므로, 모든 기능이 허용됨
(Fail Safe(Fail Open) <-> Fail Secure(Fail Close))


2) ARP Spoofing
- 희생자와 특정 호스트 사이의 패킷을 스니핑 할 목적으로, 특정 호스트의 MAC 주소를 공격자의 MAC 주소로 위조 후, ARP Reply 패킷을 만들어 희생자에게 지속 전송
- 희생자의 ARP Cache Table에 있던 특정 호스트의 MAC 정보가, 공격자의 MAC으로 변경됨
(희생자와 특정 호스트 모두 ARP 스푸핑을 수행 해야함)
- 스니핑을 인식할 수 없도록, IP Forward 기능(라우터 처럼 동작)을 활성화


3) ARP Redirect : ARP Spoofing의 일종
- 공격자가 자신이 라우터/게이트웨이 인것 처럼 MAC주소를 위조한 ARP Reply 패킷을 대상 네트워크에 브로드캐스팅 하여, 모든 호스트의 ARP Cache Table의 라우터 정보를 공격자 MAC으로 변경
- 호스트에서 라우터로 나가는 패킷을 공격자가 스니핑 하는 기법
- 스니핑을 인식할 수 없도록, IP Forward 기능(라우터 처럼 동작)을 활성화


4) ICMP Redirect
- 호스트-라우터, 라우터-라우터 간의 라우팅 경로 재설정을 위해 전송하는 메세지를 악용
- 특정 IP나 대역으로의 라우팅 경로를, 자신의 주소로 위조한 ICMP Redirect 메세지를 생성, 희생자에게 전송, 희생자 라우팅 테이블을 변조
- 스니핑을 인식할 수 없도록, IP Forward 기능(라우터 처럼 동작)을 활성화


5) 스위치 SPAN(Switch Port Analyzer)/Port Mirroring 이용
- 스위치를 통과하는 모든 트래픽을 볼 수 있는 기능으로, 특정 보트에 분석 장비를 접속, 다른 포트의 트래픽을 분석 장비로 복사해주는 기술
- 물리적 접근이 가능할 시, 이용하는 공격 방식
네트워크
(Network)
* 종단(End)노드 간 라우팅(라우팅 알고리즘에 의해 최적의 경로를 선정해서, 패킷을 포워딩하는 기술)을 담당하는 계층



* 노드에 대한 논리적 주소(변경이 가능한 주소)인 IP(Internet Protocol)을 통해 라우팅 테이블 운용



* 데이터 단위(Data Unit) : Packet



* 3계층 주요 장비
# 라우터(Router)
- 라우팅을 담당하는 장비


# L3 Switch
- L2(데이터 링크 계층)의 Broadcast와 Multicast를 포워딩 하지 않으며, 서로 다른 VLAN(Virtual LAN) 간에 통신을 가능하게 하며, 보안 기능 및 QoS 등의 기능을 지원하는 장비
전송
(Transport)
* 종단(End)노드의 Process간 신뢰성 있는 데이터 전송을 담당하는 계층



* Process를 식별하기 위한 논리적 주소로 Port Address를 통해 식별



* 데이터 단위(Data Unit) : TCP = Segment / UDP = Datagram



* 데이터 전송 간 신뢰성 확보를 위한 기능
1) 분할(Segmentation)과 재조합(Reassembly)
- 데이터를 전송 가능한 단위(Segment)로 분할하여 전송, 수신 측에서 Segment들을 재조합하여 원본 데이터로 복원


2) 연결 제어(Connection Control) : 아래 두 방식 제공
- 연결 지향 (양 호스트 간 데이터 송수신 전, 마치 물리적 연결통로가 설정된 것처럼 동작하도록 필요 정보를 교환하는 프로토콜 특성 : TCP)
- 비연결 지향 (양 호스트 간 연결통로 설정 없이 통신하는 프로토콜 특성 : UDP)


3) 흐름 제어(Flow Control)
- 상호간 수신 가능한 만큼만 전송하여, 데이터 손실이 발생하지 않도록 제어


4) 오류 제어(Error Control)
- 종단 노드 간 전송 중, 오류 발생 시 이를 교정


5) 혼잡 제어(Congestion Control)
- 네트워크 혼잡도를 계산, 전송량을 제어



* 4계층 주요 장비
# L4 Switch : SLB(Server Load Balancing : 서버 트래픽 부하 분산) 및 Failover(장애 발생 시, 예비 시스템으로의 자동 전환) 기능을 제공하는 장비
세션
(Session)
* Application 간 세션(논리적인 연결)의 생성, 관리, 종료를 담당하는 계층
표현
(Presentation)
* 데이터 표현방식 변환을 담당하는 계층



* 인/디코딩, 압축/압축해제, 암호화/복호화 등을 담당
응용
(Application)
*  사용자가 네트워크에 접근할 수 있도록 하는 인터페이스 담당 계층



* 네트워크 Server/Clinet 시스템



* 응용(5~7L)계층 데이터 단위 : Data

 

 

 

* OSI Model 데이터 교환 방식

1) 캡슐화(Encapsulation) & 역캡슐화(Decapsulation)

Encapsulation & Decapsulation

- 캡슐화 : 상위 계층의 데이터가 하위로 보내질 시, 하위 계층 프로토콜이 자신의 기능 수행을 위해서 부가정보(헤더)를 추가하여 새롭게 전송 메세지를 완성함

- 역캡슐화 : 하위계층의 데이터가 상위로 보내질 시, 해당 계층의 헤더정보를 확인한 후 이를 제거 후 상위 계층으로 전송

(2계층의 경우 헤더 외에, 오류를 검출하는 Trailer 부분이 추가적으로 붙어있음)

2) 다중화(Multiplexing) 및 역다중화(Demultiplexing)

- 다중화 : 하나의 기능(매체)을 여러 영역에서 동시에 사용하는 기법으로, 상위 계층의 여러 프로토콜들이, 하위 계층의 하나의 프로토콜을 이용하여 데이터를 전달하는 방식
(수신측에서 상위 프로토콜을 식별할 수 있도록, 프로토콜 식별자 정보를 헤더에 추가)

- 역다중화 : 공유하는 기능(매체)로부터 개별 영역으로 분할하는 기법으로, 하위 계층의 프로토콜이 여러 상위계층의 프로토콜 중 하나를 식별, 데이터를 전달하는 방식
(상위 프로토콜 구별을 위한 프로토콜 식별자 정보를 이용 = 다중화 시 헤더에 추가했던 프로토콜 식별자 정보 이용)

  • Frame Header의 Type 필드에, 상위 프로토콜(IP, ARP, RARP) 식별자가 들어있음
  • IP Header의 Protocol 필드에, 상위 프로토콜(ICMP, TCP, UDP) 식별자가 들어 있음
  • TCP/UDP Header의 destination port 필드에, 상위 프로토콜(FTP, HTTP etc...) 식별자가 들어 있음

ICMP는 IP와 동일하게 네트워크(L3) 계층의 프로토콜이지만, IP를 기반으로 패킷 라우팅을 수행하므로, IP Header의 Protocol 필드에 포함됨(IP의 상위 프로토콜로 구분 가능)

 

 

 

* TCP/IP Stack : OSI 7 계층을 기반으로 상업적, 실무적으로 이용될 수 있도록 단순화 한 모델로, 4계층으로 좀 더 단순화 한 모델 (프로토콜 식별에 좀더 중점)

OSI 7L <> TCP/IP Stack

TCP/IP Stack Layer 설명
Network Interface
(Layer 1)
- 인접 Node간 신뢰성 있는 데이터 전송을 담당하는 계층
- Node 식별을 위한 물리적 주소로 MAC(48bit = 24bit : 제조사 식별코드 / 24bit : 제조사가 할당한 일련번호) 주소를 사용
Internet
(Layer 2)
- Host간 라우팅을 담당하는 계층
- Host 식별을 위한 논리적 주소로 IP (IPv4 : 32bit / IPv6 : 128bit) address 사용
Transport
(Layer 3)
- Process간 신뢰성 있는 데이터 전송을 담당하는 계층
- 오류, 누락, 흐름제어, 혼잡제어 등을 수행
- Process 식별을 위한 논리적 주소로 Port(16bit) 주소 사용
(정확히는 네트워크 프로그램을 위한 '소켓' 라이브러리 별로 'Port'가 할당되며, 해당 각 Socket을 식별하는 식별자가 Port)
Application
(Layer 4)
- 네트워크 서버/클라이언트 프로그램을 담당하는 계층
- 사용자와의 인터페이스를 담당

 

 

 

* ARP/RARP Protocol : 논리적 주소와 물리적 주소 사이의 변환을 담당하는 프로토콜
1) ARP (Address Resolution Protocol) : IP 주소(논리적) -> MAC 주소(물리적)로 변환하는 역할을 수행

ARP 동작 방식

  1.  최초 상대방의 IP는 알지만 MAC 주소를 알지 못하여, 자신의 MAC 주소를 담은 ARP Request 메세지를 생성하여 Broadcast 함
    (2계층 이더넷 프레임의 목적지 MAC 주소는 FF:FF:FF:FF:FF:FF (각 8bit x 6 = 48bit))
  2. Target Host는 자신의 MAC 주소를 담은 ARP Reply 메세지를 생성하여 Unicast 방식으로 응답
    (Target이 아닌 Host들은 Boradcast 요청 메세지 폐기)
  3. 각 시스템은 일정 시간 경과 후에 삭제되는 ARP Cache에 위 정보들을 보관함

2) RARP (Reverse ARP) : MAC 주소(물리적) -> IP 주소(논리적)로 변환하는 역할을 수행
- IP 주소는 시스템의 하드디스크 내 설정 파일에 저장되나, 하드디스크가 없는 터미널의 경우에 초기 가동 시, 자신의 MAC 주소를 담아 RARP 요청을 생성하여 자신의 IP 주소 정보를 받아옴
(MAC에 해당하는 IP 주소를 관리하는 RARP 서버가 구성되어 있어야 함)

RARP 동작 방식

  1. 최초 자신의 MAC 주소는 알지만, IP 주소를 알지 못하는 Host는 자신의 MAC 주소를 담은 RARP Request 메세지를 생성하여 Broadcast 함
  2. RARP Server는 요청자의 IP 주소를 담은 RARP Reply 메세지를 생성하여 요청자의 MAC 주소로 Unicast 응답

3) ARP Cache Table : ARP 요청을 통해 확인된 MAC 정보통상 1~2분 가량 메모리에 저장

arp -a : 캐시 내용 보기

MAC 주소 저장 유형(Type) 설명
동적 (Dynamic) - ARP에 의해 동적으로 설정되어, 일정시간 동안 유지됨
(일정 시간동안 유지되는 점에서 지속적으로 ARP Reply 전송하여, ARP Spoofing(Cache Poisoning)에 악용됨)
정적 (Static) - 관리자에 의해 정적으로 설정되어, 직접 삭제하거나, 시스템 종료 전까지 유지

arp -d 캐시내용 삭제 (리눅스는 뒤에 IP명시 필요)
arp -s IP주소 MAC주소 : Static하게 설정


4) GARP (Gratuitous ARP) : 별도의 프로토콜이 아닌, Sender IP와 Target IP가 동일한 ARP 요청을 의미하며, 자신의 MAC 정보를 동일 네트워크상의 다른 장비들에게 BroadCast하여 ARP Cache를 갱신하도록 하는 목적

GARP 기능 설명
IP 충돌 감지 - 자신과 동일한 IP를 설정한 Host가 있을 시, 해당 호스트로부터 ARP Reply가 발생하여 충돌 여부를 확인 할 수 있음
- 보통 Host IP 변경 또는 재부팅 시에 GARP 패킷이 생성됨
상대방의 ARP Cache 정보 갱신 - GARP를 수신한 쪽에서는 자신의 ARP Cache에 Sender IP 정보를 갱신
(단, 상대방을 인증하지 않고 Cache를 갱신하게 되므로, 공격자에 의해 MAC 정보가 위, 변조될 수 있음)

5) ARP Spoofing 대응 방안

  • ARP Cache를 Dynamic이 아닌 Static하게 설정하여 ARP Reply 지속 전송에도 캐시 정보가 갱신되지 않도록 함
    (단, 시스템 종료 시 삭제되므로 시스템 기동 시마다 ARP 캐시 정적 구성 필요)
  • ARP 트래픽을 실시간 모니터링하는 프로그램 (ARPWatch 등)을 이용, IP와 MAC 주소 매핑을 감시, 변경 발생 시 즉시 확인 하도록 환경 구성

 

 

 

* IP Protocol : 비 연결형(Connectionless)으로 패킷 전송 순서를 보장하지 않으며, 비 신뢰적(Unreliable)으로 신뢰성 있는 통신을 보장하지 않고, 목적지 주소를 기반으로 라우팅을 담당하는 프로토콜

1) IPv4 프로토콜 구조 : 기본 헤더 20byte최대 40byte의 옵션 헤더로 구성

IP 프로토콜 구조

IP Protocol 구성 요소 설명
Ver (4 bits) - IP 버전 정보
HLEN (4 bits) - 헤더 길이, 4 bytes 단위로 표현
Service Type (8 bits) - 서비스 품질(QoS)을 위한 용도
- 현재 사용되지 않음
Total length (16 bits) - 헤더부와 데이터부를 포함한 전체 IP Packet의 길이
Identification (16 bits) - 단편화 / 재조합 관련 필드
Fragmentation : IP Datagram을 여러 조각으로 분할
Reassembly : Fragment들을 조합, 원본 IP Datagram을 완성하는 것


- 단편화 전 원본 IP Datagram을 식별하기 위한 ID
Flags (3 bits) - 단편화 / 재조합 관련 필드


첫번째 bit : 사용안함(예약)
두번째 bit : Don't fragment bit (1 설정 시 패킷을 단편화 하지 않음)
세번째 bit : More fragments bit (1 설정 시 재조합 할 단편이 남음 / 0 설정 시 단편이 더 이상 없음)
Fragmentation
offset (13 bits)
- 단편화 / 재조합 관련 필드


- IP Fragment들이 순서대로 전송되지 않으므로, 이를 순서대로 조합하기 위한 현재 단편의 상대위치(offset)을 저장한 필드 (8 bytes 단위로 표현)
Time to live
(8 bits)
- IP 패킷의 생존 시간(Lifetime)을 지정하는 필드


- 라우터/L3 스위치 통과 횟수 (Hop Count)로 표기


- 라우팅 중 무한 루핑되어 네트워크 대역만 차지하는 상태를 방지하기 위한 목적


- OS별 부여하는 기본 TTL 값이 상이하여, 해당 필드를 OS 핑거 프린팅 목적으로 사용할 수 있음
Linux : 64
Windows : 128
Unix : 255
OS Fingerprint : OS 별 고유한 특성/속성 정보를 의미, 해당 OS 식별을 위한 증거자료로 사용 가능
Protocol (8 bits) - 상위 프로토콜 식별을 위한 프로토콜 번호를 저장하는 필드


- 상위 프로토콜과 다중화/역 다중화를 위한 식별 값
ICMP (1)
TCP (6)
UDP (17)
etc..
Header Checksum
(16 bits)
- 데이터부를 제외한 헤더 부분의 오류 검사값
Source IP Address
(32 bits)
- 출발지 IP 주소
Destination IP
Address (32 bits)
- 목적지 IP 주소
주요 IP Option 헤더 - Loose Source Route : Source Route는 라우팅 경로를 라우터/L3 스위치가 아닌, 출발지에서 경우에 따라 다른 경로로 라우팅을 지정하는 옵션


- Strict Source Route : 출발지에서 지정 경로로 무조건 라우팅하는 옵션

2) IP Fragmentation

IP 단편화

- IP Packet/Datagram은 MTU에 따른 Fragmentation 발생

MTU (Maximum Transmission Unit) : 물리적 네트워크 프로토콜(Network Interface 계층) 프레임의 데이터부(Payload)의 최대 크기

  • 물리적 프로토콜 별 각자의 MTU를 가지며, IP Packet은 단편화를 통해 패킷 크기 조절이 가능하여, 다양한 프로토콜의 상위 프로토콜로 사용 될 수 있음.
  • IP 패킷이 프레임으로 캡슐화되기 때문에, MTU를 초과할 수 없음.

- 단편화는 최초 출발지 및 라우터/L3 스위치 등의 중계 구간 MTU에 따라 추가 발생하나, 효율을 위해 최종 목적지에서만 재조합됨.

* 단편화 동작 방식

[root@Fedora]# tcpdump -i eth0 -nvv "ip"
kernel filter, protocol ALL, datagram packet socket
tcpdump: listening on ehh0
04:05:49.961718 <10.10.10.1> 10.10.10.100: icmp: echo request
(frag 22666:1480@0+) (ttl 128)
04:05:49.961720 <10.10.10.1> 10.10.10.100: (frag 22666:1480@1480+) (ttl 128)
04:05:49.961721<10.10.10.1> 10.10.10.100: (frag 22666:48@2960) (ttl 128)


# tcpdump 단편화 출력 형식
# (frag 단편 ID:헤더 제외 단편 Payload 크기@Offset+)
# + 있음 : More Fragments bit : 1
# + 없음 : More Fragments bit : 0

3) IP Routing

- 라우팅 규칙

  • 목적지 주소가 자신과 동일 네트워크에 있을 시, 직접 전송
  • 동일 네트워크 대역이 아니라면, 1차 경유지(Gateway) 주소를 라우팅 테이블을 참조하여 검색
  • 목적지 주소와 자신의 주소가 동일할 시, 상위 계층으로 데이터를 전달

- 라우팅 테이블 검색 방식

  • IP Packet의 Destination IP Address와, 라우팅 테이블의 netmask/genmask를 bit(&) 연산 수행 후, 라우팅 테이블의 destination 필드와 비교, 일치하는 경로를 선택하여 패킷을 전송
  • & 연산을 통해 네트워크 ID 부분만 추출하는 것 (이외, or(|), not(~) 연산도 존재)

- 라우팅 테이블 검색 우선 순위

  • 목적지 IP와 일치하는 경로를 탐색
  • 일치 경로가 없을 시, 목적지 네트워크 주소와 일치하는 경로 탐색
  • 일치 대역도 없을 시, Default Gateway(0.0.0.0)로 전송

- 라우팅 테이블 Flags (Linux/netstat -rn 명령)

  • U (route is Up) : 해당 경로 활성화 상태
  • G (use Gateway) : Gateway를 사용함
  • H (target is a Host) : 목적지가 호스트 임을 의미

4) IP Spoofing : 시스템 간의 Trust 관계를 이용, 신뢰 관계가 있는 Server와 Client 환경에서, Client를 연결 불가 상태(DoS 등 이용)로 만든 후, 공격자가 해당 Client로 IP Spoofing 하는 형태

Trust relationship : ID/PW 기반 로그인이 아닌, 해당 IP로 인증하여 로그인 없이 접속 가능한 방식
(관리는 용이하나, 보안이 취약하여 사용하지 않을 것을 권장)

* 대응책 : 시스템 간 트러스트 설정 사용을 하지 않으며, 반드시 사용해야 한다면 Trust된 시스템의 MAC Address Static 구성으로, 단순 IP만을 위조한 접속을 차단

- $HOME/.rhosts, hosts.equiv 사용 금지 (시스템 취약점 분석. 평가 항목)

  • r 계열 서비스(rlogin, rsh, rexec 등) 기반 원격 접속은 보안상 매우 취약
    • /etc/xinetd.d/rlogin 서비스 설정 파일에서 disable 부분 no로 변경 후, xinetd 재기동, 이후 확인 시 513(rlogin) 포트 Listen 상태 확인 가능
  • 불가피한 사용이 필요하다면, 트러스트 관계 설정 파일인 $HOME/.rhosts 및 hosts.equv에 적절한 보안 조치 필요
    • 해당 파일들의 소유자를 root 또는 해당 계정으로 변경 (chown root /etc/hosts.equiv)
    • 해당 파일들의 권한을 600이하로 변경 (chown 600 /etc/hosts.euqiv)
    • 해당 파일에서 + (모든 호스트 접근 허용) 설정을 제거하고, 반드시 필요한 호스트 및 계정만 등록

- /etc/rhosts.euqiv 및 $Home/.rhost 설정

  • hosts.equiv : 시스템 전체에 영향을 주는 파일
  • .rhost : 각 사용자 별 설정 파일
레코드 형식 의미
host_name 해당 호스트(IP 또는 호스트명)의 접근 허용
host_name user_name 해당 호스트에 해당 사용자로 접근 허용
+ 모든 호스트 접근 허용 (계정의 ID/PW 인증 필요)
+ user_name 모든 호스트의, 해당 사용자로 접근
-host_name 해당 호스트의 접근 차단
host_name -user_name 해당 호스트에서 해당 사용자만 접근 차단
+ @group 모든 호스트에서 해당 group 사용자로 접근 허용
  • 앞 부분 호스트명, 공백 다음 부분이 사용자명(계정명)
  • +는 모두 허용, -는 지정 대상 차단

5) IPv6 : IPv4 고갈 대비를 위해 128비트 체계로 2^128 개의 주소를 갖는 IP 주소로, 16비트 단위의 8개 부분 (앞 64비트 = 네트워크 주소 / 뒤 64비트 = 연결된 통신 장비에 할당되는 인터페이스 주소)으로 구분

- IPv6 장점

Version 6 장점 내용
확대된 주소 공간 주소 길이 증가로 사용 수 증가
단순해진 헤더 포맷 IPv4 헤더의 불필요한 필드를 제거하여, 보다 빠른 처리 가능
간편해진 주소 설정 기능 IPv6 프로토콜에 내장된 주소 자동 설정 기능을 이용, 플러그 앤 플레이 설치 가능
강화된 보안성 IPsec 기능 기본 제공
개선된 모바일 IP 헤더에서 이동성 지원

- IPv6 전환 기술

IPv6 전환 기술 내용
Dual Stack - V4와 V6를 동시에 설정하여 통신 상대에 따라 선택적 사용 가능


- 호스트, 라우터 등 듀얼스택을 적용하여 V4, V6 패킷 모두 처리가 가능
Tunneling - V4 네트워크를 경유(가상의 터널을 생성)하여, V6간 통신을 위한 방식


- 호스트, 라어투 등에서 V6 패킷을 V4 패킷으로 캡슐화 후 전송하여 V4 네트워크를 통과할 수 있게 하는 기술
Address/Header
Translation
- V4, V6 상호 변환하여 통신하는 방식으로 패킷 앞부분에 변환 헤더를 추가하여 주소 변환


- 송, 수신측에서 패킷 수신 시, 변환 헤더를 제거


- 소수의 V6 사이트가, 대규모의 V4 인터넷에 연결되는 초기 단계와, 소수의 V4 사이트가 대규모의 V6 인터넷에 연결되는 전환의 마지막 단계에서 사용 가능

 

 

 

* ICMP (Internet Control Message Protocol) : Network Layer(L3)에서 IP 프로토콜의 비 신뢰 특성을 보완하기 위해, IP 패킷 전송 중 에러 발생 시, 에러 발생 원인네트워크 상태 진단 기능을 제공

  • Error-Repoting Message 기능 : 전송 중 오류 발생 시, 에러 메세지를 생성하여 응답
  • Query Message 기능 : 네트워크 상태 진단을 위한 쿼리 요청 및 응답 메세지 생성

1) ICMP 프로토콜 구조

ICMP Protocol 필드 내용
Type (8 bits) - ICMP 메세지의 유형/용도
Code (8 bits) - Type의 세부 내용으로, Type과 조합되어 ICMP 메세지의 목적과 용도를 표시
(Code가 없는 Type 도 존재)
Checksum (16 bits) - ICMP 메세지 오류를 검사하기 위한 값
Rest of the header - Type과 Code에 따라 추가되는 헤더
Data section - 데이터가 위치하는 영역

 


2) 주요 ICMP Error-Reporting

ICMP Error-Reporting 유형 내용
Destination Unreachable
(Type 3)
* 해당 목적지에 도달할 수 없음을 의미하며, Code(상세 유형)에 따른 도달 불가 사유 구성


- Code 1 (Host Unreachable) : 최종 단계의 라우터가 목적지 호스트로 패킷 전송 실패


- Code 2 (Protocol Unreachable) : 목적지 호스트에서 특정 프로토콜을 사용할 수 없음


- Code 3 (Port Unreachable) : 목적지 호스트에 해당 포트가 열려 있지 않은 경우
(TCP 포트의 경우 포트가 열려있지 않을 시 RST 패킷 반환)


- Code 4 (Fragmentation needed and don't fragment was set) : IP 패킷의 단편화가 반드시 필요하나, IP 헤더의 DF(Don't Fragment) 플래그가 설정되어 단편화 할 수 없어 라우터에 의해 반환
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 Datagram 일부 단편이 전송 과정에서 손실 될 시, 재조합에 실패하여 발생)

3) 주요 ICMP Query Message

ICMP Query 유형 내용
Echo Request (Type 8) - ping 유틸리티 프로그램에 사용되는 메세지로, 종단 노드간에 네트워크 및 호스트 상태 진단 목적


- 별도의 Code는 없으며 (0으로 표시됨), 이외의 쿼리 타입들은 거의 사용되지 않음
Echo Reply (Type 0)

ping utility : ICMP Echo Request/Reply를 이용한 네트워크 상태 진단 프로그램
(네트워크 접근성 / 왕복시간을 통한 네트워크 속도 / 패킷 손실율 기반 네트워크 품질 확인)

Traceroute utility : ICMP Time Exceeded 메세지와 Destination Unreachable 메세지를 이용, 단말 노드 사이의 각 구간별 네트워크 상태를 진단하기 위한 프로그램


4) ICMP Redirect Attack : ICMP Redirection(Type 5)를 이용하여, 패킷 경로를 악의적으로 재설정하여 수신자는 자신의 라우팅 테이블에 특정 목적지로 나가는 Gateway 주소를 변경하는 점을 악용, 특정 목적지로 가는 패킷을 공격자로 향하게 사용

- 즉 희생자의 라우팅 테이블을 변조하여 스니핑 함

  • ICMP Redirection Message는 Gateway 또는 Router만 전송 가능 (공격자는 출발지IP를 희생자의 GW 주소로 위조)
  • 목적지 주소에 대한 Gateway 주소를 공격자의 IP로 조작하여 전송

- ICMP Redirect 대응 방안

  • ICMP Redirect 옵션 해제 (현재 대부분 OS에서는 보안상 기본적으로 해당 옵션 해제)
  • ex) 리눅스 커널 파라미터 중 ICMP Redirect 설정 해제
    sysctl -w net.ipv4.conf.all.accept_redirects=0

 

 

 

* TCP Protocol

1) TCP Protocol 특성

TCP 프로토콜 특성 내용
연결 지향 프로토콜
(Connection Orientation Protocol)
- 가상회선방식(물리적 전용회선이 연결된 것 처럼 논리적으로 통신)으로, 데이터의 전송순서를 보장하는 Sequence Control 수행


- Stream 기반의 전송 방식으로, 데이터를 정해진 크기가 아닌 임의 크기로 나누어 연속 전송하는 방식을 사용
흐름 제어
(Flow Control)
- Sliding Widnow 제어방식을 통해 Window Size(상대방이 수신 가능한 크기)내에서 데이터를 연속 전송


- 매 Segment 마다 ACK 수신 확인 후 전송 시, RTT(Rount Trip Time:왕복 시간)가 길 경우에는 단위 시간 당 데이터 전송량(Throughput)이 매우 떨어지므로, 효율성을 위해 상대 수신 가능한 범위 내에서 연속 전송함
오류 제어
(Error Control)
- 데이터의 오류, 누락등의 문제 없이 전송을 보장


* 오류 판단 기준 : 송신측에서 계산한 Checksum을 수신측에서 검증하여 오류 여부 판단


* 누락 상황
1) 손실(Loss) : 물리적 네트워크 장애, TTL 초과 등
2) 폐기(Disacard) : 데이터 오류 등에 의한 폐기
3) 지연(Delay) : 네트워크 혼잡 등에 의한 지연


- 오류 발생 시, 재전송(Retransmission)을 수행하여 이를 보정
혼잡 제어
(Congestion Control)
- 데이터 손실 발생 유무(누락)를 확인하여, 네트워크 혼잡 정도를 판단, 송신자가 데이터 전송 량을 조절

2) TCP 프로토콜 구조

TCP Protocol 필드 내용
Source Port (16 bits) * 출발지(송신) 포트 번호
Destination Port (16 bits) * 목적지(수신) 포트 번호
Sequence Number (32 bits) * 송신 시 전송하는 데이터의 시작 바이트 순번(전송 데이터의 바이트 단위로 부여하는 연속된 번호)을 담아 전송함


- 연결 설정 단계에서 임의의 초기 순서 번호(ISN : Initial Sequence Number)를 상호간에 할당하여 주고 받음
Acknowledgement Number
(32 bits)
* 수신 확인 응답(ACK)와 함께, 해당 필드에 상대방이 다음에 전송할 순서 번호를 담아 보냄
HLEN (4 bits) * 헤더의 길이
- 기본 20bytes와 최대 40 bytes의 옵션 헤더로 구성
Reserved (4 bits) * 예약 (사용하지 않음)
Control Flags (6 bits) * 플래그 설정 bit는 아래 배치 순서대로 0(Off), 1(On) 할당 됨
(ex. 010001 => ACK + FIN)


- URG (Urgent pointer is valid) : 긴급 데이터(OOB : Out Of Band) 설정


- ACK (Acknowledgement is valid) : 수신 확인 응답(ACK) 설정


- PSH (Request for push) : 송수신 버퍼에 있는 데이터를 즉시 처리


- RST (Reset the connection) : 연결 중단(강제 종료)


- SYN (Synchronize sequence numbers) : 연결 설정


- FIN (Terminate the connection) : 연결 종료(정상 종료)
Window Size (16 bits) * 흐름 제어를 위해, 수신측에서 송신측으로 보내는 수신 버퍼의 여유 공간 크기 (Receiver window size)


- 해당 범위 내에서 수신측의 ACK를 기다리지 않고 연속적으로 전송하는 슬라이딩 윈도우 제어방식으로 운용됨
Checksum (16 bits) * 헤더를 포함한 전체 Segment에 대한 오류를 검사하기 위한 필드
Urgent Pointer (16 bits) * Segment가 긴급데이터(URG Flags ON)를 포함하는 경우에 사용되며, 긴급 데이터의 위치값을 담음

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

- MSS(Maximum Segment Size)

  • TCP Segment 데이터부의 최대 byte 수를 의미, 연결 과정에서 상호간 TCP Option 헤더의 MSS 필드를 주고 받음
  • MTU에 영향을 받으며, IP Header와 TCP Header의 크기를 제외하면, MSS의 크기를 알 수 있음
  • 상위 계층에서 전달된 데이터는 TCP 계층에서 MSS 크기에 따라 Segmentation 후, 수신측에서 Reassembly 되어 전달

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

3 Way Handshake 단계 설명
첫 번째
(SYN)
- Client는 연결 요청을 위한 Active Open으로 포트 오픈 및 TCP Socket은 SYN_SENT


- Server는 연결 수용을 위한 Passive Open 상태로 대기


- 최초 랜덤한 순서 번호(ISN)을 주고 받기 위해 SYN(Synchronize 동기화) 패킷을 전송
두 번째
(SYN + ACK)
- Server는 요청(SYN)에 대한 ACK(응답)을 하며, Seq.Num+1 로 ACK.Num을 반환


- ACK.Number의 의미는 요청을 수신하였으니, 지정한 번호와 동일하게 Seq.Num 전송을 요청하는 것


- Server의 TCP Socket은 SYN_RECEVIED 상태
세 번째
(ACK)
- Client는 최종 수신 확인 응답(ACK)를 전송하여 최종 연결 설정이 완료


- 연결 설정 완료 시, TCP Socket 상태는 ESTABLISHED

5) TCP 데이터 송.수신 과정

- Retransmission 과정 : 일반 재전송혼잡제어 관점에서, "매우 혼잡" 으로 봄

일반 재전송

- TCP는 모든 Segment 전송 시 마다 RTO(Retransmission Time Out)내에 상대에게 ACK가 반환되지 않을 시, 패킷 누락으로 판단, 재전송을 수행.

- Fast Retransmission 과정 : 빠른 재전송혼잡 제어 관점에서, "덜 혼잡한 상태" 로 봄

빠른 재전송

- TCP는 통신 중 기대했던 수신 번호가 아닌, 이후의 순서번호를 수신할 시, RTO 발생 이전에 즉시 기대하는 순서 번호의 Segment를 3회까지 재요청, 정상 수신했던 Segment 들과 조합을 수행함


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

- 과정은 위와 같으며, Client에서 마지막 ACK를 전송 후, 마지막 ACK가 안전하게 전송됨을 보장해 주기 위하여, 2MSL(Maximum Segment Lifetime. 통상 1~4분)를 대기, 문제가 있다면, 상대측에서 FIN + ACK 재전송이 발생함.


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

TCP 연결 요청 거부

- 서비스 포트가 준비되어 있지 않을 시(LISTEN 하고 있지 않음), RST+ACK를 반환하여 연결을 거부


8) 연결 중단(abort)

TCP 연결 중단

- 연결 상태인 Client가 연결을 즉시 중단할 필요가 있을 때, RST+ACK 또는 RST를 전송

RST Flag만 설정 - 상대로부터 수신한 Segment에 ACK.Num 필드가 설정되어 있는 경우


- RST Flag와 Sequence Number 필드를 설정하여 응답
RST+ACK Flag 설정 - 상대로부터 수신한 Segment에 ACK.Num 필드가 설정되어 있지 않은 경우


- Sequence Number 필드를 0으로 설정


- ACK.Num 필드를 수신한 Segment의 Seq.Num와 Segment 길이의 합으로 설정하여 응답.

9) TCP Session Hijacking

공격자가 세션 식별 정보(출발지IP, Port 및 목적지 IP, Port.. SYN Number, ACK Number)를 위조하여 세션을 탈취하는 공격

  • Client와 Server간 정상 통신 중, 공격자의 ARP 스푸핑 등을 통한 Sniffing이 성공
  • 공격자는 Client의 IP로 위장, TCP 식별 정보를 서버로 전달
  • 수신한 서버는 공격자와 Client 모두에게 응답을 전달
  • Client는 전송하지 않은 요청에 대한 응답을 수신하여, 이를 교정하기 위한 ACK를 서버에 반환
  • 위 상황 반복 시, ACK STORM 발생 가능하며, 공격자는 정상 클라이언트에게 RST 전송 후, 자신이 서버와의 세션을 유지

 

 

 

* UDP Protocol

UDP 특징 내용
비 연결형
(Connectionless)
- Datagram 전송 시, 논리적 연결 설정 과정이 없으므로 전송시 마다 주소 정보를 설정


- 데이터의 순차적 전송을 보장하지 못함


- 정해진 크기의 데이터를 전송하는 Datagram 방식을 사용
비 신뢰형
(Unreliable)
- 흐름 제어, 오류 제어, 혼잡 제어 등 없음


- IP기반에 포트 정보를 통해 상위 어플리케이션을 식별해주는 역할만 수행
가볍고 빠름 - TCP에 비해 단순하여 가볍고 고속
대량 전송 부적합 - 비신뢰적 특성으로 대량 데이터 송수신은 부적절


- 대부분 한번의 송,수신으로 완료되는 서비스에 많이 사용

UDP 프로토콜 구조

UDP Protocol 필드 구성 요소 내용
Source Port - 출발지 포트 번호
Destination Port - 목적지 포트 번호
Total Length - 헤더와 데이터부를 포함한 전체 길이
Checksum - 전체 데이터그램에 대한 오류를 검사하기 위한 필드

 

 

 

* 네트워크 관리 명령어

1) ping : 종단노드 간, 네트워크 상태(시스템 접근성, 해당 구간 네트워크 속도 및 품질(손실률))을 검사
- ICMP Echo Request(Type 8), ICMP Echo Reply(Type 0) 사용


2) traceroute/tracert : 종단 노드 사이에 있는 여러 중계 노드 각 구간에 대한 네트워크 상태(중계 노드 개수, IP주소, 응답시간 등)관리 명령

- 유닉스 계열(traceroute) : 목적지 포트(33434/UDP 이상)로 UDP 패킷의 TTL 값을 1씩 증가시키며 진단

- 윈도우 계열(tracert) : 목적지로 ICMP Echo Request 패킷의 TTL 값을 1씩 증가시키며 진단

  • 원리는 둘 모두 동일하며, 보안상의 이유 또는 구간 문제로 중계 노드에서 ICMP 응답을 주지 않아 *(지정 시간 내 응답 없음(default 4초))로 표시되는 경우가 존재 할 수 있음.

3) netstat : 시스템의 네트워크 관련 상태정보를 관리하는 명령어

netstat 옵션 설명
옵션 없음 - 모든 연결된(ESTABLISHED) 소켓 상태 정보
-a - 모든 소켓 상태 정보
-i - 네트워크 인터페이스 정보
-r - 시스템 라우팅 테이블 정보
-s - 각 프로토콜별 통계 정보
-t - TCP 소켓만 출력
-p - 해당 소켓의 프로세스명/pid 정보를 출력 (PID/Program name)
-n - 네트워크 주소를 숫자 형식으로 출력

netstat 명령 결과

netstat 정보 필드 내용
Proto - 사용한 프로토콜의 종류
Recv-Q - 원격 호스트로부터 수신버퍼에 저장한 데이터 크기
Send-Q - 원격호스트로 전송하기 위해, 송신버퍼에 저장한 데이터의 크기
Local Address - 로컬 호스트 IP:포트
Foreign Address - 원격 호스트 IP:포트
State - 소켓 상태

netstat -i 옵션 (네트워크 인터페이스 정보 출력)

  • RX (Received) : 수신한 패킷 수 / TX (Transmitted) : 전송한 패킷 수
    • OK : 오류 없이 전송한 패킷 수
    • ERR : 오류가 발생한 패킷 수
    • DRP : 폐기(DROP)된 패킷 수
    • OVR : 과도한 양의 전송 패킷에 의한 오버플로우 발생으로 폐기된 패킷 수

4) ifconfig : 유닉스 계 시스템네트워크 인터페이스 설정 정보조회 및 변경 시 사용

- 특정 인터페이스 스니핑 목적의 promiscuous 모드의 변경/해제 -> ifconfig eth? promisc / ifconfig eth? -promisc
(변경 후 /var/log/messages 로그 파일 확인 시, 변경 되었음을 확인 할 수 있음)

 

반응형