Целостность кода платформы

Значительной проблемой при эксплуатации такой сложной системы, как Microsoft Azure, является ее организация таким образом, чтобы в ней работало только авторизованное программное обеспечение. Использование неавторизованного программного обеспечения сопряжено с рядом рисков для предприятия:

  • Угрозы безопасности, такие как специальные средства атаки, настраиваемые вредоносные программы и сторонние программы с известными уязвимостями
  • Риски соответствия, когда утвержденный процесс управления изменениями не используется для внедрения нового программного обеспечения
  • Риск качества стороннего разработанного программного обеспечения, которое может не соответствовать эксплуатационным требованиям бизнеса

В Azure существует такая же проблема, причем имеющая еще более высокий уровень сложности. На тысячах серверов работает программное обеспечение, разработанное и обслуживаемое множеством инженеров. В этом случае формируется множество направлений атак, которые невозможно сократить только с помощью бизнес-процессов.

Добавление шлюза авторизации

В Azure используется многофункциональный процесс проектирования, который реализует шлюзы для обеспечения безопасности, соответствия и качества развертываемого программного обеспечения. Этот процесс включает управление доступом к исходному коду, проведение коллегиальных проверок кода, выполнение статического анализа уязвимостей системы безопасности, поддержку жизненного цикла разработки защищенных приложений (SDL) Майкрософт и проведение функциональных испытаний и тестов качества. Необходимо гарантировать, что развертывание программного обеспечения проводилось в соответствии с этим процессом. Обеспечить эту гарантию помогает целостность кода.

Целостность кода как шлюз авторизации

Целостность кода — это служба уровня ядра, которая стала доступна начиная с Windows Server 2016. Целостность кода может применять строгую политику контроля выполнения при загрузке драйвера или библиотеки DLL, выполнении исполняемого двоичного файла или скрипта. Для Linux существуют аналогичные системы, такие как DM-Verity. Политика целостности кода состоит из набора индикаторов авторизации — сертификатов для подписи кода или хэшей файлов SHA256, — которые ядро сопоставляет перед загрузкой или выполнением двоичного файла или скрипта.

Благодаря целостности кода системный администратор может определить политику, которая разрешает только двоичные файлы и скрипты, подписанные определенными сертификатами или совпадающие с указанными хэшами SHA256. Ядро применяет эту политику, блокируя выполнение всех объектов, не соответствующих заданной политике.

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

Процесс сборки

Как упоминалось выше, система сборки Azure содержит обширный набор тестов для обеспечения безопасности изменений ПО и их соответствия требованиям. После того как сборка прошла проверку, система сборки подписывает ее с помощью сертификата сборки Azure. Сертификат указывает на то, что сборка прошла весь процесс управления изменениями. Окончательный тест, через который проходит сборка, называется Code Signature Validation (CSV). CSV подтверждает, что новые созданные двоичные файлы соответствуют политике целостности кода, прежде чем они будут развернуты в рабочей среде. Это дает высокую степень уверенности в том, что неправильно подписанные сертификаты не станут причиной перебоев в работе клиентов. Если CSV обнаруживает проблему, сборка прерывается, и вызываются соответствующие инженеры для изучения и устранения проблемы.

Безопасность во время развертывания

Несмотря на то, что тест CSV выполняется для каждой сборки, существует вероятность того, что какое-либо изменение или несоответствие в рабочей среде может привести к сбою, связанному с целостностью кода. Например, на компьютере может быть запущена старая версия политики целостности кода, или она может находиться в неработоспособном состоянии, что дает ложноположительные результаты для целостности кода. (Все это уже было в Azure.) Поэтому необходимо продолжать обеспечивать защиту от риска сбоя во время развертывания.

Развертывание всех изменений в Azure должно проходить через ряд этапов. Первым являются внутренние тестовые экземпляры Azure. Следующий этап используется только для обслуживания других команд по разработке продуктов Майкрософт. Последний этап предназначен для сторонних клиентов. Развернутое изменение проходит каждый этап поочередно и приостанавливается для измерения работоспособности этапа. Если изменение не оказывает негативного влияния, оно переходит на следующий этап. Если в политику целостности кода внесено неверное изменение, оно будет обнаружено во время этого промежуточного развертывания, и будет выполнен его откат.

Реагирование на инциденты

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

Дальнейшие действия

Узнайте, как в Windows 10 используется настраиваемая целостность кода.

Дополнительные сведения о том, что мы делаем для обеспечения целостности и безопасности платформы, см. в следующих статьях: