최근 Spamhaus에서 보고한 몇 가지 경로 하이재킹 이 우리의 주의를 사로잡았습니다. 이러한 하이재킹 시도 중 많은 경우 악의적인 행위자가 사용되지 않는 자율 시스템 번호(ASN)를 악용했습니다. 특히 이러한 하이재킹의 경우 액터가 목적지에 대해 가짜 AS_Path를 생성하여 트래픽을 예상치 못한 경로로 잘못 리디렉션하는 것으로 보입니다.
하이재커는 위조된 AS_Path를 만들어 트래픽을 일반적으로 의도되지 않은 곳으로 유도하는 동시에 신원을 숨기려고 합니다. 하이재커는 네트워크 경로에서 충분한 정보를 탈취하여 경계 게이트웨이 프로토콜(BGP) 접두사의 원본인 것처럼 가장할 수 있습니다. 공격자는 이 하이재킹된 경로를 사용하여 트래픽을 가로채거나 기타 악의적인 목적으로 사용할 수 있습니다.
이러한 경우에 대한 간단한 솔루션이 있습니다. BGP 피어 자율 시스템(AS)이 알려진 경로에 항상 자체 네트워크를 "첫 번째 AS"로 포함하는지 기본적으로 확인하는 것입니다. 이러한 보호 장치가 얼마나 잘 구현되어 있는지 확인하기 위해 여러 주요 네트워크를 스트레스 테스트하고 BGP 구현을 조사했습니다. Cloudflare에서 무엇을 배웠는지 확인하려면 계속 읽어보세요.
경로에서 그럴듯하지 않은 AS 관계를 자세히 살펴보면, 액터가 가짜 AS_PATH를 만들고 있다는 생각은 뒷받침됩니다. 예를 들어, Spamhaus에서 보고한 프랑스 통신 회사 Orange SA의 접두사와 관련된 하이재킹 건을 살펴보겠습니다. 단안경 도구를 사용하여 쉽게 하이재킹과 관련된 BGP UPDATE 메시지를 찾을 수 있습니다.
➜ ~ monocle search --start-ts 2026-04-13T00:20:00Z --end-ts 2026-04-13T00:23:59Z --prefix 90.98.0.0/15 --collector rrc26 --json
{
"aggr_asn": null,
"aggr_ip": null,
"as_path": "48237 1299 199524 270118 17072 41128",
"atomic": false,
"collector": "rrc26",
"communities": null,
"local_pref": 0,
"med": 0,
"next_hop": "185.1.8.3",
"origin": "IGP",
"peer_asn": 48237,
"peer_ip": "185.1.8.3",
"prefix": "90.98.0.0/15",
"timestamp": 1776039612.0,
"type": "ANNOUNCE"
}
저희는 AS1299 (Arelion)가 계층 1 네트워크라는 것을 알고 있습니다. 즉, 경로 오른쪽에 있는 모든 AS가 업스트림(고객-공급자) 관계를 설명하고 있습니다. 이는 AS17072가 AS41128의 전송 공급자, AS270118의 AS17072, AS199524가 AS270118의 전송 공급자임을 의미합니다. 이러한 네트워크를 자세히 살펴보면 다음과 같습니다.
AS41128은 Orange France 소유의 미사용 ASN입니다
AS17072는 주로 멕시코에 기반을 둔 ISP입니다.
AS270118은 멕시코에 본사를 둔 호스팅 공급자입니다
AS199524는 글로벌 피어링 프레즌스가 있는 공급자인 Gcore입니다.
위의 메시지에서 AS의 순서를 보면 사용되지 않은 Orange France AS가 멕시코 ISP에서 전송을 구매한 것으로 나타나며, 이는 Gcore 및 1계층 공급자로 업스트림됩니다. 이는 아주 기묘한 일입니다.
또 다른 사례로는 출처 AS36429에서 접두사 47.1.0.0/16과 47.2.0.0/16을 하이재킹하는 것으로 보고되었으며, AS_Path(“199524 270118 17072 13335”)에 Cloudflare의 주요 ASN인 13335도 포함되어 있었습니다. 이러한 BGP 업데이트의 예는 Cloudflare Radar의 MRT Explorer 에서 볼 수 있습니다.
저희(Cloudflare, AS13335)는 현재 사용되지 않고 있는 Charter 소유의 AS36429와 인접 요소가 없음을 권위 있게 확인할 수 있습니다. 이는 하이재커가 위조한 경로라는 뜻이며, Gcore(AS199524)로 전파되는 광고에 Cloudflare의 ASN을 가짜 업스트림 네트워크 중 하나로 포함시키는 것입니다. 또한, Spamhaus는 모든 하이재킹 경로가 시카고의 Gcore 피어링 뒤에 있는 네트워크로 연결되어 실제로 전달 경로에서 멕시코 ISP나 Cloudflare 네트워크를 통과하지 못한다는 점을 정확하게 지적했습니다.
따라서 이들 경로는 가장 왼쪽 의 일반적인 AS(이 경우 AS199524)까지 위조되었다고 합리적으로 결론 내릴 수 있습니다. 경로의 나머지 부분은 그럴듯해 보이지 않습니다. Cloudflare에서는 여기에서 일어나는 상황이 다음과 같은 하이재커의 특정 전략의 결과라고 생각합니다.
"파킹된" 프리픽스에 대한 오리진 BGP 알림
하이재커의 로컬 ASN을 포함하지 않고AS_Path를 완전히 위조
이 경로를 Gcore, AS199524에 알립니다
이러한 하이재킹에서 Gcore(AS199524)가 예상 고객의 ASN과 일치하는 첫 번째 AS의 확인 및 시행을 건너뛰는 것으로 보입니다. (이 게시물 뒷부분에서 이러한 단계를 건너뛸 수 있는 이유를 살펴보겠습니다.) 그 결과, 위조된 경로가 허용되고 하이재킹된 접두사가 업스트림 공급자 및 피어로 전파됩니다.
자율 시스템 공급자 인증(ASPA)은 이러한 위조된 경로를 무효화하는 데 도움이 되지만, 공격자는 RPKI-ROV유효한 원본 AS 또는 합법적인 ASPA 업스트림 AS만 포함시켜 이를 우회할 수 있습니다. 이러한 특정 하이재킹을 차단하려면 이미 BGP에 내장된 다른 보호 메커니즘인 우선 AS 확인 및 시행을 사용해야 합니다.
인터넷에서 트래픽을 라우팅하는 것은 소포를 배송하는 것과 비슷합니다. 소포를 배송할 때, 이를 처리한 모든 택배 기사의 일지를 보관합니다. BGP에서는 이를 AS_PATH (자율 시스템 경로)라고 하며, 해당 경로가 경로를 지나는 경로에 있는 각 네트워크를 추적합니다.
BGP의 AS_PATH 속성은 경로 선택에 사용됩니다. 이 선택 알고리즘은 목적지에 대한 어떤 경로가 최상의 홉 목록을 통과하는지 결정하며, 여기서 "최고"는 여러 변수로 정의됩니다. 이는 네트워크가 이미 자체 네트워크를 통과한 경로를 수락하지 않도록 결정할 수 있는 루프 방지에도 사용됩니다. BGP 업데이트 및 경로가 거치게 될 네트워크 레코드를 유지하는 것 외에도, AS_PATH는 운영자가 구성한 라우팅 정책으로 검사하여 특정 AS를 우회하거나 의도적으로 통과하도록 할 수 있습니다(예: BGP 이상 으로 인한 예상치 못한 영향을 방지하기 위해).
BGP는 신뢰를 기반으로 구축되었으며, AS_PATH는 트래픽을 이동시키기 위해 AS prepending과 같이 겉보기에는 합법적인 이유이거나, 인위적으로 트래픽을 유인하거나 원본 공격을 수행하기 위해 경로를 단축하는 것과 같은 악의적인 이유로 쉽게 조작될 수 있습니다.
이 두 가지 유형의 악의적인 BGP 조작이 어떻게 수행되는지 살펴보겠습니다.
AS64506은 경로 원본 하이재킹을 방지하기 위해 RPKI ROA(Route Origin Authorization) 레코드로 경로에 암호로 서명합니다.
AS64506은 또한 ASPA 개체를 생성하여 AS64503만 유효한 공급자로 지정합니다
AS64505가 AS_Path를 조작하여 AS64505를 제거하고 AS64506에서 시작합니다
AS64502는 첫 번째 AS를 강제하지 않음
이 경로는 RPKI-ROV가 유효한 것으로 보이며, 최단 경로이므로 실질적으로 경로에서 트래픽이 하이재킹됩니다. AS64506은 접두사 광고에 유효한 ROA를 지정하여 모든 작업을 올바르게 처리했으며, 유일한 공급자 AS64503으로 구성된 ASPA 개체까지 구성했습니다.
안타깝게도 AS64505를 실행하는 하이재커는 여전히 AS64506에 대한 트래픽을 끌어들일 수 있습니다. 고객인 AS64501과 그 공급자인 AS64502가 ASPA 유효성 검사를 실행하더라도, "64502 64506" 경로에 밸리가 없으므로 유효하지 않은 경로를 찾을 수 없습니다. 다시 말해, AS64505는 AS_path에 자체 ASN을 포함하지 않더라도 중간 AS 홉이 없는 AS64506인 척할 수 있습니다.
기존 도구를 사용하여 이 하이재킹을 방지하는 올바른 방법은 AS_path에 첫 번째 AS를 적용하는 것입니다. 이 규칙을 적용하면 AS64502는 AS64505의 경로를 올바르게 삭제합니다.
AS64506에는 AS64503 및 AS64505의 두 전송 공급자가 있습니다.
AS64505는 트래픽 사용량에 따라 AS64506에 요금을 청구합니다.
AS64505는 경로에서 자신을 제거하고 해당 피어 AS64504는 첫 번째 AS를 시행하지 않습니다.
이제 BGP 경로 선택 알고리즘은 AS64504를 통한 경로를 AS64501에서 최적의 경로로 선택합니다. AS64506은 인터넷 트래픽을 전송하는 대가로 AS64503 및 AS64505 모두에 비용을 지불합니다. 하지만 이제 AS64505는 원격 소스에서 더 짧은 BGP 경로를 제공하므로 AS64505는 AS64506으로 향하는 모든 트래픽을 처리하고 그에 대한 비용을 지불받게 되며, AS64503은 전혀 비용을 지불받지 못하게 됩니다.
이러한 BGP 취약점은 수신된 AS_PATH에서 첫 번째 AS 가 피어 AS 와 일치하도록 강제 적용하여 아주 간단하게 해결할 수 있습니다.
운영자가 BGP 인접 항목을 구성할 때 상호 연결하려는 네트워크의 원격 AS를 설정해야 합니다. AS_Path의 첫 번째 AS가 이 값과 일치하지 않으면 경로가 조작된 것입니다. 첫 번째 AS 시행 절차는 RFC 4271의 섹션 6.3 에 다음과 같이 매우 명확하게 설명되어 있습니다.
"외부 피어로부터 UPDATE 메시지를 수신하면 로컬
시스템에서 가장 왼쪽(위치를 기준으로
프로토콜 메시지의 8진수) AS_path 속성의 AS는
데이터를 전송한 피어의 자율 시스템 번호와
메시지입니다. 검사 결과, 그렇지 않은 경우 Error
하위 코드를 Malformed AS_Path로 설정해야 합니다(MUST).”
RFC 7606 은 이후 벤더가 오류 처리를 구현하는 방법을 수정하여 잘못된 형식의 AS_PATH가 포함된 경로는 treat-as-withdraw 메서드를 통해 삭제해야 한다고 제안합니다. 이를 통해 라우터는 전체 BGP 세션을 방해하지 않고도 형식이 잘못된 속성을 가진 특정 접두사를 삭제할 수 있습니다.
현재 ASPA 초안은 잘못된 형식의 알림으로 인해 AS_Path 정보가 부족한 경로를 ASPA가 처리할 수 없다고 명시하면서 첫 번째 AS 시행의 중요성을 명확하게 제시하고 있습니다. AS_Path에 첫 번째 AS를 적용하는 것은 인터넷 라우팅 보안을 위한 필수 요소입니다.
의도적으로 첫 번째 AS 규칙을 위반하여 측정
첫 번째 AS 규칙 위반에 대한 이론적인 실패 사례와 과거의 공개 사건을 고수하는 대신, Cloudflare는 이러한 AS_Path 위반이 인터넷에서 얼마나 광범위하게 인정받을 수 있는지를 직접 측정하고 싶었습니다. 그렇게 하기 위해, Cloudflare는 스스로 고의적으로 규칙을 위반한 이웃에 BGP 알림을 전송하도록 설정합니다. 다음과 같은 조치를 취했습니다.
계층 1 외부 BGP(EBGP) 이웃에 알리기 위해 IPv4용과 IPv6용 등 두 개의 IP 접두사를 할당함
13335 앞에 Cloudflare가 소유한 13335가 아닌 자율 시스템 번호(AS402542)를 의도적으로 계층 1 인접 항목에 추가한 테스트 접두사 알림을
예를 들어 저희는 제네바에서 열린 일반 BGP 세션에서 AS1299에 대한 접두사를 알렸습니다. 로컬 AS는 AS13335이지만, AS_Path의 첫 번째 AS로 AS402542를 분명히 포함하고 있습니다.
bryton@edge01.gva01> show configuration policy-options policy-statement 4-TELIA-ACCEPT-EXPORT term ADV-FIRST-AS-PROBE-CR-1695522
from {
community ANYCAST-ROUTE;
prefix-list fl_first_as_prober;
route-type internal;
}
then {
origin igp;
as-path-prepend 402542;
next-hop self;
accept;
}
bryton@edge01.gva01> show route advertising-protocol bgp <redacted_1299_ip> 162.159.82.0/24 detail | grep "AS path: "
AS path: 402542 [13335] I
이 구성을 통한 우리의 기대 효과는 다음과 같습니다.
enforce-first-as를 사용하는 네트워크는 RFC 7606 철회 방식을 통해 해당 경로를 조용히 삭제합니다.
선순위 우선을 적용하지 않는 네트워크는 경로를 수락하고 테스트 접두사로 전달하기 위해 해당 경로를 설치합니다.
두 결과 모두 BGP 공개 경로 보기에서 확인할 수 있습니다. 처음에 발표에서 첫 번째 AS 규칙을 의도적으로 위반하게 되는 모든 피어에 대해 접두사를 지속해서 발표하고, 모든 ISP가 First AS 규칙을 준수하는지 또는 준수하지 않는지 확인할 수 있는 도구를 제공하는 것이 우리의 목표였습니다. 하지만 잘못된 형식의 BGP AS_PATH를 수신하는 경우에 대해, RFC 7606에 공개된 지침을 구현하지 않은 네트워크도 여전히 존재하며, 철회로 간주하는 동작 대신 BGP 세션을 재설정하는 네트워크가 여전히 존재합니다. 이는 Cloudflare로 향하는 실제 트래픽에 영향을 주지 않고 첫 번째 AS 규칙을 위반하는 일련의 알림을 안전하게 구현할 수 없다는 것을 의미했으며, 우리는 분명히 그렇게 할 수 없었습니다.
하지만 정책이 가장 큰 영향을 미치는 네트워크인 계층 1 네트워크를 자세히 살펴볼 수 있습니다. 이러한 네트워크들은 인터넷의 중추를 이루며, 그 어떤 곳보다도 가장 광범위한 AS 고객 콘을 보유하고 있어, 이들 피어에 의한 경로 탈취나 잘못된 경로 설정은 가장 광범위한 영향을 미치게 됩니다. Anycast 접두사 정상적인 전파인 1.1.1.0/24를 살펴보는 것부터 시작하겠습니다. 1계층 네트워크 전반에 걸쳐
1.1.1.0/24의 전파 Cloudflare가 현재 직접 인접한 모든 1계층 네트워크에서 직접 연결할 수 있습니다.
이제 접두사 162.159.82.0/24를 의도적으로 잘못된 형식으로 발표하는 상황과 비교해 보겠습니다.
참고: AS5511(Orange SA)은 공개 경로 보기에 제한적으로 존재하므로 위에 그림에 나와 있지 않지만, 당사 테스트 및 측정의 일부입니다.
이 접두사는 1.1.1.0/24와 매우 다르게 전파됩니다. – Cloudflare의 발표를 직접 수락하는 계층 1 네트워크는 훨씬 적습니다(이 경우 AS402542가 추가된 AS13335). 앞서 언급한 테스트 기준에 따라 다음과 같은 결과를 찾아냈습니다.
첫 번째 AS 규칙을 시행하는 Tier 1 네트워크는 (유효하지 않은 알림을 삭제하여):
AS174(Cogent)
AS1299(Arelion)
AS3257(GTT)
AS3491(PCCW)
AS5511(Orange SA)
AS6453(Tata)
AS7018 (AT&T)
적용 하지 않는 계층 1 네트워크(접두사 수락 및 설치):
테스트를 통해 저희는 문제가 되는 현실을 발견했습니다. 계층 1 네트워크의 절반이 첫 번째 AS 규칙을 위반하는 하이재킹에 취약하다는 점입니다.
이 측정 연구에서는 계층 1 네트워크만 테스트했지만, 첫 번째 AS 규칙을 위반하는 계층 1 네트워크가 아닌 네트워크가 많이 있다는 것은 의심의 여지가 없습니다.
첫 번째 AS 위반 테스트에 실패한 계층 1 네트워크 대부분이 피어의 MAC 주소로 식별되는 주니퍼 네트웍스 라우터를 실행하고 있다는 점에 주목했습니다.
이 결과는 벤더의 기본 행동이 네트워크가 1차 AS 위반 기반 공격에 대해 "즉시 사용 가능한" 얼마나 안전한지를 정의한다는 것을 강조합니다. 기본적으로 보호되는 사람과 보호되지 않는 사람을 더 잘 이해할 수 있도록 BGP 구현과 기본값에 대해 살펴보겠습니다.
아래 차트에는 주요 라우팅/네트워킹 벤더와 해당 벤더의 BGP 정책이 나와 있습니다. 여기에서 '예'는 기본적으로 BGP 구현이 첫 번째 AS를 시행함을 의미하며, 이는 양호합니다. '아니요'는 BGP 구현이 기본적으로 취약하다는 것을 의미합니다.
일부 벤더에서 기본 적용이 부족한 것은 첫 번째 AS를 외부 BGP(EBGP) 세션에 적용하지 않아야 하는 유일한 유효한 사례인 인터넷 익스체인지(IX) 경로 서버에서 비롯된 것일 수 있습니다.
경로 서버는 패브릭에서 피어 간에 경로를 투명하게(AS_path에 AS 추가하지 않고) 배포하는 역할을 합니다. 따라서 피어는 네트워크가 패브릭에 참여할 때마다 새로운 BGP 세션을 구성할 필요 없이 경로 서버와만 피어링할 수 있습니다.
실제로 대부분의 프로덕션 네트워크는 투명 IX 경로 서버가 아닌 이웃과의 세션이 투명 IX 경로 서버인 이웃과의 세션보다 훨씬 더 많습니다. 네트워크의 모든 피어에서 "선순위 시행"을 수동으로 활성화하는 것보다, 다수의 경로 서버 세션에서 "선순위 선순위 시행 안 함"을 구성하는 것이 훨씬 더 합리적입니다.
1차 AS 위반으로부터 보호하는 데는 '기본적으로 안전하게 보호되는' 접근 방식이 가장 좋지만, 오랫동안 지속되어 온 기본값을 변경하도록 벤더를 설득하려면 일반적으로 가파른 오르막길입니다. 벤더는 또한 경로를 성공적으로 수신하기 위해 "선순위 적용" 설정이 필요하지 않은 IX 경로 서버 BGP 세션에 영향을 미치지 않도록 이 작업을 원활하게 수행하는 방법을 도입해야 합니다.
여러분의 도움으로 더욱 안전한 인터넷 라우팅: 최초의 AS 시행
공격자는 의도적으로 BGP 보안 메커니즘을 우회하도록 AS_Path를 조작합니다. RPKI 기반 ASPA 경로 유효성 검사조차도 원본 위조 하이재킹으로부터 보호하지 못합니다. 위조 원본 하이재킹에서는 원본 AS를 제외한 모든 경로가 완전히 제거되어 ASPA가 유효성을 검사할 수 없게 됩니다.
좋은 소식은 이러한 경우에 이미 완화 방법이 있다는 것입니다. 첫 번째 AS가 BGP 피어 AS와 일치하는지 확인하고 항상 이를 적용할 수 있습니다. 위의 표에서 해당 "문서" 열을 참조하십시오. IX 경로 서버 이웃을 향하는 외부 BGP(EBGP) 세션을 제외한 모든 외부 BGP(EBGP) 세션에 첫 번째 AS를 적용하는 것은 안전해야 합니다.
네트워크 운영자라면 오늘 바로 귀사의 라우터에 최초 AS를 적용하여 네트워크와 더 넓은 인터넷을 보호하세요.
라우터 벤더나 BGP 구현 선택 사항이 첫 번째 AS 시행 기본값으로 되어 있다면, 이미 안전하며 첫 번째 AS 위반을 거부하고 있어야 합니다.
우리는 함께 협력함으로써 이러한 종류의 하이재킹으로부터 인터넷을 더 안전하게 보호할 수 있습니다.