За последние несколько лет в развитии криптографических файловых систем был достигнут значительный прогресс. Предоставление пользователям простой в обращении службы шифрования с целью защиты информации сохраненной в файловой системе становится более заманчивой, поскольку сеть все чаще подвергается нападению со стороны внешних и внутренних источников. Один из ключевых принципов надежной политики безопасности – это возможность обеспечить целостность информации сохраняемой в сети. Криптографические файловые системы делают это возможным, упрощая шифрование файлов.
С тех пор, как безопасность стала одним из важных элементов присущих сетям, каждый аспект онлайновой информации требует определенного уровня защиты: от использования файрволов и IDS на сетевом уровне до использования IDS на уровне отдельного хоста. В последнее время криптографическим файловым системам уделяется значительно больше внимания, и из дополнительного уровня защиты они превратились в основой. Хотя технология криптографических файловых систем и родилась недавно, ее стремительному развитию можно только позавидовать. Цель этой статьи обратить внимание читателей на технологию и особенности криптографических файловых систем, а также продемонстрировать некоторые способы реализации таких файловых систем на примерах Microsoft's Encrypting File System for Windows 2000, Linux CryptoAPI, и Secure File System.
Типы криптографических файловых систем.
Существует несколько подходов к вопросу о криптографических файловых системах. Различают шифрование томов, шифрование файловых систем и шифрование файлов. Каждый из этих подходов имеет свои достоинства и недостатки и будет ниже подробно нами описан.
Шифрование томов
Данный подход использует уровень драйвера устройства для шифрования и дешифрования информации на физическом носителе и используется такими системами, как PGPDisk, Secure File System (SFS), Linux CryptoAPI и ScramDisk. Шифрование томов делает возможным кодирование всех логических разделов и является удобным и интуитивно понятным для использования конечным пользователем, хотя и не предоставляет надежный контроль над доступом к отдельным директориям или фалам.
Шифрование файлов.
Шифрование файлов оперирует уровнем приложений и обеспечивает надежное непрерывное кодирование файлов. Для придания некой прозрачности конечному файлу пользователя, приложения обычно немного переписываются для поддержания шифра. Одной из утилит, поддерживающих этот метод шифрования, является PGP. Этот метод оправдан лишь для небольшого количества файлов, но не совсем пригоден для систем сохранения.
Шифрование файловых систем
Этот метод позволяет шифровать файлы на основе per-file или per-directory, используя единый ключ. К таким системам относятся: Cryptographic File System (CFS), разработанная Матом Блейзом (Matt Blaze), Transparent Cryptographic File System (TCFS), поддерживаемая Linux и BSD, CryptFS, а также Microsoft's EFS for Windows 2000.
Дизайн криптографических файловых систем.
CryptFS
Эта реализация криптографической файловой системы построена на использовании постоянного ядра файловой системы. Реализационная модель используется в CryptFS. С ее помощью файловая система может быть смонтирована в любой директории, или даже поверх другой файловой системы(UFS или NFS). Эта модель, также избавляет систему от дополнительных демонов, которые могут быть использованы для получения доступа к системе, или файлам. Интерфейс, используемый CryptFS, является стековидным виртуальным узлом (stackable V-Node). Операционные системы *nix используют виртуальные узлы для обозначения открытых файлов, директорий, устройств и других объектов. Виртуальные узлы скрывают ту часть физической файловой системы, которую используют. Благодаря концепции стыкования виртуальных узлов (V-node stacking), CryptFS позволяет файловым системам реализовать функцию модуляризации: когда один V-node интерфейс вызывает другой. Стыкование виртуальных узлов показано на рис. 1
Рис. 1: Строение стековидного V-node интерфейса.
Каждая v-node операция в CryptFS вызывает функцию своего нижестоящего уровня для специфических операций над файловой системой. CryptFS был изначально разработан для Solaris, а затем импортирован в Linux и FreeBSD. CryptFS работает со всеми директориями и шифрует данные еще до записи их в файловую систему, а дешифрует в обратном порядке. Разработчики CryptFS также внедрили в свой продукт схему управления ключами (key management scheme), согласной которой лишь root может смонтировать CryptFS и ключ будет ассоциирован не только с UID, но и с ID сессии. Атакующему придется не только взломать эккаунт, но и заставить свои процессы использовать те же ID сессий, что и пользователь, для получения или изменения ключа. CryptFS использует для криптования алгоритм blowfish в режиме CBC.
CryptFS доступен для пользователей как часть пакета для файловых систем (fistgen) и может быть скачан отсюда.
Linux CryptoAPI
Хотя и Linux CryptoAPI не является программой для шифрования файловых систем, она часто используется для этих целей. Изначально kernelint patch был создан для осуществления шифрования файловых систем для ядра 2.2. Развитие kernelint patch во всеми используемый API для шифрования kernel-space – это большой шаг вперед. При монтировании файловой системы, устройство обратной петли (loopback) делает возможным перенаправление, вследствие чего системные вызовы могут быть перехвачены для шифрования и дешифрования данных файловой системы. Вместо того, чтобы смонтировать систему поверх нужной директории, файловая система может быть смонтирована на устройстве обратной петли. Данное устройство будет смонтировано в точке монтирования директории. Как результат, все команды ядра системы посылаются посредством устройства обратной петли. Процесс показан на рис. 2 и 3
Рис. 2: Шифрование с помощью CryptoAPI
Figure 3: Дешифрование с помощью CryptoAPI
CryptoAPI можно скачать с GNU/Linux CryptoAPI site.
Microsoft's Encrypted FileSystem (EFS)
Microsoft's EFS использует общую схему, основанную на ключе. Данные из файла шифруются с использованием симметричного алгоритма при помощи случайного сгенерированного ключа. Этот ключ создается путем шифрования одного или нескольких общих ключей, полученных из сертификата пользователя X.509 version 3. Скрытая часть частных и открытых ключей используется для расшифровки ключа кодирования, который затем используется, чтобы расшифровать файл. Microsoft's EFS не поддерживает использование симметричного алгоритма использования основанного на пароле ключа из-за того, что такие схемы более уязвимы к атакам с использованием метода подбора по словарю. EFS также обеспечивает восстановление ключа кодирования в случае его потери. Процессы шифрования и дешифрования показаны на рис. 4 и 5.
Рис 4: Шифрование Microsoft EFS
Рис 5: Дешифрование Microsoft EFS
EFS проста в использовании конечным пользователем. При попытке пользователя получить доступ к зашифрованному файлу, EFS найдет частный ключ, который использовался для образования ключа кодирования, который шифровал файл, раскодирует ключ и расшифрует файл. Если же будет попытка расшифровать файл, созданный другим пользователем, EFS не сможет найти частный ключ для ключа кодирования и пользователю будет отказано в доступе.
Схема Microsoft's EFS показана на Рис. 6. Архитектура программы состоит из 4 основных категорий: драйвер EFS , файловая система библиотеки Run-Time, сервис EFS, и различные Win32 API. Драйвер расположен на поверхности файловой системы NTFS. Он обменивается данными с EFS сервисами для получения ключа кодирования и другой информации. Драйвер передает эту информацию в библиотеку Run-Time, чтобы выполнить множество различных операций с файловой системой. Драйвер и библиотека run-time не общаются напрямую, а используют механизм контроля за фалом в NTFS - call-out. Сервис EFS является частью подсистемы безопасности и использует порт между LSA и монитором безопасности ядра для общения с драйвером EFS. Сервис EFS использует интерфейсы с помощью CryptoAPI в режиме пользователя для создания ключей кодирования для файлов и других служб. Он так же поддерживает Win32 API, которые обеспечивают программные интерфейсы как для шифрования, дешифрование или восстановления, так и для импортирования и экспортирования зашифрованных данных.
Рис 6: Архитектура EFS
В данный момент EFS поддерживает лишь алгоритм шифрования DESX, основанный на 128-битном ключе. Майкрософт сообщает, что в будущем EFS будет поддерживать также альтернативные алгоритмы шифрования.
Вывод
За последние несколько лет в развитии криптографических файловых систем был достигнут значительный прогресс. Предоставление пользователям простой в обращении службы шифрования с целью защиты информации сохраненной в файловой системе становится более заманчивой, поскольку сеть все чаще подвергается нападению со стороны внешних и внутренних источников. Один из ключевых принципов надежной политики безопасности – это возможность обеспечить целостность информации сохраняемой в сети. Криптографические файловые системы делают это возможным, упрощая шифрование файлов.
Разбираем кейсы, делимся опытом, учимся на чужих ошибках