id: Гость   вход   регистрация
текущее время 03:03 23/10/2020
создать
просмотр
редакции
ссылки

Инструкция по отрицаемому хранению данных на носителе с Tails

Цель


Иметь на одном и том же носителе как загрузочный Tails, так и хранилище для дополнительных данных, которое не будет вычищаться перезагрузкой, причём это хранилище должно быть отрицаемым.

Общая идея


На носитель устанавливается Tails, а на оставшемся свободном месте диска (в хвосте) делается бессигнатурный шифрованный раздел для хранения данных.

Легенда


Затёрли флэшку/диск/SD-карточку рандомом, потом записали стандартный Tails по инструкции с сайта, и всё на том. Больше ничего не делали, никаких скрытых данных нет.

Подводные камни


  1. В ядре Linux решили не заморачиваться консистентностью разных компонент ядра, просто запретив их взаимодействие. Итог: всё dm-based (dmsetup, cryptsetup, LVM) совместимо между собой, но несовместимо с монтированием файловой системы. В частности, если на диске /dev/sda есть файловая система на /dev/sda<N>, и она подмонтирована, нельзя адресовать свободное (неразбитое) дисковое пространство на /dev/sda с помощью dmsetup или cryptsetup (ядро ставит bd_claim на блочное устройство /dev/sda, запрещая его использование dm'у; задаваемые оффсеты и размеры при этом совершенно неважны). Однако, если файловая система находится на ином блочном устройстве (важен логический, а не физический уровень) — к примеру, на /dev/mapper/name, который зацеплен на /dev/sda<N>, монтирование этой ФС не будет препятствовать использованию dm/cryptsetup на /dev/sda.1

  1. По умолчанию Tails не грузит все файлы в память, а каждый раз запрашивает их с диска/флешки, т.е. файловая система с диска будет всегда подмонтирована. Из-за предыдущего пункта это блокирует возможность использовать неразбитое дисковое пространство для хранения данных. Можно, конечно, загрузить Tails, потом на лету менять MBR, добавляя и убирая нужные разделы, но это геморройно, грязно и может испортить легенду.

Недокументированные возможности


С помощью реверс-инжиниринга можно выяснить, что в Tails есть тайная недокументированная опция загрузки, которая держится в строжайшем секрете — toram («to RAM»). Она позволяет вэйпонизировать Tails в нужном направлении: в самом начале загрузки, когда выводится меню isolinux с двумя вариантами (обычный и fail-safe), выбираем нам нужный, нажимаем tab, дописываем toram к опциям загрузки и грузим. После этого Tails будет загружен в память, а файловые системы на носителе, с которого он был загружен, не будут подмонтированы — носитель можно будет даже отключить, и Tails продолжит работать из RAM.

Семь шагов на пути к успеху


  1. Затираем весь диск/флешку [1], [2].

  1. Следуя инструкциям на сайте Tails, с помощью isohybrid преобразовываем iso в образ, нужный для записи на флешку/диск.2 (Примечание: возможно, в этом уже нет необходимости).

  1. Записываем получившийся образ с помощью команды
    # dd if=/path/to/file.iso of=/dev/sdb
    (предполагаем, что запись идёт на /dev/sdb). Это создаёт на устройстве MBR и таблицу разделов, в первом разделе (/dev/sdb1) будет находиться Tails.

  1. Создаём бессигнатурный шифрованный раздел на неразбитом пространстве диска:3
    # cryptsetup -c aes-xts-plain64 -s 512 -h sha512 -o оффсет create NAME /dev/sdb
    Оффсет (задается в секторах) можно не запоминать, потому что его легко посмотреть fdisk-ом — это последний сектор первого раздела + 1. В данном случае мы используем вариант «выделяем всё пространство до конца диска». Однако, лучше сделать иначе: если размер носителя позволяет, взять какой-то фиксированный offset побольше, чтобы при последующем обновлении Tails и его записи на этот же носитель через dd (размер может увеличиться) наш бессигнатурный раздел не был затёрт.

    Вышеприведённая команда cryptsetup создаёт устройство /dev/mapper/NAME с несменяемым паролем на шифрование. Внутри него лучше создать LVM с LUKS-шифрованными логическими томами или просто один LUKS-раздел на всё устройство, чтобы не терять возможность менять пароль, убивать слоты и т.д. Как это сделать технически — уже обсуждалось [3], [4].

  1. Если работаем c SD-карточки, имеющей физический переключатель для блокировки записи, включаем его: на этапе загрузки запись на носитель нам не понадобится.

  1. Грузимся, включая опцию загрузчика toram (см. выше).

  1. При поставленном локе на адаптере (см. п.5, этот комментарий только на случай, если он используется) и dmsetup и cryptsetup позволяют создавать только read only mappings, причем cryptsetup умный и сам догадывается включить режимр r/o, а вот dmsetup'у надо указывать опцию -r явно. В предположении, что нужный раздел с данными уже заранее создан на свободном дисковом пространстве, монтируется он так же:
    # cryptsetup -c aes-xts-plain64 -s 512 -h sha512 -o оффсет create NAME DEVICE
    (остальные опции подключения LUKS/LVM добавляем по вкусу, если нужны). Если же нужно сделать r/w-доступ к скрытому разделу на SD-карте, надо:

    1. Достать SD-карту (предполагаем, что она не подмонтирована).
    2. Объяснить ядру, что мы её достали (бывают «умные» адаптеры, которые usb disconnect не ловят, пока к SD-карте не обратишься).
    3. Cнять лок и перевставить SD-карточку.
    4. Подключить скрытый раздел и смонтировать его в режиме r/w.

    Потом аналогичным образом можно вернуть носитель в состояние r/o и снова поставить лок (и всё это делается без перезагрузки Tails!). Понятно, что загрузка с r/o-носителя, а также физическое отключение записи на время, когда она ненужна, повышают безопасность (Вдруг Tails будет взломан? Атакующему будет тяжелее поменять загрузочный образ).


1Уже давно пора разделы диска делать принудительно через dm, тогда бы такой проблемы не возникло вообще. Некоторые пояснения:

1) fdisk (а равно dd и т.п. проги) не делают так называемый bd_claim — это обращение к ядру с заявкой на использование, а dmsetup его делает, и именно на этой стадии его обламывают. Судя по всему, авторов Linux заботит консистентность ядра самого с собой, а не ядра и юзерленда.
2) Дело не в том, что раздел открыт на запись; дело в том, что при монтировании ФС ядро делает bd_claim. Таким образом, никакая другая компонента ядра не может сделать bd_claim на подраздел и блочное устройство (диск) в целом (т.е. дело не в том, где физически находится монтируемый подраздел, а в том, логической частью какого блочного устройства он является — bd_claim делается именно на блочное устройство; из-за этого можно без проблем подмонтировать mapping и это ни на что не повлияет — каждый mapping сам по себе блочное устройство).
3) Это проблемы Linux, а точнее — интерференция системы подразделов и системы dm. Во имя консистентности был забит костыль, дабы эти подсистемы не мешали друг другу. В общем, как всегда, проблема legacy и эволюционного проектирования.

Монтирование ФС — это частный случай bd_claim. Важно то, что

a) Никакие две раздельные компоненты ядра не могут одновременно делать bd_claim на блочные устройства и подразделы в них.
b) Одна и та же компонента ядра может это делать без ограничений. Например, всё, что делается через dm (это и dmsetup linear, и dm-crypt, и LVM) совместимо друг с другом.

Т.е. dm внутри себя поддерживает консистентность маппингов, а костыль с bd_claim сделан, чтобы не заморачиваться консистентностью разных подсистем ядра для доступа к одним и тем же блочным устройствам.
2Обычные iso'шки не поддерживают загрузки с флэшек хотя бы потому, что там нет MBR нет и т.п. Гибридные iso когда делаются, а когда нет — это от авторов зависит. Не исключаю, что в Debian iso гибридные по умолчанию.
3Поскольку по умолчанию TRIM отключен, микроконтроллер не знает, какие сектора диска ОС считает свободными. Для нашего случая это хорошо, т.к. неиспользуемое место не будет обнуляться в случае флэшек и SD-карточек.


 
На страницу: 1, 2, 3, 4, 5, 6, 7, 8 След.
Комментарии [скрыть комментарии/форму]
— Гость (09/01/2015 13:17)   <#>
Наверно здесь можно оставлять комментарии (?).

Хотелось добавить:
– пп 1,2: Необязательно записывать на носитель образ, можно загрузить образ Tails в виртуальной машине. Присоединить флеш/сд. Запустить исталлер Tails и произвести установку/клонирование/обновление.
– п. 5: Чем не устраивает штатная возможность создания Persistent раздела? Этим разделом можно управлять в самой системе, а так же монтировать или нет при загрузке.

В чем смысл размещения системы в ram? Не будет ли дольше грузиться система
— SATtva (09/01/2015 13:23)   профиль/связь   <#>
комментариев: 11552   документов: 1036   редакций: 4094

Вы пропустили в заголовке слово "отрицаемому".
— Гость (09/01/2015 13:52)   <#>

В данном случае, чем достигается отрицаемость? То что раздел бессигнатурный? Ибо persistent раздел так же зашифрован и теми же средствами, что и приведено в пункте 5. Спорить не буду, т.к. не задавался целью изучать как он (смотрится со стороны). Но управление из Tails этим разделом органичнее. Там штатно сохраняются профили программ, сетевые настройки, свои инфа и т.д. Нужно б видеть конечно.
— Гость (09/01/2015 20:32)   <#>

Не у всех есть виртуальные машины. Типичный use case — это когда вам нужно проехать через границу, не особо вызывая подозрений, и провезти какие-то данные. Считается, что на обоих концах маршрута есть доверенное железо, на котором можно загрузиться с указанной флешки или SD-карточки.


В тексте есть объяснение, зачем.


Точнее будет сказать, что это вообще не дисковый раздел в традиционном смысле этого слова. Это неразбитое место на диске, которое подаётся системе как новое виртуальное бессигнатурно шифрованное блочное устройство.


Цель сохранять настройки в данном случае не преследовалась. Сохранять настройки чем-то даже хуже для безопасности, т.к. в случае компрометации система получит уникальный отпечаток.
— ressa (09/01/2015 21:02)   профиль/связь   <#>
комментариев: 1079   документов: 58   редакций: 59
Парни, спасибо. Давно свежего ничего из инструкций и руковдств не видел.
Здесь Гость обещал однажды еще расписать о недокументированной возможности инсталлятора Debian с целью сокрытия инфы, может это ты и есть?)
Кстати, в описанном случае думаю, что лучше иметь на флешке простую Убунту, а на сокрытом разделе уже TAILS со всем вышеописанным, чтобы не было вопросов по факту наличия криптодистра на флешке при угрозе выдачи пароля.
— Гость (10/01/2015 14:10)   <#>

А разве Tails криптосистема? Не нужно городить огород с загрузчиком. Легенда есть.
— ressa (10/01/2015 15:42)   профиль/связь   <#>
комментариев: 1079   документов: 58   редакций: 59
Больше вопрос или предположение, чем утверждение – что более безопасно, показать TAILS, с Tor, i2p и тд, или же чистую Убунту или прочий дистр для домоозяек?
— Гость (10/01/2015 17:01)   <#>
При помощи TrueCrypt можно засунуть под Винду секретную ОС Винду или Линукс, но под Линукс секретную ОС нетривиальная задача, связанная с init.
— Гость (10/01/2015 17:44)   <#>

Здесь описана только бессигнатурка-лайт, но она без виртуалок. Это на Debian, да.


Всё можно, но цена этого — лишний геморрой по приезду на новое место. Если думать в этом ключе, достаточно взять любой нормальный нейтральный LiveCD и SD-карточку с бессигнатурно шифрованными данными (ОС, дистры, данные). На месте на неё же или на другую карточку записываем Tails и вперёд.


Если ставить не паравиртуалку, а что-нибудь для бедных (qemu), то и в Linux проблем не возникнет. А если ставится паравиртуалка, то проблемы будут везде — на железе должен грузиться гипервизор, и никак этот факт не скроешь, так что либо он будет светится в стартовых скриптах, либо нужный загрузчик надо будет готовить для каждой загрузки, а потом затирать.
— Гость (10/01/2015 18:59)   <#>

А и то верно.
+1


нет уже i2p в tails. truecrypt тоже исключили – проверил сегодня.
— ressa (10/01/2015 22:05, исправлен 10/01/2015 22:06)   профиль/связь   <#>
комментариев: 1079   документов: 58   редакций: 59

Согласен.


TC вроде с момента закрытия исключили на неопределенное время, а на счет I2P не в курсе:
– Upgrade I2P to 0.9.17-1deb7u+1. от 3.12.14 в Tails 1.2.1

— Гость (10/01/2015 22:39)   <#>

И был, и есть. По-секрету скажу, что запускается опцией загрузки i2p в меню загрузчика. После этого, при загрузке, стартует его рутер и становится доступен i2p-browser в списке аппликаций. Теперь i2p конкретно отделен от TBB.


Исключили временно навсегда. о ТС в Tails
— ressa (10/01/2015 23:33)   профиль/связь   <#>
комментариев: 1079   документов: 58   редакций: 59

Как и в Liberte во время ее бытности.
А по какой причине такая изоляция? Хотя конкретнее мой вопрос больше о том, почему к i2p недоверие, даже среди здешних опытных Гостей? Не думаю, что из за JAVA, только лишь из за отсутствие научных работ или были прецеденты?
— Гость (10/01/2015 23:36)   <#>

Спасибо. Не знал что оставили. ТС так и запускался раньше через Tab, как загрузка системы в память toram (здесь на форуме инструкция).
— ressa (10/01/2015 23:50)   профиль/связь   <#>
комментариев: 1079   документов: 58   редакций: 59

TC? Может ты об I2P?
На страницу: 1, 2, 3, 4, 5, 6, 7, 8 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3