Подробнее о плюсах и минусах EFS

EFS представляет собой лишь один из способов защиты информации в компьютерной системе. Таких способов Windows 2000 предлагает несколько, и наша задача в каждом конкретном случае выбрать наиболее подходящий. Естественно, требуемый уровень защиты должен определяться характером конфиденциальной информации, а также типом компьютерной системы. В данной статье рассматривается, прежде всего, проблема защиты локальных данных, т. е. файлов, хранящихся на жестком диске персонального компьютера.

Обезопасить локальные ресурсы в Windows 2000 средствами самой системы можно двумя способами: с помощью разрешений NTFS и с помощью EFS.

Вместе с первой версией операционной системы Windows NT, предшественницей Windows 2000, появилась и новая файловая система — NTFS. На сегодня NTFS закрепила за собой позиции надежной, эффективной файловой системы с развитыми функциями защиты. Средствами NTFS можно защитить свою информацию от несанкционированного доступа, независимо от того, работает пользователь в локальной сети предприятия или у себя дома. Пятая версия NTFS, реализованная в Windows 2000, обладает более широким набором специальных разрешений и усовершенствованным механизмом наследования. Действие разрешений на доступ, настроенных с помощью NTFS, распространяется как на сетевые подключения, так и на локально зарегистрировавшихся пользователей. Однако защита NTFS остается эффективной до тех пор, пока злоумышленник не добрался до компьютера физически. Иначе достаточно подключить винчестер к другой машине или даже просто загрузить другой экземпляр Windows 2000 на этом же компьютере. Как в такой ситуации уберечь свои данные?

Понятно, что абсолютной защиты не существует. Но если нельзя полностью избежать потери информации, можно хотя бы воспрепятствовать ее прочтению и разглашению. Один из наиболее распространенных подходов к решению этой проблемы предусматривает применение различных криптографических методов или попросту шифрование.

Средства поддержки шифрования на программном уровне появились еще в Windows NT 4.0 (после выхода Service Pack 4) и получили дальнейшее развитие в Windows 2000/XP. Я начну с архитектуры EFS.

Архитектура EFS

Существует немало публикаций, подробно описывающих архитектуру EFS. Весьма удачно и емко, на мой взгляд, данная тема изложена в [1]. Мне же хочется обратить внимание читателей на некоторые детали реализации EFS, повлиявшие на развертывание и использование этого механизма. Структурно EFS выполнена в виде драйвера устройства, работающего в режиме ядра и тесно связанного с драйвером NTFS. Всякий раз, когда NTFS встречает шифрованный файл, она вызывает функции из драйвера EFS, зарегистрированные им в NTFS при инициализации EFS. Поэтому средства шифрования доступны только на разделах NTFS.

С криптографической точки зрения разработчики выбрали стандартный на сегодняшний день подход к шифрованию данных, объем которых может варьироваться в широких пределах. Стандартность его заключается в сочетании симметричного и асимметричного методов шифрования. Для каждого шифруемого файла операционная система на основе генератора случайных чисел создает криптографический ключ, называемый шифровальным ключом файла (file encryption key, FEK). Тело файла шифруется блоками по 512 байт с помощью полученного FEK и симметричного алгоритма DESX. Затем FEK шифруется посредством асимметричного алгоритма RSA и открытого ключа пользователя, инициировавшего операцию шифрования. Использование симметричного блочного шифра снижает вычислительную нагрузку на центральный процессор.

В среднем, симметричные алгоритмы работают в 100-1000 быстрее асимметричных. В свою очередь, применение асимметричных методов криптографии позволяет надежно защитить FEK и упростить управление ключами.

Рассмотрим вкратце криптоаналитические аспекты EFS. Многие читатели, наверное, знакомы с широко распространенным блочным шифром Data Encryption Standard (DES). Те же, кому требуется развернутая информация по данному вопросу, могут обратиться к замечательной книге Вильяма Столлингса [2]. Исходный вариант DES использует ключи длиной 56 разрядов. За время, прошедшее после создания DES, компьютерная техника развилась настолько, что при данной длине ключа удается в приемлемые сроки осуществлять полный перебор пространства ключей. В 1984 г. Рон Ривест предложил усовершенствованный вариант алгоритма, названный DES eXtended (DESX) и определяемый как

= k2 ( (k1 ( x)

Ключ DESX K = k, k1, k2 состоит из 56 + 64 + 64 = 184 разрядов и содержит три различных подключа: ключ DES k, предварительный «зашумляющий» ключ k1 и завершающий «зашумляющий» k2. При шифровании блок сообщения x складывается поразрядно по модулю 2 с k1, затем шифруется по алгоритму DES и вновь поразрядно складывается по модулю 2 с k2. Таким образом, затраты DESX на шифрование блока всего на две операции сложения по модулю 2 больше, чем затраты исходного алгоритма. Однако эти две операции делают шифр гораздо менее уязвимым по отношению к перебору ключей. Согласно же [3], DESX также повышает стойкость к дифференциальному и линейному криптоанализу, увеличивая необходимое количество проб с выбранным текстом до значения, превышающего 260. Следовательно, можно считать, что криптоаналитическая стойкость предлагаемого решения не вызывает серьезных нареканий.

Остается надежно защитить FEK, для чего используется алгоритм RSA. И если FEK генерируется случайным образом для каждого файла, то сам FEK шифруется с помощью открытого ключа пользователя. Криптографическую пару открытый (public)/закрытый (private) ключ Windows 2000 генерирует для конкретного пользователя, когда тот впервые шифрует папку или файл на NTFS. Открытый ключ оформляется в виде цифрового сертификата. В корпоративных сетях выпуском цифровых сертификатов занимается служба Certificate Service, входящая в поставку серверных продуктов семейства Windows 2000. В отсутствии этой службы, например, в рабочей группе или на домашнем компьютере NTFS сама выпускает сертификаты, но только для использования в операциях с EFS. И цифровой сертификат, и закрытый ключ хранятся в профиле пользователя.

На программном уровне допустимо нескольким людям работать с одним и тем же файлом. Однако в пользовательском интерфейсе Windows 2000 обращаться к зашифрованному файлу может только тот, кто его зашифровал, и агенты восстановления (Data Recovery Agents, DRA). Формат заголовка шифрованного файла представлен на Рисунке 1.

Рисунок 1. Формат заголовка шифрованного файла.

Основную часть заголовка составляют два поля: поле расшифровки данных (Data Decryption Field, DDF) и поле восстановления данных (Data Recovery Field, DRF). Если с файлом работают несколько человек, то DDF состоит из соответствующего количества элементов, совокупность которых образует так называемую связку ключей (key ring). Каждый элемент зашифрован открытым ключом одного из пользователей. Но заметьте, что во всех элементах хранится один и тот же FEK, уникальный для данного файла.

В целом, процесс шифрования файла состоит из следующих шагов.

  1. В каталоге System Volume Information создается файл журнала с именем Efsx.log, где x — уникальное целое положительное число. По мере выполнения следующих этапов в журнал заносятся записи, позволяющие восстановить файл после сбоя системы в процессе шифрования. System Volume Information существует на любом разделе NTFS, доступ к соответствующему каталогу имеет только учетная запись SYSTEM, т. е. сама операционная система.
  2. Windows 2000 генерирует FEK.
  3. Генерируется или считывается из профиля пара открытый/закрытый ключ.
  4. Для файла создается связка ключей DDF с элементом для данного пользователя. В элемент помещается FEK и шифруется открытым ключом.
  5. файла создается связка ключей DRF с элементами для каждого DRA. FEK сохраняется во всех элементах, но каждый элемент шифруется открытым ключом соответствующего DRA.
  6. Создается резервный файл с именем вида Efs0.tmp в том каталоге, где находится шифруемый файл.
  7. В резервный файл копируется содержимое исходного файла.
  8. Содержимое исходного файла уничтожается, в него копируется содержимое резервного файла, которое при выполнении этой операции шифруется поблочно.
  9. Удаляется резервный файл.
  10. Удаляется файл журнала.

Размер блока специально выбран равным размеру сектора жесткого диска.

Дешифрование представляет собой обратный процесс. Как только пользователь обращается к зашифрованному файлу, происходит следующее.

  1. проверяет, имеется ли у пользователя закрытый ключ. Если ключ отсутствует или не подходит ни к одному из элементов связки ключей, доступ к файлу не предоставляется.
  2. Расшифровывается FEK из элемента DDF или DRF.
  3. С помощью FEK дешифруются данные файла.

Для повышения производительности NTFS кэширует FEK в невыгружаемой области памяти. Нужно иметь в виду, что присутствие EFS несколько изменяет поведение системы при проверке прав доступа к файлу и папке. Если пользователь пытается выполнить операцию, требующую расшифровки данных, и не может предоставить нужный закрытый ключ (т. е. файл зашифровал не он), система запрещает доступ к объекту. Например, пользователь, обладающий правом Full Control на файл, не будучи DRA, может файл удалить (что не требует его расшифровки), но не в состоянии прочитать или изменить данные файла. По тем же причинам система не позволит такому человеку снять атрибут шифрования (см. Экран 1). С другой стороны, если у пользователя есть право Write на незашифрованный объект, он может его зашифровать и, тем самым, лишить владельца возможности работать с собственным файлом.

Экран 1. Ошибка при попытке изменения атрибута шифрования.

Использование EFS

В предыдущем разделе уже было показано, что предложенная Microsoft архитектура EFS порождает ряд особенностей в использовании шифрования. Еще одной такой особенностью является полная прозрачность операций шифрования/дешифрации для конечного пользователя. Как известно, для того чтобы зашифровать файл или папку, достаточно с помощью Windows Explorer установить флажок Encrypt contents to secure data в свойствах объекта или использовать утилиту командной строки cipher.exe. Столь же просто файл или папку расшифровать. Прозрачность операций достигается за счет хранения криптографической пары ключей в профиле пользователя. Действительно, когда пользователь пытается выполнить какие-либо действия, связанные с EFS, операционная система всегда может идентифицировать его (по SID), определить расположение профиля и загрузить оттуда необходимые ключи. С другой стороны, неосторожные действия администратора с профилем пользователя могут привести к потере ключей и отказу в доступе к данным. Рассмотрим подробнее вопросы хранения открытого/закрытого ключей.

Как уже упоминалось, открытый ключ хранится в виде структуры данных, называемой цифровым сертификатом. Все сертификаты пользователя записываются в папку Documents and SettingsApplicationDataMicrosoft SystemCertificatesMy Certificates. Дополнительно их можно опубликовать в Active Directory. Поскольку информация в цифровом сертификате открытая, ее хранение не требует особых усилий.

Гораздо сложнее обстоит дело с закрытыми ключами. Они располагаются в папке Documents and SettingsApplication DataMicrosoftCryptoRSA. Эта папка не может быть переименована или перенесена в другое место. Для надежной защиты закрытых ключей в Windows 2000 применяется многоуровневое шифрование.

Все ключи в папке RSA автоматически шифруются с помощью сгенерированного случайным образом симметричного ключа, называемого основным ключом пользователя (user?s master key). Основной ключ, в свою очередь, автоматически шифруется службой Protected Storage и сохраняется в Documents and SettingsApplication DataMicrosoftProtect. Для пользователей с перемещаемыми профилями основной ключ хранится на контроллере домена и загружается на компьютер пользователя только на время сеанса работы. Длина основного ключа 56 или 128 разрядов. Как обычно, 128-разрядные ключи разрешены для применения только в США и Канаде.

Наконец, служба Protected Storage шифрует все основные ключи пользователей компьютера, а также другие ключи, применяемые операционной системой, с помощью системного ключа (system key). Системный ключ для каждого компьютера с Windows 2000 уникален. По умолчанию, как указано в [4], он хранится непосредственно на компьютере и размещен в реестре с использованием сложного алгоритма. Однако подобный подход все же снижает уровень защиты системы, особенно в тех ситуациях, когда злоумышленник завладел жестким диском. Поэтому с помощью программы syskey.exe системный ключ можно удалить с компьютера и сохранить на дискете. В этом случае при запуске Windows 2000 потребуется вставить дискету либо ввести пароль, на основе которого будет сгенерирован ключ. Причем диалоговое окно с просьбой вставить дискету или ввести пароль появляется еще до традиционного окна регистрации в системе. Хранение системного ключа на внешнем носителе требует особой осторожности, ибо потеря этого ключа при отсутствии резервной копии сделает невозможной дальнейшую работу с данным экземпляром Windows 2000.

С учетом сказанного выше можно отметить следующие особенности использования EFS.

Во-первых, необходимо иметь в виду, что по сети данные всегда передаются в открытом виде. Почему? Ключи хранятся на том компьютере, на котором выполнялось шифрование, например на компьютере A. Если теперь передать файл на компьютер B, операционная система этой машины не сможет выполнить дешифрацию, поскольку не знает пользовательского закрытого ключа, оставшегося на A. Почему же не передавать и закрытый ключ? Очевидно, передавать его открытым текстом нельзя. Тогда необходимо предложить эффективный алгоритм обмена закрытыми ключами между компьютерами, что может существенно повысить сложность EFS в целом и отрицательно сказаться на производительности. Более того, если закрытых ключей несколько — а при нынешнем положении дел Windows 2000 генерирует криптографическую пару на каждом компьютере, где пользователь выполняет шифрование, — общий уровень защиты системы повышается. Таким образом, при копировании файла система компьютера A дешифрует файл и передает его в открытом виде по сети. Получив файл, система B шифрует содержимое файла с помощью своей пары открытый/закрытый ключ и сохраняет его на диске. Если необходимо, чтобы передаваемые по сети данные были защищены, следует воспользоваться дополнительными средствами Windows 2000, например протоколом IPSec.

Во-вторых, компьютер, на который копируются или переносятся шифрованные файлы, должен быть доверенным для делегирования. Это позволит операционной системе удаленного компьютера запросить пару ключей в контексте учетной записи пользователя, выполняющего операцию. Причем доверенной для делегирования должна быть именно учетная запись компьютера, так как EFS работает от имени записи SYSTEM.

Экран 2. Профиль пользователя, созданный для выполнения операций EFS.
В-третьих, если на том компьютере, куда копируются файлы, нет пользовательского профиля, а стало быть, нет и пары ключей, Windows 2000 создаст такой профиль. Правда, выглядеть он будет несколько иначе (см. Экран 2).

Тем не менее способ перенести информацию на другой компьютер в зашифрованном виде существует — с помощью утилиты Backup. При создании резервной копии Backup может сохранять на носителе файлы без расшифровки их содержимого. Для этого используются функции нового EFS API, такие, как OpenEncryptedFileRaw, ReadEncryptedFileRaw, WriteEncryptedFileRaw и CloseEncryptedFileRaw.

Однако нельзя применять эти функции в обход Backup, т. е. в обыкновенной WIN32-программе обратиться к ним и переписать зашифрованный файл в другое место не удастся. Если бы это было возможно, атакующий мог бы воспользоваться криптоанализом c избранным открытым текстом. По тем же причинам Backup не позволит восстановить зашифрованные данные из резервной копии на раздел, отформатированный файловой системой, отличной от NTFS (точнее говоря, не поддерживающей EFS). Но даже если все сделано правильно и компьютер-получатель содержит NTFS-раздел, после восстановления информации получить доступ к данным не удастся — отсутствуют закрытые ключи. Проблема решается двумя способами. Нужно либо с помощью оснастки Certificates экспортировать закрытый ключ, либо задействовать перемещаемый (roaming) профиль. В последнем случае криптографическая пара пользователя будет доступна на любой машине.

Политика агентов восстановления

Эта тема вызывает наибольшее количество вопросов. Для начала напомню, что при EFS-операциях FEK сохраняется еще и в поле DRF. Это означает, что помимо человека, выполнившего шифрование, расшифровать файл может любой пользователь, назначенный агентом восстановления (DRA). Иными словами, всегда есть некто, способный прочитать или даже изменить ваши конфиденциальные данные. Является ли наличие DRA сильной или слабой стороной EFS? Ответы могут быть прямо противоположными.

С одной стороны, не надо забывать, что Microsoft позиционирует Windows 2000 для рынка крупных корпоративных сетей, а здесь проблема возможной потери данных стоит особенно остро. Теперь представим себе ситуацию: некий пользователь, например менеджер, зашифровал свои данные, а администратор по неосторожности удалил его профиль вместе с закрытым ключом. В отсутствии DRA доступ к данным будет невозможен. Конечно, у грамотного администратора наверняка имеется резервная копия файлов менеджера, но... всем известно, как это обычно бывает.

Другой пример. Одного из сотрудников увольняют, администратор удаляет соответствующую учетную запись, но потом выясняется, что перед уходом этот человек зашифровал папку на файловом сервере. Все закрытые ключи на местах, но как ими воспользоваться? Опять же Backup? Но если в резервную копию файлы попали уже зашифрованными? Можно предложить массу других не менее сложных сценариев.

Понимая остроту перечисленных проблем, разработчики Microsoft вводят DRA. Не для того, чтобы подсматривать чужие данные, а для того, чтобы можно было их восстановить. Но вот сюрприз, DRA является обязательным составляющим EFS. Если удалить последнего агента восстановления в системе, EFS отключается. Действительно, любые попытки зашифровать данные после этого приводят к ошибке (см. Экран 3). Вернув хотя бы одного DRA, мы снова активизируем EFS, подробности на эту тему можно найти в [5].

Экран 3. Попытка зашифровать файл при отсутствии DRA.

Такая ситуация может не устроить множество пользователей, работающих на компьютерах, не подключенных к сети. Зачем мне на домашней машине с Windows 2000 этот DRA? Почему я не могу отказаться от него, пусть даже на свой страх и риск? Мне кажется, что такая возможность должна быть предоставлена.

Более того, по умолчанию роль DRA на автономных машинах играет встроенная запись Administrator, в домене — Administrator домена. И если в рамках домена можно назначить новых DRA, опираясь на GPO и службу цифровых сертификатов, и не вменять это в обязанность администратору, то на компьютерах вне домена такой возможности нет.

Данная ситуация послужила поводом для атак на EFS. Специалисты в области защиты информации летом 1999 г. опубликовали на сайте www.ntsecurity.net сенсационный документ. По их мнению, для того чтобы получить доступ к зашифрованным документам, достаточно сделать следующее.

  1. Установить на компьютер вторую систему Windows 2000. Допустим, первая стоит в каталоге winnt. Тогда вторую установим в winnt2.
  2. Загрузить вторую систему. Открыть каталог winntsystem32config и создать его резервную копию. Удалить файлы SAM и SAM.LOG.
  3. Загрузить компьютер в первой системе.
  4. Зарегистрироваться под именем Administrator с пустым паролем.
  5. С этого момента вы получаете доступ ко всей зашифрованной информации на дисках.

Разумеется, такой ситуации можно избежать, если в политике домена назначить другого DRA и удалить локальных. Но в рабочих группах проблема остается и фактически сводит на нет преимущества использования EFS.

Существует два основных подхода к применению DRA. Оба предполагают, что открытый/закрытый ключи агента хранятся на внешнем носителе. Для этого при экспорте ключей отмечается параметр, заставляющий систему удалить ключи с жесткого диска (см. Экран 4). При первом подходе для восстановления файлов, пользователь-агент восстановления садится за компьютер пользователя, где имеются подлежащие расшифровке данные, импортирует ключи и выполняет восстановление информации. Ключи затем удаляются. При втором, более надежном, пользователь пересылает файлы агенту в защищенном виде (IPSec, MIME/S). DRA расшифровывает информацию и таким же способом пересылает обратно.

Выводы

  1. Криптографическая стойкость EFS сомнений не вызывает. Применяемые алгоритмы защищают информацию достаточно надежно.
  2. В отличие от многих других продуктов данного класса, EFS действует прозрачно для пользователей.
  3. Особенности реализации политики восстановления в Windows 2000 делают EFS пригодной для применения только в корпоративной сети, где есть возможность развернуть центр сертификации и избавиться от локального администратора в роли DRA.
  4. Использование EFS в Windows 2000 на компьютерах вне домена небезопасно в силу подверженности атакам. Оптимальным решением, пожалуй, будет использование криптографических продуктов независимых производителей.
  5. В случае применения EFS данные по сети передаются в открытом виде, для защиты сетевого трафика следует использовать дополнительные средства.
Литература
  1. Соломон Д., Русинович М. Внутреннее устройство Microsoft Windows 2000. Мастер-класс / Пер. с англ. - СПб.: Питер; М.: Издательско-торговый дом "Русская Редакция", 2001.
  2. Столлингс В. Криптография и защита сетей: принципы и практика (2-е изд.) / Пер. с англ. - М.: Издательский дом "Вильямс", 2001.
  3. Баричев С. Г., Гончаров В. В., Серов Р. Е. Основы современной криптографии. - М.: Горячая линия - Телеком, 2001.
  4. Распределенные системы. Ресурсы Microsoft Windows 2000 Server / Пер. с англ. - М.: Издательско-торговый дом "Русская Редакция", 2001.
  5. Microsoft Knowledge Base. Q243035. How to Disable/Enable EFS on a Standalone Windows 2000 Computer.

Александр Шаповал — преподаватель, имеет сертификаты MCSE, MCDBA, MCT. С ним можно связаться по адресу: shu@softjoys.ru.