블로그

프로토콜, 보안 사건, 그리고 인터넷이 실제로 작동하는 방식. 147편.

인터넷은 이제 손상을 우회하지 않는다

대륙 간 데이터의 99%는 몇백 가닥의 해저 케이블을 타고 몇 안 되는 병목을 지난다. 하나가 끊기면 우회할 길이 없다 — 배를 기다릴 뿐이다.

국가 방화벽은 DNS를 어떻게 오염시키는가

국가 방화벽은 검열 대상 DNS 조회를 막지 않는다. 진실보다 먼저 도착하는 위조 응답으로 '답'을 준다. 그 거짓말은 때로 실제 회사의 서버를 가리키고, 때로는 검열자가 의도하지 않은 사람들에게까지 새어 나간다.

25번 포트: ISP가 이메일 연방을 포기한 날

집 인터넷 회선에서는 메일 서버를 돌릴 수 없다. SMTP가 1982년에 태어난 그 포트는 대부분의 소비자 네트워크에서 막혀 있다 — 그리고 그 조용하고 전적으로 정당했던 방어가, 피어끼리 주고받는 시스템으로서의 이메일을 끝낸 장본인이기도 하다.

Path MTU 블랙홀: 큰 패킷에서만 터지는 버그

연결은 된다. 작은 요청도 잘 된다. 그런데 큰 전송이 영원히 멈추고, 다들 앱을 탓한다. 대개는 중간의 라우터가 큰 패킷을 조용히 버리고, 그 사실을 알려줄 ICMP 메시지를 어느 방화벽이 삼킨 것이다 — '네트워크가 된다'와 '네트워크가 큰 패킷을 통과시킨다'가 서로 다른 주장인, 인터넷 깊숙이 박힌 실패 방식.

영상통화는 어떻게 NAT를 뚫는가

NAT 뒤에 있는 기기는 외부에서 걸어오는 연결을 받을 수 없다. 그게 NAT의 정의 자체다. 그런데도 영상통화는 늘 그런 기기 둘을 직접 연결한다. 비결은 홀 펀칭이다. 양쪽이 같은 순간 패킷을 쏴서 서로가 지나갈 구멍을 뚫는다. 그 메커니즘과, 이걸 무력화하는 한 가지 NAT 유형과, 실패했을 때 임대료를 내는 릴레이 이야기.

클라우드블리드: 버퍼 하나가 모두의 비밀을 흘렸다

2017년, Cloudflare 파서의 잘못된 비교 하나가 포인터를 버퍼 끝 너머로 넘겨 인접 메모리를 웹 페이지에 쏟아냈다 — 한 사이트의 요청에 다른 사이트의 비밀번호가 섞여 나왔고, 검색엔진이 그 유출을 캐시했다.

Terrapin: SSH 시작 부분에서 메시지를 잘라내다

2023년 연구자들은 SSH 세션 시작 부분에서 메시지 하나를 조용히 삭제할 수 있음을 보였다 — 그리고 그게 가장 깔끔하게 통한 암호가 바로 모든 하드닝 가이드가 권하던 chacha20-poly1305였다. 버그는 어느 서버에도 없었다. 프로토콜이 한 번도 확인하지 않은 이음매에 있었다.

8분간 이어진 1.35Tbps 공격

2018년 2월 28일, GitHub은 당시 사상 최대인 1.35Tbps DDoS를 견뎠다. 이 무기를 만든 봇넷은 없었다. 열린 채 방치된 memcached 서버와, 인터넷이 2000년부터 고치기를 거부해 온 라우팅 결함으로 조립된 것이었다.

SYN 쿠키: 당신 서버를 지키는 1996년의 트릭

1996년 9월, SYN flood 하나가 뉴욕의 한 ISP를 멈춰 세웠다. 몇 주 만에 두 사람이 상태를 아예 저장하지 않는 방어법을 만들어냈다 — 커넥션을 공격자가 위조할 수 없는 숫자 안에 숨기는 방식이다. 리눅스는 2009년부터 이걸 기본으로 켜 두고 있고, 지금도 일부러 조금 손해를 보게 설계돼 있다.

NAT: 인터넷을 삼켜버린 임시방편

1994년 NAT는 IPv6가 나올 때까지 시간을 버는 단기 패치로 제안됐다. 30년 뒤 그것은 없으면 안 되는 인프라가 됐고, 인터넷의 설계 원칙을 조용히 지웠으며, 너무 잘 작동한 나머지 자신의 대체제까지 지연시켰다.

regreSSHion: 되살아난 버그

2006년 OpenSSH는 시그널 핸들러에 있던 원격 루트 취약점을 잡았다. 2020년 말 로깅 코드를 고치는 과정에서 그 수정이 조용히 사라졌고, 같은 버그가 3년간 수백만 대 서버로 배포됐다 — 그게 죽은 채로 있는지 아무도 시험하지 않았기 때문이다.

페이스북이 인터넷에서 스스로를 지운 날

2021년 10월, 페이스북은 해킹당하지도 DDoS를 맞지도 않았다. 명령어 하나를 실행했고, 자사의 안전장치가 페이스북을 인터넷 지도에서 지워버렸다 — 그리고 해결책이 있는 방에서 엔지니어들을 잠가버렸다.