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



