Страница сайта http://www.silicontaiga.ru
Оригинал находится по адресу http://www.silicontaiga.ru/home.asp?artId=6455

Безопасность EFS

С. Гордейчик

1. Если кто-то может запустить программу на вашем компьютере, - это больше не ваш компьютер.
2. Если кто-то может подменить операционную систему на вашем компьютере, - это больше не ваш компьютер.
3. Если кто-то имеет неограниченный физический доступ к вашему компьютеру, - это больше не ваш компьютер.

В эпиграф вынесены три из десяти непреложных законов информационной безопасности, опубликованных на Web-сервере компании Microsoft. Большинство специалистов в области информационной безопасности подпишутся под этими словами без колебаний.

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

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

Encrypting File System

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

С точки зрения пользователя, процедура применения подобной функции довольно проста. С помощью Windows Explorer пользователь устанавливает на файле или папке атрибут (Properties R Advanced R Encrypt contents to secure data), после чего работает с этими данными стандартными методами, не замечая, что данные были зашифрованы. Однако когда к зашифрованным данным попробует получить доступ другой человек, система выдаст сообщение о запрете доступа.

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

Варианты угроз

Первый из них связан с тем, что при шифровании не затирается первоначальный, незашифрованный, образ файла. Злоумышленник, используя средства редактирования диска на физическом уровне, такие, как Disk Editor или Disk Probe, может обнаружить в не занятых данными областях диска незашифрованную конфиденциальную информацию. Для решения этой проблемы следует использовать для первоначального шифрования утилиту командной строки cipher (из третьего пакета обновлений для Windows 2000) c переключателем /W, что позволяет заполнять нулями то место на диске, которое занимал файл. Кроме того, после шифрования большого объема информации рекомендуется выполнить дефрагментацию диска.

Второй недостаток шифрующей файловой системы связан с ее архитектурными особенностями. Для шифрования файлов используется случайно сгенерированный ключ шифрования файла File Encryption Key (FEK), который, в свою очередь, шифруется при помощи открытого ключа пользователя и сохраняется в атрибутах файла (в поле Data Decryption Field). Для обеспечения возможности восстановления файлов в системе выделяется специальный пользователь, агент восстановления, открытый ключ которого также применяется для шифрования FEK и сохраняется в Data Recovery Field (DEF). При дешифрации файла FEK расшифровывается при помощи секретного ключа пользователя или агента восстановления. Полученный в результате расшифровки ключ FEK используется для расшифровки файла. Таким образом, для дешифрации файла можно задействовать как секретный ключ пользователя, так и секретный ключ агента восстановления.

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

Методы взлома и защиты

Как показывает практика, при наличии физического доступа получить административные привилегии в Windows 2000 совсем несложно. Для этого необходимо, либо загрузившись со сменных носителей под альтернативной операционной системой, имеющей возможность работы с файловой системой NTFS (DOS с драйвером NTFSDOS или специализированные дистрибутивы Linux), либо используя метод параллельной установки Windows, удалить файлы базы данных Security Account Manager (SAM) из каталогов %systemroot%\system32\config и %systemroot%\repear. После этого злоумышленник получает возможность войти в систему под учетной записью Administrator с пустым паролем и расшифровать все зашифрованные файлы пользователей.

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

в персональном хранилище сертификатов (оснастка Certificates) и в групповой политике (Encrypted Data Recovery Agents). Кроме того, рекомендуется назначить агентом восстановления специально созданную для этого учетную запись, а не администратора.

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

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

Шифрование SAM

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

Однако, как показывает практика, в текущей реализации утилиты Syskey существует ряд недоработок, которые помогают злоумышленнику обойти выстраиваемую защиту. При помощи Ntpasswd злоумышленник может заменить зашифрованный утилитой Syskey хэш пароля учетной записи пользователя незашифрованным хэшем, полученным из выбранного им нового пароля. Windows 2000 сама зашифрует этот хэш с использованием Syskey при следующей перезагрузке системы. После этого злоумышленник может задействовать назначенный с помощью Ntpasswd новый пароль для входа в систему под учетной записью данного пользователя и получить доступ к зашифрованной им информации. Для защиты от подобных атак необходимо сменить метод сохранения ключа шифрования SAM. Ключ следует хранить на дискете или генерировать из пароля. Для портативных компьютеров рекомендуется использовать системный пароль, а не дискету с ключом, потому что дискету можно забыть в дисководе или повредить. Более того, пользователи могут просто хранить эту дискету в сумке для компьютера, что в случае кражи сумки сводит всю защиту на нет.

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

Доменная учетная запись

Для защиты от подобных атак рекомендуется использовать доменную, а не локальную учетную запись для работы с EFS. В таком случае кэшированная учетная запись не сохраняется в SAM, и, следовательно, применение ntpasswd не даст злоумышленнику никаких преимуществ. Однако при использовании данного метода для доступа к зашифрованным файлам пользователю придется зарегистрироваться в системе под доменной учетной записью. При отсутствии связи с контроллером домена вход в систему можно осуществить при помощи кэша доменных учетных записей, сохраняемых в локальной системе. Таким образом, злоумышленнику достаточно, воспользовавшись утилитой ntpasswd, зарегистрироваться в системе с учетной записью администратора или другим способом получить доступ к кэшу доменных учетных записей, после чего взломать хэш пароля или заменить его заранее сформированным хэшем. На сегодня не существует широко распространенных утилит для работы с кэшем доменных учетных записей, однако не так давно в рассылке Security Focus было опубликовано сообщение о возможности подобной атаки.

Существует решение, лишенное перечисленных недостатков, которое заключается в использовании средств двухшаговой аутентификации типа Smartcard или E-token, позволяющих сохранять на постороннем носителе не только пароль пользователя, но и его сертификат для работы с EFS. Решение довольно надежное, но дорогостоящее.

Ключ пользователя

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

Большой проблемы с хранением сертификата с секретным ключом пользователя вне хранилища не возникает. Windows 2000 предоставляет возможность экспорта сертификата с секретным ключом в зашифрованный файл формата PKCS #12. Для того чтобы импортировать данный сертификат в хранилище, пользователю необходимо ввести пароль. Но как удалить сертификат из хранилища при завершении работы? Возможны варианты с применением сценария выхода из системы, однако в случае нештатного завершения работы сертификат сохранится в хранилище, и система может быть взломана одним из описанных выше способов. Чтобы избежать подобной ситуации, можно использовать кэширование сертификатов в памяти системы. Дело в том, что после первого применения EFS сертификат и секретный ключ пользователя сохраняются в памяти системы, и их наличие в хранилище необязательно. Естественно, память системы очищается при выключении питания. Единственным исключением является сертификат агента восстановления, который запрашивается из хранилища при каждой операции шифрования.

Практическая реализация

Сертификаты и секретные ключи пользователей экспортируются на жесткий диск в формате PKCS#12. Для этого необходимо в оснастке консоли управления Certificates указать персональный сертификат, предназначенный пользователем для работы с EFS (Intendend Purposes = Encrypting File System), щелкнуть на нем правой кнопкой мыши и выбрать пункт All Tasks > Export. После этого в мастере экспорта следует указать необходимость экспорта секретного ключа (выбрать «Yes, export the private key»). На странице выбора формата нужно указать формат PKCS#12 и усиленное шифрование (Enable Strong Protection), после чего ввести пароль для шифрования сертификата и папку, в которой он будет сохранен. После успешного экспорта сертификат можно удалить из хранилища. Теперь пользователь не сможет работать с зашифрованными файлами. Для удаления можно задействовать утилиту CerMgr.exe, входящую в состав Microsoft Platform SDK. Запуск ее в следующем виде:

certmgr -del -c -all -s my

приведет к удалению всех персональных сертификатов из хранилища пользователя. Затем необходимо создать командный файл, который будет применяться пользователем для доступа к файлам EFS:

rundll32.exe cryptext.dll,CryptExtAddPFX %username%.pfx
cipher /E /A encrypt.txt
cipher /D /A encrypt.txt
certmgr -del -c -all -s my

В первой строчке вызывается процедура импорта сертификата пользователя в систему. Пользователю будет предложено подтвердить свои намерения и ввести пароль. В случае ввода верного пароля сертификат импортируется в хранилище, и пользователь может работать с зашифрованными файлами. После этого производится операция шифрования и дешифрации файла encypt.txt (этот файл может быть пустым), для того чтобы произвести кэширование сертификата и секретного ключа пользователя в памяти операционной системы. Затем при помощи утилиты certmgr сертификат удаляется из хранилища. Таким образом, сертификат находится в хранилище очень небольшой промежуток времени, необходимый для шифрования и расшифровки файла encrypt.txt. Для работы с EFS используется кэш сертификата.

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

Таким образом, применение данной схемы совместно с экспортом и удалением секретного ключа агента восстановления позволяет значительно повысить уровень защиты EFS без использования дорогих аппаратных решений типа Smartcard. Для доступа к зашифрованным файлам злоумышленнику нужно взломать защиту хранилища ключа PKCS или знать пароль, используемый для его шифрования.

К недостаткам данной схемы относятся отказ от технологии однократной регистрации Single-Sign-On и дополнительная настройка рабочей станции.