LUKS, eCryptFS или шифрование ZFS? Выбираем способ защиты данных в Linux

d0ppl4r

Старшина
Сообщения
49
Реакции
33
Многие дистрибутивы Linux в качестве штатных средств защиты предлагают полнодисковое шифрование (LUKS), шифрование папок и файлов (eCryptFS) или даже шифрование средствами ZFS, неродной для Linux файловой системой. Какой из доступных способов имеет смысл выбрать сегодня? Попробуем разобраться.

LUKS
LUKS (Linux Unified Key Setup), а если быть точным, dm-crypt, — это классическая, универсальная, высокопроизводительная, хорошо изученная и не имеющая обнаруженных уязвимостей система шифрования дисков. LUKS поддерживает многочисленные алгоритмы шифрования и режимы работы, а также несколько хеш‑функций. В качестве алгоритма шифрования можно выбрать один из множества поддерживаемых, в частности AES, Serpent, Twofish, CAST-128 и CAST-256, которые могут работать в одном из четырех режимов: ECB, CBC-PLAIN64, CBC-ESSIV:hash или XTS-PLAIN64. Чаще всего по умолчанию используется комбинация параметров cbc-essiv:sha256 с шифрованием AES и 256-битным ключом.

INFO
Подробнее о том, что такое LUKS и как его использовать, можно почитать в статьях «Полнодисковое шифрование с LUKS2. Изучаем новую версию популярного средства шифрования для Linux и проверяем, можно ли его взломать» и «LUKS good! Ставим Linux на шифрованный раздел и делаем удобной работу с ним».

В процессе создания зашифрованного диска или контейнера пользователь может указать любой алгоритм шифрования. Тем не менее использование любого алгоритма шифрования, кроме AES, контрпродуктивно: реальная безопасность (как и скорость подбора пароля при атаке) не увеличивается, а вот скорость работы страдает очень сильно из‑за того, что AES — единственный алгоритм шифрования, получивший аппаратную поддержку в виде набора команд процессора AES-NI.

Хеш‑функции, или функции одностороннего криптографического преобразования, используются для преобразования пароля в двоичный ключ в составе Key Derivation Function (KDF). LUKS поддерживает следующие варианты: SHA-1, SHA-256, SHA-512, RIPEMD160 и Whirlpool. Однозначно не рекомендую пользоваться SHA-1 и RIPEMD160. SHA-256 — выбор по умолчанию, но и функции SHA-512 и Whirlpool не хуже.

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

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

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

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

КРИПТОГРАФИЧЕСКИЕ ФАЙЛОВЫЕ СИСТЕМЫ
Помимо шифрования дисков целиком, в Linux можно использовать и шифрование на уровне папок (криптографические ФС). Такое шифрование можно включать как на обычных, так и на зашифрованных дисках. В готовых сетевых хранилищах чаще всего используется первый вариант, но в отдельных случаях (например, в некоторых моделях QNAP) можно использовать и второй.

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

eCryptFS шифрует каждый файл по отдельности; метаданные шифрования для каждого файла хранятся в его заголовке. Таким образом, как каждый отдельный файл, так и целые папки можно спокойно копировать между компьютерами. Это позволяет организовать систему «слепого» резервного копирования, когда копируются или синхронизируются только те зашифрованные файлы, которые были изменены. В то же время eCryptFS не позволяет воспользоваться функциями дедупликации файловой системы: каждый зашифрованный файл использует уникальную соль, в результате чего содержимое даже идентичных изначально файлов в зашифрованном виде будет различаться (с точки зрения безопасности это правильно).

eCryptFS часто используется для шифрования домашних каталогов пользователей (в этом случае администратор может настроить «слепое» резервное копирование), а также в ряде сетевых хранилищ (NAS) производства Asustor, QNAP, Synology, TerraMaster и некоторых других.

WARNING
Самая популярная альтернатива eCryptFS — шифрующая файловая система EncFS. В отличие от предыдущего eCryptFS, EncFS работает в пространстве пользователя без каких‑либо дополнительных привилегий через фреймворк FUSE. К сожалению, не так давно в ней была найдена серьезная уязвимость, которая делает ее небезопасной для использования.

eCryptFS поддерживает несколько алгоритмов шифрования, включая AES, Blowfish, DES3_EDE, Twofish, CAST6 и CAST5. Так же как и в других случаях, использовать отличный от AES алгоритм шифрования смысла нет: надежность AES достаточна, а скорость работы этого шифра намного превышает скорость работы альтернатив благодаря аппаратному ускорению набором инструкций AES-NI.

eCryptFS шифрует каждый файл по отдельности; опционально могут быть зашифрованы и имена файлов и папок (в этом случае налагаются ограничения на длину имен файлов, которая не может превышать 143 символа ASCII).

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

Такой способ защиты вроде бы и позволяет обойти ограничения, налагаемые LUKS: чтобы создать или восстановить резервную копию, ключ шифрования не нужен — копируются и восстанавливаются зашифрованные файлы, каждый из которых содержит все необходимое для их расшифровки. Но к сожалению, это, наверное, единственное достоинство eCryptFS и подобных криптографических файловых систем. К недостаткам относятся:

  1. Невысокая производительность. В каждый зашифрованный файл добавляется заголовок, который содержит метаданные шифрования. Особенно сильно страдает скорость доступа к небольшим файлам.
  2. Низкий уровень безопасности. Наружу утекают данные о количестве файлов в каталогах, размере и дате модификации каждого файла.
  3. При шифровании папок в сетевых хранилищах нет возможности сменить пароль шифрования. Скомпрометированный пароль означает, что необходимо полностью перешифровать данные.
  4. Функциональные ограничения. При шифровании имен файлов и папок длина имени файла не может превышать 143 символа ASCII. В зависимости от некоторых параметров могут быть и другие ограничения (например, невозможно использовать сетевые папки с NFS).
  5. Не работают некоторые функции файловой системы. В частности, в зашифрованных папках не действует механизм дедупликации.
Все эти ограничения привели к тому, что разработчики серьезно задумались о создании такой системы защиты данных, которая сочетала бы достоинства шифрования дисков и папок без их недостатков. И такая система была создана — в рамках проекта OpenZFS 2.0.

ZFS
Файловая система ZFS, корни которой растут из Solaris, давно доступна пользователям Linux и FreeBSD. В некоторые дистрибутивы OpenZFS 2.0 входит в качестве штатного пакета, в других ее можно установить отдельно. Большинство дистрибутивов без проблем загружается с разделов ZFS.

ZFS — нечто большее, чем просто файловая система. Средствами ZFS можно создавать многодисковые конфигурации и управлять ими без использования mdadm и LVM, создавать и реплицировать снапшоты, в том числе на удаленных серверах. Неудивительно, что и для защиты данных разработчики ZFS разработали свою собственную встроенную систему, не использующую dm-crypt.

INFO
Кратко о новом стандарте шифрования native ZFS encryption я рассказал в статье «TrueNAS, TrueNAS или OMV? Выбираем софт для сетевого хранилища».

Что интересного можно сказать о шифровании ZFS?

Пожалуй, основной момент в том, что встроенное шифрование ZFS позиционируется в качестве осовремененной замены традиционным средствам шифрования дисков наподобие LUKS или встроенного в ОС FreeBSD GELI и при этом обладает рядом преимуществ, ранее доступных только при использовании криптографических файловых систем. Шифрование в ZFS тесно интегрировано с функциями файловой системы. В отличие от LUKS, на зашифрованных томах без ввода ключа шифрования можно выполнять большинство, если не все команды zfs и zpool, включая операции по верификации целостности данных, снапшоты и их репликацию, дедупликацию данных и многое другое. Для сравнения: если диск зашифрован средствами dm-crypt, то для выполнения подобных операций потребуется сначала ввести ключ шифрования.

В сравнении с шифрованием на уровне файловой системы (eCryptFS), которое также позволяет создавать и реплицировать зашифрованные снапшоты и контролировать целостность зашифрованных данных без ключа, шифрование ZFS имеет несколько преимуществ. Здесь и значительно более высокая скорость шифрования (особенно заметно на небольших файлах), и более высокий уровень безопасности: на сторону не утекают данные о числе и размерах папок и файлов и времени их модификации. Разумеется, ключ шифрования можно сменить в любой момент (eCryptFS этого сделать не позволяет), а при необходимости (например, при продаже диска или отправке в сервис) — практически мгновенно уничтожить все данные, просто затерев метаданные шифрования.

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

Проблемы с шифрованием папок (ecryptfs)
  • Если данные шифруются перед сжатием, они становятся несжимаемыми.
  • Не работает дедупликация.
  • Метаданные шифрования записываются в заголовок каждого файла (увеличивается объем хранимых данных, особенно если хранится множество мелких файлов).
Полнодисковое шифрование (dm-crypt)
  • Многократное шифрование повторяющихся данных.
  • С зашифрованным диском невозможно проводить какие‑либо операции, если не загружен ключ шифрования.
  • Без ключей шифрования невозможны резервные копии, снапшоты, репликация.
Не обошлось и без некоторых компромиссов. Во‑первых, без ключа шифрования можно увидеть имена и размеры файловых систем, а также данные, доступные с помощью команд zfs и zpool. Злоумышленнику эти данные вряд ли принесут пользу, в отличие от информации о структуре файловой системы, числе и размерах зашифрованных файлов, которая утекает при использовании eCryptFS.

Разработчики упоминают еще один тип данных, который не защищается на зашифрованных ZFS томах. Это таблицы дедупликации, которые создаются, если пользователь включает дедупликацию данных. Каждый блок данных, дублирующийся или нет, по‑прежнему зашифрован, но анализ таблиц дедупликации может показать, какие именно блоки на диске дублируются. Ценность этой информации для злоумышленника сомнительна, так что этот момент нельзя считать серьезной уязвимостью. В то же время при включении дедупликации меняется алгоритм генерации IV и соли (поскольку идентичные блоки данных должны совпадать и после того, как они будут зашифрованы), так что при хранении критических данных дедупликацию рекомендуется отключить.


Слайд из презентации ZFS Encryption 2
Еще одна потенциальная уязвимость — CRIME (Compression Ratio Info-leak Made Easy) может быть реализована в сценарии, когда данные сжимаются перед тем, как быть зашифрованными.

КАК РАБОТАЕТ ШИФРОВАНИЕ В ZFS
В качестве алгоритма шифрования используется шифр AES-256 в режиме GCM; опционально можно выбрать AES с длиной ключа в 128, 192 или 256 бит в режимах CCM или GCM. Информация о том, какой именно выбран шифр, сохраняется в метаданных шифрования. Ключ шифрования защищается ключом, генерирующимся произвольным числом итераций функции PBKDF2. По умолчанию используется 350 000 итераций, минимальное значение — 100 000. Для создания зашифрованного пула используется следующая команда:

# zfs create -o encryption=[algorithm] -o keylocation=[location] -o keyformat=[format] poolname/datasetname

Если ты создаешь зашифрованный загрузочный раздел и хочешь, чтобы он монтировался автоматически при загрузке, то единственный доступный вариант шифрования — с использованием двоичного ключа (файла, путь к которому указывается в формате file:///path/to/keyfile). Размер ключа шифрования — строго 32 байта; генерируют случайный ключ командой

# if=/dev/urandom bs=32 count=1 of=/path/to/keyfile

Для прочих томов можно использовать как двоичный ключ, так и пароль. Длина пароля может быть от 8 до 512 символов.

# zfs create -o encryption=aes-256-gcm -o keyformat=passphrase poolname/ datasetname

Важно отметить, что ZFS (так же, впрочем, как и остальные современные системы, включая BitLocker) не будет шифровать данные напрямую ключом, который генерируется на основе пароля или двоичного ключа. Для собственно шифрования используется мастер‑ключ, который, в свою очередь, защищается ключом шифрования (двоичным или ключом, получающимся в результате преобразования пароля N итерациями функции PBKDF2).


Слайд из презентации ZFS Encryption 2
Таким образом, можно перечислить следующие свойства шифрования ZFS:

  • Скорость работы сравнима со скоростью систем шифрования диска и не зависит от размера файлов.
  • Защиту можно усилить, указав повышенное число итераций хеширования в функции преобразования пароля.
  • Количество и критичность «утекающих» из зашифрованного пула данных относительно невелики, если не использовать функцию дедупликации.
  • Дедупликация данных поддерживается, но негативно влияет на безопасность.
  • Поддерживаются функции «холодного» резервного копирования посредством снапшотов и их репликации. Ключ шифрования при этом не требуется.
  • Можно защищать как целые диски, так и отдельные наборы данных.
ПОДВОДЯ ИТОГИ
Всего пару лет назад выбор средств шифрования для Linux был ограничен двумя типами: шифрование всего диска или раздела (как вариант — контейнера) либо шифрование файлов и папок с использованием eCryptFS или аналогов, работающих через FUSE (к примеру, EncFS или gocryptfs). У обоих типов шифрования есть свои достоинства и недостатки.

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

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

В то же время распространенные криптографические файловые системы в Linux налагают ряд функциональных ограничений, основные из которых — жесткие ограничения на длину имен файлов и папок и относительно невысокая скорость работы, особенно при шифровании небольших файлов. Для зашифрованных папок, как правило, не работают функции дедупликации, доступные в таких файловых системах, как BTRFS. Сильно страдает и безопасность решения: скомпрометированный ключ шифрования невозможно сменить, а взлом пароля от единственного зашифрованного файла позволит расшифровать и все остальное содержимое зашифрованной папки. Без ключа шифрования доступен значительный объем метаданных: информация о структуре папок, количестве и размере файлов, дата последней модификации.

Представленная в OpenZFS в 2019 году система шифрования native ZFS encryption, работающая в Linux и FreeBSD, успешно решает проблемы обоих типов защиты, предлагая удачный компромисс между безопасностью, скоростью работы и функциональностью. Без ключей шифрования доступны функции проверки целостности файловой системы, снапшотов и их синхронизации, а также дедупликации данных (если ее включить, то таблицы дедупликации будут храниться в открытом виде, что является уступкой с точки зрения безопасности). В то же время на сторону не утекают данные о размерах файлов и папок, время модификации файлов; нет присущих криптографическим файловым системам ограничений на длину имен файлов. Производительность шифрования высокая, сравнима с со скоростью традиционных систем шифрования дисков.

Какой способ шифрования выбрать? Если ты используешь ZFS или можешь использовать ZFS — выбор однозначен: встроенное шифрование ZFS обеспечит высокую скорость работы, достаточный уровень безопасности и удобства. Если ты единственный пользователь, а ZFS по какой‑то причине использовать нельзя — LUKS по‑прежнему остается быстрым и безопасным вариантом. В многопользовательских системах без ZFS имеет смысл включить шифрование средствами файловой системы: в этом случае у администратора будет возможность создавать и восстанавливать резервные копии без монтирования каждой зашифрованной папки каждого пользователя системы.

Наконец, иногда у тебя просто не будет альтернативы: некоторые производители сетевых хранилищ позволяют использовать единственный метод. Synology — шифрование сетевых папок (eCryptFS). Asustor — шифрование сетевых папок (eCryptFS) на внутренних томах либо шифрование раздела (LUKS) на томах MyArchive. QNAP (на моделях с процессорами Intel и операционной системой QTS) позволяет создать многослойную защиту: SED, LUKS и eCryptFS могут использоваться в любых комбинациях.
 
  • Like
Реакции: Shady_777