블로그

프로토콜, 보안, 그리고 인터넷이 실제로 작동하는 방식에 대하여.

SPF ~all vs -all: 소프트페일 전염병

대부분의 도메인은 SPF 레코드를 ~all로 끝낸다. 실패한 메일을 받아들이라는 뜻이다. SPF 혼자서는 스푸핑을 막을 수 없게 만드는, 안전해 보이는 기본값이다.

더 읽기

NSEC3는 당신의 DNS 존을 숨겨줄 거였다. 못 숨긴다.

이름이 존재하지 않음을 증명하는 DNSSEC의 장치가, 존재하는 이름 목록을 통째로 흘린다. NSEC3는 이름을 해시해 zone walking을 막으려 했지만 — 오프라인 크래킹이 그대로 뚫었다. RFC 9276이 왜 iterations를 0으로 두라고 하는지, 그리고 실제로 통하는 게 뭔지.

더 읽기

이제 인증서 갱신 시점은 CA가 정한다

2020년 Let's Encrypt는 인증서 300만 장을 폐기해야 했지만 '갱신하라'고 알릴 방법이 없었다. 이제 RFC 9773이 된 ACME Renewal Information이 당신 스케줄에 CA의 다이얼을 달았다.

더 읽기

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

10년간 모든 TLS 인증서는, 브라우저가 24시간 안에 온라인 상태를 유지하도록 강제하던 살아있는 append-only 암호 데이터베이스에 게시됐다. 2025년, 그 기계는 뜯겨 나가고 버킷 속 정적 파일 폴더로 대체됐다. 더 나은 설계다.

더 읽기

인증 기관은 어떻게 죽는가

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

더 읽기

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

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

더 읽기

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

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

더 읽기

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

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

더 읽기

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

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

더 읽기

ACME: 인증서 발급이 API 호출이 된 과정

TLS 인증서를 받는 건 이메일, 서류, CSR을 웹 폼에 붙여넣는 일이었다. ACME는 그 전부를 새벽 3시에 스크립트가 돌리는 프로토콜로 바꿨다. 그 원리 — 그리고 우리가 맞바꾼 것.

더 읽기

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

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

더 읽기

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

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

더 읽기

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

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

더 읽기

이메일이 슬랙보다 안전하다

모두가 슬랙을 이메일의 현대적이고 안전한 후계자로 취급한다. 하지만 Enterprise Grid에서 조직 소유자는 당신이 보낸 모든 DM을 — 수정하고 삭제한 것까지 — 내보낼 수 있고, 슬랙은 그걸 할 평문을 쥐고 있다. 이메일의 전송 계층은 1982년산 재앙이다. 그런데도 이메일이 슬랙은 구조적으로 줄 수 없는 것을 준다: 보관 주권(custody). 아무도 변호하지 않는 매체를 위한 변론.

더 읽기

WHOIS 프라이버시는 양날의 검이다

GDPR은 2018년에 모두의 WHOIS를 가렸다 — 할머니와 피싱 운영자가 같은 날 같은 익명성을 얻었다. 균형을 맞출 접근 시스템은 2,700만 달러로 추산됐다가 폐기됐다. 검의 한쪽 날만 벼려졌다.

더 읽기

DNS는 인터넷의 가장 약한 고리다

당신의 DNS를 장악한 사람은 당신 도메인의 유효한 TLS 인증서를 발급받고, 메일을 빼돌리고, 당신 행세를 할 수 있다. 아무도 서명하지 않는 신뢰의 뿌리.

더 읽기

SSL Labs A+ 등급은 너무 쉽다

SSL Labs A+는 TLS 채널 설정이 잘 됐다는 증명입니다. 사람들은 이걸 '우리는 안전하다'는 증거처럼 휘두릅니다. A와 A+의 차이는 HTTP 헤더 하나 — 피싱 키트도 그 문턱을 넘습니다.

더 읽기

레이트 리밋은 보안 전략이 아니다

레이트 리미터를 직접 만들고 나서, 다들 이게 막아준다고 믿는 그 공격을 전혀 못 막는 걸 지켜봤다. 레이트 리밋은 보안 배지를 단 가용성 통제다.

더 읽기

Cloudflare의 장애는 계속 운율을 맞춘다

세 번의 Cloudflare 장애 — 2019년 정규식, 2025년 서드파티 의존성, 2025년 피처 파일 — 은 결국 옷만 갈아입은 같은 장애다: 한 번에 전 세계로 퍼진 변경이, 숨을 곳 없는 버그를 만난 것.

더 읽기

BGP 하이재킹: 같은 실수의 역사

1997년 AS7007 사고부터 2022년 KLAYswap 암호화폐 탈취까지, BGP 하이재킹은 매번 같은 빈 자리를 노립니다: 누구도 경로 소유를 증명할 필요가 없다는 것. 그 패턴, 그리고 왜 해결책은 여전히 선택 사항인가.

더 읽기

레지스트라는 왜 계속 뚫리는가

2016년, 공격자들이 브라질 대형 은행의 온라인 전체를 5시간 동안 장악했다. 서버는 하나도 건드리지 않았다. 그들은 그냥 도메인 레지스트라에 로그인했다.

더 읽기

.io 도메인에는 정치적 문제가 있다

스타트업은 .io를 input/output의 줄임말로 여긴다. 그 두 글자는 사실 지금 넘겨지고 있는 분쟁 중인 식민 영토를 가리키고, 도메인은 그 영토의 존재 위에 얹혀 있다.

더 읽기

이메일은 고칠 수 없다

SMTP는 1982년, 모두가 서로를 믿던 네트워크를 위해 설계됐다. 그 이후 우리가 원한 모든 보안 속성 — 누가 보냈는지 아는 것, 전송 중 암호화 — 은 교체할 수 없는 프로토콜 위에 선택적 패치로 덧붙여졌다. 이건 아직 못 고친 버그가 아니다. 이것 자체가 이메일의 생김새다.

더 읽기

2026년의 포트 스캔: 알 수 있는 것과 없는 것

포트 스캔은 정찰의 첫 단계라고들 한다. 2026년에 타깃을 풀 스캔하면 대개 알려주는 건 '방화벽과 로드밸런서 뒤에 있다'뿐이다. 인터넷의 지도는 더 이상 스캐너가 그리지 않는다.

더 읽기

RDAP가 WHOIS를 대체하고 있다 (아주 천천히)

WHOIS는 파싱 불가능한 텍스트를 돌려주는 1982년 프로토콜이다. RDAP는 2015년에 그 모든 걸 고쳤다. 그런데 업계를 움직인 건 더 나은 엔지니어링이 아니라 2025년의 계약 마감일이었다.

더 읽기

당신의 TLS 인증서는 이미 짧아졌다

다들 2029년에 올 47일 인증서에 패닉했지만, 첫 번째 단축은 이미 일어났다. 200일, 2026년 3월부터 의무다. 진짜 핵심은 유효기간이 아니라 10일까지 줄어드는 재검증 주기다.

더 읽기

HSTS 프리로드: 당신의 보안을 브라우저 벤더에게 넘기는 일

HSTS 프리로드 목록에 도메인을 올리는 건 일방통행 문이다. 목록은 당신 서버가 아니라 브라우저 바이너리 안에 있어서, 되돌리려면 당신이 통제하지 못하는 크롬 릴리스를 몇 달이고 기다려야 한다 — 프리로드하라고 권하는 사람들이 말 안 하는 부분이다.

더 읽기

DANE: 웹에서 실패하고 이메일에서 이긴 프로토콜

다들 DANE은 죽었다고 한다 — DNSSEC 뒤에 발이 묶여 아무도 안 쓴 아름다운 프로토콜. 그 판정은 미국식이다. 네덜란드에선 의무고, 2026년 마이크로소프트가 탑재했고, 웹에선 정말로 죽었다. 같은 프로토콜, 세 갈래 운명.

더 읽기

MTA-STS: 아무도 모르는 이메일 보안 프로토콜

SMTP 암호화에는 트럭이 지나갈 만한 구멍이 있다: 경로상의 공격자가 STARTTLS를 벗겨내고 메일을 평문으로 읽을 수 있다. MTA-STS가 그걸 막는다. 그러려면 웹 페이지를 하나 띄워야 하고, 그래서 거의 아무도 안 했다.

더 읽기

SMTP relay는 2026년에 실제로 어떻게 작동하는가

1982년엔 모든 메일 서버가 아무한테나 relay해줬다 — 그게 설계였다. 지금은 모르는 사람한테 relay해주면 점심도 되기 전에 블록리스트에 오른다. 'relay'라는 단어는 살아남았고, 그 아래 모든 게 뒤집혔다.

더 읽기

와일드카드 인증서는 보안 안티패턴이다

모든 서버에 같은 개인키 하나, 그게 앞으로 만들 모든 서브도메인을 덮는다. 와일드카드 인증서는 작은 편의를 보이지 않는 폭발 반경과 맞바꾼다 — 그리고 표준화 단체도 마침내 같은 결론에 도달했다.

더 읽기

네거티브 캐싱: DNS는 '없음'도 기억한다

레코드를 추가했는데 세상은 여전히 '존재하지 않는다'고 답한다. 레코드는 멀쩡하다. DNS가 그 부재를 캐싱했을 뿐이다 — 당신이 설정한 적 없는 TTL, 아무도 건드리지 않는 SOA 필드가 지배하는 수명으로.

더 읽기

DNS 리바인딩은 브라우저를 내부자로 만든다

당신이 연 웹 페이지가 당신의 브라우저를 통해 집 안의 공유기, 프린터, 스마트 스피커에 닿을 수 있다. DNS 리바인딩은 20년 넘게 통해 왔고, 아직도 통하는 이유는 우리가 로컬 네트워크를 어떻게 지어 왔는지에 관한 불편한 사실을 말해 준다.

더 읽기

Anycast: 하나의 IP, 여러 대의 서버

같은 IP가 서울에 있는 당신과 상파울루에 있는 다른 사람에게, 서로 다른 두 대의 기계에서 응답한다. 둘 다 눈치채지 못한다. 그게 anycast다 — 인터넷 전체가 믿어주기로 합의한 BGP를 향한 거짓말이자, 수백 곳에서 동시에 TCP를 조용히 작동시킨 트릭.

더 읽기

이메일 포워딩은 왜 모든 걸 망가뜨리는가

SPF는 첫 relay에서 죽는다. DKIM은 메일링 리스트가 본문을 건드리는 순간 깨진다. 그리고 DMARC가 40년 된 골칫거리를 반송 메일로 바꿔놓는다. 이메일에서 가장 확실하게 고장 나는 기능 이야기.

더 읽기

DNS TTL: 약속한 값 vs 리졸버가 실제로 하는 일

TTL을 300으로 잡고 5분이면 바뀌겠지 했는데, 한 시간이 지나도 트래픽이 옛 IP로 들어온다. TTL은 일정표가 아니다. 캐시들의 사슬에 건네는 힌트일 뿐이고, 그 캐시들은 저마다 당신을 무시할 권리를 갖고 있다.

더 읽기

DKIM Alignment: 다들 헷갈리는 바로 그 부분

DKIM 서명이 유효하다고 DMARC를 통과하는 게 아니다. 서명은 '어떤 도메인이 서명했다'만 증명한다. 그 도메인이 당신의 From 주소를 대변할 자격이 있는지는 alignment가 결정한다.

더 읽기

호모그래프 공격: 도메인 이름이 거짓말을 할 때

2017년, 한 연구자가 Chrome·Firefox·Opera 주소창에 apple.com으로 표시되는 도메인을 등록했다. 유효한 HTTPS 인증서까지 달려 있었다. 모든 글자가 키릴 문자였다. 이 문제가 고치기 어려운 이유는 버그 자체보다 더 오래되고 기묘하다.

더 읽기

우리는 UDP 위에 TCP를 다시 만들고 QUIC라고 불렀다

QUIC는 신뢰성이 있고, 순서를 보장하고, 혼잡 제어를 하고, 전부 암호화한다 — UDP가 한사코 하지 않으려는 모든 것이다. 그런데 왜 하필 UDP 위에 만들었을까? UDP가 인터넷 배관에 남은 유일한 '새 프로토콜 모양의 구멍'이었기 때문이다.

더 읽기

루트 서버가 13개라는 착각

다들 DNS 루트 서버가 13개라고 말한다. 실제로는 1,900개가 넘는다. 13이라는 숫자는 이제 아무도 신경 쓰지 않는 패킷 크기 제한 때문에 인터넷에 얼어붙어 있다 — 그리고 그 모순이 풀린 방식이야말로 지금껏 나온 인프라 꼼수 중 손꼽히게 좋은 것이다.

더 읽기

서버는 당신이 봇이라는 걸 어떻게 아는가

User-Agent 문자열에는 아무 브라우저나 적어 넣을 수 있다. 그래서 아무도 그 필드를 믿지 않는다 — 그 아래에 깔린 TLS 핸드셰이크와 HTTP/2 설정은 당신이 아니라 당신이 쓴 라이브러리가 적은 것이기 때문이다.

더 읽기

CDN은 단일 장애점이다

CDN 집중화로 하나의 장애가 수천 개 사이트를 동시에 내린다. 분산 복원력을 중앙화된 편의로 교환했다.

더 읽기

CDN 캐시 포이즈닝의 작동 원리

CDN 캐시 포이즈닝은 CDN을 속여서 악성 응답을 캐시하게 하고 모든 후속 방문자에게 서빙하게 한다. 이상한 요청 하나, 대량의 부수 피해.

더 읽기

컴플라이언스는 보안이 아니다

SOC 2, ISO 27001, PCI DSS — 조직은 컴플라이언스를 보안의 증거로 취급한다. 아니다. 컴플라이언스는 바닥이다. 보안은 방어의 실제 상태다.

더 읽기

MCP: 보안 도구에 어떤 의미인가

Model Context Protocol은 AI 에이전트에게 보안 도구를 호출하는 표준 방법을 준다. 정찰 워크플로우가 바뀐다. 판단 부분은 안 바뀐다.

더 읽기

보안 점수는 의미 없다

보안 점수 시스템을 만드는 사람이 말한다. 점수는 실제 보안을 측정하지 않는다. 그런데도 계속 만드는 이유.

더 읽기

TLS 핸드셰이크 7단계

모든 HTTPS 연결은 대부분의 개발자가 생각조차 안 하는 협상으로 시작된다. TLS 1.3에서 정확히 무슨 일이 일어나는지, 단계별로.

더 읽기

"제로 트러스트"는 마케팅 용어다

제로 트러스트는 정당한 보안 아키텍처 원칙으로 시작했다. 모든 벤더가 '우리 제품을 사세요'라는 뜻으로 전용했다. 원래 아이디어가 더 나은 대우를 받을 자격이 있다.

더 읽기