8분간 이어진 1.35Tbps 공격
2018년 2월 28일, GitHub은 당시 사상 최대인 1.35Tbps DDoS를 견뎠다. 이 무기를 만든 봇넷은 없었다. 열린 채 방치된 memcached 서버와, 인터넷이 2000년부터 고치기를 거부해 온 라우팅 결함으로 조립된 것이었다.
프로토콜, 보안 사건, 그리고 인터넷이 실제로 작동하는 방식. 147편.
2018년 2월 28일, GitHub은 당시 사상 최대인 1.35Tbps DDoS를 견뎠다. 이 무기를 만든 봇넷은 없었다. 열린 채 방치된 memcached 서버와, 인터넷이 2000년부터 고치기를 거부해 온 라우팅 결함으로 조립된 것이었다.
1996년 9월, SYN flood 하나가 뉴욕의 한 ISP를 멈춰 세웠다. 몇 주 만에 두 사람이 상태를 아예 저장하지 않는 방어법을 만들어냈다 — 커넥션을 공격자가 위조할 수 없는 숫자 안에 숨기는 방식이다. 리눅스는 2009년부터 이걸 기본으로 켜 두고 있고, 지금도 일부러 조금 손해를 보게 설계돼 있다.
TLS가 무엇을 암호화하기도 전에, 클라이언트는 자기가 무엇인지 정확히 밝힌다. 인사하는 그 특유의 방식이 곧 지문이다 — JA3와 JA4의 이야기는, 아무도 감출 생각을 하지 않았던 프로토콜의 부위에서 신원이 어떻게 새어 나오는지에 관한 이야기다.
Slowloris 공격은 2009년 것이다. 작은 스크립트 하나, 컴퓨터 한 대, 대역폭은 거의 필요 없다. 그런데 요청 시간 제한 없이 연결마다 스레드를 붙이는 서버는 지금도 멈춰 세운다. 느리게 감으로써 이긴다 — 그리고 그 해법은 HTTP/2의 기록적 홍수 공격에 필요했던 바로 그것이다.
DNS에는 기억이 없다 — 도메인이 무엇을 가리키는지 물으면 오늘의 답만 나오고, 작년의 답은 절대 나오지 않는다. 패시브 DNS는 누가 물었는지는 결코 기록하지 않으면서, 인터넷이 내놓은 모든 답을 기억하는 우연한 감시 데이터베이스다.
2006년 OpenSSH는 시그널 핸들러에 있던 원격 루트 취약점을 잡았다. 2020년 말 로깅 코드를 고치는 과정에서 그 수정이 조용히 사라졌고, 같은 버그가 3년간 수백만 대 서버로 배포됐다 — 그게 죽은 채로 있는지 아무도 시험하지 않았기 때문이다.
2008년, 연구자 한 명이 인터넷의 어떤 도메인이든 몇 초 만에 위조하는 법을 찾아냈다. 해결책은 새 프로토콜이 아니라 25년 된 설계에 덧댄 16비트의 무작위성이었고, 우리는 아직도 거기 기대고 있다.
2016년, 가정용 카메라와 DVR로 만든 봇넷이 인터넷의 한 조각을 마비시켰다. 대단한 취약점을 찌른 게 아니다. 공장 초기 비밀번호로 그냥 로그인했다.
최근 몇 년간 가장 정교했던 공급망 공격은 스캐너도, SBOM도, 보안팀도 잡지 못했다. SSH 로그인이 0.5초쯤 느린 게 거슬렸던 엔지니어 한 명이 잡았다.
2024년 4월, 한 연구자가 단 하나의 TCP 연결로 Apache·Node.js·Tomcat을 무너뜨릴 수 있음을 보였다. 그 HTTP/2 프레임은 액세스 로그에 남지 않는다. 버그는 코드가 아니라 명세의 이음새에 있었기에 동시에 모든 곳에서 터졌다.
2023년 12월, 한 연구자가 microsoft.com 같은 도메인을 사칭한 위조 메일을 보냈고 그 메일은 SPF와 DMARC를 통과했다. 인증을 깬 게 아니다. 수신 서버가 한 통의 메일을 두 통으로 읽게 만들었다.
2023년 8월, Google·Cloudflare·AWS가 모두 DDoS 기록을 경신했고, Cloudflare가 받은 공격은 고작 2만 대 남짓한 봇넷에서 나왔다. 무기는 대역폭이 아니었다. 설계대로 정확히 동작하는 HTTP/2 기능이었다.