StegFS

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:54, 17 ноября 2016.


StegFS — свободная стеганографическая файловая система для Linux, распространяющаяся по лицензии GPL. Основная «фишка» StegFS - это умение шифровать данные и скрывать их таким образом, что невозможно доказать их существование.

Архитектура файловой системы StegFS

Рисунок 1 дает схематичное изображение файловой системы StegFS. Дисковое пространство разбивается на блоки стандартного размера и битовый массив отслеживает, свободен ли каждый блок или был зарезервирован – нулевой бит указывает на то, что соответствующий блок свободен; бит, равный единице, – на используемый блок. Доступ ко всем простым файлам осуществляется через центральную директорию, которая смоделирована через таблицу индексных дескрипторов (inode table) в UNIX. Скрытые файлы не зарегистрированы в центральной директории, хотя блоки, занимаемые ими, отделены в битовом массиве, чтобы предотвратить пространство от перераспределения.

После того, как файловая система создана, произвольно сгенерированные шаблоны записываются во все блоки таким образом, что они не отличаются от свободных блоков. Кроме того, некоторые произвольно выбранные блоки отброшены, при помощи включения соответствующих им бит в битовый массив. Эти блоки необходимы для того, чтобы предотвратить любую попытку найти скрытые данные при просмотре блоков, которые помечены в битовом массиве, но не входят в центральную директорию. Чем выше число отброшенных блоков, тем труднее найти скрытые данные перебором. Однако, это необходимо согласовать с необходимостью правильно использовать дисковое пространство. На практике, число отброшенных блоков может определяться администратором или произвольно устанавливаться StegFS.

Рис. 1. Стеганографическая файловая система StegFS

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

Рис. 2. Структура скрытого файла

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

Структура скрытого файла показана на рисунке 2. Доступ к каждому скрытому файлу осуществляется через его собственный заголовок, который состоит из 3-х структур данных:

  • Ссылка на inode таблицу, которая адресует все блоки данных в файле,
  • Подпись, которая уникальным образом идентифицирует файл,
  • Присоединенный список указателей на свободные блоки, занимаемые файлом.

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

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

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

Другой особенностью скрытого файла является то, что он может держаться за свободные блоки. Целью этого является удержание злоумышленника, который начинает просмотр файловой системы сразу после того, как она была создана и который, следовательно, имеет возможность убрать отброшенные блоки из рассмотрения, от отслеживания местонахождения ложных скрытых файлов. Такой нарушитель, возможно, сможет выделить часть блоков, выделенных для хранения скрытого файла. Поддерживая внутренний пул свободных блоков в скрытом файле, StegFS препятствует взломщику в отделении ценных данных от свободных блоков. Когда создается скрытый файл, StegFS напрямую выделяет для данного файла несколько блоков. Эти блоки, отслеженные через связанный список указателей в заголовке файла, выбираются произвольно из свободного пространства в файловой системе. Таким образом, увеличивается трудность определения принадлежности блоков к данному файлу и порядка между ними. В процессе расширения файла, блоки в произвольном порядке берутся из присоединенного списка для хранения данных или индексных дескрипторов, до тех пор, пока число свободных блоков не превысит некоторую границу. Наоборот, когда файл уменьшается, свободные блоки добавляются в пул до тех пор, пока их число не превысит некоторое пороговое значение и тогда эти блоки возвращаются в файловую систему.

Поддержка директорий

Рис. 3. Структура директорий в StegFS
Рис. 4. Совместное использование файлов в StegFS

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

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

Рисунок 3 показывает структуру директорий, которую применяет StegFS, чтобы помочь пользователям отслеживать их скрытые файлы. StegFS позволяет пользователю иметь несколько пользовательских ключей доступа (UAK). Для каждого UAK StegFS поддерживает директорию из пар значений (имени файла и FAK) для всех скрытых файлов, к которым можно иметь доступ при помощи этого UAK.

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

Чтобы обмениваться скрытыми файлами между пользователями, владелец должен передать пару (имя файла, FAK) получателю. Т.к. ни владелец, ни StegFS не имеют UAK получателя, обмен файлов не может быть автоматическим. Вместо этого, информация о файле шифруется с открытым ключом получателя, и результирующее сообщение посылается получателю, например, по электронной почте. Используя утилиту StegFS, получатель дешифрует сообщение при помощи своего закрытого ключа и ассоциирует скрытый файл со своим собственным UAKом, в это время информация в файле добавляется в директорию UAK и сообщение уничтожается. Практика передачи информации в файле – относительно слабое место в StegFS, т.к. зашифрованное сообщение может предупредить взломщика о существовании скрытого файла. Однако, т.к. у каждого скрытого файла имеется FAK, обнаруженное сообщение не подставляет другие скрытые файлы в StegFS. Механизм обмена файлами показан на рисунке 4.

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

См. также

Литература