Border Gateway Protocol, BGP는 대규모 네트워크에서 인터넷 트래픽을 라우팅할 때 사용되는 IP 주소 체계의 네비게이션입니다. 🚗
사용하는 IP 주소가 매우 많은 통신사업자, 대기업, 클라우드, 데이터센터와 같은 곳에서 BGP를 사용하죠.
과거 네트워크 통신이 급속도로 발전하던 시절엔, 효율적으로 대규모의 통신을 하는 것이 주요 목적이었기에 네트워크 보안은 그다지 고려되지 않았습니다. 그래서 BGP 프로토콜 또한 보안성이 결여된 채로 개발되었죠.
즉, BGP 사용자의 실수나 악의적인 BGP Config는 글로벌 라우팅 테이블에 영향을 끼칠 수 있게 되었고, 이로 인해 BGP는 대규모 통신 장애와 사이버 공격의 시발점이 되곤 했습니다.
이 글에서는 BGP와 관련된 취약점과 네트워크 운영자는 어떻게 대응해야 하는지 설명해보고자 합니다.
BGP 하이재킹은 BGP(Border Gateway Protocol) 라우팅 테이블을 악의적으로 조작해서 IP 주소들을 탈취하는 사이버 공격입니다. IP, Route, Prefix 하이재킹이라고도 불리죠.
BGP 하이재킹 공격은 특정 IP 주소로 향하는 트래픽을 훔쳐오기 위해 사용됩니다.
BGP 라우팅 테이블이 악의적으로 조작되면, 탈취된 IP 주소로 향하는 트래픽들이 피해를 입게되죠.
BGP 하이재킹은 보안 위협이면서 동시에 네트워크 통신 자체를 불가하게 만들 수 있는 공격입니다.
공격 받은 IP 주소의 소유자(서버)와 사용자(클라이언트) 모두 심각한 피해를 입을 수 있죠.
이로 인해 네트워크가 다운되거나, 개인정보가 유출되거나, 심지어는 암호화폐를 도난당하는 사건까지 발생할 수 있습니다.
이전 글에서 논한 BGP Route Leak과 BGP 하이재킹은 사실 아주 비슷한 용어로 사용됩니다.
다만 악의적인 목적으로 Route Leak이 발생한 경우, Hijack 되었다고 표현하는 것이죠.
하지만 현실에서의 BGP 관련 사고들은 대부분 Route Leak인지 하이재킹인지 구분하기 어려운 것이 사실입니다. 😊
일반적으로 악의적인 의도가 명확할 때 BGP 하이재킹이라고 표현하죠.
암호화폐 지갑 웹 서비스, myetherwallet.com의 2018년 BGP 하이재킹 피해 사례를 보시죠.
공격자는 BGP 라우팅 테이블을 조작하여
AWS로 향하는 DNS 트래픽을 하이재킹, 즉 리디렉션 했습니다.
그리고 "myetherwallet.com"에 대한 DNS 쿼리에 가짜 IP 주소를 응답했죠.
myetherwallet.com 사용자는 가짜 웹사이트로 접속 후 ID/PW를 입력하게 되었습니다.
결국, 공격자는 피해자들의 IP/PW를 통해 암호화폐들을 훔칠 수 있었죠.
BGP 하이재킹이 어떻게 가능한건지 알아보려면, BGP 라우팅 프로토콜의 동작 방식을 먼저 이해하고 BGP는 근본적으로 안전하지 않은 프로토콜임을 이해해야 합니다.
이전 글에서 자세히 설명했기에, 여기서는 조금 간략히 설명하겠습니다.
인터넷 라우팅 프로토콜인 BGP를 설명하려면 AS, Route 개념을 먼저 이해해야합니다.
AS(Autonomous System)는 인터넷 트래픽을 라우팅하는 독립적인 IP 그룹입니다.
통신사, 대학, 대기업 등에서 AS를 소유하고 운영하죠.
각 AS에는 ASN(AS Number)이라는 고유한 번호가 할당됩니다.
대한민국에서의 AS 사용 현황은 여기서 확인하실 수 있습니다.
ASN의 예시를 보여드리면 :
BGP Route는 Prefix라고 부르는 다수의 IP 주소 그룹으로 가이드하는 네비게이션 경로입니다.
실시간 교통량에 따라 경로가 달라지듯 BGP 라우팅 경로도 네트워크 상황에 따라 달라지죠.
IP 주소는 네트워크 주소(Prefix)와 호스트 주소(Suffix) 두가지 범위로 나눌 수 있습니다.
예를 들어, 192.35.48.0/24 는 192.35.48.0 ~ 192.35.48.255 IP 주소들의 네트워크 주소를 뜻하며, 이걸 Prefix라고 합니다.
IP 주소의 집합체인 AS는 자기가 가진 IP 주소들에 접속하는 라우팅 경로를 인터넷에 알리고자 합니다.
이때 해당 IP의 Prefix를 경로의 출발지, 목적지로 Originate하여 인터넷에 광고합니다.
AS는 다른 AS와 BGP 연결을 맺은 뒤,
자신이 Originate한 라우팅 경로와 인접한 다른 AS에서 공유해준 라우팅 경로들을 공유합니다.
그럼 AS의 BGP 라우터는 공유된 라우팅 경로들을 모두 라우팅 테이블에 적용합니다.
이 라우팅 테이블은 패킷의 도착지 IP 주소가 어떤 BGP 경로를 통해 갈 수 있는지 알려줍니다.
BGP는 'Route by Rumor'라는 별명이 있습니다.
본질적으로 AS는 인접한 AS의 BGP 라우팅 정보들을 신뢰하기 때문이죠.
이런 무조건적인 신뢰로 인해 보안성에 결함이 발생할 수 있습니다.
AS는 인접한 AS의 BGP 라우터들에게 자신의 라우팅 변동 사항들을 업데이트해줍니다.
변경사항이 전혀 없다면 Keepalive 메세지 이외에는 아무것도 전송하지 않죠.
만약 어떤 Origin AS에서 BGP 경로를 철회(Withdraw)하면 다른 AS에 철회 메세지가 전송됩니다.
그럼 철회 메세지를 받은 AS는 BGP 경로의 AS_PATH가 변경되었음을 인접한 AS들에게 공유합니다.
앞서 말씀드렸다 싶이, BGP는 네비게이션과 같습니다.
IP 주소 "A"로 갈 수 있는 경로가 많을 때, BGP는 네트워크 상황을 보고 최적의 라우팅 경로를 제시합니다. 경로 상 모든 AS에서 이와 같은 최적의 경로 결정이 이뤄지죠. 이 BGP 알고리즘은 AS_PATH의 길이와 LOCAL_PREF 등 다양한 가중치에 의해 결정됩니다.
BGP는 보안 매커니즘이 없는 프로토콜입니다.
어떤 AS라도 실수로, 혹은 악의적으로 다른 AS의 IP 주소 대역을 Originate 할 수 있죠.
이런 사건을 보통 "BGP 하이재킹"이라고 부릅니다.
그리고 BGP는 AS가 의도한 범위에서만 BGP 메세지를 사용할 수 있도록 하는 매커니즘이 없습니다.
즉, 잘못된 AS_PATH를 전달하여 자신의 AS에 트래픽이 흐르게 되는 상황을 유발할 수 있습니다.
이런 사건은 보통 "BGP Route Leak"이라고 부릅니다. (RFC 7908)
BGP Leak은 보통 어떤 AS가 실수로 Transit ISP - A의 BGP 정보를 Transit ISP - B에게 전달하는 방식으로 발생합니다. 그 결과 ISP A에서 ISP B로 가는 트래픽이 BGP Leak된 AS의 네트워크를 거쳐가게 되는거죠. 네트워크 레이턴시와 패킷로스는 피할 수 없게 되고, 심각한 경우 AS의 네트워크가 다운될 수도 있습니다.
BGP가 만들어지고 배포된 후, 네트워킹 업계는 인터넷 라우팅 레지스트리(IRR)를 만들어냅니다.
이제 IRR을 통해 다른 AS가 BGP 경로 상 자신의 AS 경로를 어떻게 예상해야 하는지 공유할 수 있게 되었죠.
현재 대부분의 Transit 통신사들이 IRR 기반 라우팅 필터를 사용하여 잘못된 BGP 경로들을 걸러내고 있습니다. 하지만 전 세계에서 공유하는 IRR 정보를 완전히 신뢰할 수도 없으며, 경우에 따라 IRR 정보가 서로 상충되는 상황도 존재합니다.
그래서 최근에는 RPKI ROV, Peerlock과 같은 새로운 보안 매커니즘이 개발, 배포되어 인터넷에서 사용되고 있습니다. 이를 통해 BGP Leak, BGP 하이재킹으로 인한 피해를 최소하하려는 시도가 계속되고 있죠.
가장 유명한 BGP 하이재킹 사건은 2008년 2월 파키스탄 국영 통신사 PTCL과 YouTube의 사건입니다. 당시 파키스탄 정부는 반이슬람적이라고 판단한 유튜브 동영상을 이유로 파키스탄 내 YouTube 접속 차단을 명령했습니다.
이 접속 차단을 위해 PTCL은 유튜브 서비스로 향하는 파키스탄 국민들의 트래픽을 의도적으로 하이재킹하기 위해 YouTube의 BGP 경로(Prefix)를 더욱 구체적으로 나누어 광고했습니다. 일단 유튜브 트래픽을 하이재킹한 PTCL의 목표는 트래픽을 블랙홀 라우팅하여 파키스탄 사람이 YouTube에 접속하지 못하도록 막는 것이었습니다. 그러나 PTCL이 이 유튜브 라우팅 경로를 글로벌 ISP에게 넘겨주면서 전 세계 인터넷의 대부분이 YouTube를 차단하는 상황이 발생했습니다.
최근에는 해커들의 암호화폐 서비스에 대한 사이버 공격에서 BGP 하이재킹이 필수적인 요소로 자리 잡았습니다. 2022년 8월, 암호화폐 서비스인 Celer Bridge는 오픈소스 IRR 데이터베이스인 AltDB의 가짜 라우팅 정보와 조작된 BGP Announcement를 사용한 BGP 하이재킹 공격을 받았습니다.
공격자는 AltDB의 내용을 조작해서 영국에 있는 소규모 호스팅 데이터센터가 Celer Bridge 인프라를 호스팅하는 AWS의 IP Prefix를 Transit할 수 있다고 속여 ISP들을 속일 수 있었습니다.
그리고 공격자는 BGP 하이재킹 알림의 AS_PATH를 위조하여 AWS ASN을 Origin으로 포함시킴으로써 RPKI ROV를 무력화했습니다. 이 하이재킹을 통해 공격자는 사용자들의 계정을 탈취하고 암호화폐를 훔칠 수 있었죠.
이렇게 취약한 것 같은데, 네트워크가 스스로 BGP 하이재킹을 막을 수 있긴 한걸까요?
보안에 100%는 없지만, 인터넷의 전반적인 라우팅 보안을 개선하기 위한 Best Practice는 아래와 같이 존재합니다.
BGP 모니터링 서비스 사용하기
네트워크에서 사용하는 주요 BGP 경로의 변동 사항들을 모니터링하고 이상한 변동이 있을 시 즉시 알림을 받아야 합니다.
RPKI에 ROA 설정하기
내 AS에 속한 IP 대역을 Origin으로 등록하여 잘못된 BGP 경로들을 인터넷이 필터링할 수 있게합니다.
BGP 라우터에 RPKI ROV 설정하기
Route Origin Validation, ROV를 내 BGP 라우터에 설정하여 트래픽이 잘못된 BGP 경로로 라우팅되는 것을 막을 수 있습니다.
인터넷 라우팅 레지스트리, IRR 정보 업데이트
IRR에 등록된 내 AS의 정보를 업데이트함으로써 아직 RPKI를 사용하지 않는 AS에서도 잘못된 BGP 경로를 필터링할 수 있도록 할 수 있습니다.
RIPE RIS, Route View에 BGP 정보 등록하기
위와 같은 퍼블릭 BGP 커뮤니티에 정보를 공유함으로써 라우팅 보안에 대한 연구가 더 가속화 될 수 있습니다.
기업 네트워크 운영 계획에 '라우팅 보안' 추가하기
위에서 서술한 것 이외에도, MANRS에서도 라우팅 보안을 위한 상세 조치 사항들을 권장하고 있습니다.
이 글에서 많은 이야기를 했지만, 사실 BGP의 모든 취약점을 논할 수는 없습니다.
BGP 보안 강화를 위한 조치 또한 완벽하지는 못하죠.
위에서 언급한 Best Practice들은 모두 BGP Announcement에 포함된 AS_PATH의 AS Origin을 정확히 확인하는 행위입니다.
아쉽지만, 공격자가 AS_PATH를 조작하여 BGP Announcement가 "Valid"한 것으로 보이게 만들면 식별이 불가하죠.
아직 실제로 상용화된 것이라고 보긴 어렵지만 BGPsec 기술은 조작된 AS_PATH를 통해 AS를 사칭하는 것을 막아낼 수 있습니다. 하지만 BGPsec의 보호 기능은 BGPsec을 사용하는 AS를 통해서만 전파될 수 있어서 아직 인터넷의 일부에서만 사용중이죠.
하지만 RPKI ROV의 경우와 마찬가지로, 주요 CSP와 ISP에서 BGPsec을 도입하는 것만으로도 조작된 AS_PATH를 통한 AS 사칭을 인터넷에서 효과적으로 막아낼 수 있습니다.
읽어주셔서 감사합니다.
네트워킹 기술과 시장에 대한 소통, 언제나 환영합니다! 🙌
Coffee chat 신청하기
메모 남겨주시면 간단한 커피챗을 통해 저희 팀의 경험을 공유해드릴게요 😊
에어키는 네트워크 옵저버빌리티 플랫폼, kentik의 파트너로 활동하고 있습니다.
문의처 - 에어키 MSP팀 김상휘 프로 (shkim0730@airquay.com, +82-10-2914-9400)
이 글은 kentik의 kentipedia 문서의 번역/수정본이며 오역이 있을 수 있습니다. (출처)