|
По материалам статьи Brian Kelley Implementing
Encrypting File System (EFS) with SQL Server
В своей статье посвящённой защите SQL Server, Chris Kempster кратко представил новую опцию, появившуюся в Windows 2000, это Encrypting File System (EFS). EFS предоставляет полностью прозрачный механизм шифрования файлов, что позволяет использовать его для прикладных программ типа SQL Server. EFS может быть использован DBA для защиты критически важных файлов баз данных SQL Server. В конце концов, если нападающий сможет копировать незашифрованные файлы баз данных SQL Server, он сможет без особых проблем прикрепить эти файлы к собственному SQL Server. Задействовав EFS Вы сможете зашифровать все ваши файлы баз данных так, что только SQL Server будет иметь к ним доступ.
Фактически, копирование файлов баз данных с одного сервера на другой и затем, прикрепление их на новом SQL Server используя sp_attach_db является одним из методов перемещения баз данных наряду с резервированием - восстановлением, Copy Database Wizard или посредством сгенерированных SQL скриптом bcp файлов. Копирование и повторное прикрепление может быть выполнено очень легко, и самой большой опасностью здесь является то, что тот, кто использует этот механизм, может заполучить файлы баз данных и автоматически получит доступ к хранимым в них данным. EFS предоставляет относительно отказоустойчивое решение этой проблемы за счёт следующего: · Файлы можно зашифровать. В этой статье автор представляет краткий обзор того, как работает EFS, что необходимо предпринять, что бы использовать её в вашей системе, и как разрешать проблемы возникающие с EFS и SQL Server. Автор не будет вдаваться в подробности работы EFS, так как это уже сделано в других статьях. Если Вас интересует информация такого рода, Вы можете изучить статьи Mark Russinovich: Inside Microsoft Windows 2000 О внутренней организации EFS можно узнать из статей журнала Windows и .NET Magazine: · Inside
Encrypting File System, Part 1 Перед внедрением EFS в Вашу систему, необходимо предпринять некоторые предварительные меры. Необходимо будет защитить процесс восстановления данных, настроить EFS на работу под учётной записью сервиса MSSQLServer и обеспечить приемлемый уровень отвлекаемых на защиту данных ресурсов. 2.1. Восстановление зашифрованных данных Процесс восстановления данных из зашифрованного файла может
оказаться не лёгким, если пользователь, который зашифровал
файл, был удалён или его профиль был повреждён, а также
возможен целый ряд причин, по которым, имея зашифрованный
файл, Вы не сможете его расшифровывать, как это делается в
штатном режиме. Проблемы, которые не позволят восстановить
данные из резервной копии, должны быть учтены и разрешены DBA
на этапе проектирования схемы резервирования и восстановления
критически важных для функционирования базы данных
файлов. · Экспортируйте ключи, которыми обычно шифруется файл. Это действительно простой процесс, но он также иллюстрирует потребность предусмотреть все возможные нюансы при восстановлении данных. Хорошей практикой является предварительная проверка восстановления на тестовых файлах, чтобы удостовериться в полной работоспособности всего этого процесса. Методология восстановления данных это отдельная большая тема, ознакомиться с которой можно в следующих статьях: Windows
2000 Server Resource Kit: Distributed Systems Guide Для восстановления данных ознакомьтесь с разделом Distributed Systems Guide в справочнике по системе, в котором описано всё, что Вы должны об этом знать. 2.2. Учётная запись сервиса MSSQLServer Если Вы хотите, чтобы SQL Server мог читать зашифрованные файлы и шифровал их, используйте для настройки EFS учетную запись, под которой стартует сервис SQL Server. Причина проста: приватный ключ, с помощью которого расшифровывается ключ кодирования файла, используемый для расшифровки самого файла, хранится в персональном хранилище профиля пользователя. В указанных выше статьях о EFS объясняется, как работает такое кодирование. Обязательно выполните это требование, чтобы гарантировать, что приватная информация, используемая для шифрации файла, хранится в собственном кэше пользователя. После этого, те пользователи, которые не имеют соответствующего ключа для кодирования/декодирования файла, не смогут получить доступ к файлу. Конечно, есть и исключения, основанные на использовании запросов через API и на некоторых других методах, но они являются более сложными, чем использование учетной записи сервиса. Если Ваш SQL Server запускается под учётной записью LocalSystem (LocalSystem имеет привилегии администратора), Вы должны создать локального пользователя сервера или домена, и запускать SQL Server под этой учётной записью. Войдите в систему под такой учетной записью (тут Вы не можете использовать LocalSystem) и Вы будете готовы защитить с помощью EFS файлы базы данных. Использование EFS приведёт к отвлечению на её поддержку ресурсов сервера. Автор не наблюдал значительного снижения эффективности, хотя Ваши результаты могут отличаться. Оценка, которая представлена в PowerPoint presentation from Microsoft Australia (Slide 19) показывает, что снижение эффективности обычно не превышает 5 %. В любом случае, стоит тщательно взвесить, насколько ваша система уязвима к копированию файлов базы данных и стоит ли для устранения такой уязвимости жертвовать таким снижением эффективности вашей системы. Процедура шифрации файлов базы данных довольно проста. Windows Explorer сделает большинство работы за Вас. Также есть команда cipher.exe, которая используется для шифрации и дешифрации посредством командной строки. Автор вначале опишет процедуры настройки через GUI, а затем поговорит и о cipher.exe. Прежде чем продолжать, автор обращает Ваше внимание на рекомендацию Microsoft шифровать не отдельные файлы, а каталоги. Причина в том, что все новые файлы баз данных в зашифрованном каталоге также будут зашифрованы. Первым шагом должно быть перемещение в проводнике к папке, которая включает подлежащую шифрации папку. Например, если Вы хотите зашифровать папку: C:\Program Files\Microsoft SQL Server\MSSQL\Data перейдите в папку: C:\Program Files\Microsoft SQL Server\MSSQL\ 1. Вы должны видеть в текущем окне проводника папку Data.
Щелкните правой кнопкой мыши по этой папке (или файлу) и
выберите пункт Properties. Если Вы планируете в будущем расшифровать файлы (например, Вы собираетесь перемещать файлы на новый сервер), Вы можете повторить те же шаги, только не отмечать чекбокс Encrypt contents to secure data. После этого, у Вас будет запрошено соответствующее подтверждение операции. Автор статьи предпочитает вместо GUI использовать командную строку и находит, что так намного проще управлять его с редой. Основная причина в том, что он может составлять сценарии команд, проверять их и после этого выполнять эти сценарий. Кроме того, можно наладить автоматическое исполнение сценариев или выполнять их вручную, в более удобное время.
3.2.1. Отображение состояния кодирования Если Вы не укажите для cipher.exe никаких ключей (параметров), она возвратит состояние кодирования всех файлов и подпапок в текущем каталоге. В полученном в результате работы утилиты листинге, помеченные символом E файлы и папки являются зашифрованными, а символом U будут помечены не зашифрованные или нормальные объекты. Ниже представлен пример каталога, в котором есть зашифрованных и незашифрованные файлы и папки. Автор не стал шифровать весь каталог только для того, чтобы продемонстрировать как работает cipher.exe (вспомните рекомендации): C:\temp\EFSTest>cipher Listing C:\temp\EFSTest\ New files added to this directory will not be encrypted. U EFSSubFolder E encrypt1.txt E encrypt2.txt U FileNoEncrypt.txt Поскольку каталог не обозначен для кодирования, любые новые
файлы, которые могут быть добавлены в каталог, не будут
зашифрованы. Папка EFSSubFolder и файл FileNoEncrypt.txt не
зашифрованы. Файлы encrypt1.txt и encrypt2.txt зашифрованы и
имеют префикс E перед своим именем. C:\temp\EFSTest>cipher encr* Listing C:\temp\EFSTest\ New files added to this directory will not be encrypted. E encrypt1.txt E encrypt2.txt Знаки подстановки могут использоваться как при шифровке, так и при расшифровке.
3.2.1. Получение справки: параметр /? Если Вы не помните параметры для утилиты cipher.exe, используйте /?, после чего вы получите на экране листинг с подобным описанием всех параметров. Ниже представлен пример листинга, полученный на русской редакции Microsoft Windows 2000 [Версия 5.00.2195]: C:\>cipher /? Показывает или изменяет шифрование папок и файлов в NTFS-разделах. CIPHER [/E | /D] [/S:<папка>] [/A] [/I] [/F] [/Q] [/H] [/K] [<путь> [...]] CIPHER /W:<папка> /E Зашифровывает указанные папки. Папки маркируются таким образом, что файлы, добавленные впоследствии, будут также зашифрованы. /D Расшифровывает указанные папки. Папки маркируются таким образом, что файлы, добавленные впоследствии, не будут зашифрованы. /S Выполняет выбранную операцию в указанной папке и всех подпапках. /A Выполняет операцию как для файлов, так и для папок. Рекомендуется шифровать файл и папку, которая его содержит, потому что при внесении изменений в зашифрованный файл в незашифрованной папке шифрование файла может быть снято. /I Продолжает выполнение указанной операции даже после обнаружения ошибок. По умолчанию, CIPHER прекращает работу при возникновении ошибок. /F Принудительно шифрует все выбранные объекты, даже если они уже зашифрованы. По умолчанию ранее зашифрованные объекты повторно не шифруются. /Q Выводит только наиболее важную информацию. /H Отображает скрытые или системные файлы. По умолчанию эти файлы не отображаются. /K Создает новый ключ шифрования файлов для пользователя, запустившего CIPHER. Если задан этот параметр, все прочие параметры игнорируются. /W Затирает всю информацию в неиспользуемом дисковом пространстве на указанном томе. Если задан этот параметр, все прочие параметры игнорируются. Указанная папка может находиться в любом месте локального тома. Если это точка подключения, указывающая на другой том, то будет затерта информация в неиспользуемом пространстве этого тома. <папка> Задает путь к папке. <путь> Задает шаблон, файл или папку. При вызове без параметров, CIPHER показывает состояние шифрования текущей папки и содержащихся в ней файлов. Можно использовать несколько имен папок и использовать в именах подстановочные символы. Параметры разделяются пробелами. C:\> Если Вы используете черточку вместо косой черты, утилита не поймёт, что Вы запрашиваете справку. Скорее всего, она проверит каталог и будет думать, что -? является знаком подстановки.
3.2.3. Шифрование: параметр /E Для шифрации папки используется параметр /E. Например, если нужно зашифровать каталог EFSTest, являющийся подкаталогом C:\Temp (обратите внимание, автор использует имя каталога EFSTest как спецификатор, чтобы шифровался только этот каталог): C:\temp>cipher /E EFSTest Encrypting directories in C:\temp\ EFSTest [OK] 1 directorie(s) within 1 directorie(s) were encrypted. Если использовать эту команду в таком упрощённом виде, будут зашифрованы только каталоги. Необходимо указать другой параметр, чтобы гарантировать шифрацию получаемых файлов. Кроме того, эта команда не зашифрует подкаталоги.
3.2.4. Дешифрация: параметр /D Для расшифровки используется параметр /D. Мы снова будем использовать EFSTest в качестве спецификатора: C:\temp>cipher /D EFSTest Decrypting directories in C:\temp\ EFSTest [OK] 1 directorie(s) within 1 directorie(s) were decrypted. Как и при шифрации, файлы или подкаталоги не будет расшифрованы. Для того, что бы они тоже были расшифрованы, используется следующий параметр.
3.2.5. Включить обработку файлов: параметр /A Если просмотреть каталог C:\Temp\EFSTest\, мы увидим следующее (для этого примера внесены изменения в состав файлов и подкаталогов): C:\temp\EFSTest>dir Volume in drive C has no label. Volume Serial Number is E4D5-482E Directory of C:\temp\EFSTest 12/06/2002 02:00p <DIR> . 12/06/2002 02:00p <DIR> .. 12/06/2002 01:24p <DIR> EFSSubFolder 12/06/2002 01:58p 15 encryptme.txt 1 File(s) 15 bytes 3 Dir(s) 13,081,638,912 bytes free Следующий пример шифрует папку: C:\temp\EFSTest>cipher /E Encrypting directories in C:\temp\EFSTest\ EFSSubFolder [OK] 1 directorie(s) within 1 directorie(s) were encrypted. Если нужно зашифровать файл encryptme.txt, используется дополнительный параметр /A: C:\temp\EFSTest>cipher /E /A Encrypting files in C:\temp\EFSTest\ EFSSubFolder [OK] encryptme.txt [OK] 2 file(s) [or directorie(s)] within 1 directorie(s) were encrypted. Converting files from plaintext to ciphertext may leave sections of old plaintext on the disk volume(s). It is recommended to use command CIPHER /W:directory to clean up the disk after all converting is done. Последнее сообщение на экране немного настораживает. Причина, по которой оно появляется в том, что когда EFS создает зашифрованный файл, это будет новый файл, для того, чтобы если процесс будет отменён, не был потерян первоначальный файл. Когда кодирование завершено, не зашифрованная версия удаляется. Однако, Вы знает, что данные ещё могут оставаться на диске. С помощью специальных утилит может считывать напрямую содержимое диска, и существует потенциальная возможность восстановления части удаленного файла. Для решения этой проблемы существует следующий параметр.
3.2.6. Уничтожение следов: параметр /W Имейте в виду, что даже если файл был удален операционной системой, части файла могут ещё какое то время существовать в читаемой форме непосредственно на диске. Если Вы хотите устранить это, используйте параметр /W. Этот параметр приводит к очистке каждого бита свободного пространства на диске. Это единственный способ обезопасить данные от прочтения из удалённых файлов с помощью специальных утилит, читающих информацию напрямую с диска. После использования параметра /W, всё свободное пространство будет заполнено символами пробела (0x00). Эта операция может занять весьма продолжительное время, потому что будет очищен диск целиком, который может быть фрагментирован. Для очистки каталога C:\Temp\EFSTest, необходимо исполнить следующую команду: cipher /W:C:\Temp\EFSTest При исполнении этой команды, Вы получите предложение закрыть все запущенные программы, чтобы очистить максимально большое количество данных. Также, другие программы могут отвлекать на себя ресурсы сервера и могут порождать переключения процессора. Это может существенно замедлить работу по очистке. Пример: C:\Temp>cipher /W:c:\temp\EFSTest To remove as much data as possible, please close all other applications while running CIPHER /W. Writing 0x00 .....^C Вы можете прервать процесс очистки, нажав CTRL-BREAK, если он занимает слишком много времени. В таком случае, некоторые из незашифрованных данных могут всё ещё оставаться на диске.
3.2.7. Принудительная шифрация всех файлов: параметр /F При шифрации и дешифрации файлов, если файл или каталог уже зашифрован или расшифрован, то он не будет подвергнут соответствующей обработке. Однако, если Вы хотите чтобы такие файлы тоже были обработаны, используйте параметр /F. Пример: C:\temp\EFSTest>cipher /E /A /F Encrypting files in C:\temp\EFSTest\ EFSSubFolder [OK] encryptme.txt [OK] 2 file(s) [or directorie(s)] within 1 directorie(s) were encrypted. Converting files from plaintext to ciphertext may leave sections of old plaintext on the disk volume(s). It is recommended to use command CIPHER /W:directory to clean up the disk after all converting is done.Мы уже зашифровали папку и файл, но параметр /F вынуждает всё равно исполнить шифрацию.
3.2.8. Обработка вложенных объектов: параметр /S Для шифрации всех подкаталогов данной папки используется параметр /S. Синтаксис следующий: /S: <каталог> Папример: C:\temp>cipher /E /A /S:c:\temp\EFSTest Setting the directory c:\temp\EFSTest to encrypt new files [OK] Encrypting files in c:\temp\EFSTest\ EFSSubFolder [OK] encryptme.txt [OK] Encrypting files in c:\temp\EFSTest\EFSSubFolder\ anotherFile.txt [OK] 4 file(s) [or directorie(s)] within 3 directorie(s) were encrypted. Converting files from plaintext to ciphertext may leave sections of old plaintext on the disk volume(s). It is recommended to use command CIPHER /W:directory to clean up the disk after all converting is done. 4. Разрешение проблем с EFS и SQL Server Есть несколько типичных проблем, с которыми Вы можете столкнуться при использовании EFS совместно с SQL Server. 4.1. SQL Server не запускается Возможно, Вы зашифровали базу master или целиком каталог Data не под той учётной записью, под которой стартует SQL Server. Если это так, сервер баз данных не будет запускаться. Например: C:\Program Files\Microsoft SQL Server\MSSQL\Data>net start mssqlserver The MSSQLSERVER service is starting. The MSSQLSERVER service could not be started. The service did not report an error. More help is available by typing NET HELPMSG 3534. Попробуйте расшифровать файлы базы данных master (или целиком весь каталог) и попытайтесь перезапустить SQL Server. Если SQL Server стартует, значит Вы всё-таки зашифровали эти файлы, используя не ту учётную запись. Если SQL Server не запускается, то это вряд ли связано с EFS, хотя Вам лучше расшифровать все зашифрованные ранее файлы до начала разрешения проблем, чтобы упростить этот процесс (в случае, если потребуется копировать файлы, и т.д.) 4.2. База данных помечена Suspect Если Вы выборочно шифруете файлы баз данных, наиболее вероятная причина появления этой проблемы, если помеченная Suspect база данных была зашифрована другой учётной записью. Что бы проверить это предположение, расшифруйте файлы помеченной базы и перезапустите SQL Server. Если база будет успешно воспринята сервером, попробуйте зашифровать её, зарегистрировавшись на сервере под учётной записью, от имени которой стартует SQL Server, и перегрузитесь. 4.3. Шифрация и сжатие одновременно не возможны Компрессия файлов и папок в Windows 2000 не может применятся одновременно с EFS. В результате, если Вы попробуете средствами EFS зашифровать сжатый файл, будет зашифрован несжатый формат и сохранён на диске в таком виде. Если у Вас не достаточно свободного дискового пространства, операция может окончится неудачей. Автор вообще не рекомендует применять компрессию для файлов баз данных SQL Server. 4.4. Шифруются только NTFS тома EFS работает только на NTFS. Поэтому, если Вы копируете зашифрованный файл на диск, который не является томом NTFS, Вы потеряете шифрацию. Вы не будете предупреждены об этом системой, так что просто имейте это ввиду, если захотите перенести зашифрованные файлы на FAT или FAT32. Если кто-то, кроме учетной записи сервиса, попробует скопировать зашифрованный файл, то будет выдано сообщение об ошибке: Cannot copy *****: Access is denied. The source file may be in use. Кроме того, что будет получен отказ в исполнении такой операции вы получаете возможность аудита таких событий. И наконец, когда Вы шифруете или дешифруете файлы, Вы можете получать следующую ошибку: C:\Program Files\Microsoft SQL Server\MSSQL\Data>cipher /E /A pubs.mdf Encrypting files in C:\Program Files\Microsoft SQL Server\MSSQL\Data\ pubs.mdf [ERR] pubs.mdf: The process cannot access the file because it is being used by another process. 0 file(s) [or directorie(s)] within 1 directorie(s) were encrypted. Причина возникновения этой ошибки в том, что SQL Server может держать файл открытым. Открытые файлы не могут быть зашифрованы (операционная система нуждается для этого в монопольном доступе). Попробуйте остановить сервис SQL Server и повторить попытку шифрации. |
Перевод: Александр Гладченко 2003г. |