Добавлен: 29.10.2018
Просмотров: 47981
Скачиваний: 190
11.10. Безопасность в Windows 8
1051
Windows Update
является автоматизированной службой, предоставляющей исправ-
ления уязвимостей системы безопасности путем латания имеющих изъянов программ
и библиотек внутри Windows. Многие из устраненных уязвимостей были указаны
в отчетах исследователей степени безопасности, и их вклад признан в комментариях
к каждому исправлению. По иронии судьбы, сами обновления, связанные с повы-
шением степени безопасности, представляют собой существенный риск. Почти все
уязвимости, используемые взломщиками, были приняты ими на вооружение после
того, как средства их исправления были опубликованы компанией Microsoft. Причина
в том, что анализ самих заплаток является для многих взломщиков основным способом
обнаружения уязвимостей в системе. Системы, на которых еще не установлены обще-
известные обновления, тут же становятся объектами атак. Сообщество исследователей
средств безопасности обычно настаивает на том, чтобы компании исправили все обна-
руженные уязвимости в разумные сроки. Текущая частота ежемесячных обновлений,
используемая Microsoft, является компромиссом между удовлетворительной оценкой
сообщества и тем, насколько часто пользователи должны сталкиваться с латанием дыр,
сохраняя свои системы в безопасности.
Исключение составляют так называемые узвимости нулевого дня. Это используемые
изъяны, о существовании которых не известно до тех пор, пока не будет обнаружено
их использование. К счастью, уязвимости нулевого дня встречаются довольно редко,
достоверно используемые нулевые дни еще более редки из-за эффективности средств
облегчения условий безопасности, описанных ранее. Существует черный рынок та-
ких уязвимостей. Считается, что облегчения условий безопасности самых последних
версий Windows стали причиной крутого взлета цен на черном рынке на полезные
нулевые дни.
И наконец, антивирусные программы стали настолько важным инструментом для
борьбы с вредоносными программами, что в Windows включена базовая версия под
названием Windows Defender. Антивирусная программа заходит в операции ядра,
чтобы обнаружить вредоносный код внутри файлов, а также для того, чтобы распознать
поведенческие шаблоны, используемые конкретными экземплярами (или общими
категориями) вредоносных программ. Такое поведение включает в себя технологии,
используемые для выживания при перезагрузках, внесения изменений в реестр для
коррекции поведения системы и запуска отдельных процессов и служб, необходимых
для проведения атак. Поскольку Windows Defender предоставляет разумную защиту,
пригодную только против широко распространенных вредоносных программ, многие
пользователи предпочитают приобретать антивирусные программы сторонних раз-
работчиков.
Многие из этих средств облегчения условий безопасности управляются ключами
компилятора и компоновщика. Если приложения, драйверы устройств, работающие
в режиме ядра, или дополнительные библиотеки считывают данные в участки памя-
ти, предназначенные для исполняемого кода, или включают код, скомпилированный
без указания ключа /GS или без включения ASLR, облегчения условий отсутствуют
и любые уязвимости в программах становится намного проще использовать. К счастью,
в последние годы риски выключения облегчений условий безопасности находят ши-
рокое понимание среди разработчиков программного обеспечения, и эти облегчения,
как правило, включаются.
Последние два перечисленных смягчения условий находятся под контролем поль-
зователя или администратора каждой компьютерной системы. Разрешение системе
1052
Глава 11. Изучение конкретных примеров: Windows 8
Windows Update вносить исправления в программное обеспечение и обеспечение
установки на системы обновленной антивирусной программы является наилучшей
технологией защиты системы от вредоносного кода. Версии Windows, используемые
инициативными клиентами, включают свойства, облегчающие администраторам обе-
спечение подключения систем к их сетям, получения ими всех исправлений и правиль-
ной конфигурации антивирусных программ.
11.11. Краткие выводы
Режим ядра в Windows Vista состоит из HAL, уровня ядра и исполнительной системы
NTOS, а также большого количества драйверов устройств, реализующих все — от служб
устройств до файловых систем, сети и графики. HAL скрывает некоторые отличия
в оборудовании от других компонентов. Уровень ядра управляет процессорами (под-
держивает многопоточность и синхронизацию), а исполнительная система реализует
большую часть служб режима ядра.
Исполнительная система основана на объектах режима ядра, которые представляют
основные структуры данных исполнительной системы, включая процессы, потоки,
области памяти, драйверы, устройства и объекты синхронизации, — и это еще не все.
Пользовательские процессы создают объекты путем вызова системных служб и полу-
чают от них ссылки на описатели, которые можно использовать при последующих
системных вызовах компонентов исполнительной системы. Операционная систе-
ма также создает объекты для внутренних целей. Диспетчер объектов поддерживает
пространство имен, в которое можно вставлять объекты (для последующего поиска).
Самые важные объекты Windows — это процессы, потоки и сегменты. Процессы имеют
виртуальные адресные пространства и являются контейнерами для ресурсов. Пото-
ки — это единицы исполнения, они планируются уровнем ядра при помощи алгоритма
приоритета (в котором всегда выполняется готовый поток с самым высоким приорите-
том, вытесняющий при необходимости потоки более низкого приоритета). Сегменты
представляют объекты памяти (вроде файлов), которые могут быть отображены на
адресные пространства процессов. Образы программ EXE и DLL представляются как
сегменты, так же как и совместно используемая память.
Windows поддерживает виртуальную память с подкачкой по требованию. Алгоритм
подкачки основан на концепции рабочего набора. Система поддерживает несколько
типов списков страниц (для оптимизации использования памяти). Эти списки страниц
пополняются путем усечения рабочих наборов (с использованием сложных формул,
старающихся повторно использовать физические страницы, на которые не было ссы-
лок в течение долгого времени). Диспетчер кэширования управляет виртуальными
адресами ядра, которые могут быть использованы для отображения файлов в память,
что значительно улучшает производительность ввода-вывода для многих приложений
(поскольку операции чтения можно выполнять без доступа к диску).
Ввод-вывод выполняется драйверами устройств, которые придерживаются модели
Windows Driver Model. Каждый драйвер начинает с инициализации объекта драйвера,
содержащего адреса процедур, которые система может вызвать для манипулирования
устройствами. Реальные устройства представлены объектами устройств, которые
создаются из конфигурационного описания системы или диспетчером Plug-and-Play
(когда он обнаруживает устройства при перечислении системных шин). Устройства
Вопросы
1053
образуют стеки, и пакеты запросов ввода-вывода передаются вниз по стеку и обслу-
живаются драйверами (для каждого устройства в стеке устройств). Ввод-вывод, по
существу, асинхронный, драйверы обычно ставят запросы в очередь для последующей
обработки и делают возврат к вызвавшей стороне. Тома файловых систем реализованы
как устройства системы ввода-вывода.
Файловая система NTFS основана на главной таблице файлов, которая имеет по одной
записи на файл или каталог. Все метаданные файловой системы NTFS сами являются
частью файла NTFS. Каждый файл имеет множество атрибутов, которые могут со-
держаться в записи MFT или быть нерезидентными (храниться в блоках вне MFT).
NTFS поддерживает Unicode, сжатие, журналирование и шифрование и многие другие
функции.
И наконец, Windows Vista имеет сложную систему безопасности, основанную на спи-
сках управления доступом и уровнях целостности. Каждый процесс имеет маркер ау-
тентификации, который сообщает о личности пользователя и о том, какие специальные
привилегии имеет этот процесс (если они есть). Каждый объект имеет связанный с ним
дескриптор безопасности. Дескриптор безопасности указывает на собственный список
управления доступом, содержащий элементы управления доступом, которые могут
разрешить или запретить доступ для отдельных пользователей или групп. В Windows
в последних версиях добавилось множество функций системы безопасности, в том
числе BitLocker для шифрования всего тома, перемешивание адресного пространства,
неисполняемые стеки, а также прочие меры (для того, чтобы затруднить атаки пере-
полнением буфера).
Вопросы
1. Назовите одно преимущество и один недостаток реестра по сравнению с отдель-
ными
.ini
-файлами.
2. У мыши могут быть одна, две или три кнопки. Используются все три разновид-
ности мыши. Прячет ли HAL эти различия от всей остальной операционной си-
стемы? Почему прячет или почему не прячет?
3. HAL отсчитывает время от 1601 года. Дайте пример такого приложения, где нужна
эта функциональная возможность.
4. В разделе 11.3.2 мы описывали проблемы, вызываемые многопоточными прило-
жениями, которые закрывают описатели в одном потоке, но продолжают исполь-
зовать их в другом. Одним из способов исправления этой ситуации может стать
добавление поля порядкового номера. Как это может помочь? Какие изменения
в системе потребуются?
5. Многие компоненты исполнительной системы, показанные на рис. 11.4, вызы-
вают другие компоненты этой же системы. Приведите три примера, когда один
компонент вызывает другой компонент, но при этом используйте шесть разных
компонентов.
6. Win32 не имеет сигналов. Если их ввести, они могли бы быть привязаны к про-
цессам, потокам, процессам и потокам или не иметь привязки. Предложите свой
вариант и объясните, почему это хорошая идея.
1054
Глава 11. Изучение конкретных примеров: Windows 8
7. Альтернатива использования DLL — статические ссылки из каждой программы на
те процедуры библиотек, которые она фактически вызывает. Если ввести такую
схему, то на каких компьютерах в ней будет больше смысла — на клиентских или
на серверных?
8. При рассмотрении осуществляемого в Windows планирования в пользовательском
режиме упоминалось, что у потоков пользовательского режима и режима ядра
разные стеки. Назовите несколько причин необходимости разделения стеков.
9. Windows использует страницы по 2 Мбайт, поскольку это повышает эффектив-
ность буфера TLB, что может иметь существенное влияние на производительность.
Почему это так? Почему страницы рамером 2 Мбайт не используются все время?
10. Есть ли предел количеству различных операций, которые можно определить для
объекта исполнительной системы? Если да, то чем обусловлен этот предел? Если
нет, то почему?
11. Вызов WaitForMultipleObjects интерфейса Win32 позволяет потоку блокироваться на
наборе объектов синхронизации, описатели которых передаются как параметры. Как
только один из них сигнализирует, вызывающий поток освобождается. Возможно ли
иметь такой набор объектов синхронизации, в который входят два семафора, один
мьютекс и одна критическая секция? Почему можно или почему нельзя?
Подсказка
: это несложный вопрос, но он требует внимательного обдумывания.
12. Когда в программе, использующей несколько потоков, инициализируется глобаль-
ная переменная, программисты часто допускают ошибку, позволяя возникновение
конкуренции, когда переменная инициализируется дважды. Почему это может
вызвать проблему? Чтобы воспрепятствовать такой конкуренции, Windows предо-
ставляет API-функцию InitOnceExecuteOnce. Как она может быть реализована?
13. Назовите три причины, по которым процесс может быть прекращен. Какая до-
полнительная причина может заставить прекратить свою работу процесс, выпол-
няющий современное приложение?
14. Современные приложения должны сохранять свое состояние на диске после
каждого переключения пользователя на другое приложение. Это требование
представляется неэффективным, так как пользователи могут переключаться на
это приложение неоднократно и приложение просто возобновит свое выполнение.
Зачем операционная система заставляет приложения сохранять свое состояние так
часто, вместо того чтобы просто дать им возможность прервать свою работу в той
точке, до которой они дошли?
15. Как описано в разделе 11.4, существует специальная таблица описателей для вы-
деления идентификаторов процессам и потокам. Алгоритмы этих таблиц обычно
выделяют первый доступный описатель (поддерживая список свободных по прин-
ципу LIFO). В последних версиях Windows это было изменено — теперь таблица
идентификаторов всегда поддерживает список свободных по принципу FIFO.
В чем состоит проблема, которая возникает при выделении идентификаторов про-
цессов с использованием LIFO, и почему этой проблемы нет в UNIX?
16. Предположим, что установлен размер кванта 20 мс и текущий поток (с приори-
тетом 24) только что начал квант. Внезапно операция ввода-вывода завершается,
и поток с приоритетом 28 получает готовность. Сколько примерно времени ему
придется ждать своего выполнения?
Вопросы
1055
17. В Windows текущий приоритет всегда выше базового приоритета или равен ему.
Бывают ли такие обстоятельства, когда имеет смысл сделать текущий приоритет
ниже базового? Если да, приведите пример. Если нет, почему?
18. В Windows есть свойство Autoboost, которое применяется для временного повы-
шения приоритета потока, удерживающего ресурс, необходимый потоку с более
высоким уровнем приоритета. Как, по-вашему, все это работает?
19. В Windows легко реализовать такую возможность, чтобы работающие в ядре по-
токи могли временно прикрепиться к адресному пространству другого процесса.
Почему это гораздо труднее реализовать в пользовательском режиме? Почему
было бы интересно сделать это?
20. Назовите два способа уменьшения времени отклика для потоков в важном про-
цессе.
21. Даже при наличии большого количества свободной памяти и отсутствии необхо-
димости для диспетчера памяти усекать рабочие наборы система подкачки может
часто писать на диск. Почему?
22. Для современных приложений Windows вместо сокращения их рабочего набора
и применения подкачки производит замену процессов. Почему такой прием может
оказаться более эффективным?
Подсказка
: при применении твердотельных дисков разница в эффективности
становится гораздо меньше.
23. Почему карта self-map (используемая для доступа к физическим страницам ка-
талога страниц) и таблицы страниц для процесса всегда занимают одни и те же
4 Мбайт виртуальных адресов ядра (на процессорах х86)?
24. В
системе x86 в таблице страниц могут использоваться как 64-, так и 32-разрядные
записи. Windows использует 64-разрядные PTE-записи, следовательно, система
может обращаться к более чем 4 Гбайт памяти. При использовании 32-разрядных
PTE-записей карта self-map использует в каталоге страниц только одну PTE и за-
нимает, таким образом, только 4 Мбайт адресов вместо 8 Мбайт. Почему?
25. Если
область виртуального адресного пространства зарезервирована, но не зафик-
сирована, создан ли для нее дескриптор VAD? Обоснуйте свой ответ.
26. Какой из показанных на рис. 11.20 переходов является стратегическим решением
(в отличие от необходимых перемещений, обусловленных системными событиями,
например выходом процесса и освобождением его страниц)?
27. Предположим, что страница используется совместно в двух рабочих наборах.
Если она удаляется из одного рабочего набора, куда она попадет на рис. 11.20? Что
случится, когда она будет удалена из второго рабочего набора?
28. Когда процесс отменяет отображение неизмененной страницы стека, он делает
переход 5, изображенный на рис. 11.20. Куда попадает измененная страница стека
после отмены отображения? Почему нет перехода в список модифицированных
страниц при отмене отображения измененной страницы стека?
29. Предположим, что диспетчерский объект, представляющий некий тип исклю-
чительной блокировки (типа мьютекса), помечен как использующий событие
уведомления (а не событие синхронизации) для сообщения о снятии блокировки.