+− THE DAILY DIFFdev & AI news
SHIP IT

정규식이 Cloudflare를 다운시켰습니다. 27분 동안.

2019년 7월 2일, 13:42 UTC: Cloudflare의 웹 애플리케이션 방화벽에 대한 새로운 규칙 하나가 약 2초 만에 180개 이상의 도시에 적용됩니다.

2019년 7월 2일, 13:42 UTC: Cloudflare의 웹 애플리케이션 방화벽에 대한 새로운 규칙 하나가 약 2초 만에 180개 이상의 도시에 적용됩니다. 시뮬레이트 모드의 XSS 규칙이므로 아무것도 차단하지 않지만 모든 요청에서 실행되며 .*(?:.*=.*)로 끝납니다. PCRE가 역추적하고, HTTP 요청을 처리하는 모든 CPU 코어가 100%에 도달하며, 모든 Cloudflare 프록시 사이트가 27분 동안 502를 반환합니다. 트래픽은 82% 감소합니다. 킬 스위치는 Cloudflare 뒤에 있는 Cloudflare Access 뒤에 있습니다. Cloudflare 자체의 사후 분석 보고서에서 발췌: CPU 절약을 위한 리팩토링 과정에서 몇 주 전에 제거된 CPU 가드, 규칙이 스테이징을 건너뛰게 한 절차, 복잡성 보장이 없는 엔진, 11가지 원인과 7가지 해결책. 해결책에 대한 평결: SHIP IT.

서면판 읽기 (영어) ↗

이 동영상에서 다루는 내용

  • 13:31–13:42 UTC: PR 병합, CI 녹색 (CPU 테스트 없음), Quicksilver가 180개 이상의 도시에 규칙 푸시; WAF 규칙은 DOG → PIG → Canary 단계를 건너뜀
  • 13:45–14:07: 첫 페이지; 전 세계 CPU 100%, 트래픽 -82%, 모든 곳에서 502; 내부 제어판은 Cloudflare Access 뒤에 있으며, Cloudflare Access는 다운; 일부 자격 증명 만료; 거의 훈련되지 않은 우회 경로
  • 14:07–14:09: 전역 WAF 종료; 27분 후 트래픽 및 CPU 정상; 14:52 규칙 제외한 WAF 복구
  • 7월 2일 (15:50 UTC) 및 7월 12일: Cloudflare는 당일 메모 및 전체 사후 분석 보고서 게시; CPU 가드 재추가, 3,868개 규칙 재검토, 단계적 출시, 선형 시간 정규식 엔진으로 전환

번역된 스크립트

원래 영어 내레이션에서 번역되었습니다. 사용 가능한 오디오 및 캡션은 YouTube에서 제어합니다.

0:00 하나의 정규식이 모든 Cloudflare 서버에서 동시에 적용되고, 그 다음 27분 동안 그 뒤에 있는 사이트들은 502 페이지가 됩니다. 이는 방화벽에게는 가능한 가장 엄격한 설정입니다. 2019년 7월 2일, 13:42 UTC. Cloudflare는 두 시간 안에 게시합니다: 공격이 아니라 잘못된 배포, 트래픽 82% 감소. 10일 후 CTO John Graham-Cumming이 전체 사후 분석 보고서를 게시하고, 정규식 포함, Hacker News는 698점을 줍니다.

0:26 이는 서비스 중단에 대한 기립 박수입니다. 어떻게 이런 일이 일어났고, 왜 가능했으며, 누가 실제로 비난받는가. 여기는 The Daily Diff, 사후 분석입니다. 13:31. 풀 리퀘스트가 병합됩니다: 크로스 사이트 스크립팅에 대한 새로운 방화벽 규칙 하나, 시뮬레이트 모드이므로 아무것도 차단하지 않습니다. 13:37, 테스트 통과; CPU 측정 없음. 13:42, 규칙이 2초 만에 180개 도시에 배포됩니다, WAF 규칙은 다른 릴리스가 거치는 dog, pig, canary 단계를 건너뛰기 때문입니다.

0:54 13:45, 첫 페이지. 13:49, Hacker News에 상태 페이지에 대한 스레드가 올라옵니다, 여전히 모든 시스템이 작동 중이라고 합니다. 규칙은 점-별, 점-별, 등호, 점-별로 끝납니다: 무엇이든, 그 다음 무엇이든, 그 다음 등호. PCRE는 탐욕적으로 추측하고 실패하며, 다른 모든 분할을 역추적합니다. x = x는 23단계가 걸립니다. 등호 뒤에 20개의 x: 555.

1:15 20개의 x, 등호 없음: 아무것도 찾지 못하는 데 4,067단계. 모든 요청에서 이를 실행하면 모든 코어가 100%가 됩니다, 아무것도 하지 않으면서 철저하게. 두 개의 가드가 이를 막았어야 했습니다. 규칙에 대한 CPU 제한은 몇 주 전에 실수로 제거되었습니다, WAF가 CPU를 덜 사용하게 하려는 리팩토링 과정에서. 그리고 이 절차는 어떤 규칙이든 스테이징을 건너뛰게 합니다. 규칙은 실시간 공격을 막기 위해 존재하기 때문입니다. 이것은 비상 상황이 아니었고, 어쨌든 전 세계적으로 적용되었습니다.

1:37 14:00, WAF가 식별됩니다; 공격 아님. 14:02, 누군가 전역 종료를 제안합니다: 한 구성 요소, 전 세계적으로 끄는 것. 스위치는 Cloudflare Access 뒤에 있습니다. Cloudflare Access는 Cloudflare 뒤에 있습니다. 일부 자격 증명이 사용되지 않아 만료되었으므로, 인터넷에서 가장 빠른 네트워크가 아무도 훈련하지 않은 우회 경로에 5분을 낭비합니다. 14:07, 종료. 14:09, 트래픽 정상. git blame: 한 가지 속도로 전 세계에 적용된 롤아웃; 실수로 리팩토링되어 사라진 CPU 가드;

2:04 상한선이 없는 정규식 엔진. 규칙을 작성한 엔지니어는 아닙니다: 사후 분석 보고서는 11가지 원인을 나열하고 아무도 지명하지 않습니다. 피해 범위: 27분, 트래픽의 82%, 모든 도시, 모든 코어에서 CPU 100%. 대시보드와 API가 동일한 엣지 뒤에 있어 고객은 끌 수도 없습니다. Hacker News, 사후 분석 보고서 아래 댓글: 그들은 하나의 문제가 있었고, 정규식을 사용했고, 이제는 두 가지 문제가 생겼습니다. 오래된 농담. 여전히 컴파일됩니다.

2:28 평결, 사후 분석: SHIP IT. CPU 가드가 복구되고, 3,868개의 모든 규칙이 수동으로 검토됩니다, 규칙은 스테이징을 거치고, 엔진은 1968년 켄 톰슨이 발표한 선형 시간 보장을 제공하는 엔진으로 전환됩니다. 월요일: 요청당 실행되는 모든 것에 점-별 점-별은 사용하지 마십시오, 그리고 킬 스위치를 죽이는 대상에서 분리하십시오. 아직 이야기할 수 없는 사건을 저에게 보내주십시오, 댓글로, 또는 the daily diff dot dev로.

2:53 그리고 이것이 오늘의 차이점입니다. 저는 Axrisi의 Niko입니다. 책임감 있게 병합하세요.

출처

  1. John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
  2. Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
  3. Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
  4. Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
  5. Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
  6. Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
  7. Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
  8. TechCrunch, Jul 2, 2019techcrunch.com

관련 동영상

postmortem · ko · 2026. 9. 16.

Facebook이 인터넷에서 스스로를 삭제했습니다. 6시간 동안.

Facebook이 인터넷에서 자체 주소를 삭제하고, 엔지니어들이 이를 복구하기 위해 도착했을 때, 뱃지 리더기 또한 작동하지 않았는데, 이는 뱃지 리더기가 Facebook에 연결되어 있었기 때문입니다. 2021년 10월 4일 15:40 UTC: 일상적인 백본 유지보수 명령이 Facebook 데이터 센터 간의 모든 링크를 중단시켰습니다. 이를 차단하도록 구축

3:01 ↗
postmortem · ko · 2026. 9. 25.

1밀리초 버그로 영국 항공 교통 6시간 마비.

9월 8일 화요일 오전 10시, NATS의 국가 영공 시스템(NAS) 내에서 일상적인 스쾍 코드 요청이 값을 업데이트하는 도중에 우선순위가 더 높은 메시지에 의해 중단되었습니다. 노출 시간은 약 1밀리초입니다. 요청이 잘못 재개되고 비행 데이터가 손상되어 오후 7시 30분까지 2,000편 이상의 영국 항공편이 지연, 취소 또는 회항되었습니다.

3:06 ↗
postmortem · ko · 2026. 9. 22.

재부팅으로 텔스트라가 2006년으로 돌아갔습니다. 9백만 대의 전화.

멜버른의 한 엔지니어가 새벽 2시 50분에 타이밍 섀시 전원을 다시 켰고, 아침 식사 시간까지 호주 최대의 모바일 네트워크는 2006년 11월이라고 동의했습니다. 2026년 7월 8일: 텔스트라의 NTP 섀시에 있는 GPS 카드가 전원 공급 장치 수리 중에 재부팅되었고, 펌웨어는 GPS 주 롤오버 업데이트가 없었기 때문에 이전 에포크를 선택하여 1,024주

3:15 ↗