Установка linux на шифрованный диск
В данном посте вы прочитаете немного о моих странных изыскания во время вынужденного отпуска по болезни. Речь пойдёт сразу о нескольких вещах, которые не являются «best practice», но так же тоже можно! Итак, здесь будет туториал о том, как установить Archlinux(мой любимый дистр) так, чтобы:
- без отдельного /boot (просто в /root)
- / на lvm
- lvm внутри luks-контейнера
- с UEFI
- в виртуальной машине.
с secure boot(«сложна», в виртуалке вряд ли получится)
Если заинтересовались, — добро пожаловать под кат!
Сначала я настроил это всё на моём ноутбуке Lenovo X240, потом для написания статьи пользовался уже виртуальной машиной с OVMF в Proxmox.
Настройка тестового стенда:
Создаётся всё достаточно стандартно. Образом используется мой любимый арч, который можно всегда загрузить с яндекса.
Далее несколько моментов по виртуалке в Proxmox относительно UEFI. Чтобы протестировать работу стенда с UEFI(иначе не будет так интересно), нужно в свойствах виртуальной машины выставить OVMF вместо SeaBIOS:
Далее соответственно добавить UEFI-диск, чтобы получилось примерно так:
Теперь можем стартовать виртуальную машину и начинать процесс установки. В консоли виртуальной машины сразу стартуем сервис sshd, задаём пароль root и узнаём dhcp-адрес виртуальной машины:
Далее мы можем продолжить работу по ssh чтобы было удобнее.
Разметка дисков
Итак, уже подключившись по ssh мы для начала устанавливаем время, чтобы потом не оказалось, что файловые системы созданы в будущем:
Проверяем, что всё верно:
Теперь можем приступать к разметке диска. На данном этапе у меня есть диск /dev/vda, т.к. контроллер Virtio и это просто пустой диск без таблицы разделов:
Разбивать его будем на 2 партиции:
- fat32 диск для UEFI приложений(EFI_system_partition)
- LUKS контейнер со всем остальным
Далее создаём первую партицию для EFI с типом EF00 (EFI System Partition):
Теперь создаём партицию для LUKS, где даже не будем заморачиваться с типом и оставим как есть:
Запишем изменения и закончим с разметкой партиций:
Создание LUKS-контейнера и файловых систем
C первым разделом(vda1) всё достаточно просто. Нам нужно его просто отформатировать и пока на этом всё:
Вторая партиция это контейнер, который нужно сначала подготовить. Форматируем партицию через cryptsetup и задаём парольную фразу:
*** я не стал заморачиваться с выбором шифров, с затиранием рандомом урандомом и прочим, а просто создал контейнер по умолчанию.
Далее открываем контейнер указывая ту же парольную фразу:
Теперь у нас есть открытый контейнер, доступной через device mapper:
Теперь мы можем продолжить с lvm(напишу по-быстрому, так как это не сабж):
Далее создадим файловые системы на наших lv:
Теперь это всё можно примонтировать для установки базовой системы. Точкой установки будет /mnt, где будет начинаться корень нашей будущей системы:
*** /boot/efi я создаю, чтобы сам /boot остался на /dev/mapper/rootvg-root, а папка efi уже для монтирования в неё /dev/vda1(fat32 efi partition):
Проверим текуoие точки монтирования(всегда полезно):
Как мы видим, всё честно и теперь время ставить сам арч.
Установка базовой системы
Устанавливаем базовые пакеты из наборов base и base-devel используя пакет pacstrap( им можно поставить всё, что вы хотите и кроме этого):
Всё прекрасно загрузилось, базовая система готова. Вывод я, естественно, убрал. Теперь мы можем настроить эту самую систему, чтобы она загрузилась и работала.
Из базовых вещей сразу сгенерируем fstab:
Далее сделаем arch-chroot в эту новую систему:
Cразу настроим системное время и hostname:
Зададим пароль root:
Раскомментируем нужные локали в /etc/locale.gen:
Сразу их настроим для системы и консоли:
Теперь настроим файл /etc/mkinitcpio.conf, который у нас отвечает за опции, хуки и прочее при генерации initramfs:
Самое главное здесь хуки и их порядок:
*** хук resume для загрузки системы после гибернации из swap. На виртуалке он не нужен. Скопировал его с бука.
Теперь мы можем сгенерировать initramfs:
Теперь, когда у нас есть система, нам нужно установить сам загрузчик. Мой выбор пал на grub(2), потому как он как-то роднее и достаточно легко умеет загружать ядро с зашифрованного раздела(ну или я особо не искал другие).
Установим пакет grub:
Перед генерацией конфига отредактируем дефолтные опции grub:
здесь нужно раскомментить одну важную строчку(без коммента, естественно):
и добавить(там пусто по умолчанию) в GRUB_CMDLINE_LINUX:
UUID я взял из blkid:
Генерируем конфиг для grub:
Далее устанавливаем сам grub на диск:
*** можно добавить --recheck --debug, указать архитектуру… но… оно ведь само и так работает)
Теперь отредактируем /etc/crypttab, чтобы сама система знала, что при загрузке надо расшифровывать LUKS раздел. Добавим строчку:
Которая означает, что надо запрашивать пароль(none) для раздела /dev/vda2 и представлять его уже как container через device mapper.
Теперь мы готовы выйти из chroot и перезагрузить систему:
Теперь обратимся к консоли виртуальной машины чтобы увидеть результат:
На данном этапе у нас запустилось EFI-приложение /boot/efi/EFI/arch/grubx64.efi с /dev/vda1, которое запрашивает у нас пароль, чтобы расшифровать наш контейнер.
Далее, после ввода пароля:
Здесь уже привычное окно grub с нашими опциями загрузки из /boot/grub/grub.cfg.
На данном этапе grub расшифровал наш контейнер и получил доступ к этом самому файлу (/boot/grub/grub.cfg), ядру и initramfs. После выбора опции по умолчанию загрузится ядро, initramfs:
Активно, ядро и дело дошло до хука encrypt, который заново спрашивает нас пароль для расшифровки контейнера( вообще влом 2 раза вводить пароль, но может быть так, что вы от излишка паранойи сделаете 2 контейнера для boot и root :)
И далее уже после полной загрузки системы:
PS: для повышения уровня шизофрении здесь не хватает только secure boot, чтобы подписать наш загрузчик grubx64.efi.
Просто положить ядро и initramfs на /dev/vda1 я счёл безыинтересным, так как 100 раз так уже делал. Другие загрузчики типа SHIM, bootctl и прочее не умеют вытворять подобного(ну и ли я не в курсе — расскажите в комментах )
Данная статья рассказывает, как создать надёжно зашифрованное хранилище данных на жестком диске компьютера и при этом не сломать спящий и ждущий режимы. Особенно актуально это для владельцев ноутбуков, т. к. в отличие от стационарных компьютеров шанс кражи/утери ноутбука выше и возникает обоснованное желание хранить информацию в зашифрованном виде. Однако, предлагаемая по-умолчанию опция шифрования домашней папки при помощи ecryptfs во-первых не шифрует корневой раздел системы 1) , а во-вторых ecryptfs шифрует раздел swap с применением случайно сгенерированного ключа, таким образом, перестает работать такая нужная в ноутбуках опция как спящий режим 2) 3) .
Предлагается же создать один большой зашифрованный раздел размером с весь диск компьютера 4) , поверх которого развернуть виртуальную группу LVM, в которой создать обычные (не шифрованные с точки зрения ОС) разделы /, /home и swap. При этом, пользователю придётся вводить пароль при каждом включении компьютера (даже при выходе из спящего режима), однако, за счёт смещения шифрования на более низкий уровень, ОС «не заметит» этого и все функции будут работать.
Начиная с версии 12.10 возможность зашифровать весь диск целиком добавлена в варианты установки Ubuntu в стандартном инсталляторе.
Настройка системы
Следующим шагом выходим из chroot и делаем копию initrd :
И подправляем скрипты, запускаемые при загрузке системы до монтирования основных файловых систем. В файле ./scripts/local-top/ORDER необходимо заменить cryptroot на crypto . Содержимое файла ./scripts/local-top/crypto нужно заменить на скрипт, открывающий наш полностью зашифрованный диск:
$DISK_ID можно узнать, используя ls -l /dev/disk/by-id/ | grep sda . После этого делаем скрипт исполняемым:
Затем кладём в initrd ключ и заголовок тома:
Собираем получившийся initrd и кладём его в папку /root :
Во время работы
Перед запуском Whonix Gateway и Kali рекомендую включить VPN и поставить на закачку несколько произвольных торрентов с большим количеством сидов — например, с популярными дистрибутивами Linux-a. Это сильно затруднит проведение атак, основанных на статистическом анализе трафика. Кроме того, чтобы избежать случайной утечки информации, желательно закрыть все посторонние программы.
Сам же порядок запуска такой: сначала запускаем Whonix, дожидаемся завершения первичной настройки и затем запускаем Kali. При необходимости — перед запуском Kali восстанавливаем её чистый снимок. По окончании работы необходимо, в обратном порядке, выключить сначала виртуальную машину с Kali, затем Whonix.
Tips & Tricks
Несколько советов, которые обязательно пригодятся тебе в будущем:
Совет 1. Чтобы сменить цепочку Tor-серверов и выходную ноду, необходимо запустить в консоли Whonix Gateway утилиту arm и нажать клавишу "n".
Совет 2. Для безопасного обмена данными с выключенной виртуальной машиной можно монтировать её диски с помощью vdfuse :
Совет 3. При подключении по ssh из реальной машины можно использовать tmux для одновременной работы с терминалом изнутри и снаружи VM. Для этого необходимо запустить tmux в Kali, подключиться к ней по ssh и выполнить tmux a . Можно также смонтировать папки виртуальной машины с помощью sshfs:
Совет 4. Для приватной анонимной связи и передачи файлов я рекомендую torchat . Его стоит запускать в основной системе, чтобы предотвратить сценарий Tor-over-Tor, утечку и потерю данных. Для связи с группой лиц можно использовать свои irc- или jabber-серверы в качестве onion-ресурсов: рекомендуемый клиент — Pidgin, система криптографической защиты чатов — otr .
Совет 5. В случае если необходимо анонимно работать с не-TCP-шными протоколами, можно воспользоваться VPN (желательно — не требующей регистрации). Для этого обычно нужно скачать соответствующий конфигурационный файл и использовать команду sudo openvpn config.ovpn .
Подготовка диска
Ну а теперь перейдем непосредственно к действиям.
Для осуществления задуманного нам понадобятся:
- Live-DVD с любым дистрибутивом Linux (все команды в статье даны для Debian/Ubuntu);
- Любая свободная флешка размером более 128 Мб;
- Прямые руки.
Если ты хочешь защитить уже существующую систему, а не ставить новую, необходимо сначала сделать её полный бэкап.
Для начала нам нужно загрузиться с Live-DVD и определиться с носителями, на которые будем ставить систему. В нашем примере мы работаем с дистрибутивом Debian, а наши носители — жесткий диск /dev/sda и флеш-карта /dev/sdb . После загрузки нам необходимо открыть консоль с правами root и установить необходимые программы — полнодисковое шифрование cryptsetup и загрузчик grub2 :
Если на жестком диске была какая-то незашифрованная информация, его необходимо полностью перезаписать случайными данными. Для этого сначала определим его размер в байтах:
А затем затрем диск случайными данными:
Теперь нам необходимо сгенерировать ключ шифрования и положить его в /root/key :
Итак, форматируем жесткий диск:
В начале диска, зашифрованного LUKS, есть заголовок, в котором перечислены методы шифрования и зашифрованные ключи. Чтобы содержимое диска выглядело как случайные данные, мы забэкапим и затрём этот заголовок:
Открываем наш зашифрованный диск:
Далее с /dev/mapper/rootfs можно работать как с обычным жестким диском. При необходимости можно использовать RAID, LVM и даже создать swap-раздел.
Устанавливаем систему или копируем защищаемую:
Шифруем
Переходим к практике! Шифровать мы будем только рутовый раздел. Есть, конечно, экзотические кейсы, когда, помимо раздела root , шифруется еще и раздел boot , но такая конфигурация поддерживается не всеми загрузчиками и не считается стандартной и рекомендованной. Мы же вообще не будем использовать загрузчик, так что оставляем boot в покое и шифруем все остальное.
Начнем собирать нашу систему, загрузившись с установочного диска.
Для начала разметим диск следующим образом: sda1 для / boot , sda2 для / . Схему разделов выбираем GPT.
$ parted / dev/ sda mklabel gpt mkpart primary fat32 1MiB 501MiB
$ parted / dev/ sda set 1 esp on
$ parted / dev/ sda mkpart primary btrfs 501MiB 100%
Далее создадим наш LUKS на sda2.
$ cryptsetup luksFormat / dev/ sda2
WARNING!
========
This will overwrite data on /dev/sda2 irrevocably.
Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sda2:
Verify passphrase:
cryptsetup luksFormat /dev/sda2 18.16s user 1.88s system 80% cpu 24.742 total
Взглянем теперь на LUKS.
$ cryptsetup luksDump / dev/ sda2
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: e04b5b87-6bfc-4f73-83b0-36f91d52f141
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 7
Memory: 483194
Threads: 2
Salt: a8 d7 82 ce 89 c8 0f d6 29 18 83 e5 5d 9d a7 f1
a2 6d 66 81 70 db c4 82 cc fb ae 81 4c 7f ed 0c
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 149967
Salt: 87 ac 6f 61 75 fb 91 14 63 5d ca 5d 1c 25 ef 42
7b af 51 63 34 eb 26 d5 d7 be 7a 78 7b 2a 25 f1
Digest: da e7 fd 26 59 85 5d 5e 34 79 2a fa 20 95 f1 83
13 10 0d 0e a3 58 a6 0e 33 b0 f0 73 e8 0a a1 1e
Видно, что мы задействовали один из восьми доступных слотов с ключами — доступ к нему ограничен паролем.
Алгоритм шифрования по умолчанию ( aes-xts-plain64 ) нас устроит. Перечень всех поддерживаемых алгоритмов зависит от ядра (загляни в / proc/ crypto ). Можно протестировать работу с ними.
$ cryptsetup open / dev/ sda2 cryptroot
Enter passphrase for /dev/sda2:
После этих манипуляций у нас в системе стал доступен новый раздел cryptroot .
$ lsblk / dev/ sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 8G 0 disk
├─sda1 8: 1 0 500M 0 part
└─sda2 8: 2 0 7. 5G 0 part
└─cryptroot 253: 0 0 7. 5G 0 crypt
Создадим на разделах файловые системы.
Для продолжения установки примонтируем наши разделы.
$ mount / dev/ mapper/ cryptroot / mnt -o subvol = @root, ssd, noatime, space_ cache, compress = zstd
$ mount / dev/ mapper/ cryptroot / mnt/ home -o subvol = @home, ssd, noatime, space_ cache, compress = zstd
Заглядывая одним глазом в вики, устанавливаем систему обычным образом.
Не забудем включить хук encrypt при создании initramfs .
Финальный этап — настройка UEFI для загрузки нашего ядра. Напоминаю, что мы обойдемся без GRUB и будем загружать ядро напрямую, используя фичу EFISTUB.
Добавляем запись в UEFI.
--unicode 'cryptdevice=/ dev/ sda2: cryptroot root=/ dev/ mapper/ cryptroot rootflags=subvol=@root rw initrd=\ initramfs-linux. img' \
Особое внимание обрати на параметры ядра! Без них система просто не сможет найти шифрованный раздел.
Перезагружаемся и убеждаемся, что все работает, как мы хотели: на этапе загрузки требуется ввод пароля для расшифрования раздела.
first_reboot
Установка
Итак, для установки нам потребуется диск альтернативной установки системы, который можно скачать тут. Ищите образ с alternate в названии.
Подразумевается, что вы выполняете новую установку системы, если это не так — предварительно сохраните все свои данные и настройки, т. к. описанный ниже процесс подразумевает потерю всех данных на жёстком диске компьютера.
Загрузите систему с alternate — диска, выберите язык и приступите к установке:
Выберите ручной режим разметки диска:
Если у вас новый диск или, если вы хотите очистить на нем таблицу разделов, выберите строку с названием диска:
и создайте на нем новую таблицу разделов:
После этого, создайте на диске раздел /boot, выбрав указателем свободное место на диске:
Укажите небольшой объем, от 300 МБ до 1ГБ, т.к. для /boot этого будет вполне достаточно:
В списке «использовать как» укажите /boot, не забудьте сделать раздел загрузочным:
Далее, не размечая оставшееся место, переходим в пункт «Настроить шифрование для томов»:
Соглашаемся записать изменения:
Выбираем «Create encrypted volumes»:
Далее выбираем (при помощи кнопки Space ) свободное место на диске и жмём «Продолжить»:
Если у вас нет паранойи, можете просто нажать «Настройка раздела закончена», если есть - установите параметр «Стереть данные» в «Да»:
Снова соглашаемся на запись изменений на диск:
Далее выбираем «Finish»:
Далее установщик попросит вас ввести парольную фразу, которой он «закроет» диск:
После этого подтвердите пароль:
Если вы используете слишком простой пароль 5) , установщик попросит подтверждения:
После создания шифрованного тома, нужно настроить LVM:
Снова соглашаемся на запись изменений:
Создаем группу томов:
И указываем в качестве устройств для группы только что созданный шифрованный диск:
После этого создаем логические тома:
Пример для swap:
Аналогично создаем диски для root и home, выделяя им желаемый объем. Если у вас большой диск - можете оставить некоторый его объем свободным, позднее вы сможете добавить его к любому логическому тому 6) .
После этого выбирайте «Закончить»:
Теперь нужно назначить файловые системы и точки монтирования для созданных дисков:
Выбирайте разделы, находящиеся в блоках, начинающихся на LVM, они названы, согласно именам, данным им вами при создании логических томов, например, в данном случае, это LV home, LV swap и LV root. Стоит заметить, что раздел root 7) не нужно делать загрузочным, т.к. роль загрузочного у нас выполняет отдельный раздел /boot.
По окончании, выбирайте «Закончить разметку и записать изменения на диск»:
И снова соглашаемся с записью изменений на диск (заодно можно ещё раз проверить все ли вы правильно разметили):
Далее продолжайте установку системы как обычно. Когда установщик спросит вас, зашифровать ли домашний каталог — откажитесь, ведь ваш диск уже зашифрован.
После завершения установки и перезагрузки система предложит вам ввести пароль для разблокировки шифрованного диска. Введите пароль и нажмите Enter .
Анонимизация ОС
С шифрованием разобрались. Теперь пришло время поговорить об анонимизации системы.
Во многих случаях (например, при анализе вредоносного программного обеспечения) необходимо изолировать всю операционную систему и анонимизировать её трафик таким образом, чтобы никакие действия в ней не привели к раскрытию нашего ip-адреса или утере важных данных. Для этого воспользуемся схемой на основе связки Whonix (виртуальной машины, выступающей в качестве шлюза, перенаправляющего трафик в Tor) и любой другой виртуальной машины.
Как устроен раздел LUKS
Раздел LUKS имеет следующий формат.
Он начинается с заголовка phdr , далее за ним следуют слоты с ключевыми данными (KM1, KM2, . KM8). За ключевыми данными располагаются данные, шифрованные мастер‑ключом.
Заголовок phdr хранит информацию о протоколе и режиме шифрования, длину ключей, идентификатор UUID и контрольную сумму мастер‑ключа.
В LUKS для одного зашифрованного раздела зарезервировано восемь слотов, в каждом из которых может храниться отдельный ключ. Любой из восьми ключей может быть использован для расшифровки раздела.
Заголовок и слоты ключей можно хранить на другом физическом носителе, отдельно от зашифрованных данных, тем самым реализуя многофакторную защиту. Но при утрате заголовка или слотов получить доступ к зашифрованным данным становится невозможно.
Для управления шифрованием дисков используется утилита cryptsetup.
С помощью этой утилиты возможно:
- создавать шифрованные разделы LUKS;
- открывать и закрывать разделы LUKS;
- управлять слотами ключей;
- дампить заголовок LUKS и мастер‑ключ.
Для работы cryptsetup требуются права суперпользователя и пароль шифрования.
Меры предосторожности
Хотя рассмотренная схема и гарантирует защиту от утечки ip-адреса из виртуальной машины, для настоящей анонимности необходимо соблюдать следующие правила:
- Нельзя подключаться к своим ресурсам;
- Нельзя заходить в аккаунты, которые использовались тобой без Tor-а;
- Нужно помнить, что все нешифрованные данные могут перехватываться exit nod-ой;
- Нельзя допускать прохождение трафика Tor-a через Tor, так ноды двух цепочек могут случайно совпасть, тем самым сокращая эффективную длину цепочки вплоть до 1 машины;
- При передаче файлов нужно защищать их криптографическими и стеганографическими методами, используя утилиты 'gpg' и 'steghide', и анонимизировать их метаданные, например с помощью mat (Metadata Anonymisation Toolkit).
Настройка
- Скачиваем Virtualbox, Whonix Gateway и Kali;
- Проверяем ova-файл, устанавливаем и обновляем Whonix по инструкции на сайте;
- Для отключения графического интерфейса — выделяем виртуальной машине 120 Мб оперативной памяти;
- Затем проверяем файл с образом диска Kali и создаём под него новую виртуальную машину;
- В настройках сетевого адаптера VM выбираем внутреннюю сеть whonix;
- Включаем систему;
- Настраиваем сеть вручную или с помощью Network Manager-а:
- ip 10.152.152.11
- шлюз 10.152.152.10
- dns-сервер 10.152.152.10
Перед началом работы необходимо убедиться, что сеть работает нормально, и только потом обновить ОС и установить все необходимые приложения. Разумеется, не отключая Tor. При этом ни в коем случае нельзя устанавливать Guest Additions, так как они синхронизируют время на реальной и виртуальной машине, расшаривают буфер обмена, могут получить доступ к микрофону и вообще содержат в себе довольно много потенциально опасной функциональности.
Кстати говоря, в нашем случае для усложения отслеживания лучше использовать Tor Browser с правами обычного пользователя, так как стандартный браузер Kali довольно редок и запускается от рута. Для этого устанавливаем sux, который позволит нам запускать графические приложения от имени другого пользователя:
Скачиваем браузер с официальной страницы проекта. Опять же на всякий случай проверяем целостность скачанного файла (по данной инструкции). Затем создаём пользователя torbrowser, логинимся в него через su и
распаковываем архив с правами этого пользователя:Далее отключаем в нём Tor, так как весь трафик уже анонимизируется на виртуальной машине с Whonix, а Tor через Tor - это вредно и очень медленно. Как это сделать, можно посмотреть тут. Ну и, наконец, запускаем torbrowser:
Настройка ssh и sshfs для включенной машины
Для подключения к гостевой машине через ssh нужно сначала подключиться к Whonix-Gateway, пробросив порт, а потом из Whonix-Gateway подключиться к ssh-серверу, запущенному на Kali. Аналогичным способом можно получить доступ к файлам на Kali с помощью двойного sshfs.
После этого необходимо создать снимок, из которого можно будет загружаться перед каждым сеансом работы, зная, что на компьютере не осталось никаких материалов от предыдущего. Для ещё более надежной защиты от фингерпринтинга можно каждый раз устанавливать и настраивать эти виртуальные машины заново.
Ссылки
Статья написана по мотивам вот этой вот статьи.
имея доступ к корневому разделу можно, например, получить список файлов в домашнем разделе, несмотря на то, что тот зашифрован
т. е. режим приостановки работы компьютера, при котором все содержимое оперативной памяти сбрасывается на диск, а питание компьютера отключается
что, однако, потребует изменения размера файловой системы на нем, так что если не знаете как лучше поступить - добавьте этот объем сразу к разделу home
LUKS (Linux Unified Key Setup) — спецификация шифрования диска (или блочного устройства), изначально предложенная для Linux, но сейчас поддерживаемая и в ряде других операционных систем.
—- Данные сохраняются по блокам, как в обычном файле/файловой системе. То есть :
модификация файла внутри контейнера приводит к перезаписи блоков, занимаемых этим файлом, но не всего контейнера;
«потеря/порча» одного блока приводит к потере информации «того-что-было-в-этом-блоке», и не более того.
при синхронизации контейнера «в облако» - как правило, перезаписывается не весь файл, а «модифицированная часть», что требует малого объема трафика.
—- В отличие от EncFS
—- В отличие от Truecript
и проверяем (должен быть вывод «kernel/drivers/md/dm-crypt.ko»)
Размечаем контейнер, как luks-систему с ключом
или - без ключа, с набором пароля при каждом открытии контейнера
Будет предупреждение WARNING! Данные на /home/user/.private/container.crt будут перезаписаны без возможности восстановления. Are you sure? (Type uppercase yes), надо набрать YES.
смотрим, появился ли в устройствах, и информация о нем
Форматируем содержимое контейнера, в данном примере в ext4, с установкой метки и отключением «резерва рута»
монтируем и выдаем права пользователю (себе)
Напомним - если мы потеряли файл ключа, надо иметь пароль. Задаем пароль, при этом будут два запроса на его ввод - Введите новый пароль для ключевого слота и Verify passphrase
и проверяем «занятые» ключами слоты (их должно быть два, если мы задали ключ и пароль, Key Slot 0: ENABLED и Key Slot 1: ENABLED)
Описание изложено для ubuntu 12.04, Unity, сервис dropbox. В приведенных скриптах работа с декриптованым содержимым контейнера выполняется при остановке службы синхронизации. После «закрытия» контейнера - запускается служба синхронизации.
Если уж мы этим занялись, сделаем «кнопку» и «раскрасим» ее подобающим образом. Мы же не будем работать с контейнером из командной строки? Выбираем любую приглянувшуюся нам картинку в /usr/share/app-install/icons/ - там их больше 2000, например, cryptkeeper.jpg и копируем к себе в профиль
По вызову «Открываем с паролем» - не используется файл-ключ, в окне терминала будет выдан запрос на ввод пароля.
—-Создадим скрипты для выполнения действий с контейнером. Для проверки статуса - проверяем монтирование. Создаем файл privatestatus.sh
Для открытия с запросом ввода пароля потребуется вызов окна терминала.
Для закрытия - проверяем, не был ли уже закрыт контейнер, закрываем и стартуем службу dropbox.
Даем права на выполнение
Не обязательно именно так располагать каталоги и давать имена. Никто не мешает дать файлу ключа имя /home/user/.icons/warum.jpg, а контейнеру имя debian_install_QIP.tar.gz, и поместить среди иных пакетов.
В завершение, создадим ссылку для помещения в dropbox каталога .private под именем dropboxcript
Посмотреть, сколько места использовано (занято файлами) в нашем контейнере, можно так:
Если заканчивается свободное место, увеличим размер контейнера. Например, на 50M. Перед этим - убедимся, что «контейнер закрыт».
Сегодня полнодисковое шифрование — это норма. В Windows для этого есть BitLocker, в macOS — FileVault и APFS. В Linux для тех же целей служит dm-crypt и LUKS. В этой статье я покажу, как установить ОС на шифрованный корневой раздел, настроить авторазблокировку при загрузке с помощью модуля TPM и новой фичи systemd-cryptsetup, а также резервировать ключ восстановления в Active Directory. Все трюки будем делать в Arch Linux, хотя ты с легкостью сможешь повторить их в своем любимом дистрибутиве.
Шифрование дисков в Linux реализуется с помощью подсистемы dm-crypt Crypto API (встроено в ядро начиная с версии 2.6). Подсистема dm-crypt работает благодаря модулю ядра, который отображает шифрованный диск в виртуальное устройство. На вид оно ничем не отличается от обычного блочного устройства хранения данных. Для управления ключами шифрования используется раздел LUKS (Linux Unified Key Setup). Формат LUKS позволяет использовать до восьми ключей шифрования для одного раздела.
Установка системы
В рамках статьи мы будем устанавливать Debian Jessie с помощью debootstrap, утилиты для развёртывания базовой debian-based системы в папке другой системы (а скопировать уже существующую систему можно rsync-ом):
Теперь chroot-имся в неё, ставим необходимый софт и настраиваем initramfs:
Обязательно нужно установить пароль на систему, если она новая:
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
В наше время только ленивый не защищает свои личные данные и не печется о своей приватности. Но мало кто использует для этого полнодисковое шифрование, из-за чего вся защита легко снимается при наличии физического доступа к компьютеру. Сегодня мы разберемся, как можно зашифровать весь жесткий диск, включая загрузчик, оставив себе возможность быстрого уничтожения данных без физического доступа к ним.
Также мы с тобой рассмотрим, как защитить и анонимизировать сетевой трафик. Про Tor слышали практически все, многие даже использовали его как прокси для отдельных приложений; мы же посмотрим, как эффективно пользоваться им для полной анонимизации целой операционной системы.
Настраиваем авторазблокировку
Хотелось бы не вводить пароль при загрузке каждый раз. Для этого нужно настроить авторазблокировку LUKS с помощью чипа TPM.
Работа с live-cd
Загрузитесь с live-cd 8) , выберите «Попробовать Ubuntu» и дождитесь полной загрузки системы. После этого, настройте подключение к интернету. Затем откройте терминал и выполните:
После успешной установки, переходите к этапу «Смена пароля».
Алгоритм работы
С требованиями определились. Теперь давай подумаем о том, как будем этого добиваться. Итак, наша схема будет работать следующим образом:
- при включении компьютера мы вставляем в него флешку,
- она запускает загрузчик,
- мы вводим пароль,
- после загрузки ОС флешка вынимается,
- дальше работа с компьютером идёт как обычно.
В то время как обычные средства шифрования защищают только домашний раздел или оставляют загрузчик на жестком диске — наша схема делает выключенный компьютер практически неуязвимым к снятию информации и протрояниванию компонентов системы, а для уничтожения всех данных на нём достаточно просто уничтожить флешку. Когда компьютер включен, ключи от диска находятся в оперативной памяти, поэтому для надёжной защиты от cold-boot атак необходимо использовать пароль на BIOS/UEFI и входить в режим гибернации, если нет возможности контролировать доступ к компьютеру.
Смена пароля
Описание
При установке диск шифруется при помощи связки LUKS и dm-crypt. LUKS использует в качестве идентификаторов доступа key slots, которые в данном случае выступают в виде пароля, однако могут быть и ключом. Всего доступно 8 слотов. По умолчанию (при создании шифрованного диска) используется слот 0.
Если вам нужно использовать компьютер совместно с другим человеком — вы можете создать для него отдельный пароль разблокировки диска.
Для операций со слотами — сначала нужно определиться с диском, на котором установлено шифрование. Выполните в терминале команду
Вывод будет примерно следующим:
Она даст вам список разделов на диске. Нужно найти тот раздел, на котором присутствует зашифрованный раздел. В данном случае это sda5.
Теперь можно просмотреть состояние слотов на этом разделе:
Видим, что слот 0 содержит пароль, а слоты 1-7 имеют статус DISABLED.
Устанавливаем новый ключ
Ввиду того, что необходим как минимум один активный слот, сменить пароль в обычном понимании на таком диске невозможно. Однако, можно создать пароль в другом слоте, а потом удалить первый слот. Чтобы создать новый ключ, выполните:
Если теперь посмотреть слоты, то станет видно, что статус ENABLED стоит теперь уже у двух слотов:
Теперь можно удалить старый пароль, находящийся в слоте 0:
И видим, что слот 0 стал DISABLED.
Требования к системе
Начнем мы наш рассказ с шифрования. Для начала давай сформулируем основные требования к системе, то есть что бы хотелось получить на выходе. Будем считать, что хорошая криптосистема должна шифровать абсолютно всё содержимое жесткого диска так, чтобы его содержимое нельзя было отличить от случайных данных. Загрузчик системы должен состоять из двух частей и находиться на флешке или другом сьёмном носителе. Первая, незащищенная часть, по паролю расшифровывает вторую, в которой находится ядро системы и ключи от жесткого диска. Система должна допускать быструю смену ключей и паролей без потери данных, а работа с разделами должна быть такой же, как и обычно.
Подготовливаем флешку
Пришло время заняться флешкой, без которой наш зашифрованный диск будет представлять собой несвязанный набор байт. Начинаем с ее разметки:
Теперь шифруем раздел и устаналиваем на него пароль (как ты помнишь, мы разбиваем флешку на два раздела):
Остается настроить загрузчик. Для этого открываем /etc/default/grub и добавляем в конец файла строку GRUB_ENABLE_CRYPTODISK=1 . После этого форматируем раздел под загрузчик:
И монтируем его:
Устанавливаем GRUB на флеш-карту. Значение --target следует выбрать в зависимости от параметров твоего компьютера. Наиболее универсальный вариант — i386-pc :
Теперь создадим файл конфигурации /mnt/grub/grub.cfg :
Загрузчик системы теперь выглядит так
Другие статьи в выпуске:
В этом файле мы задаем одну строку меню «Linux», при запуске которой после ввода пароля открывается зашифрованный раздел флешки с ядром системы и ключами от жесткого диска.
Ввод пароля от флешки
После этого открываем защищенный раздел на флешке:
Форматируем его и монтируем:
После чего копируем в него ядро и initrd :
Hex-дамп заголовка диска и флешки
Размонтируем диски и перезагружаемся:
Изменение пароля
Рекомендуется предварительно размонтировать все разделы, лежащие на зашифрованном диске, что в нашем случае означает, что для смены пароля на диске понадобится live-cd. Если вы не боитесь возможных последствий — можете пропустить этап с загрузкой live-cd и установкой необходимых программ, и сразу перейти к смене пароля.
Итого
Ну вот и все, чем я хотел поделиться с тобой сегодня. Надеюсь, данная небольшая статья-инструкция поможет тебе защитить свои данные и личную жизнь от чужих глаз. Удачи и до новых встреч!
Заключение
Вот и все. Информация на диске надёжно защищена. Однако, не стоит забывать, что существует большое количество различных угроз, и ваши данные все еще могут быть доступны злоумышленнику, в то время, пока компьютер включён, все диски «открыты». И конечно же, в случае кражи, шифрование спасет ваши данные от злоумышленника, но не вернет их вам, так что не забывайте делать резервные копии.
Читайте также: