BGP 하이재킹으로 남의 TLS 인증서를 위조할 수 있었다. 이제는 어렵다.

오랫동안 CA 근처에서 BGP 경로를 잠깐만 비틀 수 있으면, 소유하지도 않은 도메인의 진짜 브라우저 신뢰 인증서를 발급받을 수 있었다. 2025년, 업계가 마침내 이걸 훨씬 어렵게 만들었다. MPIC가 어떻게 작동하고, 무엇은 못 고치는지.

지금보다 훨씬 더 신경 쓰였어야 할 사실 하나. 웹 PKI 역사의 대부분 동안, CA 근처에서 인터넷 경로를 30초쯤 비틀 수 있는 공격자는 소유하지도 않은 도메인의 진짜 브라우저 신뢰 TLS 인증서를 발급받을 수 있었다.

self-signed 인증서가 아니다. 경고를 띄우는 뭔가도 아니다. 진짜 CA가 발급한 진짜 인증서, 정품과 구분이 안 되고, 지구상 모든 브라우저가 자물쇠를 보여주는 그 인증서다. 게다가 이 수법은 암호를 깨야 하는 것도 아니었다. 경로가 어디로 가는지에 대해 CA에게 거짓말하면 됐다.

도메인 검증은 답을 그냥 믿는 네트워크 요청일 뿐이다

CA에 인증서를 요청하면, CA는 당신이 그 이름을 실제로 통제하는지 확인해야 한다. 이게 domain control validation(DV)이고, 실무에선 몇 안 되는 검사 중 하나다: http://example.com/.well-known/acme-challenge/…에 특정 토큰을 올려두고 CA가 가져가게 하거나(HTTP-01), 토큰이 담긴 TXT 레코드를 게시하고 CA가 조회하게 한다(DNS-01). CA는 애초에 자기가 발급해도 되는지 확인하려고 CAA 레코드도 읽는다.

이 하나하나가 전부 CA가 자기 위치에서 네트워크 요청을 보내고 돌아오는 답을 그냥 믿는 것이다. 그게 약점이다. CA는 소유권에 관한 어떤 깊은 진실을 검증하는 게 아니라, CA의 관점에서 응답한 누군가가 토큰을 내놓을 수 있었다는 사실을 검증할 뿐이다. CA의 요청이 진짜 서버 대신 당신 서버에 떨어지게 만들 수 있으면, 당신이 챌린지에 답하고 CA는 발급한다. CA는 차이를 알 방법이 없다.

여기서 BGP, 신뢰로 굴러가는 프로토콜이 등장한다

인터넷은 패킷이 어디로 갈지를 BGP로 정하는데, BGP에는 어떤 광고가 정당한지 판단하는 내장 개념이 없다. 한 네트워크가 “이 주소 대역 트래픽은 나한테 오면 된다”고 광고하면, 기본적으로 이웃들은 믿는다. 그 유명한 실수성 장애가 이렇게 난다 — 한 나라의 잘못 설정된 라우터가 다른 대륙 서비스의 트래픽을 삼켜버린다. 그리고 이건 무기이기도 하다.

진짜 서버 IP에 대해 더 구체적인(more specific) 경로를 광고할 수 있으면 — 잠깐이라도, 그것도 CA가 있는 인터넷 일부에만이라도 — CA의 검증 요청은 당신이 하이재킹한 경로를 따라 당신 기계로 온다. 당신이 토큰을 내놓는다. CA는 통과한 검사를 보고 인증서를 찍어낸다. 진짜 소유자는 눈치채지 못한다. 하이재킹은 CA만, 그것도 검증에 걸리는 그 몇 초만 속이면 되니까.

이건 이론이 아니었다. Princeton 연구진은 몇 년에 걸쳐 도메인 검증에 대한 바로 이 부류의 공격을 문서화했고, 윤리적으로 수행한 실제 BGP 하이재킹까지 포함했다. 그들의 연구가 주는 불편한 결론: 단일 관점 CA는 single point of failure이고, 공격 표면은 전 지구 라우팅 테이블 전체다.

해결책은 지나고 보면 민망할 만큼 단순하다

문제가 CA가 한 곳에서만 본다는 거라면, 여러 곳에서 보면 된다.

multi-vantage-point 검증의 전부가 이 발상이다. 한 네트워크 위치에서 도메인을 검증하는 대신, CA가 네트워크적으로 다양한 여러 관점에서 같은 검사를 동시에 돌리고 그들이 일치하기를 요구한다. 로컬 BGP 하이재킹은 버지니아에서 본 경로는 속일 수 있어도, 프랑크푸르트·싱가포르·상파울루에서 동시에 본 경로까지는 못 속인다. 이걸 이기려면 공격자는 이제 모든 관점에서 관측되는 경로를 같은 시각에 하이재킹해야 하는데 — 훨씬 어렵고, 요란하고, 당신 문제가 되기 전에 남의 문제가 될 확률이 훨씬 높다.

Let’s Encrypt는 2020년 2월 이걸 프로덕션에 올렸다. 바로 그 Princeton 연구진과 협업해 만들었고, 첫해에 5억 개가 넘는 인증서 발급을 이 검증으로 덮었다. 관점들이 클라우드에 있고 병렬로 조회되기 때문에 지연 비용은 사실상 없다 — 추가 검사가 원래 검사만큼 빠르게 끝난다. 그리고 보안 이득은 손짓이 아니라 측정된 수치였다: 연구진의 테스트베드에서 단일 관점 CA를 상대로 시뮬레이션한 하이재킹 6건 중 5건이 성공했지만, Let’s Encrypt의 multi-vantage-point 배포 아래에선 6건 중 1건만 뚫렸다.

6분의 1은 0이 아니다. 이건 기억해 두자.

2025년, 선택이 아니게 됐다

5년 동안 이건 좋은 CA는 하고 나머지는 안 하는 것이었다. 그게 바뀌었다. CA/Browser Forum — 브라우저 제작사와 CA가 모여 모두가 신뢰하는 발급 규칙을 정하는 곳 — 이 ballot SC-067을 채택했다. 도메인 검증과 CAA 검사를 여러 네트워크 관점에서 수행하도록 요구하는 내용이다. 업계는 여기에 걸맞게 관료적인 이름을 붙였다. Multi-Perspective Issuance Corroboration, 줄여서 MPIC.

롤아웃은 CA들이 정당한 발급을 깨뜨리지 않고 구현을 다듬을 수 있도록 일부러 단계적이었다. 2025년 3월 15일 권고에서 요구사항으로 올라섰고(관점 두어 개로 시작), quorum 규칙이 한 해에 걸쳐 조여졌으며, 2025년 9월 15일이 corroboration이 실질적으로 강제되는 이정표였다. 모델은 “모든 관점이 일치해야 한다”가 아니다 — 그러면 한 관점에 일시적 라우팅 딸꾹질이 있는 정당한 요청을 너무 많이 떨어뜨릴 것이다. quorum이다: 충분한 수의 관점이 corroborate하면 되고, 소수의 반대는 규모에 맞춰 조금 허용한다. 만장일치가 아니라 다수의 동의다.

중요한 건 이게 더 이상 경쟁상의 배려가 아니라는 점이다. 이제 공개 신뢰 CA가 당신에게 인증서를 발급한다면, 그건 여러 곳에서 당신 도메인을 corroborate한 결과다. 단일 관점 시대는 좋은 관행이 아니라 규칙으로 끝났다.

무엇은 못 고치는가, 공짜는 없으니까

MPIC를 다 풀린 문제인 양 팔면, 내가 남들을 비판할 때 지적하는 바로 그 짓을 하는 셈이다. 안 풀렸다.

이건 공격 비용을 올릴 뿐 없애지 않는다. 글로벌 경로 하이재킹 — 모든 관점에서 본 경로를 한꺼번에 재라우팅하는 — 을 해낼 수 있는 적은 여전히 quorum을 속일 수 있다. 훨씬 어렵고 훨씬 드물지만, 정직한 동사는 “불가능”이 아니라 “어렵다”다. 남은 6분의 1이 바로 잔여 위험이 사는 곳이다.

MPIC는 또한 당신 인프라로 가는 네트워크 경로만 방어한다. 도메인 검증이 무너지는 다른 길에는 아무것도 안 한다: 탈취된 레지스트라 계정, 남이 차지할 수 있는 인프라를 가리키는 dangling DNS 레코드, 침해된 DNS 제공자. 공격자가 당신의 실제 DNS나 레지스트라 로그인을 쥐고 있으면 경로를 하이재킹할 필요가 없다 — 그가 모든 관점에서 권한 있는 답 그 자체다. 그리고 BGP 자체의 진짜 장기 해법인 RPKI 기반 route origin validation은 별개이고 아직 미완의 과제다. MPIC는 라우팅이 거짓말당할 수 있다고 가정하는 우회책이다. 실제로 그럴 수 있으니까.

패턴이 핵심이다

약어를 걷어내면 MPIC는 웹이 이미 한 번 한 수와 같다. Certificate Transparency 말이다: 단일 관측을 믿지 말고, 발급을 corroborate하게 만들어라. CT는 어떤 인증서도 비밀리에 존재해선 안 된다고 했다. MPIC는 어떤 검증도 한 시점에서 믿어선 안 된다고 한다. 둘 다 인정이다 — 단일 소스는(로그 하나든, 관점 하나든, 한 곳에서 보는 CA 하나든) 공격자가 당신과 그 사이에 끼어들 수 있는 대상이라는 인정.

이건 PKI만의 통찰이 아니다. 일반적인 통찰이고, 보안의 대부분은 이걸 계속 어렵게 다시 배운다. 당신의 보증이 한 관측에 의존하는 순간, 누군가는 그 앞에 앉는 길을 찾아낸다. 방어는 거의 언제나 더 영리한 단일 검사가 아니다. 하나 이상의 눈, 그리고 그것들이 일치하도록 요구하는 규율이다.

20년 동안, 당신 사이트의 신원을 보증하던 인증서는 경로에 관해 기계 하나에게 거짓말하면 위조될 수 있었다. 해법은 더 나은 암호가 아니었다. 단 하나의 관점을 믿기를 거부하는 것이었다.

토론 참여

← 블로그로 돌아가기