인터넷은 사실상 낙관 위에 세워진 프로토콜로 패킷의 길을 정한다.

말이 좀 가혹하지만 실제로는 그렇게 가혹한 얘기가 아니다. 1989년에는 낙관이 무모한 게 아니었다. BGP는 지금보다 작고 서로 협조적이던 인터넷에서 태어났다. 참여자가 적었고, 이해관계가 단순했고, 프로토콜이 할 일은 대체로 자율 시스템(AS)이 “나는 이 프리픽스에 갈 수 있고, 가는 AS 경로는 이렇다”고 말하게 해 주는 것이었다.

그 설계에 아무도 넣지 않은 것이 있다. 말하는 쪽이 그런 주장을 할 자격이 있는지 증명하는 제대로 된 방법이다.

그래서 BGP는 지금도 정책, 관례, 필터링, 선의가 뒤섞인 상태로 돌아간다. 암호학적 출발지 검증은 나중에 덧댄 것이다. 인터넷이 더는 작은 마을이 아니라는 걸 결국 인정해야 했으니까.

BGP가 실제로 하는 일

BGP(Border Gateway Protocol)는 자율 시스템들이 경로 정보를 주고받는 방법이다. AS는 하나의 관리 주체가 운영하는 네트워크다. ISP, 클라우드 업체, 대기업, 대학이 각각 AS가 된다.

AS는 자기가 가진 IP 프리픽스와, 그 프리픽스에 닿기까지 거치는 AS 번호 경로를 광고한다. 이웃은 그 광고를 받아 자기 정책을 적용하고, 경로 속성을 비교해 선호 경로를 고른 뒤, 다시 자기 이웃에게 광고한다. 이 과정이 전 세계 그래프에서 반복되면 네트워크와 네트워크 사이로 트래픽을 나르는 도메인 간 라우팅 체계가 된다.

동작 방식으로 보면 BGP는 경로 벡터(path-vector) 프로토콜이고, 지금 모두가 쓰는 버전은 RFC 4271에 정의된 BGP-4다. BGP를 주고받는 두 라우터(피어 또는 네이버)는 TCP 179번 포트로 세션을 열고 관계가 유지되는 동안 그 세션을 계속 붙잡고 있으며, 뭔가 바뀔 때만 업데이트를 보낸다. 서로 다른 AS 사이에서 쓰면 eBGP, 한 AS 안에서 바깥에서 배운 경로를 나눌 때 쓰면 iBGP라고 부른다. BGP는 내 네트워크 안의 길을 찾지 않는다. 그건 OSPF나 IS-IS가 하는 일이다. BGP는 내 네트워크가 남의 네트워크에 어떻게 닿을지를 정한다.

BGP 업데이트의 핵심은 이 한마디다. “이 주소 범위로 가는 길을 알고 있다. 경로는 이렇다.” 이웃은 그걸 받아들이거나, 고치거나, 걸러 내거나, 그대로 넘긴다. 모두가 아는 걸 공유하고 각자의 선호에 따라 최선의 경로를 고르기 때문에 시스템 전체가 수렴한다.

중앙 권한은 없다. “이게 정답”이라고 말해 주는 전 세계 라우팅 테이블도 없다. 수만 개의 자율 시스템이 정보를 주고받으며 서로가 진실을 말하리라 믿고 있을 뿐이다.

신뢰의 문제

BGP에는 어떤 AS가 광고하는 프리픽스를 정말 갖고 있는지 확인하는 장치가 없다. 어느 AS든 어느 프리픽스든 광고할 수 있다. AS 12345가 실제로는 AS 67890의 것인 프리픽스로 가는 길을 안다고 광고하면, 이웃 네트워크는 꽤 자주 그걸 받아들인다. AS 67890으로 가야 할 트래픽이 AS 12345로 간다.

이게 경로 하이재킹이다. 그리고 무서울 만큼 쉽다.

더 구체적인 프리픽스가 이긴다. 정당한 소유자가 203.0.113.0/24를 광고하면 공격자는 203.0.113.0/25와 203.0.113.128/25를 광고할 수 있다. 라우터는 목적지와 맞는 가장 구체적인 프리픽스를 따라 패킷을 보내므로, 피해자가 아무 잘못을 하지 않아도 트래픽이 공격자에게 넘어간다. (실제로는 대부분의 네트워크가 /24보다 잘게 쪼갠 IPv4 경로를 버리기 때문에, 이 수법은 피해자가 /22처럼 더 큰 블록을 광고할 때 가장 잘 먹힌다. 아래 YouTube 사건이 정확히 그런 모양이었다.)

일이 틀어질 때

파키스탄과 YouTube(2008). 파키스탄 텔레콤은 국내에서 YouTube를 막으려 했다. 2008년 2월 24일, 자기 네트워크 안에서만 쓸 생각으로 YouTube의 208.65.152.0/22 중 일부인 208.65.153.0/24를 광고했다. 이 광고가 상위 사업자 PCCW를 통해 전 세계 라우팅 테이블로 새어 나갔다. 두 시간 남짓 동안 인터넷의 상당 부분에서 YouTube가 열리지 않았다. 트래픽이 파키스탄 텔레콤으로 흘러가 그대로 버려졌기 때문이다.

차단은 의도한 것이었다. 전 세계 장애는 아니었다. 고객의 광고를 걸러 냈어야 할 상위 사업자가 그대로 넘겼고, 인터넷 전체가 그걸 믿었다.

**경로 유출(route leak)**은 하이재킹의 사고형 사촌이다. AS가 받기만 하고 넘기면 안 되는 경로를 다시 광고하는 것이다. 트래픽이 엉뚱한 길로 가고, 때로는 감당할 용량이 없는 네트워크를 지나간다. 경로 유출은 큰 장애를 여러 번 일으켰다. 트랜짓 사업자의 라우터 하나만 설정이 틀려도 수천 개 프리픽스의 트래픽이 감당 못 할 링크로 몰릴 수 있다.

의도적 하이재킹은 누가 했는지 밝히기 더 어렵지만 기록은 남아 있다. 암호화폐 탈취, 감시를 위한 트래픽 가로채기, DNS 조작이 모두 BGP 하이재킹 사건과 연결됐다. 공격자는 피해자의 프리픽스를 광고해 몇 분에서 몇 시간 동안 트래픽을 가로채고, 필요한 걸 빼낸 뒤 광고를 거둔다. 누군가 알아챌 즈음엔 이미 끝나 있다.

왜 아직도 안 고쳐졌나

하나는 규모 때문이다. 전 세계 라우팅 테이블에 보이는 AS가 7만 5천 개가 넘는다. 새 보안 장치가 효과를 내려면 그중 상당수가 도입해야 한다. 이 규모의 조율은 한없이 느리다.

또 하나는 비용이다. 광고를 걸러 내고 경로를 검증하려면 운영에 돈과 품이 든다. 많은 네트워크 운영자가 “내 피어가 설마 내 프리픽스를 광고하겠어” 하는 신뢰와 관례에 기댄다. 검증 체계를 만드는 것보다 싸기 때문이다.

그리고 솔직히, 대부분의 경우 잘 돌아가기 때문이다. 인터넷은 매일 셀 수 없이 많은 트래픽을 문제없이 실어 나른다. 하이재킹 사건이 화제가 되는 건 그게 예외라서다. 이론상으로는 취약하지만 실제로는 의외로 튼튼하다. 암호학이 아니라 관례가 붙잡고 있는 시스템이다.

RPKI: 진행 중인 해결책

RPKI(Resource Public Key Infrastructure)는 경로의 출발지에 암호학적 증명을 붙인다. 자원 보유자(IP 프리픽스를 가진 주체)가 ROA(Route Origin Authorization)를 만든다. 내용은 이런 식이다. “AS 67890은 203.0.113.0/24를 광고할 권한이 있다.”

ROA는 자원 보유자의 개인키로 서명돼 분산 저장소에 게시된다. 네트워크 운영자는 RPKI 검증기를 돌려 들어오는 BGP 광고를 게시된 ROA와 대조할 수 있다. ROA가 그 프리픽스를 다루는데 출발지 AS가 다르거나, 광고가 ROA가 허용한 것보다 잘게 쪼개져 있으면 그 경로는 ‘무효(invalid)‘가 되고 운영자는 거부할 수 있다. 그 프리픽스를 다루는 ROA가 아예 없으면 결과는 ‘없음(not found)‘이고, 거의 모든 네트워크가 이런 경로를 여전히 받아들인다. 그걸 거부하면 인터넷의 큰 부분이 끊기기 때문이다.

RPKI가 확인하는 범위도 짚어 둘 필요가 있다. 출발지, 오직 출발지만 본다. 공격자가 경로를 위조하되 끝을 정당한 출발지 AS로 맞추면 그대로 통과한다. 경로 자체를 검증하는 것(거의 아무도 배포하지 않은 BGPsec, 그리고 ASPA 같은 새 제안)이 다음 단계인데, 이쪽은 훨씬 더 뒤처져 있다.

RPKI 도입은 최근 몇 년 사이 크게 늘었다. 주요 ISP와 클라우드 업체가 이제 경로를 검증한다. NIST와 지역 인터넷 레지스트리(RIR)도 도입을 밀어 왔다. 그래도 보편적이라고 하기엔 멀었다.

여기에도 닭과 달걀 문제가 있다. ROA는 누군가 검증할 때만 쓸모가 있다. 검증기는 경로에 ROA가 있을 때만 쓸모가 있다. 양쪽이 다 도입해야 시스템이 돌아간다. 보편적으로 도입되기 전까지는 ROA가 없는 프리픽스를 하이재킹하거나, 검증하지 않는 네트워크를 노리는 공격이 여전히 가능하다.

청테이프로 붙인 인터넷

BGP는 청테이프와 선의로 인터넷을 붙들고 있다. 모든 네트워크 운영자가 서로 아는 사이였고 협조적이던 세상을 위해 설계된 프로토콜이다. 그 세상은 오래전에 사라졌지만 프로토콜은 남았다.

RPKI가 옳은 해법이다. 권한을 암호학으로 증명하니까. 하지만 이걸 모든 곳에 배포하는 일은 DNSSEC, IPv6, 그리고 인터넷 전체에 걸친 모든 업그레이드를 괴롭혀 온 것과 같은 종류의 조율 문제다. 기술은 있다. 도입이 늦을 뿐이다.

그동안 인터넷은 누구나 할 수 있고 아무도 검증할 의무가 없는 광고를 바탕으로 계속 트래픽을 나른다. 대개는 돌아간다. 돌아가지 않을 땐 그 결과가 전 세계로 번질 수 있다.

이게 BGP다. 아마 그래서는 안 될 세상에서, 신뢰 위에 돌아가는 프로토콜.