A.2. Разграничение доступа к объектам в ОС Windows.
Лекция 9A. Средства защиты информации в операционных системах
A.1 Архитектура подсистемы безопасности операционной системы Windows.
Основные компоненты подсистемы безопасности операционной системы Microsoft Windows представлены на рис. 9.1.
Рис.9.1. Подсистема безопасности ОС Windows
(ID и Р — имя и аутентификатор пользователя, Н — функция хеширования, SID — идентификатор безопасности учетной записи пользователя, AT— маркер безопасности, SD — дескриптор безопасности объекта доступа, R — результат проверки прав доступа процесса пользователя к объекту).
Ядром подсистемы безопасности является локальная служба безопасности (Local Security Authority — LSA), размещающаяся в файле lsass.exe. После загрузки операционной системы автоматически запускается процесс входа (winlogon.exe), который остается активным до перезагрузки операционной системы или выключения питания компьютера.
После нажатия пользователем комбинации клавиш Ctrl+Alt+ +Delete процесс входа обращается к провайдеру аутентификации (динамически компонуемой библиотеке функций — DLL) для приема от пользователя его логического имени (ID) и аутентифицирующей информации (Р). Стандартный провайдер аутентификации размещается в файле msgina.dll (Graphical Identification and Authentication dynamic-link library — динамически компонуемая библиотека GINA) и в качестве аутентифицирующей информации использует пароли пользователей, введенные с клавиатуры или считанные со смарт-карты.
Путь к используемому процессом входа в систему провайдеру аутентификации записан в разделе реестра
HKEY_LOCAL_MACHINE\Software\Microsoft\ WindowsNT\CurrentVersion \WinLogonкак значение параметра GinaDLL.
Владельцем всех рабочих столов в операционной системе Windows (Graphic User Interface — GUI) является процесс входа. Сам процесс входа выполняется на отдельном рабочем столе, активизируемом после нажатия пользователем клавиш Ctrl+Alt+ +Delete.
Сообщение о нажатии Ctrl+Alt+Delete посылается только процессу входа, который остается активным до завершения работы операционной системы.
Для процессов прикладных программ, запущенных пользователем нажатие этой комбинации клавиш совершенно незаметно.
Введенный пользователем пароль провайдером аутентификации передается в службу LSA, которая обращается к пакету аутентификации (динамически компонуемой библиотеке функций) для подтверждения подлинности введенного имени пользователя.
Для аутентификации локальной учетной записииспользуется пакет аутентификации MSV10 (из файла msvl_0.dll).
Пакет аутентификации вычисляет хеш-значение пароля Н(Р) и обращается к диспетчеру учетных записей (Security Account Manager — SAM) для проверки правильности введенного пароля .
SAM обращается к базе данных учетных записей (базе данных SAM) для извлечения информации из учетной записи пользователя .
База данных учетных записей содержится в разделе реестра HKEY_LOCAL_MACHINE\SAM (в файле Windows\System32\ Config\SAM).
К базе данных SAM не может быть получен доступ для чтения или изменения даже администратором (файл с базой данных открывается ядром операционной системы во время ее загрузки в монопольном режиме). Для редактирования базы данных SAM предназначены специальные функции из набора Windows API и специальное системное программное обеспечение (оснастки «Управление компьютером» и «Локальная политика безопасности»).
Пароль пользователя в базе данных SAM хранится в виде двух хеш-значений, каждое из которых имеет длину 128 бит. Первое из этих хеш-значений формируется по алгоритму Windows NT:
1. Строка символов пароля Р усекается до 14 знаков (при необходимости) и преобразуется в кодировку Unicode, в которой каждый символ представляется двумя байтами.
2. Вычисляется хеш-значение преобразованного пароля Н{Р)длиной 128 бит (используется функция хеширования MD4).
3. Полученное хеш-значение зашифровывается по алгоритму DES с помощью ключа, выводимого из относительного номера учетной записи пользователя, ERW(H{P)).
4. Результат шифрования записывается в базу данных учетных записейSAM.
Второе хеш-значение пароля пользователя вычисляется по алгоритму LAN Manager:
1. Все буквенные символы (латинского алфавита) строки пароля Рпреобразуются к верхнему регистру.
2. Строка символов пароля дополняется нулями, если она короче 14 байтов, и делится на две семибайтовые половины Р1 и Р2.
3. Каждое из значений Р1 и Р2 используется в качестве ключа для шифрования по алгоритму DES магической строки М= «KGS!@#$%», в результате которого получаются два значения из 64 бит каждое :
Н1 = ЕР1(М)и Н2 = Е Р2 (М).
4. Выполняется шифрование по алгоритму DES на ключе, равном относительному номеру учетной записи, результата сцепления Н1 и Н2 :
ERID(Н1|| Н2).
5. Результат шифрования помещается в базу данных учетных данных SAM.
Алгоритм получения хеш-значения LAN Manager является значительно менее стойким (разделение пароля на две половинки облегчает его подбор в том случае, если длина пароля не превышает семи знаков, так как результат шифрования магической строки на нулевом ключе заранее известен нарушителю). Относительный номер учетной записи может быть получен нарушителем ( встроенная учетная запись администратора всегда имеет относительный номер 500).
Доступ к базе данных SAM с помощью штатных средств Windows практически невозможен, тем не менее можно скопировать содержащий ее файл на подготовленный носитель после загрузки на компьютере другой операционной системы с заранее подготовленного съемного диска.
Администратор безопасности Windows может дополнительно зашифровать хеш-значения паролей пользователей в базе данных SAM с помощью системной программы syskey. Программа syskey обеспечит шифрование хеш-значений паролей с помощью первичного ключа длиной 128 бит, хранящегося в реестре также в зашифрованном на системном ключе виде.
После запуска программы syskey администратор должен выбрать способ хранениясистемного ключа длиной также 128 бит, который будет использован для шифрования первичного ключа:
- в системном реестре (преимущество этого варианта — отсутствие необходимости присутствия привилегированного пользователя при загрузке или перезагрузке операционной системы, а недостаток — наименьшая защищенность хранения системного ключа);
- в файле startup.key (длиной 16 байт) в корневом каталоге специальной дискеты (в этом случае придется отдельно позаботиться о защищенном хранении этой дискеты и ее резервной копии);
- без физического сохранения системного ключа, который будет генерироваться из специальной парольной фразы длиной не менее 12 символов.
Если пользователь пытается войти в систему под именем глобальной учетной записи, зарегистрированной в домене (объединении компьютеров, разделяющих общую политику безопасности и информацию об учетных записях пользователей ), то пакет аутентификации MSV1_0 отправляет логическое имя и хеш-значение пароля пользователя сервису NetLogon для аутентификации пользователя на контроллере домена (сервере аутентификации). Далее выпол-няется аутентификация пользователя по протоколам LM, NTLM и NTLM v2 .
Но основным пакетом аутентификации при входе пользователя под именем глобальной учетной записи в современных версиях ОС Windows является пакет аутентификации Kerberos SSP/AP (Security Support Provider/Authentication Packages, провайдер поддержки безопасности/пакет аутентификации), использующий более защищенный протокол непрямой аутентификации Kerberos.
Если результат аутентификации пользователя отрицателен - пакет аутентификации возвращает LSA код ошибки, который локальная служба безопасности передает процессу входа для выдачи пользователю сообщения об отказе в доступе к системе.
При подтверждении подлинности пользователя пакет аутентификации получает идентификатор безопасности пользователя SID(security identifier), который затем передается b LSA.
Идентификатор безопасности представляет собой структуру переменной длины, которая однозначно определяет пользователя или группу и сохраняется в его учетной записи в регистрационной базе данных.
В SID содержится следующая информация:
- идентификатор авторизации (48 бит), состоящий из идентификатора домена КС и относительного номера учетной записи (RID) в его регистрационной базе данных (32 бита);
- уровень пересмотра;
- переменное количество идентификаторов субавторизации.
Для записи SID применяется специальная нотация:
S-R-I-S-S... (первая S определяет эту запись как SID, R задает уровень пересмотра, I— идентификатор авторизации, вторая и последующие буквы S— идентификаторы субавторизации). Некоторые значения SID являются предопределенными в системе,:
S-1-0-0 (группа без пользователей-членов), S-1-1-0 (группа, включающая всех пользователей), S-1-2-0 (группа, включающая пользователей, которые входят локально), S-1-5-2 (группа, включающая пользователей, осуществляющих доступ по сети), S-1-5-18 ( операционная система).
Получив идентификатор безопасности пользователя, локальная служба безопасности LSA создает для него маркер доступа AT (access token), который идентифицирует пользователя во всех его действиях с объектами КС.
В маркере доступа содержится следующая информация:
- SID пользователя;
- идентификаторы безопасности его групп;
- права (привилегии) пользователя в системе;
- идентификаторы безопасности пользователя и его первичной группы, которые будут использованы при создании пользователем новых объектов в КС;
- дискреционный список контроля доступа по умолчанию для вновь создаваемого объекта;
- источник выдачи маркера доступа;
- тип маркера доступа — первичный (созданный при входе пользователя в КС) или используемый для олицетворения (impersonation);
- текущий уровень олицетворения.
В маркер доступа не помещаются сведения о правах входа пользователей в КС, которые проверяются пакетом аутентификации на этапе их авторизации в системе:
- локальный вход в систему;
- доступ к компьютеру из сети;
- вход в качестве пакетного задания;
- вход в качестве службы;
- вход в систему через службу терминалов.
Созданный LSA маркер доступа AT передается процессу входа, который с помощью провайдера аутентификации завершает процесс авторизации пользователя, запуская процесс его инициализации (userinit.exe) и передавая ему AT. Процесс инициализации на основе содержащегося в AT идентификатора безопасности пользователя загружает из реестра Windows его локальный профиль или из службы активного каталога на контроллере домена его перемещаемый профиль и загружает программную оболочку — проводник Windows (explorer.exe), передавая ему маркер доступа и профиль пользователя. Процесс инициализации завершает свою работу.
При запуске в сеансе пользователя любой программы создаваемому процессу передается копия маркера безопасности пользователя, что обеспечивает передачу процессу и всех прав пользователя в системе.
Для запуска приложения с правами другого пользователя, если известны его имя и пароль, предназначена команда контекстного меню файла приложения «Запуск от имени». Эту возможность следует использовать для сокращения времени работы в системе с правами привилегированного пользователя.
В операционной системе Windows Vista любое приложение по умолчанию запускается с правами непривилегированного пользователя. Для запуска программы с административными полномочиями следует использовать соответствующую команду контекстного меню файла приложения.
A.2. Разграничение доступа к объектам в ОС Windows.
Для разграничения доступа субъектов к объектам КС в защищенных версиях операционной системы Windows используется дискреционное управление доступом. С каждым объектом разграничения доступа связывается дескриптор безопасности SD(security descriptor), содержащий следующую информацию:
-идентификатор безопасности (SID) владельца объекта;
- идентификатор безопасности первичной группы владельца (в Windows это поле не используется в алгоритме проверки прав доступа субъекта к объекту);
-дискреционный список контроля доступа (discretionary access control list — DACL);
-системный список контроля доступа (system access control list - SACL).
Список SACL управляется администратором системы.
Список DACL предназначен для идентификации пользователей и групп, которым предоставлен или запрещен определенный тип доступа к объекту. Список редактируется владельцем объекта, но и члены группы администраторов по умолчанию имеют право на смену разрешений на доступ к любому объекту, которое может быть у них отнято владельцем объекта.
Каждый элемент списка DACL (access control entry — АСЕ) определяет права доступа к объекту одного пользователя или группы.
АСЕ содержит следующую информацию:
-идентификатор безопасности SID субъекта, для которого определяются права доступа;
- маску доступа (access mask — AM), которая специфицирует контролируемые данным АСЕ права доступа;
-тип АСЕ;
- признак наследования прав доступа к объекту, определенных для родительского объекта.
Элементы списка DACL могут быть двух типов:
- элементы, разрешающие специфицированные в них права доступа (Access-allowed АСЕ);
- элементы, запрещающие определенные в них права доступа (Access-denied АСЕ).
Элементы для запрещения субъектам использования определенных прав доступа должны размещаться в «голове» списка, до первого из элементов, разрешающих использование субъектом тех или иных прав доступа.
Право доступа субъекта к объекту означает возможность обращения субъекта к объекту с помощью определенного метода (типа) доступа. В операционной системе Windows различаются:
- специальные права доступа к объектам;
- стандартныеправа доступа к объектам(общие);
- родовые (generic) права доступа к объектам.
Специальные права доступа определяют возможность обращения к объекту по свойственному только данной категории объектов методу — чтение данных из объекта, запись данных в объект, чтение атрибутов объекта, выполнение программного файла.
Стандартные права доступа определяют возможность доступа к объекту по методу, применимому к любому объекту, — изменение владельца объекта, изменение списка DACL объекта, удаление объекта.
Родовые права доступа представляет собой комбинацию специальных и стандартных прав и предоставляет возможность обращения к объекту с помощью некоторого набора методов доступа.
Маска доступа, содержащаяся в элементе DACL, представляет собой значение длиной 32 бита. Первые 16 битов определяют специальные права доступа, биты с 16 до 23 — стандартные права доступа, бит 24 - право ACCESS_SYSTEM_SECURITY, бит 25 - право MAXIMUM_ALLOWED, биты 26 и 27 зарезервированы для дальнейшего использования и биты с 28 по 31 определяют родовые права доступа, отображаемые в специальные и стандартные права при попытке доступа к объекту.
Маркер доступа субъекта, обращающегося к некоторому объекту КС, поступает в локальную службу безопасности LSA. От LSA маркер доступа поступает к монитору безопасных ссылок (security reference monitor — SRM), который просматривает DACL из дескриптора безопасности SD соответствующего объекта и принимает решение R о предоставлении доступа субъекту или отказе в доступе. Получив от SRM результат R, LSA передает его субъекту, запросившему доступ к объекту.
При проверке прав доступа субъекта к объекту монитором безопасных ссылок строятся две маски — требуемых и разрешенных прав доступа (desired access mask и granted access mask).
В первой маске установлены биты, соответствующие запрашиваемым субъектом видам доступа. Во второй маске все биты первоначально сброшены.
Монитор безопасных ссылок использует специальный алгоритм проверки запрошенных субъектом прав доступа к объекту:
1. Если в дескрипторе безопасности объекта нет DACL, то биты в маске разрешенных прав доступа устанавливаются в соответствии с маской требуемых прав и проверка завершается. Субъект получает все запрошенные им права доступа.
2. Если маска требуемых прав пуста, то проверка завершается, а попытка доступа субъекта отклоняется.
Из приведенного алгоритма ясно, что если DACL объекта пуст, то любой доступ к нему запрещен всем субъектам, за исключением владельца объекта. Если требуется получить действительно необходимый доступ к данному объекту его владелец сможет снова внести изменения в DACL этого объекта.
Если у объекта КС нет дескриптора безопасности (у папок и файлов, размещенных на дисках под управлением файловой системы FAT), то любые пользователи и группы могут получить любые права доступа к данному объекту.
Назначение дескрипторов безопасности вновь создаваемым объектам в защищенных версиях операционной системы Windows производится по следующим правилам:
1. на основе явно заданного субъектом и корректного по форме дескриптора безопасности (при вызове системных функций CreateFile или CreateDirectory при создании файлов или папок, при вызове системной функции RegCreateKeyEx при создании раздела реестра);
2. на основе механизма наследования (если при создании объекта дескриптор безопасности не задается);
3. из маркера доступа субъекта, создающего объект (если наследование невозможно).
В Windows возможно разграничение доступа к следующим объектам:
- файлам и папкам на дисках под управлением файловой системы NTFS;
- разделам реестра;
- принтерам;
- процессам и потокам (нитям, threads);
- маркерам доступа;
- службам (services);
- рабочим столам.
Способы аппаратной защиты инициированных субъектами процессов в операционной системе Windows. Ядро и драйверы устройств выполняются в нулевом кольце защиты, а весь остальной системный код и приложения пользователей — в третьем кольце защиты. Первое .и второе кольца защиты не используются. Каждый процесс получает адресное пространство размером 4 гигабайта, рассматриваемое как шесть совпадающих друг с другом сегментов - код, данные и стек для третьего кольца защиты, код, данные и стек для нулевого кольца защиты.
В операционной системе Windows реализован подход, в соответствии с которым каждому процессу выделяется индивидуальное адресное пространство, которое аппаратно изолировано от адресных пространств других процессов. В этом случае, какой бы адрес оперативной памяти не использовался в процессе, невозможно обращение к памяти, выделенной другому процессу.