Большая часть работы, обеспечивающей надежность продукта безопасности, невидима. Пользователи видят завершение сканирования, блокировку угрозы, применение обновления за ночь. Они не видят базовую платформу. Среды выполнения, управляемые библиотеки, собственные драйверы и т. д. Windows Все требования должны оставаться актуальными и обеспечивать согласованную работу на миллионах конечных точек. Наш переход на .NET 10 — один из примеров того, как мы поддерживаем эту платформу в рабочем состоянии, и именно на этом мы сосредоточимся в данной статье.
Легко было бы назвать эти обновления задачами по техническому обслуживанию и забыть о них. Но это было бы преуменьшением. Наш код работает непрерывно, с повышенными привилегиями, рядом с некоторыми из наиболее важных частей системы. Windows .
Каждая зависимость в нашем стеке, от среды выполнения и сторонних библиотек до собственных драйверов и требований операционной системы, влияет на среду, в которой работает наше программное обеспечение. Когда изменяется одна зависимость, всё, что от неё зависит, также может потребовать изменений.
Проблема: платформы отстают, если стоят на месте.
В сфере защиты конечных устройств земля никогда не перестает двигаться. Windows Эволюция. Эволюция угроз. Эволюция аппаратного обеспечения: от ноутбуков на базе ARM64 до машин с гораздо большим объемом памяти и более быстрым хранилищем, чем те, для которых изначально был написан наш код.
Платформа, которая стоит на месте, не остаётся неизменной. Она отстаёт. Каждый пропущенный релиз зависимости или среды выполнения увеличивает разрыв между экосистемой, на которой мы строим, и той, которая стабильна сегодня.
Современная среда выполнения, и в частности .NET 10, может обеспечить нам лучшую безопасность, более быстрые пути выполнения кода, меньший объем используемой памяти и более полную диагностику. Она также предоставляет нашим инженерам улучшения в языке программирования и инструментах, которые помогают им работать более эффективно.
В сфере разработки программного обеспечения для обеспечения безопасности ставки особенно высоки:
- Веб-приложение можно откатить при развертывании. Программное обеспечение, уже установленное на устройстве клиента, откатить нельзя.
- Наш код выполняется с высокими привилегиями, совместно с драйверами ядра и средствами защиты от несанкционированного доступа.
- Регрессия во время выполнения не затрагивает один сервер. Она потенциально может повлиять на миллионы машин.
Поэтому мы относимся к обновлению во время выполнения с той же тщательностью, что и к функции безопасности.
Задача: всё движется согласованно.
Malwarebytes для Windows Это не одна программа. Это скоординированная система: пользовательский интерфейс, несколько длительно работающих процессов. Windows сервисы, установщик, конвейер самообновления, интерфейс плагинов и управляемые сторонними разработчиками зависимости.
Они находятся выше встроенных драйверов и нашего механизма обнаружения. Миграция на .NET 10 охватила управляемые части. Malwarebytes При этом основное ядро остается нетронутым. Но различные слои все равно должны взаимодействовать друг с другом.
Для осуществления миграции необходимо было одновременно удовлетворить несколько требований:
- Код, имеющий важное значение для безопасности, должен был вести себя идентично до и после внесения изменений.
- Нативные драйверы и уровни защиты от несанкционированного доступа должны были продолжать корректно работать с управляемым кодом.
- Конвейер установки и обновления должен был развернуть новые файлы среды выполнения и удалить старые.
- Плагины и сторонние зависимости должны были оставаться совместимыми.
- Существующий Malwarebytes Работа установок должна была продолжаться.
- Наша автоматизированная проверка должна была быть достаточно обширной, чтобы мы могли доверять результату без необходимости проверять каждый путь вручную.
Граница между управляемым и нативным кодом заслуживает особого внимания. Управляемый код в наших сервисах взаимодействует с нативными компонентами через такие интерфейсы, как P/Invoke и COM. Изменения во время выполнения могут незаметно повлиять на то, как эти различные части Malwarebytes Общайтесь и работайте вместе.
Эти различия могут никогда не проявиться при демонстрации. Они могут обнаружиться только на одном из 10 000 устройств. Важно выявить их до того, как это сделают клиенты.
Не все обновления выглядят одинаково.
Существует три основные причины, по которым мы обновляем зависимости: мы сами так решили, платформа вынуждает нас это сделать, или нас вынуждает к этому уязвимость. Каждая из них имеет свои сроки.
Модернизация по выбору. Мы можем выбрать переход на новую среду выполнения, новую основную версию библиотеки или новые возможности платформы, чтобы воспользоваться преимуществами новых функций, исправлений или улучшений безопасности.
Изменения базовой конфигурации. По мере развития требований к платформе некоторые старые ограничения совместимости могут препятствовать модернизации. Например, переход на .NET 10 позволил нам обновить базовую конфигурацию приложения и внедрить более новую, поддерживаемую среду выполнения. В рамках этих же изменений, Windows Поддержка версии 7 устарела.
Принудительное обновление. Иногда обнаруживается уязвимость в библиотеке, которую мы поставляем, или в системе, от которой мы зависим. Изменение больше не является необязательным, и сроки его выполнения не зависят от нас. Что мы можем контролировать, так это нашу готовность: тестирование, процесс выпуска и поэтапное развертывание, которые позволяют нам быстро реагировать, не создавая новых проблем.
Причины разные, сроки разные, но каждый случай требует одинаково тщательного подхода.
Миграция на .NET: почему мы это сделали
Переход на .NET 10 дает Malwarebytes более надежная, поддерживаемая и функциональная основа для Windows с рядом дополнительных преимуществ:
Безопасность. Современная среда выполнения выигрывает от постоянной работы Microsoft по обеспечению безопасности, включая более безопасные значения по умолчанию, более надежную криптографию и меры по устранению ошибок, связанных с памятью и совместимостью. Использование среды выполнения, активно поддерживаемой Microsoft, позволяет нам продолжать применять исправления при обнаружении уязвимостей.
Поддерживаемая платформа. Возможно, это не самая привлекательная причина, но .NET 10 позволяет нам оставаться на поддерживаемой, активно разрабатываемой платформе, которая лучше совместима с более новыми версиями. Windows Это упрощает внедрение будущих исправлений, функций и улучшений в качестве рутинной работы, а не разовых проектов.
Диагностика и мониторинг. Современные .NET обладают более мощными встроенными средствами трассировки, метриками и диагностикой сбоев. В продукте, связанном с безопасностью, понимание того, как код ведет себя в реальных условиях, имеет большое значение. Более качественная диагностика помогает нам выявлять и устранять проблемы с надежностью.
Производительность и эффективность использования памяти. В последних версиях .NET улучшены компилятор «на лету», сборщик мусора и основные библиотеки. Наши процессы работают весь день в фоновом режиме, поэтому эффективность их работы и управления памятью имеет значение. Эти возможности предоставляют нам больше перспектив для повышения эффективности, хотя влияние будет различаться в зависимости от компонентов.
Миграция на .NET: как мы это сделали
Основной принцип прост: никогда не продвигайтесь быстрее, чем позволяют имеющиеся данные.
Мы начали с того, что выделили для работы отдельную ветку. Мы перенацелили платформу и обновили все управляемые зависимости, чтобы новая среда выполнения и кодовая база точно определили, какие компоненты должны быть включены в проект.
На раннем этапе выявились некоторые менее очевидные последствия обновления: библиотеки, которые были переименованы или интегрированы в среду выполнения, файлы, которые больше не нужны, и новые, которые пришлось поставлять вместо них.

Процесс развертывания легко упустить из виду, а ошибки обходятся дорого. Миграция во время выполнения — это не только работающий код, но и то, что оказывается на диске клиента.
Нашей службе установки и обновления пришлось изучить структуру файлов новой среды выполнения. Им нужно было удалить зависимости, которые теперь предоставляет среда выполнения, прекратить распространение переименованных файлов и обеспечить корректную доставку замен как при чистой установке, так и при обновлении на месте.
Правильная организация развертывания — это разница между обновлением, которое пользователи никогда не заметят, и обновлением, которое создаст проблемы с поддержкой.
После того как сборка заработала корректно, основное внимание переключилось на проверку.
В ходе миграции были задействованы:
- Проведено масштабное автоматизированное тестирование всех сервисов, путей установки и обновления.
- Проверка совместимости с реальными конфигурациями и предыдущими установками.
- Сравнительный анализ производительности для выявления регрессий в процессе запуска, использования памяти и сканирования.
- Поэтапное и опосредованное внедрение, начинающееся с небольших популяций и расширяющееся только тогда, когда результаты показывают, что это безопасно.
- Непрерывный мониторинг и автоматическое выявление регрессий в полевых условиях.
- Межфункциональная работа в рамках подразделений, занимающихся платформой, контролем качества, установкой и обновлением, а также разработкой релизов.

«Мы никогда не продвигались быстрее, чем позволяли имеющиеся данные. Каждый пункт контроля должен был загореться зеленым самостоятельно».
Миграция на .NET: компромиссы
Всё это не давалось даром, и выбор подразумевал сознательные компромиссы.
Компромисс при работе с этой веткой заключался в отклонении от основной. Изоляция миграции защищала основной код, но чем дольше существовала эта ветка, тем больше она могла отклоняться от активной разработки. Мы управляли этим риском за счет частой интеграции, а не оставляли одно большое, рискованное слияние на конец.
Компромисс при развертывании заключался в скорости. Поэтапное развертывание также означало, что клиенты получали обновление позже, чем при массовом выпуске. Мы приняли этот компромисс. Данные, полученные на небольших группах пользователей, дают нам возможность выявлять проблемы до того, как обновление достигнет гораздо большего числа конечных устройств.
Компромисс при использовании AOT заключался в гибкости. Предварительная компиляция может улучшить производительность при запуске, но также может ограничивать динамическое поведение. Мы применяли её выборочно, для каждого компонента отдельно, а не повсеместно по умолчанию.
Что означает миграция на .NET 10 для клиентов
Наилучший результат инфраструктурных работ заключается в том, что клиенты получают от них выгоду, не задумываясь об этом.
В .NET 10 эти преимущества для Malwarebytes В число клиентов входят:
- Повышена надежность в рамках полностью поддерживаемой и активно обновляемой среды выполнения.
- Более надежная основа, которая выигрывает от постоянных улучшений безопасности платформы.
- Доступ к новым функциям и исправлениям .NET.
- Улучшена поддержка новых версий Windows .
- Более современные инструменты .NET могут помочь нам быстрее разрабатывать и внедрять новые средства защиты.
Уроки, которые стоит запомнить
Каждое из этих обновлений — среда выполнения, базовые параметры, исправления безопасности — укрепляет убежденность команды в правильности некоторых моментов.
Обновление платформы — это стратегические инвестиции во все, что на ней построено. Модернизация также наиболее эффективна, когда она непрерывна: чем дольше платформа отстает, тем сложнее становится ее последующее обновление.
Автоматизация особенно важна для изменений такого масштаба. Не менее важны и мелкие, неприметные решения, принятые за годы до этого, например, поддержание четких границ между компонентами и наличие процесса сборки, который точно знает, что именно будет выпущено.
Именно эти основы делают возможными более масштабные перемены.
«Технический долг накапливается так же, как и финансовый. Самое дешевое обновление — это то, которое вы никогда не откладывали».
Что будет дальше?
Ни одно обновление не является финишной линией. Каждое из них — это шаг в более длинной схеме: непрерывная модернизация, осуществляемая целенаправленными шагами, чтобы платформа никогда не отставала. Базовые показатели будут снова меняться. Уязвимости будут появляться без предупреждения. Каждое обновление будет проходить с соблюдением одних и тех же правил: одни и те же тесты, одно и то же поэтапное внедрение и одни и те же проверки, прежде чем мы двинемся дальше.
Именно такая дисциплина является залогом успеха продукта, которому доверяют и который должен работать каждый день, на любой машине, без каких-либо нареканий.
Malwarebytes для Windows на .NET 10 был выпущен в версии 5.6.0. Это последний шаг в рамках давнего стремления инвестировать в платформу, лежащую в основе продукта, чтобы защита, обеспечиваемая этим продуктом, постоянно улучшалась.
«Один из лучших комплексов решений для кибербезопасности в мире».
По данным CNET.Прочитать их обзор →





