IPv6 Extension Header, Route Header 패킷 분석

IPv4 vs IPv6

등장배경

현재 사용중인 인터넷 프로토콜인 IPv4(Internet Protocol Version 4) 광범위한 네트워크의 사용을 예측하지 못하던 시대에 등장

IPv4 – 이론 상 42억여개의 인터넷 주소 지원

But, 부족하다.

비교

 

IPv4

IPv6

주소 체계

32bit

128bit

주소 개수

2^32(42억 개)

2^128(3.4x10^38 )

패킷 헤더

가변적

고정적(40 옥텟)

주소 할당 방법

A, B, C, D(멀티캐스트) 클래스 CIDR

CIDR 기반 계층적 할당

주소 유형

유니캐스트(unicast)

멀티캐스트(multicast)

브로드캐스트(broadcast)

유니캐스트(link-local address, site-local address, global-address)

멀티캐스트

애니캐스트

서비스 품질 지원

Tos 기반

Flow Labeling

보안

IPsec 활용 가능

IPsec 기본 지원

 

IPv4는 32비트 크기, IPv6는 128비트 주소 체계로 이루어져 있다. 기존 주소체계인 IPv4를 사용했을 때 IP주소 할당의 문제가 있어 NAT등 여러 네트워크 기술을 통해 쪼개서 사용해 왔지만 그럼에도 주소의 고갈 문제로 인해 새로운 주소체계인 IPv6가 도입중이다.

IPv6의 도입은 단순히 주소 크기만 늘린 것 뿐만 아니라 데이터의 무결성, 기밀성 또한 보장하도록 다양한 보안기능을 강화하였다. 

IPv4와 IPv6의 패킷 헤더를 비교해 보자. 

IPv4 Header

 

IPv6 Header

IPv4에서는 TTL(Time to Live)값으로 패킷의 수명을 결정하지만 IPv6에서는 Hop Limit으로 패킷의 수명을 결정한다. 이름만 다를 뿐 같은 기능을 한다고 봐도 무방하다. 이 필드에는 정수 값이 위치하며, 지정한 수만큼 네트워크 라우터를 지나면서 패킷의 수명을 깎는 것이다. 목적지가 불분명하여 네트워크를 떠도는 패킷(Looping Packet)을 방지하기 위한 것이다.

IPv4에서는 헤더에 정의된 Hd Len을 통해 헤더의 길이를 미리 정의하고, 지정한 길이만큼만 패킷을 수신하여 해석한다. 하지만 IPv6에서는 Next Header에서 다음 헤더의 주소를 저장하면 확장 헤더로써의 기능을 수행한다. 이는 다음에 오는 프로토콜의 헤더 종류를 표시하며 라우팅 헤더(43), 인증헤더(51) 등 프로토콜 넘버로 그기능을 정의하여 사용한다. Next Header 필드 다음에는 해당하는 확장 헤더의 정보가 위치한다. 패킷의 확장성에 용이해진다는 점이 있으며 네트워크 무결성 검증에도 사용된다. IANA에서 정의하고 있는 자세한 확장 헤더 타입은 아래와 같다.

 


RH(0) IPv6 Hop-by-Hop Option 취약점

IPv6 프로토콜 사양은 원래 RFC 1883에서 정의되었다가 RFC 2460에서 폐기되었다. 새로운 기능의 추가는 새로운 취약점의 발생 가능성을 포함하는 것이었을까. 이 수정사항에서 RFC는 별도의 헤더로 인코딩된 선택적 인터넷 계층 정보를 포함하는 IPv6의 확장 헤더에 대해 자세히 다루고 있다.

이 헤더는 패킷이 목적지로 가는 길에 "방문해야할" 하나 이상의 라우터를 직접 지정할 수 있다. IPv4(RFC 791)의 Loose Source 및 Record Route IP 옵션과 기능이 유사하다. IPv6에서는 헤더와 상위 계층 페이로드 사이의 확장 헤더에서 구현된다. 방문할 라우터의 개수도 IPv4의 최대 크기인 9개(40바이트)에서 IPv6에서는 MTU가 1,500바이트인 경로에서 최대 90개의 경유지가 포함된 패킷을 주입할 수 있다.

라우팅 헤더를 포함하는 패킷이 IPv6 헤더의 대상 필드에 있는 대상에 도착하면, 노드는 라우팅 헤더를 검사하고, 기본적으로 패킷을 다음 경유지로 포워드(foward)한다. 이러한 행동은 일부 호스트 운영체제 뿐만 아니라 대부분의 라우터에서 적용되었던 방법이다.

하지만 이러한 방법은 경유지의 주소를 지정하는 데 어떠한 필터링이나 제한도 두지 않기 때문에 RH0 패킷은 일부 특정 주소 구간을 두 개의 라우터 사이에서 진동하도록 할 수 있으며 두 대상 사이의 경로에 증폭(amplify) 공격을 수행할 수 있다. 2MB/s 업로드 링크를 가진 공격자는 한 번의 공격만으로 100MB/s 링크를 포화시킬 수 있는 것이다.


실습

 

<환경>

Host : Windows 10 x64 Home 1903

가상환경 : GNS3 2.2.3

Router IOS : Cisco 7200 124-24 T5

분석 도구 : Wireshark

VM Guest : Kali Linux

환경구성

SCAPY를 이용하여 IPv6 객체를 생성하였고 패킷을 전송하였다.

h.address = 방문할 주소 나열

sr1() = 객체를 담고 패킷을 발생시킨다.

패킷을 분석해 보면 Next Header에 Routing Header for IPv6(43)가 정의되어 있고 해당하는 주소의 오프셋(43=0x2B) 에서 직접 확인할 수 있다.

TYPE: Source Route(0)으로 설정된 라우팅 헤더 필드를 확인할 수 있으며, 와이어샤크 상에서는 이미 Deprecate된 필드라고 안내하고 있다.

나가는 글

IPv4와 IPv6에 대해 알아보고 차이점을 비교해 보았다. IPv6에서 새로 정의되고 Deprecate된 Routing Header에 대해서도 알아보고, 직접 패킷을 발생시켜서 분석도구를 통해 분석해 보았다.

 


References

IPv6 Next Header, Next Header IPv6 다음 헤더 필드, www.ktword.co.kr/abbr_view.php?m_temp1=5184

 

IPv6 다음 헤더 필드 [정보통신기술용어해설]

 

www.ktword.co.kr

 

반응형

'Security > Network' 카테고리의 다른 글

[SDN] mininet 환경 구성하기, 설치  (0) 2020.12.17
[GNS3] EIGRP 라우팅 프로토콜  (0) 2020.12.01
[GNS3] RIP 라우팅 프로토콜  (0) 2020.11.30
[GNS3] OSPF3 라우팅 프로토콜  (0) 2020.11.28
[Web] HTTP Smuggling  (0) 2020.11.23