Инструкция по отрицаемому хранению данных на носителе с Tails
Цель
Иметь на одном и том же носителе как загрузочный Tails, так и хранилище для дополнительных данных, которое не будет вычищаться перезагрузкой, причём это хранилище должно быть отрицаемым.
Общая идея
На носитель устанавливается Tails, а на оставшемся свободном месте диска (в хвосте) делается бессигнатурный шифрованный раздел для хранения данных.
Легенда
Затёрли флэшку/диск/SD-карточку рандомом, потом записали стандартный Tails по инструкции с сайта, и всё на том. Больше ничего не делали, никаких скрытых данных нет.
Подводные камни
- В ядре 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
- По умолчанию Tails не грузит все файлы в память, а каждый раз запрашивает их с диска/флешки, т.е. файловая система с диска будет всегда подмонтирована. Из-за предыдущего пункта это блокирует возможность использовать неразбитое дисковое пространство для хранения данных. Можно, конечно, загрузить Tails, потом на лету менять MBR, добавляя и убирая нужные разделы, но это геморройно, грязно и может испортить легенду.
Недокументированные возможности
С помощью реверс-инжиниринга можно выяснить, что в Tails есть тайная недокументированная опция загрузки, которая держится в строжайшем секрете — toram («to RAM»). Она позволяет вэйпонизировать Tails в нужном направлении: в самом начале загрузки, когда выводится меню isolinux с двумя вариантами (обычный и fail-safe), выбираем нам нужный, нажимаем tab, дописываем toram к опциям загрузки и грузим. После этого Tails будет загружен в память, а файловые системы на носителе, с которого он был загружен, не будут подмонтированы — носитель можно будет даже отключить, и Tails продолжит работать из RAM.
Семь шагов на пути к успеху
- Следуя инструкциям на сайте Tails, с помощью isohybrid преобразовываем iso в образ, нужный для записи на флешку/диск.2 (Примечание: возможно, в этом уже нет необходимости).
- Записываем получившийся образ с помощью команды(предполагаем, что запись идёт на /dev/sdb). Это создаёт на устройстве MBR и таблицу разделов, в первом разделе (/dev/sdb1) будет находиться Tails.
# dd if=/path/to/file.iso of=/dev/sdb
- Создаём бессигнатурный шифрованный раздел на неразбитом пространстве диска:3Оффсет (задается в секторах) можно не запоминать, потому что его легко посмотреть fdisk-ом — это последний сектор первого раздела + 1. В данном случае мы используем вариант «выделяем всё пространство до конца диска». Однако, лучше сделать иначе: если размер носителя позволяет, взять какой-то фиксированный offset побольше, чтобы при последующем обновлении Tails и его записи на этот же носитель через dd (размер может увеличиться) наш бессигнатурный раздел не был затёрт.
# cryptsetup -c aes-xts-plain64 -s 512 -h sha512 -o оффсет create NAME /dev/sdb
Вышеприведённая команда cryptsetup создаёт устройство /dev/mapper/NAME с несменяемым паролем на шифрование. Внутри него лучше создать LVM с LUKS-шифрованными логическими томами или просто один LUKS-раздел на всё устройство, чтобы не терять возможность менять пароль, убивать слоты и т.д. Как это сделать технически — уже обсуждалось [3], [4].
- Если работаем c SD-карточки, имеющей физический переключатель для блокировки записи, включаем его: на этапе загрузки запись на носитель нам не понадобится.
- Грузимся, включая опцию загрузчика toram (см. выше).
- При поставленном локе на адаптере (см. п.5, этот комментарий только на случай, если он используется) и dmsetup и cryptsetup позволяют создавать только read only mappings, причем cryptsetup умный и сам догадывается включить режимр r/o, а вот dmsetup'у надо указывать опцию -r явно. В предположении, что нужный раздел с данными уже заранее создан на свободном дисковом пространстве, монтируется он так же:(остальные опции подключения LUKS/LVM добавляем по вкусу, если нужны). Если же нужно сделать r/w-доступ к скрытому разделу на SD-карте, надо:
# cryptsetup -c aes-xts-plain64 -s 512 -h sha512 -o оффсет create NAME DEVICE
- Достать SD-карту (предполагаем, что она не подмонтирована).
- Объяснить ядру, что мы её достали (бывают «умные» адаптеры, которые usb disconnect не ловят, пока к SD-карте не обратишься).
- Cнять лок и перевставить SD-карточку.
- Подключить скрытый раздел и смонтировать его в режиме r/w.
1Уже давно пора разделы диска делать принудительно через dm, тогда бы такой проблемы не возникло вообще. Некоторые пояснения:
2) Дело не в том, что раздел открыт на запись; дело в том, что при монтировании ФС ядро делает bd_claim. Таким образом, никакая другая компонента ядра не может сделать bd_claim на подраздел и блочное устройство (диск) в целом (т.е. дело не в том, где физически находится монтируемый подраздел, а в том, логической частью какого блочного устройства он является — bd_claim делается именно на блочное устройство; из-за этого можно без проблем подмонтировать mapping и это ни на что не повлияет — каждый mapping сам по себе блочное устройство).
3) Это проблемы Linux, а точнее — интерференция системы подразделов и системы dm. Во имя консистентности был забит костыль, дабы эти подсистемы не мешали друг другу. В общем, как всегда, проблема legacy и эволюционного проектирования.
Монтирование ФС — это частный случай bd_claim. Важно то, что
b) Одна и та же компонента ядра может это делать без ограничений. Например, всё, что делается через dm (это и dmsetup linear, и dm-crypt, и LVM) совместимо друг с другом.
Т.е. dm внутри себя поддерживает консистентность маппингов, а костыль с bd_claim сделан, чтобы не заморачиваться консистентностью разных подсистем ядра для доступа к одним и тем же блочным устройствам.
2Обычные iso'шки не поддерживают загрузки с флэшек хотя бы потому, что там нет MBR нет и т.п. Гибридные iso когда делаются, а когда нет — это от авторов зависит. Не исключаю, что в Debian iso гибридные по умолчанию.
3Поскольку по умолчанию TRIM отключен, микроконтроллер не знает, какие сектора диска ОС считает свободными. Для нашего случая это хорошо, т.к. неиспользуемое место не будет обнуляться в случае флэшек и SD-карточек.
Не оговорился.
1. Запускаем Tails
2. При появлении меню запуска нажимаем Tab
3. В появившейся внизу строке ставим пробел и пишем truecrypt (раньше так работало).
Сейчас можем писать i2p и toram. Какие еще команды работают не в курсе.
комментариев: 1079 документов: 58 редакций: 59
комментариев: 1079 документов: 58 редакций: 59
unknown, как перенести в Руководства бессигнатурку? Уже оформленные действия и описание подробное, а то так и канет в ветвях форума.
2all: кто-нибудь может в двух словах рассказать, как добавляются все эти опции загрузки, где находится i2p до момента его вызова и тд? Если я задам набор софта и правил в iptables и задам параметр загрузки p1vat3 а по умолчанию у меня будет грузиться мой обычный, простой профиль?
комментариев: 11558 документов: 1036 редакций: 4118
Для начала превратить тот текст в руководство. На данный момент это скорее статья с набором общих соображений по теме, тянет на раздел статей или черновиков.
По тому же, почему недоверие к кустарным шифрам, обсуждалось уже миллион раз [1], [2].
У удалением данных там тоже не всё просто.
комментариев: 1079 документов: 58 редакций: 59
Спасибо. Сошелся на том, что это больше экспереметальный проект, который, возможно, в будущем займет достойное место в нише анонимных сетей, а во7можно и не займет.
С точки зрения научного подхода это больше мертворождённый проект, который никогда не займёт место в списке анонимных сетей. Это просто очередной P2P-протокол, спроектированный шифрпанками на коленке. Хотите анонимный файлообмен — ковыряйте Freenet.
комментариев: 1079 документов: 58 редакций: 59
комментариев: 1079 документов: 58 редакций: 59
Я на виртуалке же (принцип Whonix). К тому же HS падает сразу, после того, как принимающая сторона скачала.
Насколько я понял, опция toram берется из дебиановской инфраструктуры для создания LiveCD. На сайте пример ее использования есть, но только для перезаписи флэшки/карты с Tails. Семантика опции не поясняется. Найти на сайте, что она нужна конкретно для отсутствия монтирования ФС с флэшки, невозможно.
Резюме: в общем, надо догадываться исходя из раздела сайта про перезапись флэшки, либо быть знакомым с дебиановскими тулзами для создания LiveCD (я, например, незнаком и подозреваю, что случайный пользователь Tails тоже), либо реверсить...
Что касается загрузки без isohybrid, я сам не пробовал так делать. На самой iso-шке до применения isohybrid просто отсутствует валидный загрузчик (MBR). Если ее напрямую через dd записать на флэшку, то в режиме USB HDD и аналогичным загрузка не получится. Возможно, некоторые умные BIOS-ы догадаются произвести загрузку в режиме USB CD-ROM, но это уже без гарантий.
В любом случае, схему этот факт не меняет. Даже если грузится ванильный iso Tails, можно подключать «скрытый раздел» через cryptsetup, потому что «раздел» не указан ни в каких таблицах, не привязан к схемам разбиения диска (хоть GPT, хоть BSD disklabel) и вообще официально не существует. ☺ Естественно, опция toram при загрузке нужна. Оффсет начала раздела надо найти по размеру ванильной iso'шки и запомнить.
На какую доступную утилиту для затирания диска можно указать, чтобы быть уверенным, что результат работы затирающей утилиты будет статистически неотличим от
?
Будьте добы, ткните носом, как получить узкую серую полосу вместо широкой при форматировании текста, как кода.
комментариев: 11558 документов: 1036 редакций: 4118
Пункты 5 и 6.
Первый пункт:
Справа от него указаны ссылки, как это сделать средствами того же dd и cryptsetup.