알 수없는 확장이 포함 된 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.