TLS 세션 재개: 당신을 추적하는 속도 최적화
왕복 한 번을 아끼려고, 브라우저는 서버가 다음 방문 때 자기를 알아보게 한다 — 쿠키 항아리 밑, TLS 계층에서. 수년간 그 최적화는 슈퍼쿠키였고, 그게 고쳐진 과정은 신원이 실제로 어디서 새는지에 관한 교훈이다.
프로토콜, 보안 사건, 그리고 인터넷이 실제로 작동하는 방식. 147편.
왕복 한 번을 아끼려고, 브라우저는 서버가 다음 방문 때 자기를 알아보게 한다 — 쿠키 항아리 밑, TLS 계층에서. 수년간 그 최적화는 슈퍼쿠키였고, 그게 고쳐진 과정은 신원이 실제로 어디서 새는지에 관한 교훈이다.
TLS 1.3은 거의 모든 걸 더 안전하게 만들었다. 그런데 0-RTT early data는 설계상 리플레이가 된다 — 그리고 이걸 '안전하게' 쓰는 표준 방법은 대부분의 앱이 깨는 약속 위에 서 있다.
적지 않은 HTTPS 사이트가 불완전한 인증서 체인을 보낸다. 그래도 크롬에선 멀쩡히 열린다 — 크롬이 빠진 조각을 몰래 받아 오기 때문이다. 그러지 않는 모든 클라이언트에서 버그가 터진다.
2024년, DigiCert는 검증 단계에서 밑줄 하나가 빠진 걸 발견하고 24시간 안에 인증서 8만 3천 장을 폐기해야 했다. 한 고객은 그걸 막으려 법원에 갔다. 진짜 이야기는 그 오타가 아니다.
Firefox 137이 모두에게 CRLite를 켰다: 웹 전체의 인증서 폐기 목록을 수 메가바이트로 압축해 로컬에서 확인한다. 확률적 필터가 정확한 답을 내놓게 만드는 트릭을 뜯어본다.
거의 2년 동안 데비안과 우분투에서 OpenSSL로 만든 모든 키는 32,767개짜리 목록에서 고를 수 있었다 — 메모리 검사기 경고를 없애려던 정리 작업이 무작위성을 섞어 넣던 그 한 줄을 지웠기 때문이다.
2014년, OpenSSL의 빠진 경계 검사 하나가 누구든 서버에게 자기 메모리 64KB를 달라고 요청할 수 있게 했다 — 개인키, 비밀번호, 세션 쿠키까지. 그 요청은 평범한 하트비트와 완전히 똑같이 생겨서, 어떤 서버도 자기가 털렸는지조차 알 수 없었다.
1998년 블라이헨바허가 TLS의 RSA를 깼다. 그 '수정'은 취약한 우회책이었고, 2017년 상위 100대 도메인 중 27곳에서 다시 깨졌다.
2012년, 한 첩보 툴킷이 자신을 '서명된 윈도우 업데이트'로 위장해 감염 대상 PC에 설치됐다. 서명하려고 그들은 학계가 아직 발표하지 않은 MD5 충돌로 마이크로소프트 인증서를 위조했다 — 줄줄이 늘어선 제도적 실수의 마지막 고리로.
2014년 구글 팀이 SSL 3.0을 깼다. 1996년에 나온, 아무도 더는 고르지 않던 프로토콜을. POODLE이 공격한 건 쓰이던 암호가 아니라, 18년 전 암호로 슬쩍 되돌아가게 만든 브라우저의 '친절한 반사작용'이었다.
TLS가 무엇을 암호화하기도 전에, 클라이언트는 자기가 무엇인지 정확히 밝힌다. 인사하는 그 특유의 방식이 곧 지문이다 — JA3와 JA4의 이야기는, 아무도 감출 생각을 하지 않았던 프로토콜의 부위에서 신원이 어떻게 새어 나오는지에 관한 이야기다.
1990년대 미국 정부는 기업들이 일부러 깨지는 암호를 해외에 팔게 만들었다. 그 약한 암호는 법보다 15년을 더 살아남았고 — 2015년, FREAK과 Logjam이 그것을 웹의 3분의 1에서 다시 켰다.