+− THE DAILY DIFFdev & AI news
SHIP IT

Одно лишнее поле обрушило 8,5 миллиона ПК. 78 минут.

19 июля 2024 г., 04:09 UTC: CrowdStrike рассылает Channel File 291 — обновление Rapid Response Content — на каждый онлайн-сенсор Windows Falcon.

19 июля 2024 г., 04:09 UTC: CrowdStrike рассылает Channel File 291 — обновление Rapid Response Content — на каждый онлайн-сенсор Windows Falcon. Шаблон, который он использует, был объявлен с 21 входным полем в феврале; код, предоставляющий входные данные, создает массив из 20. В течение четырех месяцев ничто не читает поле 21, потому что каждое правило оставляет его как подстановочный знак. Это обновление помещает туда реальный шаблон. Cloud-side Content Validator насчитывает 21 поле в соответствии с объявлением и пропускает его; Content Interpreter сенсора, не имея проверки границ, читает слот 21 в режиме ядра, и Windows вызывает page-faults: PAGE_FAULT_IN_NONPAGED_AREA, csagent.sys. Драйвер загружается рано при загрузке специально, считывает тот же файл, снова падает — цикл перезагрузки. Откат произошел в 05:27 UTC, 78 минут спустя, но 8,5 миллиона машин (по подсчетам Microsoft, менее 1% Windows) уже имеют файл, и исправление заключается в том, что человек за каждой клавиатурой: безопасный режим, удалить C-00000291*.sys, ключ восстановления BitLocker. Авиакомпании, больницы, банки и центры 911 останавливаются; Delta отменяет около 7000 рейсов и требует не менее 500 миллионов долларов от CrowdStrike и Microsoft; Parametrix оценивает ущерб Fortune 500 почти в 5,4 миллиарда долларов. Постмортем от собственного Root Cause Analysis CrowdStrike, Preliminary Post Incident Review, блога Microsoft, 8-K Delta и показаний в Палате представителей. Git blame: 65 CrowdStrike / 25 дизайн режима ядра / 10 пятница. Вердикт по исправлению: SHIP IT, с натяжкой.

Читать письменное издание (на английском) ↗

Что освещается в этом видео

  • 28 февраля – 24 апреля 2024 г.: сенсор 7.11 поставляет IPC Template Type (21 объявленное поле, 20 предоставленных); стресс-тест проходит 5 марта; четыре экземпляра работают, потому что поле 21 является подстановочным знаком
  • 19 июля, 04:09 UTC: два новых экземпляра шаблона; логическая ошибка Content Validator пропускает не-подстановочный знак; чтение за пределами памяти в ядре; откат в 05:27 UTC
  • 19–29 июля: ручное устранение (безопасный режим, удаление файла, ключ BitLocker); ~97% сенсоров восстановлено к 24 июля, ~99% к 29 июля
  • 25 июля – 19 августа: проверка границ во время выполнения, валидация количества полей во время компиляции, проверки Validator, «канарейка» + кольца развертывания, контроль клиента над Rapid Response Content, два независимых обзора; полный RCA с дампом аварии 6 августа

Переведенная стенограмма

Переведено с оригинального английского повествования. Доступные аудио и субтитры контролируются YouTube.

0:00 Одно обновление безопасности переносит двадцать одно поле в драйвер, созданный для двадцати, и восемь с половиной миллионов машин Windows показывают синий экран до завтрака. 19 июля 2024 года, 04:09 UTC. CrowdStrike отправляет Channel File 291 на каждый сенсор Falcon. Семьдесят восемь минут спустя они отменяют его; к тому времени авиакомпании, больницы и банки смотрят на тот же синий прямоугольник. Первый пост генерального директора говорит, что это не кибератака, это правда, и не в этом дело. Как это происходит, почему это возможно, и кто виноват.

0:27 Это The Daily Diff, постмортем. 28 февраля. Сенсор 7.11 поставляет новый детектор для именованных каналов. Он объявляет двадцать одно входное поле; код, который его питает, создает массив из двадцати. Никто не замечает: в течение четырех месяцев каждое правило оставляет поле двадцать один как подстановочный знак, и никто не читает подстановочный знак. Стресс-тест пройден, четыре правила отправлены, все в порядке. 19 июля, 04:09. Два новых правила; одно помещает реальный шаблон в поле двадцать один.

0:51 Облачный валидатор насчитывает двадцать один по декларации и говорит, что все в порядке. Каждый онлайн-хост Windows загружает его сразу, потому что нет «канарейки». Сенсор читает слот двадцать один, который не является его памятью, и ядро делает то, что делают ядра. 05:27, откат. Слишком поздно для всех, кто перезагрузился: драйвер загружается рано при загрузке, читает тот же файл и снова падает. Цикл загрузки. Почему это возможно? Правила — это конфигурация, передаваемая из облака, поэтому код не пропускает

1:16 конвейер кода. Интерпретатор не имеет проверки границ; он доверяет валидатору, а валидатор доверяет объявлению. И все это работает в режиме ядра, где плохой указатель — это не исключение, а страничная ошибка, которую Windows, по ее словам, не может защитить с помощью try-except. Патрик Уордл считывает это с дампа аварии тем же днем: индекс ноль x четырнадцать, слот двадцать один. Исправление ручное. Безопасный режим, удалить C-00000291, перезагрузить. С BitLocker сначала введите сорокавосьмизначный

1:43 ключ восстановления, который хранится на сервере, который также синий. git blame. CrowdStrike, шестьдесят пять процентов: RCA перечисляет шесть обнаружений, и шестое обнаружение — это полное предложение: экземпляры шаблона должны иметь поэтапное развертывание. Дизайн режима ядра, двадцать пять: CrowdStrike говорит, что Windows не может пока размещать безопасность вне ядра, Microsoft говорит, что это не инцидент Microsoft, и страничной ошибке все равно.

2:05 Пятница, десять. Сообщение о коммите говорит, что это не код. Радиус поражения: восемь с половиной миллионов устройств, менее одного процента Windows. Delta отменяет семь тысяч рейсов и подает в суд на пятьсот миллионов, включая Microsoft. Страховщики оценивают ущерб Fortune 500 почти в пять миллиардов. Hacker News: четыре с половиной тысячи баллов. Ирония: обновление, предназначенное для обнаружения новых методов атаки, само доставило один. Вердикт, постмортем: SHIP IT, с натяжкой.

2:27 Проверка границ за шесть дней, поэтапные кольца, контроль клиента над обновлениями контента, два внешних обзора. С натяжкой, потому что все это уже было стандартной практикой. Понедельник: что бы ваш агент ни загружал из облака, он получает «канарейку». Конфигурация — это код в тот момент, когда что-то его разбирает там, где он не может выбросить ошибку. Пришлите мне инцидент, о котором вам до сих пор не разрешено говорить, в комментариях или на daily diff dot dev. И это весь диф за сегодня.

2:48 Я Нико из Axrisi. Объединяйте ответственно.

Источники

  1. CrowdStrike, Root Cause Analysis — Channel File 291 (Aug 6, 2024, 12 pp.)www.crowdstrike.com
  2. CrowdStrike, Executive Summary of the RCA (Aug 6, 2024)www.crowdstrike.com
  3. CrowdStrike, Preliminary Post Incident Review (Jul 24, 2024)www.crowdstrike.com
  4. CrowdStrike, Remediation and Guidance Hub — Channel File 291 (the workaround steps)www.crowdstrike.com
  5. CrowdStrike, tech alert of Jul 19, 2024 (archived: Safe Mode → delete C-00000291*.sys → BitLocker key)web.archive.org
  6. Microsoft, David Weston, "Helping our customers through the CrowdStrike outage" (Jul 20, 2024; the 8.5 million figure)blogs.microsoft.com
  7. Delta Air Lines, Form 8-K (Aug 8, 2024; ~7,000 cancellations, at least $500 million)www.sec.gov
  8. Adam Meyers (CrowdStrike SVP), written testimony, House Homeland Security Subcommittee (Sep 24, 2024)homeland.house.gov
  9. George Kurtz on X, Jul 19, 2024, 09:45 UTCx.com
  10. Patrick Wardle on X, Jul 19, 2024 (the crash-dump index 0x14)x.com
  11. Hacker News, Jul 19, 2024 — "CrowdStrike Update: Windows Bluescreen and Boot Loops" (4,489 points)news.ycombinator.com
  12. The Guardian, Jul 24, 2024 — "CrowdStrike global outage to cost US Fortune 500 companies $5.4bn" (Parametrix estimate)www.theguardian.com
  13. Hacker News, Jul 21, 2024 — "Initial details about why CrowdStrike's CSAgent.sys crashed" (519 points)news.ycombinator.com
  14. Wikipedia — 2024 CrowdStrike-related IT outagesen.wikipedia.org

Похожие видео

postmortem · ru · 25 сент. 2026 г.

Ошибка в одну миллисекунду остановила воздушное движение в Великобритании. На шесть часов.

Во вторник, 8 сентября, в 10:00 обычный запрос squawk-кода в Национальной системе воздушного пространства NATS (NAS) прерывается сообщением с более высоким приоритетом в процессе обновления значения.

3:06 ↗
postmortem · ru · 22 сент. 2026 г.

Перезагрузка отбросила Telstra в 2006 год. Девять миллионов телефонов.

Инженер в Мельбурне в 2:50 ночи снова включает шасси синхронизации, и к завтраку крупнейшая мобильная сеть Австралии соглашается, что сейчас ноябрь 2006 года. 8 июля 2026 года: GPS-карта в шасси NTP T

3:15 ↗