요약

  • 디렉티드 브로드캐스트는 라우팅되는 데이터그램처럼 네트워크 프리픽스를 향해 이동한 뒤, 마지막 홉 라우터에게 해당 네트워크로 링크 계층 브로드캐스트를 보내달라고 요청했다.
  • 스머프(Smurf) 공격은 이 팬아웃에 피해자 주소를 위조한 출처를 결합해, 응답하는 호스트들이 아무 요청도 보내지 않은 쪽으로 답변을 보내도록 만들었다.
  • RFC 2644는 라우터 기본값을 디렉티드 브로드캐스트 수신 및 포워딩 허용에서 양쪽 모두 차단으로 변경했고, BCP 38은 별개의 문제인 출처 주소 위조를 다루었다.

하나의 목적지가 군중을 감추고 있었다

위험한 주소는 목록처럼 보이지 않았다. 하나의 네트워크 프리픽스를 지칭하고 나머지 로컬 비트를 모두 1로 채웠다. 경로 대부분의 라우터들에게 이 패킷은 평범한 라우팅으로 처리할 수 있었다. 목적지 네트워크를 이해하는 라우터만이 그 주소가 자신에게 무엇을 요구하는지 — 로컬 링크로 브로드캐스트로 전달하라는 것임을 — 인식할 충분한 맥락을 갖고 있었다.

이 속성 때문에 디렉티드 브로드캐스트는255.255.255.255와 달랐다. 전체 1로 이루어진 제한 브로드캐스트는 하나의 로컬 하드웨어 네트워크에 속하며 포워딩되지 않는다. 반면 디렉티드 브로드캐스트는 원격 네트워크를 향해 보내질 수 있었다. 많은 기계에 접촉하라는 명령을 하나의 라우팅 가능한 목적지로 압축한 것이다.

RFC 919는 1984년에 이 메커니즘을 기술했다. 원격 브로드캐스트는 일반 라우팅을 따라 이동하다가 대상 IP 네트워크에 연결된 게이트웨이에 도착하면, 그 게이트웨이가 브로드캐스트한다는 것이다. 같은 문서는 경제성에 관해 이례적으로 명확한 경고를 남겼다. 브로드캐스트를 듣는 모든 호스트는 일정 비용을 부담한다는 것이었다.

이 기능은 실질적인 조율 문제를 해결했다. 한 기계는 서버 목록 전체를 들고 있지 않아도 서비스를 찾을 수 있었다. 게이트웨이는 자신을 알릴 수 있었다. 호스트는 그 정보를 가진 이웃이 누구든 그에게서 정보를 얻을 수 있었다. 브로드캐스트는 정확한 사전 지식을 집단적 주의로 교환한 것이다.

문제는 이 타협이 행정적 경계를 넘을 때 시작되었다.

서브넷은 마지막 결정을 로컬에 두었다

하나의 IP 네트워크는 공통 네트워크 번호 뒤에 여러 하드웨어 네트워크를 숨길 수 있었다.RFC 922는 브로드캐스트 동작을 이러한 서브네팅된 현실에 맞추었다. 핵심 구분은 그대로 유지되었다. 패킷은 원격 하드웨어 네트워크를 향해 라우팅될 수 있지만, 그 네트워크에 연결된 게이트웨이가 최종적으로 데이터 링크 브로드캐스트로 변환한다.

이것은 단순한 구현 세부사항이 아니었다. 마지막 홉 게이트웨이는 서로 다른 두 범위 사이의 제어 지점을 차지했다. 그 앞에서 패킷은 라우팅 경로 위의 하나의 데이터그램이었다. 그 뒤에서 로컬 매체는 그 데이터그램을 많은 수신자에게 내밀었다.

이후의 라우터들은 주소만 단독으로 검사해서는 요청을 항상 식별할 수 없었다. 클래스리스 라우팅에서 프리픽스와 로컬 부분의 경계는 라우팅 지식에 의존했다. 그래서RFC 1812는 목적지가 유니캐스트인지 네트워크 프리픽스 디렉티드 브로드캐스트인지는 마지막 홉 라우터만이 판단할 수 있다고 명시했다. 분류와 권한이 같은 장치에서 만났던 것이다.

그러나 1995년 규칙은 그 장치에 관대한 출발점을 주었다. 라우터는 포워딩을 비활성화하는 옵션을 제공해야 했지만, 수신과 포워딩을 다루는 옵션은 기본값이 허용이어야 했다. 우선하는 정책이 없는 한 라우터는 네트워크 프리픽스 디렉티드 브로드캐스트를 포워딩해야 했다.

이 기본값은 호환성을 정상 사례로, 거부를 운영자의 예외로 다루었다. 원격 브로드캐스트가 주로 발견(discovery) 도구로 여겨지던 동안에는 이 선택이 이해할 수 있었다. 그러나 패킷 출처가 거짓말할 수 있게 되면 위험해졌다.

빌려온 회신 주소가 회로를 완성했다

IP 포워딩은 보통 목적지 주소에 따라 동작한다. 그러나 답변을 생성하는 프로토콜은 요청에 담긴 출처 주소를 향해 답변을 보낸다. 공격자가 그 출처를 피해자의 주소로 위조할 수 있다면, 응답자는 패킷 자체만으로는 겉보기 요청자가 실제로 그 요청을 보냈다는 증거를 가질 수 없다.

여기에 디렉티드 브로드캐스트를 더한다. 공격자는 출처 필드에 피해자의 주소를 넣은 채, 어떤 네트워크의 브로드캐스트 목적지로 하나의 요청을 보낸다. 목적지 라우터는 그 요청을 로컬 브로드캐스트로 바꾼다. 이를 받고 답할 선택을 한 호스트들은 겉보기 출처, 즉 피해자에게 응답을 보낸다.

답변이 발신자가 아닌 누군가에게 향하기 때문에 이것은 반사(reflection)다. 하나의 수용된 요청이 여러 응답자를 모집할 수 있기 때문에 증폭(amplification)이기도 하다. 배율은 보편적 상수가 아니다. 수신 대기 중인 호스트의 수와 동작, 프로토콜 세부사항, 패킷 크기에 따라 달라진다. 구조적으로 중요한 것은 요청자가 각 응답자에게 패킷을 하나씩 보낼 필요가 없다는 점이었다.

RFC 2644는 외부에서 오는 디렉티드 브로드캐스트를 허용한 네트워크를 “스머프 증폭기(Smurf Amplifiers)”라고 불렀다. 이 표현은 책임을 증폭 경계에 놓았다. 응답하는 호스트 각각은 평범한 로컬 규칙을 따르고 있을 수 있다. 피해자는 증폭기 네트워크와 아무 관계가 없을 수도 있다. 그 둘을 이은 것은 마지막 홉의 포워딩 정책이었다.

로컬에서는 평범한 동작이 원격의 집합적 결과를 낳았다

어떤 개별 답변도 특별해 보일 필요가 없었다. 증폭기의 라우터는 자신이 아는 주소의 패킷을 받았다. 로컬 호스트들은 브로드캐스트를 받았고 일부는 응답을 돌려보냈다. 각 구성 요소는 익숙한 패킷을 처리하는 동안, 그 결합된 효과는 원격 대상을 압도했다.

이 비대칭은 인센티브를 가렸다. 공격자는 지렛대를 얻었다. 피해자는 집합적 결과의 대가를 치렀다. 증폭기 운영자는 약간의 로컬 용량을 소모했지만 자기 서비스에 미치는 주된 피해는 보지 못할 수 있었다. 협력적 발견을 위해 설계된 기본값이, 운영자의 서브넷을 의사결정 없이 공유 공격 인프라로 만들어 놓은 것이다.

모든 브로드캐스트가 모든 수신자에게 비용을 청구한다는 오래된 경고는 여전히 참이었지만 불완전했다. 라우팅된 브로드캐스트는 요청을 결코 들어보지 못한 제3자에게도 비용을 청구할 수 있었다. 출처 필드가 그 청구서를 다른 곳으로 보낸 것이다.

그래서 피해자 측의 속도 제한은 이 구조적 문제에 대한 약한 답이었다. 대상이 살아남는 데는 도움이 되지만, 임의의 원격 발신자가 여전히 다른 네트워크의 응답자들을 소집할 수 있게 남겨둔다. 제어는 하나의 라우팅된 패킷이 수많은 로컬 응답 기회가 되는 지점에 있어야 했다.

RFC 2644는 주소 형식이 아니라 가정을 바꾸었다

1999년 8월에 BCP 34로 발표된 RFC 2644는 새 헤더를 발명하거나 IPv4에서 디렉티드 브로드캐스트 주소를 제거하지 않았다. RFC 1812의 규범적 문구 두 곳을 개정했다.

라우터는 여전히 네트워크 디렉티드 브로드캐스트를 수신하는 구성 옵션을 제공할 수 있지만, 그 옵션은 기본적으로 비활성이어야 했다. 수신은 최종 사용자의 명시적 구성을 필요로 했다. 라우터는 인터페이스별로 네트워크 프리픽스 디렉티드 브로드캐스트를 수신하거나 포워딩하는 옵션을 제공할 수도 있지만, 그 옵션들은 양쪽 동작 모두를 차단하는 것을 기본값으로 해야 했다.

“기본값”이라는 단어가 본질적 일을 했다. 손대지 않은 라우터로 새로 연결된 네트워크는, 누군가 레거시 기능을 발견해 끄기 전까지 증폭기가 되는 일이 더 이상 일어나지 않았다. 이 동작이 필요한 사람은 그 필요를 밝히고 옵트인해야 했다.

이것은 입증 부담을 옮겼다. 오래된 규칙 아래에서는 운영자가 호환성을 거두는 쪽을 정당화해야 했다. 새 규칙 아래에서는 운영자가 팬아웃 서비스를 라우팅 트래픽에 노출하는 쪽을 정당화해야 했다. 패킷 형식은 계속 사용 가능했지만, 저절로 부여되는 허가는 아니었다.

이 변경은 금지와 거버넌스 사이의 유용한 구분도 보존했다. RFC 2644는 구현이 제어 항목을 노출하는 것을 허용했다. 강하게 경계된 환경에는 그것을 쓸 이유가 있을 수 있다. 그러나 이제 이를 켜는 것은 물려받은 사고가 아니라 귀속 가능한 행정 행위였다.

팬아웃을 막는 것이 발신자를 입증하지는 않았다

스머프의 구성에는 또 하나의 필수 입력이 있었다. 피해자 주소의 위조였다. 목적지에서 디렉티드 브로드캐스트를 막으면 증폭 표면 하나를 제거하지만, 그 네트워크가 거짓 출처 주소로 패킷을 내보내는 것은 막지 않는다. 반대로 공격자 가까이서 출처 필터링을 하면 빌려온 회신 주소가 밖으로 나가는 것을 막을 수 있지만, 목적지 서브넷이 외부 팬아웃 요청을 받아들여야 하는지는 결정하지 않는다.

RFC 2827, 즉 BCP 38은 공급자의 고객 접속 경계에서의 인그레스 필터링을 기술한다. 다운스트림 네트워크에서 온 트래픽은 그 네트워크에 정당히 연관된 프리픽스 안의 출처 주소를 주장해야 한다. 그 밖의 출처를 주장하는 패킷은 더 넓은 트랜짓에 들어가기 전에 거부될 수 있다.

이 문서는 한계에 대해 솔직하다. 이 필터링은 유효한 프리픽스에서 보내지는 플러드에는 아무 효과도 없다. 같은 허용 범위 안의 다른 호스트와 공격자를 구별하지 못할 수도 있다. 스푸핑을 좁히고 추적 가능성을 개선할 뿐, 암호학적 출처 인증이 아니다.

그래서 RFC 2644는 두 제어 모두에 우선순위를 부여했다. 출처 필터링은 누가 회신 주소를 쓸 수 있는지를 제한한다. 디렉티드 브로드캐스트 차단은 누가 목적지 링크를 모집할 수 있는지를 제한한다. 둘은 서로 다른 경계에 놓이고 서로 다른 운영자에게 책임을 부과한다.

인터넷은 로컬 브로드캐스트는 유지하고 원격 권한은 철회했다

이 교훈은 종종 “브로드캐스트는 위험하다”로 납작해진다. 그것은 범위 결정을 놓친다. 로컬 브로드캐스트는 주소 구성, 발견(discovery) 및 기타 링크 경계 기능을 계속 지원했다. 제한 브로드캐스트는 명시적으로 포워딩 불가로 남았다. RFC 2644가 바꾼 것은 원격 당사자가 라우터에게 남의 네트워크 안에서 브로드캐스트를 만들어 달라고 요청할 수 있다는 기대였다.

기본값 반전이 반사와 증폭을 폐지한 것도 아니었다. 다른 프로토콜과 서비스는 위조된 요청에 답할 수 있다. 공격 기법은 이주한다. 더 좁은 성취는 편의와 결과가 서로 다른 당사자에게 속한 하나의 무자격(ambient) 메커니즘을 은퇴시킨 것이었다.

이 명세의 역사적 절제가 중요하다. 모든 라우터가 어떤 날짜까지 업그레이드될 것, 모든 운영자가 기본값을 지킬 것, 모든 호스트가 응답을 그만둘 것을 약속하지 않았다. 안전한 초기 동작을 요구사항으로 만들고 배포는 구현과 행정에 맡겼다.

안전한 예외는 자신의 경계를 명명해야 한다

이 기능은 여전히 존재할 수 있으므로, 이를 켜는 운영자는 “애플리케이션이 브로드캐스트가 필요하다” 이상을 말할 수 있어야 한다. 어떤 인바운드 인터페이스가 패킷을 실어올 수 있는가? 어떤 출처 프리픽스가 예상되는가? 어떤 목적지 프리픽스와 프로토콜이 관련되는가? 왜 이 기능이 로컬에 남거나 더 선택적인 발견 메커니즘을 쓸 수 없는가? 어떤 텔레메트리가 그 예외가 공개 증폭기가 되었음을 드러낼 것인가?

승인의 자연스러운 단위는 라우터 전체가 아니라, 알려진 출처에서 정의된 목적을 위해 의도된 하나의 인터페이스로 이어지는 좁은 경로다. 카운터는 디렉티드 브로드캐스트 드롭과 수용된 예외를 구분하고 구성 변경을 기록해야 한다. 롤백은 일반 유니캐스트 포워딩이나 로컬 제한 브로드캐스트를 흔들지 않고 예외를 제거해야 한다.

이것이 기본값 변경의 운영적 의미다. “끔”이 완전한 정책은 아니지만, 팬아웃이 복원되기 전에 소유권, 목적, 폭발력 반경을 명명해야 하는 일시적 정지를 만든다.

출처와 근거의 한계

닫힌 근거 집합은RFC 919,RFC 922,RFC 1812,RFC 2644,RFC 2827이다. 이 문서들은 브로드캐스트 메커니즘, 라우터 요구사항, 기본값 반전, 출처 필터링 모델을 확립한다. 하나의 증폭 비율, 보편적 호스트 동작, 현재 배포 비중, 벤더 컴플라이언스, 현재 공격 빈도를 확립하지 않는다.