Как известно, 19 июля 2024 года произошёл серьёзный инцидент с апдейтом программного обеспечения CrowdStrike Falcon для защиты компьютеров (отчёт Microsoft, отчёт CrowdStrike). Обновление конфигурации вызвало ошибку безопасности чтения из границ памяти в ELAM-драйвере CSagent.sys. Поскольку тот работает на уровне ядра Windows, то миллионы ПК ушли в BSOD.

Количество пострадавших официально оценили в 8,5 млн:



Microsoft поясняет, что здесь количество полученных отчётов. Реально пострадавших гораздо больше. Серьёзно пострадали банки и авиакомпании. В частности, Delta. Общий ущерб для мировой экономики от бага страховщики оценили в $5,4 млрд.

В чём же главная проблема и «защитного софта» с драйверами ядра Windows?


Драйверы ядра


Многий «защитный софт» включая антивирусы, использует драйверы ядра. На это есть несколько причин.

Во-первых, драйверы ядра обеспечивают видимость процессов в системе и возможность приоритетной загрузки для обнаружения специфических угроз, таких как буткиты и руткиты. Кроме того, Microsoft предоставляет богатый функционал вроде обратных системных вызовов для создания процессов и потоков, а также драйверы фильтров, которые могут отслеживать создание, удаление или изменение файлов. Из ядра можно делать обратные вызовы драйверов для блокировки таких действий, как создание файлов или процессов. Многие разработчики также используют драйверы для сбора различной сетевой информации в ядре с помощью класса драйверов NDIS.


Фото из международного аэропорта Денвера, источник

Вторая причина — производительность. Например, анализ и сбор данных о сетевой активности на уровне ядра происходит быстрее. Существует множество сценариев, в которых сбор и анализ данных могут быть оптимизированы для работы вне ядра, и Microsoft продолжает сотрудничать с разработчиками для повышения производительности и предоставления лучших практик, чтобы достичь паритета при работе вне режима ядра.

Третья причина загрузки в режим ядра — устойчивость программы ко взлому. Разработчики систем безопасности хотят быть уверены, что их ПО не будет деактивировано вредоносными программами, даже если эти злоумышленники имеют привилегии администратора. Они также хотят, чтобы их драйверы загружались как можно раньше, чтобы наблюдать за системными событиями в кратчайшие сроки. По этой причине в Windows предусмотрен механизм запуска драйверов, помеченных как Early Launch Antimalware (ELAM), в самом начале процесса загрузки. В частности, CrowdStrike подписала свой драйвер CSboot как ELAM, позволяя ему загружаться на ранних этапах загрузки.

В общем случае, когда речь идёт о драйверах ядра, производители систем безопасности должны найти компромисс. Драйверы ядра обеспечивают вышеперечисленные свойства ценой устойчивости. Поскольку драйверы ядра работают на самом доверенном уровне Windows, разработчики средств безопасности должны тщательно балансировать между своими потребностями, такими как видимость и защита от взлома, и рисками работы в режиме ядра.

Любой код, работающий на уровне ядра, требует тщательной проверки, поскольку он не может выйти из строя и перезапуститься, как обычное пользовательское приложение. Это правило для всех ОС.

Баланса между безопасностью и надёжностью можно достичь, если минимизировать количество кода в режиме ядра:


Пример защитного софта с балансом между безопасностью и надёжностью, источник: Microsoft

Windows предоставляет несколько подходов к защите пользовательского режима от несанкционированного вмешательства: это энклавы Virtualization-based security (VBS) и защищённые процессы. Разработчики могут использовать их для защиты ключевых процессов в своём ПО.

Для отслеживания событий Windows также позволяет использовать события ETW и интерфейсы пользовательского режима, такие как Antimalware Scan Interface. Эти надёжные механизмы можно использовать для уменьшения объёма кода ядра в решениях безопасности, что обеспечивает баланс между безопасностью и надёжностью.

Выводы


Уровень безопасности Windows можно повысить с помощью встроенных инструментов, функций и настроек. Некоторые из них установлены на максимальную безопасность по умолчанию, а другие нет. Microsoft обещает увеличивать уровень безопасности Windows 11 по умолчанию, который в данный момент включает различные функции и настройки, такие как TPM2.0, Virtualization-based security (VBS), Hypervisor-protected Code Integrity (HVCI) и др. Список этих функций будет увеличиваться. Microsoft также переходит на Rust как более защищённый язык.

Ранее мы рассказывали, как укрепить Windows Defender по максимуму.

Но главный вывод в том, что антивирусы и другой «защитный софт» вводит в систему новые векторы атаки, поскольку работает на уровне ядра с повышенными привилегиями. Microsoft считает, что разработчики защитного ПО делают это не совсем грамотно. В итоге те же антивирусы могут представлять больше вреда, чем пользы.

Комментарии (12)


  1. kovserg
    22.09.2024 19:24
    +3

    Самое интересно что идея с загрузкой последней удачной конфигурации, так до сих пор и не работает.
    И вообще средства восстановления видновс представляют очень жалкое зрелище.


    1. nidalee
      22.09.2024 19:24

      И вообще средства восстановления видновс представляют очень жалкое зрелище.

      Хм. Ну они хотя бы есть и пытаются. Я пару раз чинил сам не знаю что с их помощью. Тут буквально позавчера VPS обновил на Ubuntu 24.04, так GRUB взял и сдох. Само-собой, никаких средств восстановления - только старый-добрый терминал c приветливым grub>


      1. UncleJonathan
        22.09.2024 19:24

        Так это, скорее всего, не grub сдох

        И средства восстановления есть, просто не знаю дистрибутива, в котором они включены по умолчанию (возможно, SuSE, не пробовал ни разу).

        Если самому руками сделать, то можно использовать btrfs со снэпшотами и реализовать возможность отката к предыдущему снимку в случае неудачного обновления.

        Ну а то, что пока приходится руками делать... Ну так, когда я в последний раз пользовался Windows (2022 год почти весь), и рылся по форумам Microsoft, по ощущениям в каждой ветке по любому вопросу, хоть раз да упоминалось "переустановите систему". А Linux - и дома, и на серверах у меня без переустановки десятилетиями (да, именно так!) стоит.


        1. nidalee
          22.09.2024 19:24
          +1

          Дело в том, что "средство восстановления" в виде консоли grub для рядового пользователя настолько бесполезны, что проще действительно переустановить систему. Потому что в отличие от многих команд в терминале системы, команды в консоли grub нужно не просто копипастить, а понимать что они пишут в ответ.

          Так это, скорее всего, не grub сдох

          Да черт его знает, просто грузился в итоге вручную указывая путь до нужных файлов, а после - переустановил grub. Там, правда, тоже не обошлось без приколов, потому что при обновлении система решила переименовать сетевой интерфейс, и содержимое /etc/network/interfaces перестало соответствовать действительности.

          А Linux - и дома, и на серверах у меня без переустановки десятилетиями (да, именно так!) стоит.

          Linux (конкретно Ubuntu) я в последний раз переустанавливал в прошлом году, потому что после покупки видеокарты в домашний сервер оказалось, что накатить ГУЙ на Ubuntu Server решительно невозможно - свежеустановленные иксы просто падали с непонятной ошибкой, а выдача Google отправляла в основном на форумы с темами аж 2005 годов. В итоге после перебора нескольких вариантов DE оказалось проще переставить Ubuntu Desktop.

          Также я пару раз успешно ломал систему (например, один раз у меня хватило ума установить другую версию питона). Но я бехитростно раз в месяц-другой просто копирую весь / на другой диск через rclone, так что процесс восстановления еще бьющийся в конвульсиях системы обычно весьма тривиален.


          1. Johan_Palych
            22.09.2024 19:24

            при обновлении система решила переименовать сетевой интерфейс, и содержимое /etc/network/interfaces 

            Ubuntu перешла на netplan с версии 17.10
            Wed Jun 21 00:58:33 UTC 2017 netplan by default in artful (replacing ifupdown)
            файла interfaces не должно быть вообще


            1. nidalee
              22.09.2024 19:24

              Да, на 3 из 4 моих машин перешла. На одной решила не переходить. Я не при делах.

              Скрытый текст


          1. UncleJonathan
            22.09.2024 19:24

            Дело в том, что "средство восстановления" в виде консоли grub для рядового пользователя настолько бесполезны, что проще действительно переустановить систему.

            Дело в том, что и в Windows в огромном количестве случаев для восстановления требуется нешуточная экспертиза. Просто она у вас уже есть. И именно поэтому кажется, что в Windows проще, а не потому что на самом деле проще.

            Кроме того, даже ответы официальных сотрудников Microsoft, очень часто сводятся к "переустановите систему" (фейспалм).

            Linux (конкретно Ubuntu) я в последний раз переустанавливал в прошлом году, потому что после покупки видеокарты в домашний сервер оказалось, что накатить ГУЙ на Ubuntu Server решительно невозможно - свежеустановленные иксы просто падали с непонятной ошибкой, а выдача Google отправляла в основном на форумы с темами аж 2005 годов. В итоге после перебора нескольких вариантов DE оказалось проще переставить Ubuntu Desktop.

            Ну вот я на 100% уверен, что в таком случае смог бы справиться без переустановки. В частности, потому что в Linux все конфигурационные файлы - текстовые, их местоположения известны, они у каждой программы свои. Если удалить что-то (X сервер) с концами (конфигурационными файлами), то можно будет установить только его заново с нуля.

            Да скорее всего, справился бы даже без полного удаления, т.к. мне на 100% понятно, как оно работает, и если оно в принципе заводится на любом дистрибутиве, то смогу завести на любом другом.


            1. nidalee
              22.09.2024 19:24

              Дело в том, что и в Windows в огромном количестве случаев для восстановления требуется нешуточная экспертиза. Просто она у вас уже есть.

              У меня нет экспертизы, в последний раз моей проблемой под виндой было то, что она просто решила в один день перестать писать логи системы и приложений в журнал событий. Такой расклад меня не устроил, и я винду переустановил (это тоже всем с подобной проблемой предлагают после бесполезного в данном случае набора из DISM и SFC). Подобное же решение советую всем: гуглить проблемы под любую ОС обычно дольше, чем переустанавливать Windows.

              Ну вот я на 100% уверен, что в таком случае смог бы справиться без переустановки.

              Несомненно, есть люди, которые без переустановки справятся с чем угодно. Но если проблема даже не гуглится (сотни постов с проблемой "ubuntu 22 no video output after nvidia drivers" - это шум, а не полезная информация), то количество таких людей стремится к десяткам.


  1. kt97679
    22.09.2024 19:24
    +4

    @GlobalSign_adminможно вас попросить раскрыть тезис о том, как переход на Rust помог бы избежать данного инцидента? Если я правильно понял в данном случае проблема была в файлах данных. Использование другого языка не позволило бы предотвратить инцидент. Или я что-то упускаю?


    1. n2dt4qd2wg9b
      22.09.2024 19:24

      Разыменование нулевого указателя было причиной


    1. kh0
      22.09.2024 19:24

      Данные сами по себе бсод не вызывают! Бсод вызывают их обработчики, если коряво написаны.


  1. Hve2024
    22.09.2024 19:24
    +1

    сколько это мусолить можно не пойму, я до этого сбоя знать не знал о них, пропиарились