요약

  • RFC 3012는 방문(외래) Mobile IPv4 외래 에이전트가 자체적으로 새 챌린지를 발행하고, 원격 AAA 인증이 끝나기 전에 누락되었거나 이미 사용되었거나 알 수 없는 값을 거부할 수 있게 했다.
  • 올바른 챌린지를 돌려보내는 것은 로컬 재생(리플레이) 증거일 뿐이었다. 요청에는 여전히 인증 확장, 외부 또는 홈 도메인의 판단, 등록 수락, 포워딩 상태, 그리고 실제 전달된 트래픽이 필요했다.

모바일 노드가 외래 네트워크에 도착하면 곤란한 타이밍 문제가 생겼다. 방문 네트워크는 등록을 처리하는 데 자원을 쓸지 판단해야 했지만, 방문자와 보안 연관(security association)을 공유하고 있지 않을 수도 있었다. 더 큰 신원 질문에 답할 수 있는 자격 증명은 다른 곳, 즉 홈 도메인이나 인증·인가·계정 관리(Authentication, Authorization and Accounting) 시스템에 있을 수 있었다.

그 원격 절차를 기다린다고 해서 로컬 재생 문제가 사라지지는 않았다. 공격자는 구조상 여전히 유효해 보이는 상태에서 오래된 요청을 다시 보낼 수 있었다. 외래 에이전트, 즉 방문 네트워크의 Mobile IPv4 게이트웨이는 자신 너머의 신뢰 사슬이 발언하기 전에 자기 자신의 사실 하나를 필요로 했다.

RFC 3012는 2000년 11월 Proposed Standard로 발행되어 외래 에이전트에 그 사실을 제공했다. 외래 에이전트는 자신의 에이전트 광고(Agent Advertisement)에 챌린지 확장을 넣을 수 있었다. 그 값은 무작위여야 하고 최소 32비트 이상이어야 했다. 모바일 노드는 최근에 받아들일 수 있는 값을 자신의 등록 요청(Registration Request)에 담긴 MN-FA 챌린지 확장으로 복사했다.

이 조치는 평범한 챌린지-응답처럼 들리지만, 그 제도적 위치가 중요했다. 챌린지를 고른 주체는 방문 링크의 외래 에이전트였다. 따라서 외래 에이전트는 먼저 홈 네트워크에 방문자가 누구인지 묻지 않고도 자신이 최근에 행한 행위에 대한 응답을 인식할 수 있었다. 신원은 여전히 원격에 의존하는 상태였지만, 신선도는 로컬에서 검증 가능해졌다.

그러나 그렇다고 챌린지가 자격 증명이 된 것은 아니었다. RFC 3012는 MN-FA 챌린지 확장 뒤에 인증 확장이 따라오도록 요구했다. 모바일 노드와 외래 에이전트가 이미 보안 연관을 공유한다면 요청은 Mobile-Foreign 인증을 담았다. 그렇지 않다면 노드는 MN-AAA 인증을 담아야 했고,RFC 2794가 정의하는 네트워크 접속 식별자(Network Access Identifier)를 포함하도록 권고되었다.

이 순서 규칙은 증거 규칙을 표현한 것이었다. 챌린지는 최근에 발행된 토큰을 가리켰고, 인증자는 보안 매개변수 지수(SPI)로 선택된 비밀값과 알고리즘에 프로토콜 재료를 묶었다. 챌린지를 담고 있으면서도 Mobile-Foreign 인증과 MN-AAA 인증을 모두 담지 않은 요청은 조용히 폐기되어야 했다. 올바른 토큰, 결여된 바인딩: 받아들일 수 있는 주장은 없다.

네트워크 접속 식별자는 또 다른 역할을 했다. 이것은 시스템에 사용자 스타일의 이름을 주었고, 그 이름의 realm은 인증 확인 요청이 행정 도메인을 가로질러 경로를 찾는 데 도움을 줄 수 있었다. 그러나 경로를 찾을 수 있는 이름은 발화자가 그 이름의 소유자라는 증명이 아니었다. 식별자, 인증자, 인가는 서로 다른 객체로 남았다.

RFC 3012는 세 가지 오류를 통해 챌린지 상태를 보이게 만들었다.MISSING_CHALLENGE는 필요한 필드가 없다는 뜻이었다.STALE_CHALLENGE는 같은 모바일 노드가 이미 그 값을 사용했다는 뜻이었다.UNKNOWN_CHALLENGE는 그 값이 해당 노드에 마지막으로 성공적으로 돌려준 값도 아니고, 설정된 챌린지 창(window) 안의 최근 광고에도 속하지 않는다는 뜻이었다. IANA의Mobile IPv4 레지스트리는 이 공개 코드 포인트들을 보존하고 있다.

이들은 “인증 실패”의 동의어가 아니었다. 각각은 인증 이전 또는 그 주변에서 서로 다른 지점의 실패를 표시했다. 결여, 이전 사용, 로컬 발행 이력의 부재는 서로 다른 운영 대응을 요구했다. 이 규격은 그렇게 하나의 일반적 거부가 그 원인이 된 상태 전이를 지워버리지 않도록 했다.

신중하게 경계가 그어진 예외도 있었다. 네트워크는 재전송을 한다. 모바일 노드가 같은 64비트 Identification 값과 같은 챌린지를 담은 등록 요청을, 외래 에이전트가 해당 요청을 아직 보류(pending) 상태로 보유하고 있는 동안 다시 보낸다면, 외래 에이전트는 그것을 다시 전달했다. 그 보류 기록 밖에서의 재사용은 통상적으로 오래된 것으로 처리되었다.

이 예외는 재생 방지를 “같은 바이트를 두 번 받아들이지 않는다”로 환원할 수 없는 이유를 보여준다. 재전송은 권한을 다시 만들려는 두 번째 시도가 아니라 같은 살아있는 거래를 나타낼 수 있다. 외래 에이전트는 이 두 경우를 구분하기 위해 기억이 필요했다. Identification, 챌린지, 모바일 노드 연관, 보류 수명, 이 네 가지였다.

다운스트림 응답도 묶여야 했다. 외래 에이전트가 챌린지를 홈 에이전트로 전달하는 요청에 그대로 유지했다면, 그 값을 보류 중인 등록과 함께 보존해야 했다. 같은 챌린지가 없는 홈 에이전트의 응답은 거부되고 챌린지 누락 실패로 모바일 노드에 중계되어야 했다. 이 일치는 거래 영수증이었다. 이 다운스트림 결과는 로컬에서 목격된 바로 그 요청에 속한다는 것이었다.

다른 방법으로, 직접 공유된 Mobile-Foreign 보안 연관이 외래 에이전트가 전달 전에 자신의 챌린지 재료를 검증하고 제거할 수 있도록 허용한다면, 외래 에이전트는 등록 요청의 Identification 필드를 로컬에 보존해야 했다. 표현은 바뀔 수 있었지만, 재생 경계를 보존할 의무는 바뀌지 않았다.

외부의 판단은 의도적으로 프로토콜 밖에 두었다. RFC 3012의 부록은 그것을 “검증 인프라”라고 불렀다. 외래 에이전트는 인증 재료를 그 인프라에 넘기고 보안된 결과를 기다릴 수 있었다. 이 문서는 AAA 프로토콜을 규정하지 않았고, 검증자가 Mobile IPv4 주체여야 한다고 요구하지도 않았다. 로컬 배포는 자신이 가진 메커니즘을 사용할 수 있었다.

그것은 정확한 접합부를 가진 얇은 표준이었다. Mobile IPv4는 방문자가 무엇을 담는지, 외래 에이전트가 무엇을 검사할 수 있는지를 기술했다. 검증 시스템은 자격 증명과 인가를 다른 경로로 판단했다. 외래 에이전트는 그 뒤 긍정적 또는 부정적 결과에 따라 행동했다. 표준화는 모든 계층을 자신이 소유한다고 가장하지 않으면서 계층들을 연결했다.

예약된 SPI 하나, 즉CHAP_SPI2는 당대의 RADIUS 관행과 정합되는 CHAP 스타일의 MD5 계산을 제공했다. 이 편의 조치는 기존 AAA 시스템을 더 쉽게 사용할 수 있게 했지만, RFC 3012는 그것을 영원한 암호학으로 제시하지 않았다. 문서의 보안 절은 이 구성이 HMAC-MD5보다 약하며 가능한 한 피해야 한다고 말했다.

이 경고는 역사적으로 중요하다. 상호운용성은 종종 새 프로토콜 제어를 설치되어 있는 검증 시스템에 맞추면서 시작된다. 호환성 다리는 배포가 가능하게 만든 이유이자 이후 개정이 필요해진 이유일 수 있다. 표준은 그 타협을 기록하면서도 그것을 영구적인 보안 이상으로 바꾸지 않을 수 있다.

이 문서는 서비스 거부(DoS) 경계도 인정했다. 악의적인 모바일 노드는 트래픽을 재생하여, 정당한 수락이 도착하는 도중에도 거부처럼 보이는 응답을 유발할 수 있었다. 사용자는 성공 응답이 아직 전송 중인데도 등록이 실패한 것처럼 행동할 수 있었다. 신선도 검사는 공격의 한 부류를 제한했을 뿐, 경합(race), 위조된 표시, 에이전트 상태를 소모하는 모든 방식을 제거하지는 않았다.

짧은 챌린지는 문제를 더 예리하게 만들었다. 외래 에이전트가 4바이트 미만의 값을 고른다면, 요청의 고유성에 대한 추가 증거로 Identification 필드를 보존하도록 권고되었다. 엔트로피, 보존된 상태, 거래 신원은 명시된 한도 안에서만 서로를 대신할 수 있었다. 이 시스템은 짧은 토큰을 “무작위”라고 묘사함으로써 고유성을 회복할 수 없었다.

6년 뒤,RFC 4721이 RFC 3012를 폐기(obsolete)하고 설계를 강화했다. 이 문서는 외래 에이전트가 각 모바일 노드마다 적용 가능한 챌린지 값을 기록하도록 요구했다. 어떤 값으로 등록한 노드는 나중에 자신이 등록하기 전에 광고된 값을 사용할 수 없었다. 개정판은 응답과 광고 처리를 명확히 하고, 가짜 메시지에 대한 방어를 추가하고, HMAC-MD5 옵션을 도입했다.

이러한 변경은 특정 네트워크가 익스플로잇을 당했다는 증명이 아니다. 그것은 더 일반적인 무언가에 대한 더 강한 증거이다. 챌린지의 의미는 순서화된 이력에 달려 있다. 바이트가 신선하다는 것은 어느 에이전트가 발행했는지, 어느 노드가 사용했는지, 어떤 이전 값이 수락되었는지, 어떤 요청이 아직 보류 중인지, 어떤 인증자가 교환을 덮고 있는지에 대한 상대적 속성이다.

RFC 2002와의 구별도 똑같이 중요하다. 기본 Mobile IPv4는 안정적인 홈 주소와 현재의 케어오브(care-of) 주소 사이에 임시 바인딩을 만들었다. 인증에 성공한 등록 응답(Registration Reply)은 홈 에이전트가 그 바인딩을 수락했다는 것을 확립할 수 있었다. RFC 3012는 그보다 앞선, 방문 경계에서의 더 로컬한 불확실성을 다루었다. 그것은 노드의 물리적 위치를 증명하지 않았고, 터널링된 패킷이 도착한다는 것도 증명하지 않았다.

PPP CHAP의 단순한 재생이기도 하지 않았다. CHAP의 인증자와 피어는 PPP 인증 교환 안에서 작동했다. RFC 3012는 외래 에이전트의 신선도 토큰을 Mobile IPv4 등록에 삽입하고, 더 넓은 자격 증명 판단을 별개의 AAA 인프라가 제공하도록 허용했다. 다이제스트 스타일을 빌렸다고 해서 제어 평면이 동일해지지는 않았다.

Lu Heng의 최소 사양 관점에서 볼 때, 이 성취는 절제였다. 공통 계층은 챌린지, 그 순서, 그 수용 가능한 이력, 그 오류들을 정의했다. 그것은 특정 AAA 벤더, 특정 비즈니스 정책, 특정 홈 도메인 배치를 헌법화하지 않았다. 로컬 운영자는 검증 인프라와 접수 정책을 선택할 권리, 그리고 그 부담을 유지했다.

실행 코드 우선(primacy) 원칙은 필요한 제동 장치를 더한다. RFC는 상태 기계가 발행되었다는 것을 증명할 수 있다. 광고 캡처는 외래 에이전트가 챌린지를 내보냈다는 것을 증명할 수 있다. 요청 캡처는 어떤 값이 인증자 곁에서 돌아왔다는 것을 보여줄 수 있다. 암호학적 결과는 검증자 기록만이, 인가는 정책 기록만이, 등록은 에이전트 상태만이, 서비스는 트래픽 관측만이 보여줄 수 있다.

유혹은 “챌린지-응답”이라는 말이 결정적이라는 인상 속에서 그 사슬을 압축하는 것이다. RFC 3012 자신의 구조는 그 압축에 저항한다. 인증 없는 챌린지는 폐기된다. 인증자가 여전히 원격 인프라를 요구할 수 있다. 긍정적 검증 결과는 여전히 등록 상태보다 앞선다. 등록은 여전히 사용 가능한 포워딩보다 앞선다. 각 전이에는 서로 다른 주체와 서로 다른 영수증이 있다.

게이트가 챌린지를 발행한 이유는, 로컬에서 확립할 수 있는 사실 하나가 필요했기 때문이다. 신뢰는 여전히 다른 곳에서 도착해야 했다. 그것은 설계의 결함이 아니었다. 지식과 권한이 실제로 어디에 살았는지에 대한 이 설계의 가장 정직한 진술이었다.

출처