TrueNAS: методы шифрования

18 августа, 2021, Oleg Afonin
Рубрика: «Безопасность», «Криптография и шифрование»
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

В сетевых хранилищах известных производителей, как правило, доступны те или иные способы шифрования. Synology, Asustor, TerraMaster отдают предпочтение шифрованию на уровне папок, в то время как QNAP, Thecus, а также Asustor при использовании функции MyAcrhive используют вариант полнодискового шифрования. Подробно об этом можно почитать в нашем сравнении методов защиты данных у крупных коммерческих производителей NAS. Сегодня же мы рассмотрим способы шифрования, использующиеся в одной из самых распространённых систем для организации сетевого хранилища от домашнего до корпоративного уровня — TrueNAS разработки американской компании iXSystems.

Что такое TrueNAS?

TrueNAS — название программного обеспечения с открытым исходным кодом, под управлением которого работают компьютеры, выполняющие функции сетевого хранилища данных (NAS). Прародителем TrueNAS в его современном виде является проект FreeNAS, изначально выпущенный в 2005 году разработчиком Olivier Cochard-Labbé. Несколько лет спустя разработчик передал права на FreeNAS американской компании iXSystems, которая и занимается разработкой и продвижением проекта по сей день.

Изначально FreeNAS был полностью бесплатным, однако через какое-то время iXSystems выпустила коммерческую версию продукта – TrueNAS, которая использовалась в крупных коммерческих компаниях. В то же время компания продолжала развивать и бесплатную версию FreeNAS. Не так давно обе системы были объединены под названием TrueNAS: различия между платной и бесплатной версиями заключаются скорее в сопровождении и технической поддержке, чем в функциональных возможностях.

Базовая операционная система TrueNAS

Изначально система TrueNAS работала поверх операционной системы FreeBSD со всеми её сильными и слабыми сторонами. Именно для FreeBSD в своё время была доступна поддержка файловой системы ZFS, которая является основным преимуществом TrueNAS. Со временем файловая система ZFS стала доступна и для операционных систем Linux в виде OpenZFS, после чего разработчики TrueNAS занялись адаптацией продукта под ОС Debian Linux. Таким образом, на сегодняшний день существует две версии TrueNAS: TrueNAS Core, основанный на FreeBSD, и TrueNAS Scale, работающий поверх Debian Linux. На момент написания статьи в TrueNAS Scale используется версия Debian 11 (Bullseye).

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

С точки зрения эксперта-криминалиста различий между системами не так много, но они есть. Так, основанный на FreeBSD TrueNAS Core поддерживает шифрование по методу GELI (этот тип шифрования специфичен для FReeBSD) и native ZFS encryption, реализованный средствами OpenZFS 2.0. В то же время версия TrueNAS Scale, работающая поверх Debian Linux, поддерживает только native ZFS encryption и не позволяет создавать тома, зашифрованные GELI.

Важные особенности TrueNAS

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

  1. TrueNAS всегда устанавливается на отдельный физический накопитель. На этом накопителе не могут быть созданы тома для хранения данных, и этот накопитель не может быть зашифрован (за возможным исключением аппаратного шифрования диска, при использовании которого необходимо разблокировать диск при включении устройства).
  2. Для шифрования данных пользователь может задать как пароль, так и двоичный ключ.
  3. При использовании шифрования данных с ключом (в отличие от шифрования с паролем) TrueNAS позволяет сохранить ключи шифрования для автоматического монтирования зашифрованных данных. Если пользователь сохраняет ключи шифрования, то записаны они будут на загрузочный накопитель.
  4. Шифрование по методу native ZFS encryption не является методом полнодискового шифрования в классическом смысле: ряд структур ZFS остаётся доступен для операций контроля целостности, исправления ошибок, дедупликации, создания и репликации моментальных снимков даже тогда, когда пароль или ключ не были введены (т.е. зашифрованный том заблокирован). Соответственно, даже без ключа шифрования доступна информация об использованном месте на диске и размере файловых систем (но не о размере отдельных файлов или папок, как это происходит в шифровании на уровне файловой системы eCryptFS, которое используется в NAS от Synology, Asustor и TerraMaster.)
  5. При создании зашифрованного набора данных (dataset) пользователь может выбрать алгоритм шифрования (по умолчанию — AES-256-GCM) и указать число итераций функции преобразования ключа pbkdf2 (по умолчанию — 350,000 итераций). Эта информация сохраняется в метаданных; угадывать алгоритм шифрования или подбирать число итераций при монтировании зашифрованного диска не придётся.

Методы шифрования в TrueNAS

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

Аппаратное шифрование на уровне жёсткого диска SED (Self Encrypting Drive), доступное в некоторых моделях дисков. Подробное описание функции даёт понять, что при использовании SED пользователь теряет некоторые возможности ZFS — например, возможность репликации зашифрованных данных на удалённое устройство с неизвестным ключом шифрования. В качестве метода шифрования SED не является уникальным для TrueNAS; точно таким образом диски могут быть защищены в любой другой системе, поддерживающий этот тип защиты.

Диски, защищённые SED в TrueNAS, ничем не отличаются от дисков, защищённых SED в любой другой системе, и не имеют характерных для TrueNAS особенностей.

Следующий метод шифрования в TrueNAS — GELI, принятый за стандарт в операционной системе FreeBSD. В TrueNAS 12 создание зашифрованных GELI томов более не поддерживается, но ранее созданные тома по-прежнему можно смонтировать. Стандарту GELI больше десяти лет, он давно известен и хорошо изучен. На русском языке ознакомиться с его особенностями можно, например, из статьи Записки криптонавта: Осваиваем защиту данных в BSD (xakep.ru).

Диски, зашифрованные по стандарту GELI, можно расшифровать средствами как TrueNAS Core (не обязательно оригинальной инсталляции — можно установить чистую версию системы и смонтировать диски в ней), так и средствами чистой операционной системы FreeBSD (документация).

Шифрование по методу native ZFS encryption — новый для TrueNAS стандарт шифрования, появившийся в 12-й версии системы в обеих ветках (TrueNAS Core и TrueNAS Scale). Строго говоря, native ZFS encryption не является методом полнодискового шифрования в классическом смысле: ряд структур ZFS остаётся доступен для операций контроля целостности, исправления ошибок, дедупликации, создания и репликации моментальных снимков даже тогда, когда пароль или ключ не были введены (т.е. зашифрованный том заблокирован). Нужно ли отдельно упоминать возможность моментально сменить пароль или ключ шифрования без перешифровки всего набора данных? Да, нужно: механизм шифрования, который используется в Synology, TerraMaster, Asustor (за исключением архивов MyArchive) такой роскоши не предоставляет, и в случае утечки ключа шифрования или пароля пользователю останется только смириться. Детальный анализ особенностей этого метода шифрования провели в редакции Ars Technica в статье A quick-start guide to OpenZFS native encryption.

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

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

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

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

Native ZFS encryption обладает рядом достоинств в сравнении как с классическим для систем на основе Linux механизмом дискового шифрования LUKS, так и с использующимся в системах FreeBSD GELI. Шифрование ZFS даёт возможность выполнять заметную часть операций на уровне команд zfs и zpool на зашифрованных дисках, даже если ключ шифрования не указан или неизвестен. В список поддерживаемых команд входят сервисные операции по верификации целостности данных, моментальные снимки и их репликация и ряд других команд. Если же диск зашифрован LUKS, то для выполнения подобных операций потребуется сначала смонтировать диск, для чего необходимо ввести ключ шифрования.

Важным различием между версиями TrueNAS Core (FreeBSD) и TrueNAS Scale (Debian Linux) является поддержка классического для FreeBSD метода шифрования GELI. В актуальных сборках TrueNAS шифрование GELI более не поддерживается ни в одной версии системы. Тем не менее, пользователи TrueNAS Core могут продолжать пользоваться зашифрованными дисками GELI или осуществить миграцию путём монтирования зашифрованного диска и переноса данных. Для пользователей TrueNAS Scale поддержки GELI нет ни в каком виде; это стоит учитывать при работе с зашифрованными GELI дисками.

У шифрования ZFS есть ряд слабых мест, позволяющих получить некоторую информацию о зашифрованных наборах данных с неизвестным ключом шифрования. Во-первых, без ввода ключа шифрования доступны имена и размеры файловых систем и другие данные, доступные с помощью команд zfs и zpool. В отличие от использующегося в коммерческих NAS от Synology или Asustor механизма шифрования eCryptFS, шифрование ZFS не позволяет узнать количество или размеры зашифрованных файлов, а также прочие метаданные, недоступные с помощью команд zfs и zpool.

ZFS encryption не защищает таблицы дедупликации, что позволяет узнать адреса дублированных (совпадающих) блоков на диске. Содержимое отдельных блоков данных останется недоступным. Ценность этой информации сомнительна; данный аспект native ZFS encryption не считается критическим с точки зрения безопасности.

Можно упомянуть уязвимость CRIME (Compression Ratio Info-leak Made Easy), которая может быть реализована в сценариях, в которых используется сжатие данных до их шифрования. Ценность доступных этим способом типов данных исчезающе мала по сравнению с затраченными на реализацию атаки усилиями.

Дополнительная информация

Механизм шифрования native ZFS encryption подробно документирован. Рекомендуем ознакомиться с информацией на официальном сайте TrueNAS:

Сравнение native ZFS encryption с другими методами шифрования NAS

Функции шифрования, использующиеся в коммерческих сетевых хранилищах производства Synology, Asustor и их конкурентов, использующих шифрование на уровне сетевых папок, на удивление рудиментарны. Единожды зашифровав сетевую папку, пользователю придётся мириться с невысокой скоростью шифрования, особенно на мелких файлах; невозможностью когда-либо сменить пароль шифрования, а также с тем, что любой желающий сможет узнать точное число файлов и размер каждого из них. В то же время для зашифрованных папок доступны функции контроля целостности, дефрагментации, создания и репликации моментальных снимков — даже если пароль шифрования неизвестен. Здесь пользователь получает удобство в ущерб скорости и безопасности.

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

Механизм шифрования GELI, доступный в ОС FreeBSD и использущийся в системах FreeNAS и TrueNAS Core, обладает набором достоинств и недостатков, похожим на шифрование LUKS.

Механизм ZFS native encryption, использущийся в системах TrueNAS Core и TrueNAS Scale, является исключительно удачной комбинацией достоинств радикально отличных подходов к шифрованию. С одной стороны, ZFS native encryption защищает действительно важные метаданные файловой системы — такие, как точный размер и количество файлов; позволяет моментально сменить скомпрометированный пароль; работает с высокой производительностью независимо от размера файлов; позволяет как выбрать алгоритм шифрования, так и настроить стойкость защиты к атаке методом перебора; наконец, позволяет гибко настраивать защиту дочерних наборов данных. С другой — на зашифрованном наборе данных без ввода ключа шифрования можно проводить операции контроля целостности и обслуживания файловой системы, создавать и реплицировать моментальные снимки — и всё это без необходимости расшифровывания самих данных.

С нашей точки зрения механизм ZFS native encryption получился действительно удачным, современным решением, обеспечивающим высокопроизводительную и надёжную защиту данных с минимальным количеством компромиссов и слабых мест. Мы собираемся продолжать исследование шифрования ZFS.

Заключение

В механизмах шифрования GELI и native ZFS encryption, использующихся в сетевых хранилищах TrueNAS, серьёзных уязвимостей не обнаружено. Эксплуатация известных на данный момент слабостей позволяет извлечь ограниченный объём метаданных, включающих информацию, доступную через команды zfs и zpool (например, размеры и конфигурацию файловой системы, адреса дублирующихся блоков данных — но не содержимое самих блоков). В отличие от зашифрованных eCryptFS папок, методы шифрования ZFS не позволяют узнать число и размер файлов и папок.


  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
НАШИ НОВОСТИ