С момента выхода Windows 2000 Server мы получили встроенную технологию защиты файлов своих систем — Encrypting File System (EFS). Версия EFS в Windows 2000 имеет ряд явных пробелов в системе безопасности, но версии в Windows Vista и Windows XP намного более эффективны. Действительно, система EFS на компьютере Vista с технологией BitLocker в высшей степени надежна.

Графические интерфейсы пользователя Vista и XP открывают доступ к функциям EFS, но, чтобы реально оценить возможности этой системы, необходимо воспользоваться интерфейсом командной строки EFS — программой Cipher. Для целей данной статьи я использую Vista-версию Cipher, но XP-версия Cipher аналогична. Перейдем к изучению операций при работе с этим инструментом шифрования/дешифрования.

Шифрование и дешифрование

Cipher обеспечивает эффективные функции шифрования и дешифрования с применением ключей /e (шифрование) и /d (дешифрование). Чтобы использовать Cipher соответствующим образом, достаточно просто указать после ключа /e или /d имя файла или папки, которые требуется зашифровать или дешифровать. Например, для шифрования единичного файла secret.txt используется команда Cipher /e secret.txt, для шифрования любого файла, удовлетворяющего шаблону secret*.txt — команда Cipher /e secret*.txt, а для шифрования всех файлов папки C:mysecrets — команда Cipher /e C:mysecrets.

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

cipher /e C:mysecrets
cipher /e C:mysecrets*

После шифрования папки вы сможете открывать файлы, а другие пользователи — нет. Такая возможность — одно из самых больших преимуществ EFS.

А что если требуется с помощью Cipher зашифровать не только папку и ее новое содержимое, но и папки нижележащего уровня и файлы в этой папке и папках нижележащего уровня? В этом случае используется ключ /s: для указания папки высшего уровня. Например, для шифрования C:mysecrets и всех папок вместе с папками нижележащего уровня следует воспользоваться командой

cipher /e /s:C:mysecrets

Здесь нет опечатки. Для обработки папок и файлов нижележащего уровня необходимо не только указать папку высшего уровня, но и поставить перед ее именем ключ /s: без пробела между ключом и именем папки.

На практике всегда целесообразно шифровать папки и почти всегда неразумно шифровать отдельные файлы. Осуществляя шифрование, система EFS использует временный файл, содержащий незашифрованный вариант защищаемой информации. После этого система удаляет файл, но не тратит время на тщательную очистку кластеров, занимаемых временными файлами. Поэтому теоретически существует возможность, что кто-нибудь сможет обнаружить незащищенную информацию, копаясь в остатках временного файла EFS. При шифровании внутри папки временные файлы также находятся внутри нее и поэтому недоступны для любопытных глаз. Вероятно, поэтому версия Cipher для Windows Server 2003 и XP работает только с папками и игнорирует любые обращения к файлам, если не добавить ключ /a. Кажется, для Vista-версии ключ /a не нужен. Таким образом, команда Cipher /e secret.txt не будет эффективна в системе Windows 2003 или XP, а команда Cipher /e secret.txt /a обеспечит шифрование файла secret.txt.

Ключ /d работает аналогично ключу /e, но в обратном порядке. Команда Cipher /d C:mysecrets предписывает системе Windows не шифровать заново создаваемые файлы в C:mysecrets. Для дешифрования любых в данный момент зашифрованных файлов в C:mysecrets используется команда Cipher /d C:mysecrets*.

Добавление ключа /h позволяет отобразить имена всех скрытых или системных файлов, с которыми система Cipher выполняла операции. По умолчанию Cipher шифрует и дешифрует любые файлы данной папки, но не выводит отчет при их обработке. Добавление ключа /b предписывает Vista-версии Cipher при возникновении ошибки остановиться. По умолчанию инструмент продолжает шифрование или дешифрование, несмотря на любые возникающие ошибки. Для версии Windows 2003 или XP с аналогичной целью используется ключ /i.

Ценный инструмент

Способность осуществлять шифрование и дешифрование файлов из командной строки может быть полезна при работе с не требующим высокой производительности инструментом дистанционного управления, например Telnet в XP или командой Winrs в Vista. Это также ценно, если необходимо автоматизировать процесс помещения папок в системы с одновременным обеспечением их защиты. Однако функции Cipher намного шире, с их помощью можно исследовать и дешифровать все данные, независимо от того, кто шифровал информацию.

Управление ключами EFS

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

В первый раз при использовании EFS для шифрования система генерирует случайное 256-разрядное двоичное число — как раз тот ключ, который она всегда использует для шифрования. Для дублирования этого ключа просто воспользуйтесь командой Cipher /x. В ответ Cipher выдаст сообщение с вопросом, действительно ли нужно копировать ключ EFS, — к сожалению, я не нашел способа избавиться от этого запроса. Нажмите OK. Тогда программа запросит имя файла, в котором будет храниться резервный ключ. Расширение файла указывать не нужно, Cipher все равно задаст расширение .pfx. Например, если вы взяли файл mybackup, то появится небольшой файл под названием mybackup.pfx. Затем инструмент предлагает создать пароль для защиты этого файла.

Создав файл, скопируйте его с жесткого диска куда-нибудь (например, на накопитель USB или компакт-диск) или запишите выбранный пароль. Теперь в непредвиденной ситуации — например, при потере профиля или пароля восстановления системным администратором, сбоях операционной системы, необходимости восстановления файлов с неиспользуемого жесткого диска — можно просто восстановить ключ EFS, дважды щелкнув по файлу.pfx и запустив мастер, который восстановит нужные файлы.

Агент восстановления

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

Создайте учетную запись этого агента до того, как пользователи начнут операции по шифрованию файлов. По моему опыту, агент восстановления может расшифровать все файлы, созданные только после того, как назначен агент восстановления, но не ранее. Вы можете превратить любого пользователя в агента восстановления. Для данного примера будем считать, что вы сами «превращаетесь» в агента восстановления. Приведенный ниже процесс работает одинаково хорошо на всех трех операционных системах — Windows Vista, Windows Server 2003 и Windows XP.

Во-первых, выполните команду Cipher /r:recoveryguy, которая создает два файла-сертификата: recoveryguy.cer и recoveryguy. pfx. Cipher попросит задать пароль для файла .pfx, который содержит личный ключ и нуждается в защите. Любой пользователь может запустить эту команду, поскольку все, что требуется, это создать пару сертификатов. По существу, пользователь, запуская эту команду, создает карточку ID, которая сама себя идентифицирует (то есть файл .pfx), и предоставляет системе EFS гарантию того, что пользователь может дешифровать все файлы на этой системе (то есть файл .cer). Все эти действия ничего не значат до тех пор, пока администратор не выдаст «рекомендательное письмо» системе EFS.

Во-вторых, агенту восстановления данных (то есть вам) понадобится связать учетную запись пользователя с заново созданным файлом .pfx. Дважды щелкните на файле recoveryguy.pfx для запуска мастера импорта сертификата Certificate Import Wizard. После двух нажатий на Next мастер попросит ввести пароль для личного ключа на сертификат. Введите для использования пароль, который задали в команде Cipher /r. Выберите флажок Mark this key as exportable, чтобы можно было сделать резервную копию этого сертификата, если понадобится, и нажмите Next. После нажатия Next мастер сохранит сертификат, затем щелкните Finish.

Наконец, надо предоставить операционной системе «рекомендательное письмо». Убедитесь, что вы зарегистрированы как администратор, и запустите локальный редактор групповой политики Group Policy Editor (GPE). Перейдите в раздел Local Computer Policy, Windows Settings, Security Settings, Public Key Policies, Encrypting File System. Щелкните правой кнопкой на папке Encrypting File System и выберите Add Data Recovery Agent. Это приведет к запуску другого мастера. Нажмите Next, чтобы увидеть страницу Select Recovery Agents. Выберите Browse Folders и укажите на recoveryguy.cer. После выбора нажмите Yes; вы увидите, что операционная система Windows приняла этот сертификат, правда, он называется USER_UNKNOWN.

Нажмите Next, потом Finish.

Легкое дешифрование

Теперь вы сможете исследовать и дешифровать все файлы, которые шифрует кто-либо из пользователей на этой системе. Напомним, что если вы являетесь единственным пользователем автономной системы (не присоединенной к домену), понадобится выполнять резервное копирование только вашего ключа EFS. От администратора системы, на которой работает несколько пользователей, потребуется больше усилий, и придется стать агентом восстановления. Или можно просто присоединить эти системы к домену, и работа будет выполняться за вас.

Марк Минаси - редактор Windows IT Pro, MCSE и автор книги Mastering Windows Server 2003 (издательство Sybex). mark@minasi.com