Если
у вас есть компьютер, наверняка на нем хранится что-нибудь ценное
с вашей точки зрения. Необязательно это должна быть секретная
информация государственной важности. Как правило, это какие-то
наработки, полученные с применением тех или иных программ, любимые
картинки или, на худой конец, пароли к Интернету. Насколько хорошо
защищены эти данные? На этот вопрос мы и постараемся ответить.
Модель
безопасности в Win NT/2000
Защита
данных в Windows 2000 построена весьма эффективно и гарантируется
многоуровневой схемой защиты как от случайной их потери при работе,
так и от умышленного повреждения или нарушения условий конфиденциальности
и целостности. Концепции, лежащие в основе системы безопасности
операционной системы Windows 2000, нельзя назвать революционными:
все основные идеи и механизмы достались ей в наследство от прежней
системы Windows NT 4.0, где они уже доказали свою состоятельность
и эффективность. Говоря иначе, в основе системы безопасности новой
операционной системы, как и ранее, лежат понятия "дескриптора
безопасности" (SD, Security Descriptor) и "списка управления
доступом" (ACL, Access Control List). Но в то же время в
новой операционной системе были включены дополнительные возможности
(например, поистине мощные средства, которые предоставляет использование
механизмов Active Directory) и получили дополнительное развитие
старые средства. К сожалению, некоторые из них доступны только
для тех пользователей, которые работают под Windows 2000 Professional
и входят в группу, управляемую сервером на базе Windows 2000 Server.
А наиболее полно они реализуемы лишь в случае создания полноценного
домена с разделяемыми функциями серверов, созданными на их базе
контроллерами доменов и специальными серверами, определяющими
исключительно параметры безопасности. Для реализации новых идей
используются различные методы; большинство из них предназначено
для работы в сети, вследствие чего они малоинтересны обычному
пользователю, поэтому мы вначале рассмотрим принципы, общие для
любого компьютера, работающего под управлением Windows 2000.
Любое
приложение (программа), запускаемое под управлением Windows 2000,
автоматически начинает использовать возможности, обеспечивающие
его безопасность. То есть, какое бы приложение не было бы запущено,
операционная система (И ТОЛЬКО ОНА) контролирует доступ к своим
ресурсам, таким как файлы, память и аппаратные устройства. Что
интересно, разработчики Windows 2000 пошли еще дальше и решили
централизовать доступ вообще к любым ресурсам системы (даже к
таким достаточно абстрактным, как окна, процессы и потоки). Поэтому
приложение, работающее в Windows, будет защищено от модификации
исполняемого кода и данных со стороны других "некорректно"
работающих приложений, да и просто нехороших людей, задумавших
сломать вам систему. Кроме этого, возможно программное управление
правами доступа к особенно критичным в смысле безопасности объектам
со стороны отдельных пользователей. Таким образом, обеспечивается
многоуровневая система защиты. Данные защищены настолько хорошо,
что столкнуться с проблемами доступа к ним при этом могут даже
администраторы, обладающие всеми полномочиями при управлении системой,
если они не выполняют простейших правил обеспечения безопасности.
Например, если не удается восстановить операционную систему после
ее выхода из строя и невозможно воспользоваться сертификатом,
с помощью которого производилось шифрование, то доступ к данным,
хранящимся на томах хранения информации с применением EFS, будет
невозможен из любой другой работающей системы, куда они будут
перенесены. Поэтому сертификаты всегда желательно копировать на
какой-нибудь надежный резервный носитель информации, который будет
храниться в хорошо защищенном от постороннего доступа и вредных
факторов воздействия месте.
Как
известно, при разработке Windows 2000 учитывалось то, что она
должна удовлетворять уровню безопасности C2, разработанному оборонными
ведомствами США. Базовые принципы уровня безопасности C2 это:
-
Выделяемая процессам память защищена таким образом, что прочитать
информацию оттуда невозможно даже после того, как она уже освобождена
процессом.
-
Только системный администратор имеет физическую возможность управлять
безопасностью системы и уровнем доступа отдельных лиц и групп
лиц.
-
Должно осуществляться управление доступом к ресурсам. Должно быть
возможным разрешать или запрещать доступ к указанным ресурсам
как отдельным пользователям, так и группам пользователей.
-
Пользователи должны регистрировать себя в системе и иметь уникальные
идентификаторы. Все действия пользователей, контролируемые системой,
должны быть персонифицированы.
-
Система должна быть защищена от вмешательства, например, от модификации
системного кода в памяти или системных файлов на диске.
Эти
требования учитывались уже на этапе проектирования операционной
системы и лежат в основе работы самых первых версий Windows NT,
поэтому Windows 2000 уже на уровне ядра поддерживает объектную
модель защиты. Надо сказать, что никакая другая компромиссная
реализация функций, позволяющих работать системе паролей в ранних
версиях Windows, сделанная на более высоком уровне (такая, например,
как применение отдельных программных пакетов или встраивание соответствующих
драйверов, патчей и библиотек в операционную систему) не смогла
бы предоставить такого уровня защищенности при той скорости работы,
которая достигается в NT. И именно требования безопасности явились
катализатором и причиной, заставившей "Майкрософт" писать
совершенно новую операционную систему почти с нуля и попрощаться
с веткой Windows 9x. Объектная модель защиты подразумевает, что
любой ресурс рассматривается системой Windows 2000 как объект,
а это означает, что он обладает своими собственными свойствами
(атрибутами), которые могут описывать, в том числе, и его поведение
с точки зрения безопасности, а также включает в себя данные и
все те функции, которые могут потребоваться для манипулирования
этими данными. Возможностью прямого доступа к объектам (а значит
и к ресурсам) обладает только сама Windows 2000, остальные приложения
могут осуществлять доступ к ресурсам исключительно при посредничестве
операционной системы путем вызова ее функций и под контролем системы
безопасности ОС. Возможности объекта определяются его типом и
теми атрибутами, которые были присвоены объекту при его создании
(они могут быть изменены с течением времени).
Краеугольным
камнем, на котором базируется вся реализация защиты данных, является
пользовательская учетная запись или на сленге администраторов
и ветеранов NT - аккаунт. Учетная запись - это своего рода пропуск,
который позволяет пользователю обращаться к ресурсам системы и
однозначно определяет, с какими ресурсами он может работать и
каким образом. Каждый пользователь, который регулярно использует
компьютер, должен обладать собственной индивидуальной учетной
записью. Для тех же, кто входит в систему нечасто, существует
одна на всех учетная запись - гость, - которая обладает, как правило,
минимумом прав доступа. Для облегчения жизни администратору (а
он тоже не бог, как может показаться некоторым неискушенным людям,
а всего лишь человек) несколько учетных записей можно объединить
в группу и назначать унифицированные права доступа всем ее членам,
а не каждому пользователю в отдельности. Это уже относится к назначению
групповых политик и обычно обсуждается при рассмотрении приемов
администрирования, что мы и сделаем в одной из следующих статей.
Вся информация об учетных записях и группах хранится в централизованной
базе данных. В Windows NT 4, а также в Windows 2000 эта база называется
SAM (Security Accounts Manager). В базе данных SAM каждый пользователь
и каждая группа, а также каждый компьютер идентифицируется уникальным
идентификатором безопасности SID (Security Identifier), который
каждый раз при создании новой учетной записи автоматически генерируется
ОС совершенно случайным образом и никогда не используется повторно.
Соображения уникальности заставляют систему использовать в качестве
SID число, а не символьную запись. Символьные обозначения учетных
записей просто ставятся в соответствие SID'у, так делается только
для удобства работы администратора. Из вышесказанного вытекает,
что, если вы по ошибке удалите какую-либо учетную запись, то восстановить
ее будет уже невозможно, так как если вы попытаетесь создать новую
запись с таким же символьным именем, ОС все равно сгенерирует
новый SID, который, естественно, не будет соответствовать по наполнению
предыдущему. Это обстоятельство обязательно следует учитывать
при работе с Windows 2000.
Атрибуты
защиты каждого объекта (будь то реестр, файл или общий ресурс)
находятся в его дескрипторе защиты SD, который предоставляет сведения
о владельце объекта (то есть содержит SID владельца) и дискреционный
список управления доступом к объекту (DACL, Discretionary Access
Control List). Дискреционный список управления доступом (часто
называемый просто списком управления доступом) содержит информацию
о том, какие действия запрещается или разрешается выполнять тем
или иным пользователям или группам пользователей по отношению
к данному объекту. То есть, он представляет собой некий перечень
записей управления доступом ACE (Access Control Entry), каждая
из которых соответствует некоторому пользователю или группе пользователей
(содержит соответствующие SID), которым разрешен или запрещен
доступ к данному объекту в форме, определяемой ACE. Помимо дискреционного
списка управления доступом дескриптор SD включает в себя системный
список управления доступом SACL или System ACL, который необходим
для работы системы аудита доступа к ресурсам (системы протоколирования).
Система аудита осуществляет слежение за доступом к объектам безопасности
и протоколирует информацию об удачных и неудачных попытках доступа
к ним в журнале аудита. Благодаря механизмам аудита администратор
может узнать, кто и когда пользовался интересующим его ресурсом
системы, или пытался им воспользоваться, если в доступе было отказано.
При
загрузке Windows предложит вам зарегистрироваться в системе от
имени одного из пользователей, для которых имеется учетная запись.
При этом введенные данные сравниваются с теми, которые хранятся
в операционной системе, и на основании результата сравнения принимается
решение о регистрации (или отказе в доступе). В случае успешной
регистрации, пользователю системой WinLogon назначается токен
доступа (access token), который в дальнейшем будет присваиваться
каждому процессу, который запустит пользователь. Токен содержит
информацию о самом пользователе, группе, в которую он входит,
привилегиях и правах доступа, то есть содержит SID пользователя
и SID'ы всех групп, в которые он входит. При попытке процесса
обратиться к какому-либо объекту производится поиск ACE, соответствующего
обратившемуся процессу, в дискреционном списке ACL этого объекта.
На основе сравнения токена доступа и ACE принимается решение о
разрешении или запрещении доступа процесса, запущенного данным
пользователем к объекту. Как мы видим, уже на достаточно низком
уровне система неплохо защищена от возможных попыток несанкционированного
доступа.
Еще
одно средство защиты данных, интегрированное в Windows 2000, -
это файловая система EFS (Encrypting File System), являющаяся
дополнением к NTFS 5.0 и позволяющая производить шифрование файлов
"на лету", т. е. как шифрование, так и дешифровка прозрачны
для пользователя и для программ. Степень криптостойкости у этого
метода на удивление высокая, что обеспечивается применением шифрования
с комбинированным несимметричным (открытым) ключом, в который,
к тому же, вносятся псевдослучайные изменения. При первой попытке
зашифровать некоторый файл пользователю выдается системой сертификат,
который содержит всю необходимую информацию по дешифровке и управлению
безопасностью. Этот сертификат всегда желательно скопировать на
какой-нибудь надежный носитель, поскольку в случае его утраты
невозможно будет открыть ни один из зашифрованных файлов (система
сообщит вам, что у вас нет прав доступа к нему). Ну и напоследок,
хочется заметить, что EFS частично входит в ядро Windows, что
позволяет наиболее эффективно обеспечивать сокрытие данных.
Отвлечемся
от одиноко стоящей рабочей станции и обратим свои взоры к ЛВС.
Что отличает сеть от простого компьютера? Правильно, наличие каналов
обмена информацией, не всегда защищенных от постороннего воздействия
и контроля, между отдельными хостами. А раз так, то наиболее критичную
информацию необходимо как-то шифровать. Что касается целостности
данных, то этим занимаются службы протоколов, ну а проблемы конфиденциальности
решаются по-разному. Аутентификация на этапе соединения двух (или
более) компьютеров позволяет произвести проверку того, что на
другом конце линии действительно тот, с кем вы хотите связаться.
Но к каналу связи (даже оптоволоконному) всегда можно подключиться,
не говоря уже о том, что пакет данных при пересылке зачастую минует
много серверов и маршрутизаторов, на которых он может быть перехвачен.
Здесь на помощь приходит шифрование, к которому и прибегают все
чаще и чаще в последние годы, если необходимо работать с хоть
сколько нибудь ценными данными.
В
Windows 2000 широко используются алгоритмы шифрования данных с
открытым ключом, и они уже изначально встроены в систему. В первую
очередь, эти средства позволяют по защищенным каналам обмениваться
информацией внутри домена. Основа всей системы сетевой безопасности
в Windows 2000 - это набор протоколов и методов взаимодействия
с общим названием (уже одно оно очень многого стоит!) Kerberos.
Эта спецификация предоставляет возможность установления защищенного
канала связи между двумя хостами в незащищенной сети с их предварительной
аутентификацией. В отличие от протокола Kerberos, который больше
подходит для открытых сетей, средства безопасности протокола IP
обеспечивают защищенность всей сети. При этом возможно централизованное
управление безопасностью и назначением профилей безопасности.
Данные предохраняются от перехвата и копирования на протяжении
всего пути следования. Для надежной передачи информация шифруется
с применением открытых или закрытых ключей. Шифрование с открытым
ключом требует больших затрат ресурсов и поэтому применяется только
в тех случаях, когда объем данных сравнительно невелик. Если объем
большой, то они шифруются с применением закрытого ключа, который
затем шифруется открытым.
Еще
одна очень удобная возможность обеспечить сохранность данных при
передаче их по сети - это использование политик безопасности IP.
Защита данных в этом случае также обеспечивается применением алгоритмов
шифрования и сертифицирования (Diffie-Hellman, HMAC, DES-CBC),
причем они "прозрачны" как для клиентских программ,
так и для пользователей. Предполагается, что путь следования данных
с одного компьютера на другой неизвестен и, возможно, небезопасен.
В
следующей статье мы подробно опишем процесс загрузки и те процессы,
которые при этом протекают в системе. Очень часто проблемы, связанные
с выходом из строя операционной системы, проявляются именно на
этом этапе, так что она будет, наверное, интересна широкому кругу
читателей