- Иллюстрированный самоучитель по программированию систем защиты
- Понятия «пользовательский режим» и «режим ядра»
- Sysadminium
- Режимы доступа к процессору: режим ядра и пользовательский
- Режимы доступа к процессору
- Ужесточение политики работы со сторонними драйверами
- Переключение из одного режима в другой
- Наблюдение за переключениями в Системном мониторе
- Что значит пользовательский режим
- Пользовательский режим (user mode) и режим ядра (kernel mode)
Иллюстрированный самоучитель по программированию систем защиты
Понятия «пользовательский режим» и «режим ядра»
В этой главе рассматриваются ключевые архитектурные особенности и характеристики ОС Windows NT. Эти сведения необходимы для получения представления о назначении различных компонентов ОС, их взаимодействии друг с другом, а также для ознакомления с терминологией, используемой в данной книге. Кроме того, знание общей архитектуры ОС позволяет понять, какие возможности операционной системы могут задействовать средства защиты, расположенные на том или ином уровне архитектуры ОС.
Большое внимание в этой главе уделено модели драйвера, его структуре и характеристикам, а также взаимосвязи с другими драйверами и прикладными программами.
При обсуждении архитектуры ОС Windows NT постоянно используются понятия «режим пользователя» и «режим ядра», поэтому стоит определить, что это значит. Начнем с обсуждения разницы между пользовательским режимом и режимом ядра (user mode/kernel mode).
Пользовательский режим – наименее привилегированный режим, поддерживаемый NT; он не имеет прямого доступа к оборудованию и у него ограниченный доступ к памяти.
Режим ядра – привилегированный режим. Те части NT, которые исполняются в режиме ядра, такие как драйверы устройств и подсистемы типа Диспетчера Виртуальной Памяти, имеют прямой доступ ко всей аппаратуре и памяти.
Различия в работе программ пользовательского режима и режима ядра поддерживаются аппаратными средствами компьютера (а именно – процессором).
Большинство архитектур процессоров обеспечивают, по крайней мере, два аппаратных уровня привилегий. Аппаратный уровень привилегий процессора определяет возможное множество инструкций, которые может вызывать исполняемый в данный момент процессором код.
Хотя понятия «режим пользователя» и «режим ядра» часто используются для описания кода, на самом деле это уровни привилегий, ассоциированные с процессором.
Уровень привилегий накладывает три типа ограничений:
- возможность выполнения привилегированных команд,
- запрет обращения к данным с более высоким уровнем привилегий,
- запрет передачи управления коду с уровнем привилегий, не равным уровню привилегий вызывающего кода.
Источник
Sysadminium
База знаний системного администратора
Режимы доступа к процессору: режим ядра и пользовательский
Чтобы пользовательские приложения не могли прочитать данные операционной системы или изменить их, в Windows предусмотрели разные режимы доступа к процессору: режим ядра и пользовательский режим.
Режимы доступа к процессору
Приложения, которые запускает пользователь в системе, выполняются в пользовательском режиме. А системные службы и драйверы работают в режиме ядра. Такое разделение необходимо, чтобы пользовательские приложения не могли нарушить работу системы. Плохое приложение не должно сломать вам всю систему.
Хотя каждый процесс обладает собственным закрытым адресным пространством, всё что работает в режиме ядра использует единое адресное пространство. К адресному пространству ядра можно получить доступ только из режима ядра. Но к памяти пользовательского процесса можно получить доступ из любого режима. Дополнительно стоит отметить память, которая доступна только для чтения. Такая память недоступна на запись для кода из любого режима.
В режиме ядра работает часть операционной системы и драйверы. И все они могут вмешиваться в работу друг друга. И очень важно чтобы все компоненты работающие в этом режиме были тщательно спроектированы и протестированы. Любой некорректно написанный драйвер может повредить всю систему.
В режиме ядра код операционной системы и драйверов обладает полным доступом к памяти системного пространства. Так как основная часть кода Windows работает в режиме ядра, очень важно, чтобы компоненты, работающие в режиме ядра, были тщательно спроектированы и протестированы. Это необходимо для предотвращения возможных нарушений системной безопасности или подрыва стабильности системы. Именно по этой причине в Windows 2000 появился механизм цифровой подписи драйверов. Этот механизм запрещал установку не подписанных драйверов, но только для Plug and Play устройств.
Ужесточение политики работы со сторонними драйверами
В Windows 8.1 политика подписывания кода режима ядра требует, чтобы все драйверы устройств (а не только Plug and Play) подписывались криптографическим ключом, выданным одним из ведущих центров сертификации. Пользователям запретили установку не подписанных драйверов, даже с правами администратора. Но такое ограничение можно отключить вручную. В этом случае драйверы самоподписываются, а на обоях рабочего стола выводится надпись “Тестовый режим“.
В Windows 10 ещё сильнее ужесточили правила подписывания драйверов. Теперь все новые драйверы должны подписываться только двумя возможными центрами сертификации с сертификатом SHA-2 Extended Validation (EV) вместо обычного файлового сертификата SHA-1 и его 20 центрами сертификации. Но это ещё не все, после подписания драйвер нужно отправить в Microsoft через портал SysDev для аттестации. И только после аттестации драйвер получит цифровую подпись Microsoft. Соответственно, ядро принимает только драйверы с подписью Microsoft без каких-либо исключений, кроме “Тестового режима“.
В Windows Server 2016 операционная система действует еще радикальнее. Кроме требований EV простого аттестационного подписывания недостаточно. Чтобы драйвер загружался в серверной системе, он должен пройти жесткий процесс сертификации WHQL (Windows Hardware Quality Labs) в составе НСК (Hardware Compatibility Kit). Только драйверам с подписью WHQL разрешается загрузка в таких системах.
В целом сокращение количества сторонних драйверов, которым разрешается загрузка в режиме ядра, значительно повысило стабильность и безопасность системы.
Переключение из одного режима в другой
Пользовательские приложения могут переключаться из пользовательского режима в режим ядра используя специальные системные функции. Таким образом, для пользовательского потока нормально проводить часть времени в пользовательском режиме, а часть времени в режиме ядра. Более того, поскольку большая часть графической системы выполняется в режиме ядра, процессы приложений, интенсивно работающих с графикой, могут проводить в режиме ядра больше времени, чем в пользовательском режиме. Чтобы убедиться в этом, запустите Paint и понаблюдайте за распределением времени между пользовательским режимом и режимом ядра с помощью Process Explorer:
Process Explorer – Kernel time и User time
Наблюдение за переключениями в Системном мониторе
Запустите “Системный монитор“:
Удалите счетчик “по умолчанию” и добавьте следующие счетчики: объект «Процесс», два счетчика «% работы в пользовательском режиме» и «% работы в привилегированном режиме». Далее выберите процесс mspaint.
Порисовав немного в Paint увидим следующее:
Более современные приложения могут использовать новые технологии, например Direct2D и DirectComposition. Они выполняют большие объемы вычислений в пользовательском режиме и передают ядру только низкоуровневые данные. Таким образом сокращается время, расходуемое на переключение между пользовательским режимом и режимом ядра.
Источник
Что значит пользовательский режим
Режимы работы операционной системы
Существует два режима работы операционной системы.
- пользовательский режим
- режим ядра
Давайте подробно рассмотрим каждый из них…
1) Пользовательский режим операционной системы
Когда компьютерная система запускает пользовательские приложения, такие как создание файлов или использование любой другой прикладной программы, то система находится в пользовательском режиме. Этот режим не имеет прямого доступа к аппаратному обеспечению компьютера. Для выполнения задач, связанных с оборудованием, например, когда пользовательское приложение запрашивает службу у операционной системы или происходит какое-то прерывание, в этих случаях система должна переключиться в режим ядра. Бит режима пользовательского режима равен 1. Это означает, что если бит режима процессора системы равен 1, то система будет находиться в пользовательском режиме.
2) Режим ядра операционной системы
Все задачи нижнего уровня операционной системы выполняются в режиме ядра. Поскольку пространство ядра имеет прямой доступ к аппаратному обеспечению системы, режим ядра обрабатывает все процессы, требующие аппаратной поддержки. Кроме того, основной функцией режима ядра является выполнение привилегированных инструкций. Эти привилегированные инструкции не предоставляют пользователю доступ, и поэтому эти инструкции не могут быть обработаны в пользовательском режиме. Таким образом, все процессы и инструкции, в которые пользователь имеет право вмешиваться, выполняются в режиме ядра операционной системы. Режим для режим ядра-0. Таким образом, чтобы система функционировала в режиме ядра, бит режима процессора должен быть равен 0.
Двойной режим работы операционной системы
Существуют определенные типы процессов, которые должны быть скрыты от пользователя, и определенные задачи, которые не требуют какой-либо аппаратной поддержки. Используя двойной режим работы ОС, эти задачи можно решать отдельно.
Кроме того, важно, чтобы операционная система функционировала в двойном режиме, потому что программы уровня ядра выполняют все функции нижнего уровня ОС, такие как управление процессами, управление памятью и т. д., и если они будут изменены пользователем, то это может привести к сбою всей системы. Так, для указания доступа пользователей только к тем задачам, которые их используют, операционной системе необходим двойной режим.
Таким образом, всякий раз, когда система работает с пользовательскими приложениями, она находится в пользовательском режиме. Всякий раз, когда пользователь запрашивает некоторые аппаратные службы, происходит переход из пользовательского режима в режим ядра, и это делается путем изменения бита режима с 1 на 0. И для возвращения снова в пользовательский режим, бит режима снова изменяется на 1.
Источник
Пользовательский режим (user mode) и режим ядра (kernel mode)
Понятие «пользовательский режим» и «режим ядра» относятся к операционной системе. С этими понятиями тесно связано понятие уровней привилегий процессоров, но это не одно и то же. ОС Windows в процессорах архитектуры x86 использует два уровня 0 и 3:
Операционная система Windows отвечает за переключение между пользовательским режимом и режимом ядра. Таким образом, когда выполняется код ОС или драйвера, он выполняется на 0 уровне процессора x86, который не имеет каких-либо ограничений. Если же выполняется код в пользовательском режиме — то это происходит на 3 уровне.
В принципе нам достаточно знать, что разработчики процессоров предусмотрели специальный механизм уровней привилегий, пойдя навстречу разработчикам операционных систем. Это сделано для того, чтобы сделать систему в целом более стабильной и менее подверженной сбоям из-за некачественно написанного программного обеспечения.
Для этого механизма также распространено название – rings (кольца защиты).
Хотя на рисунке видно, что драйвера Windows используют 1,2 уровень для Windows это не так, как уже было сказано (рисунок описывает возможность процессоров архитектуры x86). Возможно, в какой-либо другой операционной системе используются и эти уровни.
Итак, если программа, которая выполняется в пользовательском режиме, обратится по адресу памяти, который не существует, то мы получим только крах этой программы, закроем ее и запустим заново. Если же это произойдет в режиме ядра, то мы получим синий экран смерти (BSOD).
Большинство синих экранов смерти, порядка 70% (согласно статистики Microsoft) происходит из-за ошибок в драйверах сторонних разработчиков.
Выгода от такого подхода с привилегиями в том, что обычным программам, таким как браузеры, игры, текстовые редакторы и т.д., работать в режиме ядра не нужно, соответственно в случае их краха стабильность системы в целом не пострадает. Код, который написан для режима ядра, обычно более тщательно оттестирован, а его количество значительно меньше. Кроме того, чтобы установить драйвер, который работает в режиме ядра, нужны права Администратора. Таким образом, можно ограничить количество людей, имеющих возможность установить код, который может повлиять на работу системы в целом, что обычно и делается во многих организациях.
Однако в Windows драйвера могут частично работать и в пользовательском режиме, примером тому могут быть WDDM драйвера видео в Windows Vista.
Если вы работаете с правами обыкновенного пользователя, что я настоятельно рекомендую всегда делать, вы достигаете большего уровня защищенности и стабильности системы. Даже если вы запустите исполняемый файл с вирусом, вирус не сможет внедрится в систему на уровне ядра и например попытаться скрыть свое присутствие от антивируса или перехватывать данные вводимые вами с клавиатуры через свой драйвер.
Вы можете легко увидеть в своей системе, сколько процессорного времени отдается на исполнение кода в режиме ядра, а сколько пользовательскому режиму. Для этого выберите Пуск / Выполнить, введите perfmon и нажмите enter для того, чтобы запустить оснастку Системный монитор («Производительность» для Windows XP).
В панели инструментов выбираем «Добавить», далее выбираем счетчик процессор и, удерживая Ctrl, выбираем:
Нажимаем «Добавить» и «ОК».
Также наблюдать за загрузкой ЦП в режиме ядра можно с помощью диспетчера задач. Для этого вначале запускаем его (самый просто способ – Ctrl + Shift + Esc), далее выбираем “Вид / вывод времени ядра”.
Красная часть на графике относится к загрузке во время выполнения кода ядра. Как видим, часть процессорного времени тратится на исполнение кода в режиме ядра, а часть в пользовательском режиме.
Если мы работаем в системе с правами обыкновенного пользователя, а не администратора то вероятность получить вирус, из-за которого могут возникать синие экраны смерти, равна нулю.
Причиной BSOD может быть только код, который работает в режиме ядра. Поэтому если у вас было все хорошо, а после установки антивируса, начали возникать синие экраны смерти, причина, скорее всего в нем. Достаточно удалить антивирус и проследить за тем, происходит ли крах системы или нет.
Источник