Почему Windows до сих пор не научилась самостоятельно справляться с критическими ошибками.
В сентябре этого года на слушаниях в Конгрессе США обсуждался инцидент CrowdStrike, произошедший в июле. Один из руководителей компании отвечал на вопросы законодателей и, в ходе дебатов, прозвучала интересная мысль о том, что подобные крупные инциденты можно было бы избежать благодаря эффективной системе автоматического восстановления.
Без углубления в технические детали самого инцидента и возможных путей его предотвращения возникает фундаментальный вопрос: должна ли автоматическая система восстановления быть обязанностью стороннего поставщика ПО или же это следует рассматривать в более широком контексте устойчивости операционной системы, чтобы именно ОС инициировала процесс автовосстановления в сотрудничестве со сторонним приложением?
Катастрофическая ошибка запуска, которая приводит к появлению «синего экрана смерти» Windows (BSOD), возникает, когда устройство не может загрузить необходимое программное обеспечение для работы ОС и установленных на устройстве приложений. Например, такая ошибка может быть вызвана установкой или обновлением ПО; в данном случае некорректный файл обновления, задействованный во время загрузки устройства, вызвал BSOD, что привело к глобальному сбою IT-инфраструктуры.
Некоторое ПО, например, средства кибербезопасности, требуют низкоуровневого доступа, который называется «режим ядра». Если компонент на этом уровне выходит из строя, BSOD становится весьма вероятным результатом. При перезагрузке устройства BSOD появляется снова, и для выхода из этого цикла требуется вмешательство эксперта. Стоит отметить, что BSOD может возникнуть и в «режиме пользователя», который обеспечивает более ограниченную среду для работы программного обеспечения, однако там проблему, зачастую, можно решить быстрее и проще.
Если термин «режим ядра» кажется слишком непонятным, можно использовать аналогию. Представьте двигатель автомобиля с бензиновым двигателем. Для воспламенения топливно-воздушной смеси требуется искра, которая создаётся свечой зажигания.
В соответствии с регулярным графиком технического обслуживания свечи зажигания нуждаются в замене, иначе двигатель может работать некорректно. Механик открывает капот и меняет свечи. Затем он поворачивает ключ, и двигатель заводится (если, конечно, всё работает правильно). Примерно это и произошло в данном инциденте, только с точки зрения программного обеспечения.
Теперь возникает вопрос: обязан ли производитель свечей зажигания, которых много на рынке, создавать механизм автоматического восстановления для этой ситуации? В контексте программного обеспечения, должна ли за это отвечать сторонняя компания? Или механик просто должен снова открыть капот, вернуть проверенные свечи, которые точно работают, и запустить двигатель в его прежнем исправном состоянии?
С точки зрения логики, процесс восстановления должен быть одинаковым в любых ситуациях, независимо от стороннего ПО (или свеч зажигания), участвующего в процессе. Конечно, реальность несколько сложнее: свечи зажигания (ПО) обновляются и заменяются без ведома механика (ОС). Однако эта аналогия позволяет лучше понять суть проблемы.
Когда стороннее ПО обновляется, и при этом в ключевые компоненты устройства вносятся изменения или устанавливается новый файл, необходимый для запуска, этот файл нужно зарегистрировать в операционной системе. Это позволит сохранить предыдущую рабочую версию файла или состояние устройства, не перезаписывая их.
Тогда, если при следующем запуске произойдёт BSOD, система сможет во время перезагрузки проверить, правильно ли прошла предыдущая загрузка. В случае обнаружения ошибки она предложит пользователю восстановить предыдущую версию файла или состояния, удалив обновление. Такой подход применим для любого стороннего ПО, имеющего доступ к «режиму ядра».
Существует прецедент для подобного восстановления на уровне ОС. При установке нового драйвера дисплея, если он не загружается корректно при запуске, ОС автоматически фиксирует сбой, возвращает устройство в состояние с низким разрешением и предлагает драйвер, совместимый со всеми дисплеями. Такой сценарий, конечно, неприменим для продуктов кибербезопасности, так как нет стандартного состояния, но возможно восстановление до предыдущего рабочего состояния до обновления.
Встроенный в ОС механизм восстановления для всего стороннего ПО был бы эффективнее, чем если бы каждый поставщик разрабатывал своё собственное решение. Безусловно, для этого потребовались бы консультации и сотрудничество между ОС и поставщиками стороннего ПО, чтобы механизм был работоспособен и защищён от злоумышленников.
Возможно, создание подобного решения было бы крайне сложной задачей, но даже так оно выглядело бы надёжнее, чем попытки тысяч разработчиков ПО создать собственные методы восстановления. В конечном итоге, это могло бы значительно повысить устойчивость системы и предотвратить массовые сбои — как в случае с некорректным обновлением CrowdStrike.
Компания Microsoft за долгие годы не раз пыталась внедрить качественную систему восстановления и предложить решения для автоматического устранения ошибок, однако есть несколько причин, почему процесс автовосстановления остаётся далеко не идеальным.
Во-первых, Windows — это экосистема с огромным количеством сторонних приложений и драйверов, которые должны корректно работать друг с другом. Совместимость различных программ и оборудования создаёт множество потенциальных конфликтов, которые трудно предсказать и заранее обработать. Каждое обновление может повлиять на тысячи устройств с разной конфигурацией, что затрудняет создание универсального решения для восстановления.
Во-вторых, процесс восстановления сталкивается с техническими ограничениями из-за низкоуровневого доступа к системе. Как мы упоминали выше, многие сторонние решения безопасности работают в «режиме ядра», что даёт им глубокий доступ к ОС. При сбоях на этом уровне система не всегда способна распознать проблему и самостоятельно вернуть устройство в рабочее состояние без риска вызвать другие ошибки.
В-третьих, автоматическое восстановление ограничивается сложностью сценариев отказов. Причины проблем могут быть непредсказуемыми, например, несовместимость обновлений, повреждение файлов или конфигураций, либо ошибки на уровне аппаратного обеспечения. Даже при наличии точки восстановления не всегда можно откатиться к безопасному состоянию без риска потери данных или дополнительных сбоев.
Причина, по которой автоматическое восстановление редко работает без вмешательства специалиста, заключается в сложности и разнообразии возможных ошибок. Многие из них требуют ручного анализа, корректировки системных параметров, замены драйверов или даже полной переустановки системы. Алгоритмы восстановления не могут предусмотреть все возможные сценарии, а универсальные решения зачастую неэффективны в специфических ситуациях.
Кроме того, восстановление системы нередко требует доступа к инструментам или знаниям, которыми обладают только специалисты. Например, выявление проблемных обновлений или модулей, устранение конфликтов между драйверами и правильное восстановление повреждённых системных файлов — всё это задачи, которые сложно автоматизировать. Именно поэтому конечные пользователи часто вынуждены обращаться за помощью к профессионалам при сбоях системы.
Автоматическое восстановление системы — сложная задача, которая остаётся актуальной для всех современных операционных систем, включая Windows. Несмотря на усилия по улучшению механизмов восстановления, такие факторы, как разнообразие аппаратного обеспечения, сторонние программы и сложность сценариев сбоев, мешают создать универсальное и надёжное решение. Именно поэтому системы зачастую не справляются с критическими ошибками без вмешательства специалиста, особенно когда проблема лежит на уровне ядра.
Внедрение более эффективных методов восстановления на уровне ОС могло бы значительно повысить устойчивость экосистемы, снизить зависимость от сторонних решений и упростить жизнь как рядовых пользователей, так и крупных компаний. Но для этого необходимы серьёзные совместные усилия как со стороны разработчиков операционных систем, так и со стороны сторонних производителей программного обеспечения.
Только комплексный подход к обеспечению устойчивости и самовосстановлению систем позволит сократить число критических сбоев и повысить общую надёжность цифровой инфраструктуры.
Ладно, не доказали. Но мы работаем над этим