요약

  • 2024년 7월 19일 CrowdStrike는 Windows 호스트용 Falcon 콘텐츠 구성 업데이트를 배포했고, 배포가 멈춘 것은 05:27 UTC 무렵이었다. 그때는 이미 수백만 대가 쓰러진 뒤였다.
  • 쟁점은 원인이 아니라 배분이다. CrowdStrike 고객 약관의 책임 상한은 12개월 요금에 묶여 있고, Delta Air Lines가 제기한 5억 달러를 넘는 청구는 그 상한에 밀어 넣은 주장이지 상한이 만들어 낸 숫자가 아니다.

결함은 센서의 핵심부에 있지 않았다. 한 단계 위, 생산 장비에 콘텐츠가 내려가기 전에 그것을 심사해야 하는 검증 계층에 있었다. Channel File 291 업데이트를 처리하던 그 검증기는 자신에게 할당된 메모리 경계를 넘어섰고, 자기 것이 아닌 주소를 읽었고, 컴퓨터는 꺼졌다. 이것이 CrowdStrike가 7월 19일 사건의 기술적 설명에서 서술하는 순서다. 다만 이 서술은 회사 자체 자료에 근거한 것이며, 해당 문서 전문을 이번 작업에서 줄 단위로 대조하지는 않았다.

Channel File 291 근본원인 분석은 시간대를 확정한다. 04:09 UTC 무렵 배포, 05:27 UTC 무렵 중단 또는 롤백. 78분이다. 콘텐츠 업데이트의 전파 속도를 감안하면 빠른 대응처럼 들린다. 하지만 롤백은 이미 파란 화면에 멈춘 컴퓨터를 되살리지 못한다. 롤백은 다음 기기가 쓰러지는 것을 막을 뿐, 이미 쓰러진 기기를 하나도 일으켜 세우지 않는다.

바로 여기서 그날의 운영상 단층선이 갈린다. 복구는 수작업이었고 대당 작업이었다. 누군가 물리적으로 그 기기 앞에 가서 안전 모드로 들어가고, 잘못된 파일을 지우고, 다시 부팅해야 했다. 서버가 수천 대인 데이터센터에서 이것은 손짓 한 번이 아니라 며칠에 걸친 교대 근무다. 현장 IT 인력이 없는 병원, 공항 운영 부서, 지점에서는 그냥 업무 중단이다. Microsoft는 고객 지원에 관한 글에서 영향을 받은 Windows 기기를 약 850만 대로 추산하고, 이를 전체 Windows 컴퓨터의 1퍼센트 미만이라고 밝혔다. 이 숫자는 기기를 센다. 기업 수도, 결항 편수도, 매출 손실도, 배상 가능한 손해도 세지 않는다.

그래서 이 사건의 경제적 규모는 계약 없이는 답할 수 없다. 손해는 먼저 고객에게서 발생했다. 장애가 물질화되는 순서가 그렇다. 그다음에야 합의가 그 손해를 누가 지는지 정한다. 멈춤을 겪은 운영자와 업데이트에 서명한 공급자 사이에는 이 배분을 미리 정해 둔 문서가 놓여 있다.

CrowdStrike는 고객 약관에서 해당 Order Form에 따라 지급되었거나 지급될 요금을 기준으로 산정되는 총 책임 상한을 설명한다. 기준이 되는 기간은 책임을 발생시킨 사건 직전 12개월이다. 이것은 약관 페이지가 스스로 제시하는 조항 설명이지 조항 원문의 자구 해석이 아니다. 정확한 문구, 조항 번호, 예외 사항은 이번 작업에서 원문으로 확인하지 않았다. 그럼에도 메커니즘은 평가하기에 충분히 분명하다. 상한은 장애의 규모로 측정되지 않는다. 고객의 구매 이력으로 측정된다.

이 상한 옆에는 간접손해 및 기타 손해에 대한 별도의 배제 조항이 놓여 있다. 두 장치는 함께 작동하며, 상한 하나만으로는 청구인이 실제로 무엇을 받는지 답할 수 없다. 상한은 총액을 자르고, 배제 조항은 자르기가 이루어지기도 전에 손해 범주 전체를 계산에서 빼낸다. 상한만 읽는 사람은 조항의 절반을 읽는다. 배제 조항만 읽는 사람은 남은 테두리 안에서도 한계가 작동한다는 사실을 놓친다.

이 방정식의 반대편에는 소송이 있다. Delta Air Lines는 2024년 8월 8일 Georgia에서 CrowdStrike를 상대로 계약 위반을 포함한 소송을 제기했고, Reuters의 소송 보도에 따르면 5억 달러를 넘는 배상을 요구했다. 이 금액은 청구이지 판결이 아니다. 계약상 상한이 지급되었거나 적용되었거나 심지어 협상되었다는 사실을 입증하지 않는다. 큰 고객이 요구하는 금액과 같은 고객이 서명한 계약이 정한 금액 사이의 거리를 보여줄 뿐이다.

그 거리가 이 사건의 핵심이다. 한 회사는 소프트웨어를 샀고, 다른 회사는 자기 약관에 고객이 12개월 동안 지불한 금액을 기준으로 삼는 경계를 써 넣었다. 두 숫자 사이의 격차는 관대함도 가혹함도 아니다. 사건 몇 년 전에 설계되어 지금 법정에서 견고성을 시험받는 계약 구조의 결과다.

약관의 공개 페이지만으로는 최종 판단에 이를 수 없다. 고객 약관의 어느 판본이 적용되는지, 어떤 Order Form인지, 어떤 협상된 변경 조항인지, 어떤 손해 배제 조항인지, 어떤 계약상 예외가 Delta Air Lines와의 관계를 규율했는지는 온라인 페이지 하나로 확정할 수 없다. 판단은 이번 작업에서 손에 넣지 못한 체결된 합의서에 매달려 있다.

한편 CrowdStrike는 시정 조치를 발표했다. Rapid Response Content에 대한 강화된 검증과 테스트, 단계적 배포, 개선된 모니터링과 경보, 결함 있는 콘텐츠에 대한 센서의 안전한 처리다. Rapid Response Content 업데이트 테스트 현대화에 관한 별도 글에서 회사는 추가 검증 계층과 단계적 출시를 설명하며, 문제가 되는 업데이트가 광범위한 고객 기반에 도달하기 전에 걸러내겠다는 목표를 제시한다. 이는 의도와 설계에 대한 서술이지 입증된 효과가 아니다. 사후 검증 및 배포 통제에 대한 독립적 감사는 이번 작업에서 확인하지 못했다.

사건은 한 고객에 그치지도 않았다. 항공사와 기업 고객들이 업무 중단 배상을 요구하는 소송을 잇따라 제기했고, Reuters가 이를 보도했다. 이런 사건마다 같은 질문이 형태만 바꿔 반복된다. 어느 상한인지, 어느 배제 조항인지, 어느 판본의 문서인지.

결국 2024년 7월 19일은 CrowdStrike에게 재무적 사건이라기보다 계약적 사건이었다. 기술적 결함은 인정되었고 문서화되었다. 손해의 배분은 열려 있다. 요금에 묶인 상한은 책임을 없애지 않고 재정의한다. "장애가 얼마를 들였는가" 대신 "그 전 12개월의 구독료는 얼마였는가"가 질문이 된다. 그 답은 보도자료가 아니라 파일에 있다. 사건을 계속 지켜보려면 btw.media 디렉터리의 기업 항목을 참조하면 되고, 결정적 문서는 체결된 합의서로 남는다.