알 수없는 확장이 포함 된 IPv6 확장 헤더 구문 분석


113

저는 매우 간단한 넷 필터를 작성하고 있으며, ICMPv6 유형, TCP / UDP 포트 번호 등과 같은 항목과 일치하도록 IPv6 헤더를 구문 분석하려는 위치에 도달하고 있습니다.

그래서 저는 IPv6 패킷 형식 에 대해 심도있게 읽고 있습니다. 저는 마치 ... 글쎄요 ... 실제로 제대로 읽고 있는지 확인하기 위해 계속해서 읽어야했습니다. 40 바이트 고정 헤더로 시작하고 다음 헤더 필드를 봐야한다고 생각합니다. 그런 다음 끝에 도달 할 때까지 연결 목록처럼 다음 헤더의 다음 헤더 필드를 봐야합니다. 페이로드가 있으면 따라옵니다.

문제는 고정 헤더 또는 확장 헤더에 길이 필드가 없다는 것입니다. 이 연결 목록을 끝까지 추적 할 수 있도록 확장 헤더 유형 및 크기에 대한 표가 있어야합니다.

이것은 나에게 이상하고 어쩌면 토끼 머리 모양의 디자인이라고 생각합니다. 인식 할 수없는 확장 헤더 유형을 발견하면 어떻게합니까? 어떡하죠? 나는 그것의 길이를 모른다. 패킷 통과를 허용하는 넷 필터에서 공격자가 가짜 헤더 유형을 포함하여 넷 필터를 회피 할 수 있기 때문에 패킷을 버리고 차단해야한다고 생각합니다. 그러나 이는 프로토콜이 확장 된 경우 새 확장을 사용하려면 지금까지 작성된 모든 IPv6 헤더 구문 분석 소프트웨어를 동시에 업데이트해야 함을 의미합니다.

그렇다면 사용중인 확장을 모르는 경우 IPv6 헤더를 어떻게 구문 분석 할 수 있습니까? 길이를 모르기 때문에 알 수없는 확장의 헤더를 건너 뛰려면 어떻게해야합니까?


10
이 질문에 따르면 내가 어리석지 않은 것처럼 보이며 그렇습니다.이 권리를 읽고 있습니다. (실제로는) IPv6에 새 확장 헤더를 추가하는 것이 불가능합니다. stackoverflow.com/questions/9847923/...
AdamIerymenko

10
그리고 예, 또한 헤더 길이를 계산하려면 연결된 목록 순회가 필요한 것 같습니다. stackoverflow.com/questions/14762193/… 오해하지 마세요. IPv6는 훌륭하고 많이 필요합니다. 그러나 이것은 여전히 ​​뼈처럼 보입니다.
AdamIerymenko

3
사양 (상단 댓글에 링크 됨)에 따르면 라우터는 헤더를 볼 수 없으므로 어떤 헤더를 추가해도 상관 없습니다. 대상 노드 만 헤더를 봐야합니다.
Anders E. Andersen

2
그냥 참고 : "머리 두뇌"(출처 : "토끼 두뇌가"선호한다 상당히 혼란 맞춤법하고있다 TFD )
pzkpfw가

2
'토끼 두뇌'라는 정확한 철자가 하나만있는 한.
Alan B

답변:


33

구문 분석 할 수없는 문제가 발생하면 이미 구문 분석 한 내용을 기반으로 결정을 내리거나 작업을 수행해야합니다.

디자인은 IPv6에서 각 확장 헤더가 나머지 패킷을 "포장"하기 때문입니다. 라우팅 헤더, 들어 본 적이없는 헤더, 페이로드를 보면 페이로드를 구문 분석 할 수 없습니다. 페이로드의 의미는 원칙적으로 해석 방법을 모르는 헤더에 따라 다릅니다.

라우터는 라우팅 헤더 만 있으면되기 때문에 이러한 패킷을 라우팅 할 수 있습니다. 심층 패킷 검사 장치 등은 많은 것을 알아야하지만 어쨌든 그게 운명입니다.

추가를 위해 편집 됨 :이 디자인은 미들 박스가 알고있는 것만 변경할 수 있음을 의미합니다. 미들 박스에 모르는 헤더가 표시되면 거부 또는 전달이라는 두 가지 옵션 만 있습니다. IPv4에서는 알 수없는 확장을 제거하고 나머지를 전달할 수도 있습니다. IMO이 속성은 디자인을 덜 확장하기보다는 더 많이 만듭니다.


97

인식 할 수없는 확장 헤더 유형을 발견하면 어떻게합니까?

에서 RFC 2460 :

헤더 처리 결과 노드가 다음 헤더로 진행해야하는데 현재 헤더의 Next Header 값이 노드에서 인식되지 않는 경우 패킷을 버리고 ICMP Parameter Problem 메시지를 소스로 보내야합니다. 패킷 (1)의 ICMP 코드 값 ( "알 수없는 다음 헤더 타입 발생")과 원래 패킷 내에없는 값의 오프셋을 포함하는 ICMP 포인터 필드. 노드가 IPv6 헤더 이외의 헤더에서 다음 헤더 값 0을 발견하면 동일한 조치를 취해야합니다.


15
좋은. 정신을 잃고 있다고 생각했습니다. 그렇습니다. 적어도 인 밴드 시그널링과 다른 해킹 없이는 완전히 확장 할 수없는 디자인입니다. 양쪽 끝을 모두 제어하고 앱의 새 버전 만 설명하면되지만 수백 년 동안 지속되도록 설계된 애플리케이션 프로토콜에서는 변명 할 수 있습니다.
AdamIerymenko

8
알 수없는 헤더를 무시할 수 있으면 훨씬 더 복잡한 문제가 발생합니다. (중간 프록시가 캡슐화 ESP 헤더에 대한 지식없이 TCP 헤더를 수정하면 어떻게됩니까?)이 경우 단순성이 "확장 가능"을 능가합니다!
jman

4
@Max IPv6에는 문자 그대로 지구상의 모든 원자에 하나를 할당하기에 충분한 주소가 있습니다. 이 공간을 고갈시키는 인터넷 연결 토스터는 많지 않습니다.
Tyler McHenry

8
@Max 저는 IPv7이 절대로 필요하지 않다고 말하지는 않겠습니다.하지만 IPv6를 사용하면 지구 대기 (130,000km 위로)의 각 입방 밀리미터 에 고유 주소 를 부여 할 수있는 충분한 주소 공간 이 있습니다. 그러니 일단 다른 은하를 식민지화하기 시작하면 걱정할 것이 있을지 모르지만 그때까지는 꽤 괜찮을 것입니다.
cincodenada

4
일부 컨텍스트가 누락되었습니다.With one exception, extension headers are not examined or processed by any node along a packet's delivery path, until the packet reaches the node (or each of the set of nodes, in the case of multicast) identified in the Destination Address field of the IPv6 header.
Tobu

28

(실제로는) IPv6에 새로운 확장 헤더를 추가하는 것은 불가능합니다.

잘못된 이유 :

  1. 인식 할 수없는 확장 헤더를 기반으로 대상 호스트 만 거부 할 수 있습니다 ( 링크 된 질문에 언급 된 예외가 하나 있음 ).

  2. 새 확장 헤더가 어떤 방식 으로든 선택 사항 인 경우 (더 좋을 것 같음) 이에 대한 ICMP 오류를 수신하고이 헤더없이 다시 시도 할 수 있습니다.


1
그리고 ICMP 패킷이 NAT를 통해 실제 발신자에게 전달된다는 확신이 있습니까?
Dexter 2013

5
IPv6은 희망 NAT ... 죽일 것이다 @Dexter
야누스 Troelsen

2
@Dexter : 이러한 ICMP 패킷은 여러 가지 이유로 도착해야합니다. 예를 들어 파이프의 MTU가 줄어들고 (PPPoE 또는 VPN으로 인해 패킷 캡슐화가 발생했을 수 있음) 전송되는 패킷이 너무 크면 패킷이 너무 크다는 ICMP 패킷이 반환됩니다.
Bill Lynch

4
@JanusTroelsen 모두가 당신의 희망을 공유하는 것은 아닙니다.
Dexter 2013

4

업데이트 RFC 6564 는이 경우를 다룹니다. 그것은 당신이 설명하는 시나리오를 정확하게 배치하고 당신과 같은 미들 박스가 적어도 일정 시간 동안 작업 할 수있는 새로운 확장 헤더 (만약 정의 된 경우)에 대한 형식을 제시합니다.

새로운 확장 헤더를 생성하여 IPv6를 확장하려는 것이 아니라 새로운 대상 옵션을 추가하는 것을 염두에 두십시오. 알 수없는 목적지 옵션을 처리하는 것은 사소하거나 적어도 훨씬 쉬워야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.