воскресенье, 25 июня 2017 г.

Множественные скрытые тома в VeraCrypt. Беспарольная защита от повреждений

Одна из функций утилиты DcsWinCfg — работа с заголовками контейнеров VeraCrypt: создание заголовков в зарезервированной области и их перестановка. С ее помощью можно создавать и использовать несколько скрытых томов VeraCrypt в одном контейнере. Кроме того, при монтировании внешнего тома можно будет защищать скрытые тома от повреждений, не вводя их пароль. За деталями отправляю на ru-board, а здесь — мои поделки, упрощающие работу с этой утилитой, и пример-памятка по их использованию.

Множественные скрытые тома в VeraCrypt

В архиве (пароль VeraCrypt) пара батников и exe-файл с исходным кодом.

Эти файлы и программа DcsWinCfg_x86.exe помещаются в каталог, где лежит VeraCrypt.exe (но необязательно, см. параметры командной строки).

Как получить конфигурацию с картинки.

Стандартным способом через VeraCrypt создать контейнер с внешним томом A и скрытым томом B.

Пояснение. В начале и в конце контейнера VeraCrypt находится область заголовков, которую можно условно разделить на 256 секторов. Заголовок внешнего тома A располагается в секторе 0, заголовок стандартного скрытого тома B — в секторе 128, остальные места зарезервированы. Утилита создает заголовки в произвольных секторах под произвольные области контейнера. Перед монтированием скрытого тома утилита переставляет его заголовок на 0-й сектор (а также при необходимости переставляет на 128-й сектор заголовок, используемый для защиты от повреждений). Сразу после монтирования область заголовков восстанавливается, для этого контейнер монтируется в режиме совместного использования.

Создать несколько ключевых файлов размером 1024 байта: Сервис → Генератор ключевых файлов.

Как добавить том C вплотную к тому B:

  • Запустить батник create.bat и ответить на вопросы:
  • Container — путь к контейнеру, можно относительный. Если контейнер — раздел, то пропустить (т.е. ввести пустую строку), потом выбрать раздел из списка. Батники в этом случае запускать от администратора.
  • Выбрать Create new volume before existing one.
  • Existing volume sector — ввести сектор скрытого тома B, т.е. 128.
  • Existing volume password и Existing volume pim — пароль и, если используется, PIM тома B.
  • New volume size — желаемый размер тома C.
  • New volume sector — желаемый сектор заголовка C: любой номер от 1 до 255 включительно, кроме 128.
  • New volume password и New volume pim — желаемый пароль и PIM тома C.
  • File... for the new volume — путь к первому ключевому файлу.
  • Safety header sector — желаемый сектор «защитного» заголовка D (это фиктивный том, который охватывает B и C).
  • Safety header password и Safety header pim — можно пропустить, тогда у заголовка D будет тот же пароль и PIM, что у C.
  • File... for the safety header — путь к следующему ключевому файлу.

Как смонтировать том C:

  • запустить батник mount.bat, аналогично указать контейнер;
  • Sector to mount — сектор, выбранный для тома C;
  • остальные вопросы пропустить (но можно указать букву диска в пункте Letter);
  • когда VeraCrypt запросит пароль, нажать кнопку Mount options и отключить опцию Mount volume as read only (по умолчанию тома монтируются на чтение).

При первом монтировании необходимо выполнить быстрое форматирование тома.

Как добавить том E вплотную к тому C

Порядок почти аналогичен. Отличие: в качестве Existing volume следует указать защитный заголовок D (его сектор, пароль, PIM). При этом создастся заголовок фиктивного тома F, который охватывает тома B, C и E.

Как создать том G внутри тома E

Почти аналогичный порядок. Отличия:

  • выбирается вариант Create new volume inside of existing one;
  • в качестве Existing volume указывается том E;
  • дополнительный (защитный) заголовок не нужен.

Как смонтировать том E и защитить от повреждения том G (способ с паролем):

  • запустить батник mount.bat, указать контейнер;
  • Sector to mount — сектор заголовка E;
  • Offset — пропустить;
  • Sector to protect — сектор заголовка G;
  • когда VeraCrypt запросит пароль, нажать кнопку Mount options, отключить опцию Mount volume as read only и включить Protect hidden volume... и ввести пароль и PIM тома G.

Как смонтировать внешний том A и защитить от повреждения все скрытые тома (способ с паролем):

  • запустить батник mount.bat, указать контейнер;
  • Sector to mount, Offset — пропустить;
  • Sector to protect — сектор заголовка F;
  • когда VeraCrypt запросит пароль, нажать кнопку Mount options, отключить опцию Mount volume as read only и включить Protect hidden volume... и ввести пароль и PIM заголовка F (по умолчанию совпадают с E).

Таким образом, для тома E защитным является заголовок G, а для тома A — заголовок F.

Если настоящие секретные данные хранятся в томе E, то противнику можно предъявить в качестве «защитного» заголовок D.

Как смонтировать том с защитой от повреждения, не вводя пароль от внутреннего тома:

  • запустить батник mount.bat, указать контейнер;
  • Sector to mount — сектор монтируемого тома (0 в случае тома A);
  • Offset — смещение защитного заголовка в килобайтах (предварительно узнать);
  • когда VeraCrypt запросит пароль, нажать кнопку Mount options, отключить опцию Mount volume as read only, включить Protect hidden volume... и ввести пароль 1 и PIM 1.

Чтобы узнать смещение защитного заголовка, запустить батник create.bat и указать этот заголовок в качестве Existing volume — отобразятся данные заголовка. Любой размер, не превосходящий Existing volume start, можно использовать как смещение.

Естественная нумерация

Скрытым томам можно назначать любые свободные сектора, причем есть резон выбирать эти сектора непредсказуемо. Однако можно естественным образом продолжить исходный порядок, при котором внешнему тому сопоставлен сектор 0, а стандартному скрытому — сектор 128. Для этого номер нового тома будет определяться так:

  • если том создается перед существующим, то из номера существующего (реального) тома вычитается максимальное число вида 2n, на которое делится половина этого номера;
  • если внутри (в конце) — то прибавляется;
  • номер защитного заголовка — следующий за номером реального.

Согласно этой нумерации, тома располагаются в контейнере по возрастанию номеров, реальным томам сопоставляются четные номера, защитным — нечетные. Так, в приведенном примере тому C будет сопоставлен сектор 64, тому D — сектор 65, тому E — сектор 32, тому F — сектор 33, тому G — сектор 48.

Батник create.bat по умолчанию предлагает эту нумерацию при создании томов.

Защита заголовков

Поскольку при монтировании томов временно меняется область заголовков, предусмотрены ситуации, когда с ее восстановлением возникают проблемы.

Во-первых, каждый том VeraCrypt имеет не только основной заголовок в начале контейнера, но и резервный в конце. При монтировании меняется только начало контейнера, поэтому повреждение основной области заголовков само по себе не влечет потери данных. Однако воссоздание основной области заголовков из резервной может потребовать кропотливой работы.

Во-вторых, каждый раз, когда область заголовков не удается восстановить, предлагается повторить попытку позже. Например, в случае запуска VeraCrypt без ключа /f восстановление невозможно, пока том смонтирован — понадобится сначала размонтировать том.

В-третьих, если восстановление не удается даже после размонтирования тома, можно сохранить область заголовков в отдельный файл: выбрать вариант Dump и указать желаемый путь. В дальнейшем можно будет восстановить эту область командой preserve.exe "контейнер" "путь к файлу"

Параметры командной строки

Батник mount.bat принимает те же аргументы командной строки, что и VeraCrypt (и сообщает их VeraCrypt при монтировании), а также дополнительные опциональные аргументы:

  • /vc_path "путь к VeraCrypt",
  • /dcs_path "путь к DcsWinCfg",
  • /outer сектор_монтируемого_тома,
  • /offset смещение_защитного_заголовка_в_килобайтах,
  • /inner сектор_защитного_заголовка (играет роль, если смещение не задано).

Если значение какого-либо параметра передано в командной строке, то его ввод не запрашивается.

По умолчанию тома монтируются как съемные носители и только на чтение. Но если в командной строке переданы опции монтирования (аргументы /m ... или /q preferences), то применяются только переданные опции.

Предостережения

После создания томов следует безвозвратно уничтожить ключевые файлы.

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

Предупреждение. Утилита модифицирует контейнер и при этом не восстанавливает предыдущее время модификации. (Но если введены стандартные сектора 0 и 128 для основного и защитного заголовка, а смещение не задано, то батник не запускает утилиту.)

Предупреждение. Мне неизвестно, можно ли отличить заголовок в зарезервированной области от данных, которыми VeraCrypt заполняет эту область при создании контейнера.

Замечание. Если VeraCrypt монтировала том от администратора, то и для размонтирования следует запускать VeraCrypt от администратора. И наоборот. В противном случае произойдет «утечка букв»: программа, запущенная с другими привилегиями, будет считать букву диска все еще занятой.

Эта неприятность возникает, например, если VeraCrypt работала с обычными правами в фоновом режиме, затем батником смонтировали том с контейнера-раздела, а затем его размонтировали через экземпляр VeraCrypt, работавший в фоновом режиме. В результате не удастся повторно смонтировать том батником на ту же букву.

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