블로그

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

TLS 세션 재개: 당신을 추적하는 속도 최적화

왕복 한 번을 아끼려고, 브라우저는 서버가 다음 방문 때 자기를 알아보게 한다 — 쿠키 항아리 밑, TLS 계층에서. 수년간 그 최적화는 슈퍼쿠키였고, 그게 고쳐진 과정은 신원이 실제로 어디서 새는지에 관한 교훈이다.

폴리필 공격의 정체는 도메인 매매였다

뚫린 서버는 없었다. 2024년 2월 어떤 회사가 polyfill.io 도메인을 샀고, 넉 달 뒤 그 도메인은 10만 개가 넘는 사이트에 조용히 악성코드를 뿌렸다. 공격은 곧 그 구매였다.

데비안 OpenSSL 사건: 두 줄, 그리고 32,767개의 키

거의 2년 동안 데비안과 우분투에서 OpenSSL로 만든 모든 키는 32,767개짜리 목록에서 고를 수 있었다 — 메모리 검사기 경고를 없애려던 정리 작업이 무작위성을 섞어 넣던 그 한 줄을 지웠기 때문이다.

존 전송은 당신의 DNS 지도를 통째로 넘긴다

DNS는 이름을 알아야 물어볼 수 있게 만든다 — 존 전체를 목록으로 뽑는 명령은 없다. 단 하나, AXFR만 빼고. 이걸 열어 두면 낯선 사람이 네임서버에게 전화번호부 전체를 부쳐 달라고 요청할 수 있다.

하트블리드: 지문을 남기지 않은 유출

2014년, OpenSSL의 빠진 경계 검사 하나가 누구든 서버에게 자기 메모리 64KB를 달라고 요청할 수 있게 했다 — 개인키, 비밀번호, 세션 쿠키까지. 그 요청은 평범한 하트비트와 완전히 똑같이 생겨서, 어떤 서버도 자기가 털렸는지조차 알 수 없었다.

맨 끝의 점: example.com. 이 진짜 이름인 이유

맨 끝의 점은 도메인 이름을 쓰는 가장 기술적으로 정확한 방식이다 — DNS 루트를 글자로 적어낸 것이니까. 그런데 DNS 위의 모든 계층이 그 의미에 서로 다른 답을 내고, 그 불일치가 계속 보안 버그로 터진다.

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

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

루트 키가 처음으로 바뀌던 날

8년 동안 서명된 DNS의 보안 전체가 단 한 번도 바뀐 적 없는 키 하나에 매달려 있었다. 2018년 마침내 그 키를 교체했을 때, 무서웠던 건 암호학이 아니라 — 어느 리졸버가 따라올 준비가 됐는지 아무도 볼 수 없다는 사실이었다.

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

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

Flame은 마이크로소프트 서명을 위조했다

2012년, 한 첩보 툴킷이 자신을 '서명된 윈도우 업데이트'로 위장해 감염 대상 PC에 설치됐다. 서명하려고 그들은 학계가 아직 발표하지 않은 MD5 충돌로 마이크로소프트 인증서를 위조했다 — 줄줄이 늘어선 제도적 실수의 마지막 고리로.

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

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