Обязательный контроль целостности (англ.Mandatory Integrity Control, MIC) представляет собой новую функцию безопасности, внедрённую в Windows Vista и Astra Linux и реализованную в следующей линейке операционных системWindows, которая добавляет управление доступом с помощью уровней целостности (англ.Integrity Levels, IL). Уровень целостности представляет собой уровень надежности субъекта или объекта доступа. Цель этого механизма заключается в использовании политик управления целостностью и уровнями целостности задействованных субъектов и объектов для ограничения доступа процессам, которые считаются потенциально менее надежными, по сравнению с доверенными процессами, работающими под той же учетной записью пользователя[источник не указан 426 дней].
Обязательный контроль целостности определяется с помощью нового типа записи управления доступом (ACE) для представления уровня целостности объекта в его дескрипторе безопасности. В Windows списки управления доступом (ACL) обычно используются для предоставления прав доступа (разрешения на чтение, запись и выполнение)пользователям или группам. При инициализации маркеру доступа процесса присваивается уровень целостности. Когда поток пытается получить доступ к объекту (например, файлу), монитор ссылок сравнивает уровень целостности в маркере доступа процесса или потока с уровнем целостности в дескрипторе безопасности объекта. Windows ограничивает разрешенные права доступа в зависимости от того, является ли уровень целостности субъекта выше или ниже, чем уровень целостности объекта, в зависимости от заданной политики целостности в записи управления доступом (ACE). Подсистема безопасности использует уровни целостности для мандатного разграничения доступа, в отличие от дискреционного разграничения доступа, который реализован с помощью традиционных DACL.
В Windows Vista и более поздних определены 5 уровней целостности IL[1]:
По умолчанию процессы, запускаемые обычным пользователем (в том числе администратором), получают средний уровень целостности, а процессы запущенные через UAC с правами администратора — высокий.[2] С помощью задания различных уровней целостности обязательный контроль целостности позволяет изолировать потенциально уязвимые приложения (например, приложения, ориентированные на работу в Интернете, офисные приложения, которые используются для открытия документов, полученных из недоверенных источников и т.д.). Процессы с низким уровнем целостности имеют меньший доступ (ограничены права на запись в объекты системы), чем процессы с более высокими уровнями целостности, т. к. обязательный (мандатный) контроль доступа осуществляется самой ОС Windows[источник не указан 502 дня].
Объекты с ACL, такие как именованные объекты, включая файлы, ключи реестра или другие процессы и потоки, имеют запись в ACL, которая определяет уровень целостности этого объекта. Она определяет минимальный уровень целостности процесса, который может использовать данный объект. Для объектов Windows по умолчанию задана мандатная политика целостности No-Write-Up (запрет на запись вверх), которая определяет, что процесс может записывать или удалять объект только тогда, когда его уровень целостности равен или превышает уровень целостности объекта.[2] Поэтому процесс, имеющий уровень целостности Low, не может открыть для записи файл, имеющий уровень целостности Medium, даже если DACL предоставляет процессу право записи.
Кроме того, процессы с низким уровнем целостности не могут открыть для чтения объекты процессов с более высоким уровнем целостности, поскольку для объектов процессов по умолчанию задана мандатная политика целостности No-Read-Up (запрет на чтение вверх).[3] Следовательно, процесс не может взаимодействовать с другим процессом, имеющим более высокий уровнем целостности. Процесс не может выполнять такие функции, как внедрение dll в процесс высшего уровня целостности, используя API-функцию создания удаленного потока[4], или отправить данные в другой процесс, используя функцию записи памяти процесса[5].
Применение
Хотя процессы наследуют уровень целостности процесса, создавшего его, уровень целостности можно настроить во время создания процесса. Помимо ограничения отправки оконных сообщений в технологии изоляции пользовательских интерфейсов (UIPI), обязательный контроль целостности используется такими приложениями, как Adobe Reader, Google Chrome, Internet Explorer и« проводник Windows», чтобы изолировать документы от уязвимых объектов в системе.[1]
Internet Explorer 7 применяет параметр «Защищенный режим» на основе обязательного контроля целостности, чтобы контролировать, открыта ли веб-страница как процесс с низким уровнем целостности или нет (при условии, что операционная система поддерживает обязательный контроль целостности) на основе настроек зон безопасности, тем самым предотвращая некоторые классы уязвимостей в безопасности. Поскольку Internet Explorer в этом случае работает как процесс с низким уровнем целостности, он не может изменять объекты системного уровня — файлы и операции реестра вместо этого «виртуализируются». Adobe Reader 10 и Google Chrome — это два других известных приложения, которые внедряют эту технологию, чтобы снизить их уязвимость для вредоносных программ.[6]
В Microsoft Office 2010 была представлена изолированная среда («песочница») под названием «Защищенный просмотр» для Excel, PowerPoint и Word, которая запрещает потенциально опасным документам изменять компоненты, файлы и другие ресурсы в системе.[7] «Защищенный просмотр» работает как процесс с низким уровнем целостности, а в Windows Vista и более поздних выпусках Windows использует обязательный контроль целостности и технологию изоляции пользовательских интерфейсов (UIPI) для дальнейшего ограничения «песочницы».[8]
Однако в некоторых случаях процесс с более высоким уровнем целостности должен выполнять определенные действия по отношению к процессу с более низким уровнем целостности, или для процесса с более низким уровнем целостности требуется доступ к ресурсам, доступ к которым может получить только процесс с более высоким уровнем целостности (например, при просмотре веб-страницы в защищенном режиме, сохранении файла, загруженного из Интернета, в папку, указанную пользователем). Процессы с высоким и низким уровнями целостности все еще могут взаимодействовать друг с другом, используя файлы, именованные каналы, LPC или другие разделяемые объекты. Разделяемый объект должен иметь низкий уровень целостности и разделяться как процессами низкого уровня целостности, так и высокого. Поскольку обязательный контроль целостности не мешает процессу с низким уровнем целостности разделять объекты с процессом с более высоким уровнем целостности, он может задействовать уязвимости в нём и заставить его работать от своего имени, приводя к Squatting-атаке. Тем не менее, «подрывные атаки» могут быть предотвращены за счет использования изоляции привилегий пользовательского интерфейса, которая использует преимущества обязательного контроля целостности[источник не указан 426 дней].