블로그

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

Certificate Transparency는 이제 정적 파일로 돌아간다

10년간 모든 TLS 인증서는, 각 항목을 24시간 안에 병합하고 쉬지 않고 질의에 답해야 하는 살아있는 append-only 암호 데이터베이스에 게시됐다. 2026년 초까지 Let's Encrypt는 자기 로그를 버킷 속 정적 파일 폴더로 갈아 끼웠다. 더 나은 설계다.

인증 기관은 어떻게 죽는가

CA는 대개 해킹으로 죽지 않는다. Entrust는 현대적인 방식으로 죽었다 — 서류 작업으로. 늦은 폐기, 놓친 마감, 그리고 마침내 약속을 믿길 멈춘 브라우저 루트 프로그램.

HPKP: 너무 위험해서 폐기된 보안 헤더

HTTP Public Key Pinning은 헤더 하나로 사이트의 TLS 키를 고정하게 해줬다. 동시에 내 도메인을 영구히 벽돌로 만들거나, 공격자가 인질로 잡게도 했다. 브라우저가 죽였다.

당신의 시계는 보안 의존성이다

인증서 유효기간, HSTS, DNSSEC 서명, TOTP 코드 — 당신 보안의 놀랄 만큼 많은 부분이 사실은 '지금 몇 시인가'에 대한 주장이다. 그리고 지금 몇 시인지 정하는 프로토콜은 40년간 먼저 답한 놈을 믿어왔다.

DNS 0x20: 무작위 대문자로 쓰인 스푸핑 방어책

2023년 구글 리졸버는 조용히 wikipedia.org 대신 wIKiPEDiA.oRG를 묻기 시작했다. 버그가 아니다 — 표준이 되지 못한 채 15년을 버틴 스푸핑 방어 해킹이고, 그럼에도 작동하며, 그 누구의 허락도 필요 없어서 배포됐다.

DNS 쿠키: 아무도 켜지 않은 스푸핑 방어책

10여 년 전 DNS는 위조된 응답과 반사 공격을 막을 값싼 방어책을 얻었다. 당신의 리졸버는 거의 확실히 이걸 지원한다. 그리고 거의 확실히 요구하지는 않는다 — '지원'과 '요구' 사이의 그 틈이 이야기의 전부다.

KeyTrap: DNSSEC의 '모든 키를 시도하라'가 버그였다

2024년 2월, 조작된 DNS 패킷 하나가 검증 리졸버를 몇 시간 동안 얼릴 수 있었다. 결함은 코딩 실수가 아니라 1999년까지 뿌리가 거슬러 올라가는 DNSSEC 명세의 요구사항이었다.

HTTP/2 CONTINUATION Flood: 로그에 남지 않는 DoS

2024년 4월, 한 연구자가 단 하나의 TCP 연결로 Apache·Node.js·Tomcat을 무너뜨릴 수 있음을 보였다. 그 HTTP/2 프레임은 액세스 로그에 남지 않는다. 버그는 코드가 아니라 명세의 이음새에 있었기에 동시에 모든 곳에서 터졌다.

루트 도메인엔 CNAME을 못 건다 (그 이유)

모든 CDN이 루트 도메인을 호스트명으로 향하게 하라고 한다. DNS는 1987년부터 바로 그걸 금지해 왔다 — 그래서 업계는 비표준 편법 더미를 쌓았고, 진짜 해결책은 아직 브라우저에서 안 먹는다.

QNAME 최소화: 실제로 배포된 DNS 프라이버시 개선

예전엔 당신과 사이트 사이의 모든 DNS 서버가 당신이 입력한 전체 이름을 봤다 — TLD만 알면 되는 서버까지도. 리졸버 쪽 변경 하나가 그 대부분을 고쳤고, DNSSEC과 달리 누구의 허락도 구하지 않고 배포됐다.