Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження
Оновлено своє керівництво з повнодискового шифрування в рунеті V0.2.

Ковбойська стратегія:

[A] блочне системне шифрування Windows 7 встановленої системи;
[B] блочне системне шифрування GNU/Linux (Debian) встановленої системи (включаючи /boot);
[C] налаштування GRUB2, захист завантажувача цифровим підписом/автентифікацією/хешуванням;
[D] зачистка - знищення нешифрованих даних;
[E] універсальне резервне копіювання зашифрованих ОС;
[F] атака <на п.[C6]> мета - завантажувач GRUB2;
[G] корисна документація.

╭───Схема #кімнати 40# :
├──╼ Windows 7 встановлена ​​- шифрування повне системне, не приховане;
├──╼ GNU/Linux встановлена (Debian та похідні дистрибутиви) - шифрування повне системне не приховане(/, включаючи /boot; swap);
├──╼ незалежні завантажувачі: завантажувач VeraCrypt встановлений у MBR, завантажувач GRUB2 встановлений у розширений розділ;
├──╼ установка/переустановка ОС не потрібна;
└──╼ використовуване криптографічне програмне забезпечення: VeraCrypt; Cryptsetup; GnuPG; Seahorse; Hashdeep; GRUB2 – вільне/безкоштовне.

Вищеописана схема частково вирішує проблему «виносний boot на флешку», дозволяє насолоджуватися зашифрованими OS Windows/Linux та обмінюватися даними «зашифрованим каналом» з однієї ОС в іншу.

Порядок завантаження ПК (один із варіантів):

  • увімкнення машини;
  • завантаження завантажувача VeraCrypt (правильне введення пароля продовжить завантаження Windows 7);
  • натискання клавіші «Esc» завантажить завантажувач GRUB2;
  • завантажувач GRUB2 (Вибір дистрибутива/GNU/Linux/CLI), зажадає аутентифікацію GRUB2-суперкористувача <логін/пароль>;
  • після успішної аутентифікації та вибору дистрибутива, потрібно буде ввести парольну фразу для розблокування «/boot/initrd.img»;
  • після введення безпомилкових паролів у GRUB2 «потрібне» введення пароля (третій за рахунком, пароль BIOS або пароль облікового запису користувача GNU/Linux – not consider) для розблокування та завантаження ОС GNU/Linux, або автоматичне встановлення секретного ключа (два паролі + ключ, або пароль + ключ);
  • зовнішнє вторгнення у конфігурацію GRUB2 заморозить процес завантаження GNU/Linux.

Клопітно? Ок, ідемо автоматизувати процеси.

При розмітці жорсткого диска (Таблиця MBR) ПК може мати не більше 4-х головних розділів, або 3-х головних та одного розширеного, а також не розмічену область. Розширений розділ на відміну від головного може містити підрозділи (логічні диски = розширений розділ). Іншими словами, "розширений розділ" на HDD замінює LVM для поточного завдання: повного системного шифрування. Якщо ваш диск розмічений на 4 головні розділи, вам необхідно використовувати lvm або трансформувати (З форматуванням) розділ з головного на розширений або грамотно скористатися всіма чотирма розділами і залишити все, як є, отримавши бажаний результат. Навіть якщо у вас на диску один розділ Gparted допоможе розбити HDD (на додаткові розділи) без втрати даних, але все ж таки з невеликою розплатою за такі дії.

Схема розмітки жорсткого диска, щодо якої піде вербалізація усієї статті, представлена ​​в таблиці нижче.

Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження
Таблиця (№1) розділів 1Тб.

Щось подібне має бути й у вас.
sda1 - головний розділ №1 NTFS (зашифрований);
sda2 - розширений розділ маркер;
sda6 - логічний диск (На нього встановлений завантажувач GRUB2);
sda8 - swap (зашифрований файл підкачки/не завжди);
sda9 - тестовий логічний диск;
sda5 - логічний диск для цікавих;
sda7 - ОС GNU/Linux (перенесена ОС на зашифрований логічний диск);
sda3 - головний розділ №2 з ОС Windows 7 (шифрований);
sda4 - головний розділ №3 (у ньому розташовувалася незашифрована GNU/Linux, використовується під бекап/не завжди).

[А] Блокове системне шифрування Windows 7

А1. VeraCryptПовнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

Завантаження з офіційного сайту, або з дзеркала sourceforge настановної версії криптографічного ПЗ VeraCrypt (На момент публікації статті v1.24-Update3, портативна версія VeraCrypt не підійде для системного шифрування). Клацніть контрольну суму завантаженого софту

$ Certutil -hashfile "C:VeraCrypt Setup 1.24.exe" SHA256

та порівняйте отриманий результат із викладеної КС на сайті розробника VeraCrypt.

Якщо встановлено програмне забезпечення HashTab, ще простіше: ПКМ (VeraCrypt Setup 1.24.exe)-Властивості-хеш суми файлів.

Для перевірки підпису програми в системі мають бути встановлені ПЗ та публічний pgp ключ розробника gnuPG; gpg4win.

А2. Встановлення/запуск програмного забезпечення VeraCrypt з правами адміністратораПовнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

А3. Вибір параметрів системного шифрування активного розділуVeraCrypt – Система – Зашифрувати системний розділ/диск – Звичайний – Зашифрувати системний розділ Windows – Мультизавантаження – (попередження: «Недосвідченим користувачам не рекомендується використовувати цей метод» і це правда, погоджуємося «Так») – Завантажувальний диск («так», навіть якщо не так, все одно «так») - Число системних дисків "2 і більше" - Кілька систем на одному диску "Так" - Не Windows завантажувач "Ні" (за фактом "Так", але завантажувачі VeraCrypt/GRUB2 не поділять MBR між собою, точніше, в MBR/завантажувальній доріжці зберігається лише найменша частина коду завантажувача, основна його частина розташовується в межах файлової системи) – Мультизавантаження – Налаштування параметрів шифрування…

Якщо відхилитися від вищеописаних кроків (схеми блокового системного шифрування)VeraCrypt викотить попередження і не дозволить шифрувати розділ.

На наступному кроці до цілеспрямованого захисту даних проведіть «Тест» і вибирайте алгоритм шифрування. Якщо у вас несучасний CPU, то найшвидшим виявиться алгоритм шифрування Twofish. Якщо CPU потужний, різницю помітите: AES — шифрування за результатами тесту буде в кілька разів швидкішим за свої криптоконкуренти. AES — популярний алгоритм шифрування, апаратна частина сучасних CPU спеціально оптимізована як на «секрет» так і на «злом».

VeraCrypt підтримує можливість криптування дисків каскадом AES(Twofish)/ та іншими комбінаціями. На староядерному CPU Intel десятирічної давності (без апаратної підтримки AES, шифрування каскадом А/Т) зниження продуктивності по суті непомітне. (у CPU AMD тієї ж епохи / ~ параметрів - продуктивність трохи знижена). ОС працює в динаміці та споживання ресурсів на прозоре шифрування – непомітне. На відміну, як, наприклад, помітне зниження продуктивності через встановленого тестового нестабільного desktop environment Mate v1.20.1 (або v1.20.2 точно не пам'ятаю) у GNU/Linux, або через роботу підпрограми телеметрії у Windows7↑. Зазвичай, досвідчені користувачі до шифрування проводять тести на продуктивність заліза. Наприклад, в Aida64/Sysbench/systemd-analyze blameі порівнюють з результатами цих тестів після криптування системи, тим самим, для себе спростовуючи міф, «системне шифрування — це шкідливо». Уповільнення машини та незручність відчутно при резервному копіюванні/відновленні зашифрованих даних, тому що сама по собі операція «системного резервного копіювання даних» вимірюється не в мс, і додаються ті <розшифрувати/зашифрувати на льоту>. Зрештою, кожен користувач, якому дозволено возитися з криптографією, встановлює баланс алгоритму шифрування щодо задоволення поставлених завдань, ступеня своєї параної та зручністю користування.

Параметр PIM краще залишити за замовчуванням, щоб під час завантаження ОС щоразу не вводити точні значення ітерацій. VeraCrypt застосовує величезну кількість ітерацій для створення дійсно «повільного хеша». Атака на таку «крипторавлику» методом Brute force/райдужних таблиць має сенс лише за короткої «простої» парольної фрази та персонального charset-аркуша жертви. Розрахунок за стійкість пароля – затримка при правильному введенні пароля під час завантаження ОС (Монтаж томів VeraCrypt в GNU/Linux - значно швидше).
Вільний софт для реалізації brute force атаки (вилучення парольної фрази із заголовка диска VeraCrypt/LUKS) Hashcat. John the Ripper не вміє "ламати Veracrypt", а під час роботи з LUKS не розуміє криптографію Twofish.

Через криптографічну стійкість алгоритмів шифрування, нестримні шифропанки розробляють софт з іншим вектором атаки. Наприклад, вилучення метаданих/ключів із ОЗУ (атака холодним черевиком/прямим доступом до пам'яті), існує спеціалізоване вільне та невільне ПЗ для цих цілей.

Після закінчення налаштування/генерації «унікальних метаданих» активного розділу, що шифрується, VeraCrypt запропонує перезавантажити ПК і протестувати працездатність свого завантажувача. Після reboot-а/старту Windows, VeraCrypt підвантажиться як очікування, залишиться лише підтвердити процес шифрування — Y.

На фінальному етапі системного шифрування VeraCrypt запропонує створити резервну копію заголовка активного зашифрованого розділу у вигляді "veracrypt rescue disk.iso" - зробити потрібно обов'язково - у цьому софті така операція є вимогою (у LUKS, як вимога – це, на жаль, опущено, але підкреслено у документації). Rescue disk стане у пригоді всім, а комусь і не один раз. Втрата (перезапис заголовка/MBR) резервна копія заголовка назавжди позбавить доступу до дешифрованого розділу з OS Windows.

А4. Створення рятувального USB/диску VeraCryptЗа промовчанням VeraCrypt пропонує пропалити «метадані ~2-3мБ» на компакт-диск, але не у всіх людей є диски або приводи DWD-ROM, а створення завантажувальної флешки «VeraCrypt Rescue disk» для когось виявиться технічним сюрпризом: Rufus /GUIdd-ROSA ImageWriter та інший подібний софт — не зможуть впоратися з поставленим завданням, тому що крім копіювання зміщених метаданих на флешку завантаження, потрібно з образу зробити copy/paste за межами файлової системи usb-накопичувача, коротше, правильно скопіювати MBR/дорожчу на брелок. З-під ОС GNU/Linux створити завантажувальну флешку можна скориставшись утилітою «dd», дивлячись на цю табличку.

Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

Створення рятувального диска серед Windows — інакше. Розробник VeraCrypt не включив рішення цього завдання в офіційну документацію по «rescue disk», але запропонував рішення іншим шляхом: виклав додаткове програмне забезпечення зі створення «usb rescue disk» у вільний доступ, на своєму форумі VeraCrypt. Архіваріус цього програмного забезпечення для Windows – «створення usb veracrypt rescue disk». Після збереження rescue disk.iso розпочнеться процес блокового системного шифрування активного розділу. Під час шифрування робота ОС не зупиняється, перезавантаження ПК не потрібне. Після завершення операції криптування активний розділ стає повністю зашифрованим, можна користуватися. Якщо при запуску ПК не з'являється завантажувач VeraCrypt, і не допомагає операція відновлення заголовка, перевірте прапор «boot», він повинен бути встановлений на розділ, де є Windows (незалежно від шифрування та інших ОС, див. таблицю №1).
На цьому опис блочного системного шифрування з Windows закінчено.

[B] LUKS. Шифрування GNU/Linux (~Debian) встановленій ОС. Алгоритм та Кроки

Щоб зашифрувати встановлений Debian/похідний дистрибутив, потрібно зіставити підготовлений розділ з віртуальним блоковим пристроєм, перенести на зіставлений диск GNU/Linux і встановити/налаштувати GRUB2. Якщо у вас не голий сервер, і ви цінуєте свій час, то скористатися необхідно GUI, а більшість термінальних команд, описаних нижче, мається на увазі водити в «режимі Чак-Норріс».

B1. Завантаження ПК із live usb GNU/Linux

"Провести криптотест на продуктивність заліза"

lscpu && сryptsetup benchmark

Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

Якщо ви щасливий власник потужної тачки з апаратною підтримкою AES, цифри будуть схожі на праву частину терміналу, якщо ви щасливий, але з античним залізом — на ліву частину.

B2. Розмітка диска. монтування/форматування фс логічного диска HDD в Ext4 (Gparted)

B2.1. Створення зашифрованого заголовка розділу sda7Описувати імена розділів, тут і далі, буду відповідно до своєї таблиці розділів, викладеної вище. Відповідно до вашої розмітки диска, ви повинні підставляти свої імена розділів.

Зіставлення шифрування логічного диска (/dev/sda7 > /dev/mapper/sda7_crypt).
#Просте створення «LUKS-AES-XTS розділу»

cryptsetup -v -y luksFormat /dev/sda7

Опції:

* luksFormat -ініціалізація LUKS заголовка;
* -y -парольна фраза (не ключ/файл);
* -v -вербалізація (виведення інформації в терміналі);
* /dev/sda7 - ваш логічний диск з розширеного розділу (туди, куди планується перенесення/шифрування GNU/Linux).

За замовчуванням алгоритм шифрування <LUKS1: aes-xts-plain64, Key: 256 біт, LUKS header hashing: sha256, RNG: /dev/urandom> (залежить від версії cryptsetup).

#Проверка default-алгоритма шифрования
cryptsetup  --help #самая последняя строка в выводе терминала.

За відсутності апаратної підтримки AES на CPU, найкращим вибором буде створення розширеного "LUKS-Twofish-XTS-розділу".

B2.2. Розширене створення «LUKS-Twofish-XTS-розділу»

cryptsetup luksFormat /dev/sda7 -v -y -c twofish-xts-plain64 -s 512 -h sha512 -i 1500 --use-urandom

Опції:
* luksFormat -ініціалізація LUKS заголовка;
* /dev/sda7 ваш майбутній зашифрований логічний диск;
* -v вербалізація;
* -y парольна фраза;
* -c вибір алгоритму шифрування даних;
* -s розмір ключа шифрування;
* -h алгоритм хешування/криптофункція, використовується ГСЧ (-use-urandom) для створення унікального ключа шифрування/дешифрування заголовка логічного диска, вторинного ключа заголовка (XTS); унікального майстер ключа, що зберігається в зашифрованому заголовку диска, вторинного XTS ключа, всі ці метадані та підпрограма шифрування, яка за допомогою майстер ключа та вторинного XTS-ключа шифрують/дешифрують будь-які дані на розділі (крім заголовка розділу) зберігаються в ~3мБ на вибраному розділі жорсткого диска.
* -i ітерації в мілісекундах, замість «кількості» (Затримка в часі при обробці парольної фрази, впливає завантаження ОС і криптостойкость ключів). Для збереження балансу криптостійкості при простому паролі типу "russian" потрібно збільшувати значення -(i), при складному паролі типу "?8d?ob/øfh" значення можна зменшувати.
* -use-urandom генератор випадкових чисел, генерує ключі та сіль.

Після зіставлення розділу sda7 > sda7_crypt (операція швидка, тому що створюється зашифрований заголовок з метаданими ~3 мБ і на цьому все), потрібно відформатувати та змонтувати файлову систему sda7_crypt.

B2.3. Зіставлення

cryptsetup open /dev/sda7 sda7_crypt
#выполнение данной команды запрашивает ввод секретной парольной фразы.

опції:
* open - зіставити розділ «з ім'ям»;
* /dev/sda7 -логічний диск;
* sda7_crypt - зіставлення імені, яке використовується для монтування зашифрованого розділу або його ініціалізації при завантаженні ОС.

B2.4. Форматування файлової системи sda7_crypt у ext4. Монтування диска в ОС(Примітка: Gparted працювати з шифрованим розділом вже не вийде)

#форматирование блочного шифрованного устройства
mkfs.ext4 -v -L DebSHIFR /dev/mapper/sda7_crypt 

опції:
* -v -вербалізація;
* -L -мітка диска (яка відображається у провіднику серед інших дисків).

Далі, слід примонтувати віртуально-шифрований блоковий пристрій /dev/sda7_crypt у систему

mount /dev/mapper/sda7_crypt /mnt

Робота з файлами в папці /mnt призведе до автоматичного шифрування/дешифрування даних у sda7.

Зручніше зіставляти та монтувати розділ у провіднику (nautilus/caja GUI), розділ вже буде у списку вибору дисків, залишиться ввести лише парольну фразу для відкриття/розшифрування диска. Ім'я, що зіставляється, при цьому буде обрано автоматично і не «sda7_crypt», а щось на кшталт /dev/mapper/Luks-xx-xx…

B2.5. Резервне копіювання заголовка диска (метадані ~3мБ)Одна з самих важливих операцій, які потрібно зробити, не відкладаючи — резервна копія заголовка «sda7_crypt». Якщо перезаписати/пошкодити заголовок (наприклад, встановленням GRUB2 у розділ sda7 тощо)Зашифровані дані будуть втрачені остаточно без будь-якої можливості їх відновити, тому що неможливо буде повторно згенерувати однакові ключі, ключі створюються унікальні.

#Бэкап заголовка раздела
cryptsetup luksHeaderBackup --header-backup-file ~/Бэкап_DebSHIFR /dev/sda7 

#Восстановление заголовка раздела
cryptsetup luksHeaderRestore --header-backup-file <file> <device>

опції:
* luksHeaderBackup -header-backup-file - команда бекап;
* luksHeaderRestore -header-backup-file - команда відновлення;
* ~/Бекап_DebSHIFR - файл резервної копії;
* /dev/sda7 -розділ, чию резервну копію шифрованого заголовка диска потрібно зберегти.
На цьому етапі <створення та редагування зашифрованого розділу> закінчено.

B3. Перенесення ОС GNU/Linux (sda4) на зашифрований розділ (sda7)

Створюємо папку /mnt2 (Примітка - ми все ще працюємо з live usb, в точці /mnt змонтований sda7_crypt), і монтуємо наш GNU/Linux в /mnt2, який потрібно зашифрувати.

mkdir /mnt2
mount /dev/sda4 /mnt2

Здійснюємо коректне перенесення ОС за допомогою ПЗ Rsync

rsync -avlxhHX --progress /mnt2/ /mnt

Опції Rsync описані у п.E1.

Далі, необхідно провести дефрагментацію розділу логічного диска

e4defrag -c /mnt/ #после проверки, e4defrag выдаст, что степень дефрагментации раздела~"0", это заблуждение, которое может вам стоить существенной потери производительности!
e4defrag /mnt/ #проводим дефрагментацию шифрованной GNU/Linux

Візьміть за правило: робити e4defrag на зашифрованій GNU/LInux час від часу якщо у Вас є HDD.
Перенесення та синхронізація [GNU/Linux > GNU/Linux-зашифрована] на цьому кроці закінчено.

В 4. Налаштування GNU/Linux на зашифрованому розділі sda7

Після успішного перенесення ОС /dev/sda4 > /dev/sda7 необхідно увійти до GNU/Linux на зашифрованому розділі, і здійснити подальше налаштування (без перезавантаження ПК) щодо зашифрованої системи. Тобто перебувати в live usb, але команди виконувати «щодо кореня шифрованої ОС». Симулюватиме подібну ситуацію «chroot». Щоб оперативно отримувати інформацію з якої ОС ви зараз працюєте (у шифрованій чи ні, тому що дані в sda4 та sda7 синхронізовані), розсинхронізуйте ОС. Створіть у кореневих каталогах (sda4/sda7_crypt) порожні файли-маркери, наприклад /mnt/шифрованаОС і /mnt2/дешифрованаОС. Швидка перевірка в якій ОС ви знаходитесь (у тому числі і на майбутнє):

ls /<Tab-Tab>

B4.1. "Симуляція входу в зашифровану ОС"

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt

B4.2. Перевірка, що робота здійснюється щодо зашифрованої системи

ls /mnt<Tab-Tab> 
#и видим файл "/шифрованнаяОС"

history
#в выводе терминала должна появиться история команд su рабочей ОС.

B4.3. Створення/налаштування зашифрованого swap, редагування crypttab/fstabТак як файл підкачки при кожному старті ОС форматується, то немає сенсу створювати та зіставляти swap з логічним диском зараз, і набивати команди, як у п.B2.2. Для Swap при кожному старті будуть автоматично генеруватися свої тимчасові шифрувальні ключі. Життєвий цикл ключів swap-a: розмонтування/вимкнення swap-розділу (+очищення ОЗП); або перезапуск ОС. Налаштування swap, відкриваємо файл, який відповідає за конфігурацію блокових шифрованих пристроїв (Аналог fstab-файлу, але відповідає за крипто).

nano /etc/crypttab 

правимо

#«target name» «source device» «key file» «options»
swap /dev/sda8 /dev/urandom swap,cipher=twofish-xts-plain64,size=512,hash=sha512

Опції
* swap -порівняне ім'я при шифруванні /dev/mapper/swap.
* /dev/sda8 -використовуйте ваш логічний розділ під swap.
* /dev/urandom -генератор випадкових ключів шифрування для swap (з кожним новим завантаженням ОС - створені нові ключі). Генератор /dev/urandom менш випадковий, ніж /dev/random, оскільки /dev/random використовується при роботі в небезпечних параноїдальних обставинах. При завантаженні ОС /dev/random гальмує завантаження на кілька хвилин (Див. systemd-analyze).
* swap,cipher=twofish-xts-plain64,size=512,hash=sha512: -розділ знає, що він swap і форматується «відповідно»; алгоритм шифрування.

#Открываем и правим fstab
nano /etc/fstab

правимо

# swap був під час встановлення / dev / sda8
/dev/mapper/swap none swap sw 0 0

/dev/mapper/swap -ім'я , яке задано в crypttab.

Альтернативний зашифрований swap
Якщо з якихось причин ви не хочете віддавати цілий розділ під файл підкачки, то можна піти альтернативним і найкращим шляхом: створення файлу підкачки у файлі на зашифрованому розділі з операційною системою.

fallocate -l 3G /swap #создание файла размером 3Гб (почти мгновенная операция)
chmod 600 /swap #настройка прав
mkswap /swap #из файла создаём файл подкачки
swapon /swap #включаем наш swap
free -m #проверяем, что файл подкачки активирован и работает
printf "/swap none swap sw 0 0" >> /etc/fstab #при необходимости после перезагрузки swap будет постоянный

Налаштування розділу підкачки завершено.

B4.4. Налаштування зашифрованої GNU/Linux (редагування файлів crypttab/fstab)Файл /etc/crypttab, як написав вище, описує зашифровані блокові пристрої, які настроюються під час завантаження системи.

#правим /etc/crypttab 
nano /etc/crypttab 

якщо зіставляли розділ sda7>sda7_crypt як у п.B2.1

# "target name" "source device" "key file" "options"
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 none luks

якщо зіставляли розділ sda7>sda7_crypt як у п.B2.2

# "target name" "source device" "key file" "options"
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 none cipher=twofish-xts-plain64,size=512,hash=sha512

якщо зіставляли розділ sda7>sda7_crypt як у п.B2.1 або B2.2, але не хочете повторно вводити пароль для розблокування та завантаження ОС, то замість пароля можна підставити секретний ключ/випадковий файл

# "target name" "source device" "key file" "options"
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 /etc/skey luks

Опис
* none -повідомляє, що при завантаженні ОС для розблокування кореня потрібно введення секретної парольної фрази.
* UUID -ідентифікатор розділу. Щоб дізнатися про свій ідентифікатор набираєте в терміналі (Нагадування, що весь цей час і далі ви працюєте в терміналі в середовищі chroot, а не в іншому терміналі live usb).

fdisk -l #проверка всех разделов
blkid #должно быть что-то подобное 

/dev/sda7: UUID=«81048598-5bb9-4a53-af92-f3f9e709e2f2» TYPE=«crypto_LUKS» PARTUUID=«0332d73c-07»
/dev/mapper/sda7_crypt: LABEL=«DebSHIFR» UUID=«382111a2-f993-403c-aa2e-292b5eac4780» TYPE=«ext4»

цей рядок видно при запиті blkid з терміналу live usb при змонтованому sda7_crypt).
UUID берете саме від вашого sdaX (Не sdaX_crypt!, UUID sdaX_crypt - автоматично піде при генерації конфігу grub.cfg).
* cipher = twofish-xts-plain64, size = 512, hash = sha512 -luks шифрування в розширеному режимі.
* /etc/skey - секретний файл-ключ, який підставляється автоматично для розблокування завантаження ОС (Замість введення 3-го пароля). Файл можна вказати будь-який до 8мБ, але дані будуть зчитуватися <1мБ.

#Создание "генерация" случайного файла <секретного ключа> размером 691б.
head -c 691 /dev/urandom > /etc/skey

#Добавление секретного ключа (691б) в 7-й слот заголовка luks
cryptsetup luksAddKey --key-slot 7 /dev/sda7 /etc/skey

#Проверка слотов "пароли/ключи luks-раздела"
cryptsetup luksDump /dev/sda7 

Виглядатиме приблизно так:

(Зробіть самі та самі побачите).

cryptsetup luksKillSlot /dev/sda7 7 #удаление ключа/пароля из 7 слота

/etc/fstab містить описову інформацію про різні файлові системи.

#Правим /etc/fstab
nano /etc/fstab

# "file system" "mount poin" "type" "options" "dump" "pass"
# / був під час встановлення на / dev / sda7
/dev/mapper/sda7_crypt / ext4 errors=remount-ro 0 1

опція
* /dev/mapper/sda7_crypt -ім'я зіставлення sda7>sda7_crypt, яке вказано у файлі /etc/crypttab.
Налаштування crypttab/fstab завершено.

B4.5. Редагування файлів конфігурації. Ключовий моментB4.5.1. Редагування конфігу /etc/initramfs-tools/conf.d/resume

#Если у вас ранее был активирован swap раздел, отключите его. 
nano /etc/initramfs-tools/conf.d/resume

та закоментуйте (якщо існує) "#" рядок "resume". Файл має бути повністю порожнім.

B4.5.2. Редагування конфігу /etc/initramfs-tools/conf.d/cryptsetup

nano /etc/initramfs-tools/conf.d/cryptsetup

має відповідати

# /etc/initramfs-tools/conf.d/cryptsetup
CRYPTSETUP=yes
export CRYPTSETUP

B4.5.3. Редагування конфігу /etc/default/grub (саме цей конфіг відповідає за вміння генерувати grub.cfg під час роботи з зашифрованим /boot)

nano /etc/default/grub

додаємо рядок «GRUB_ENABLE_CRYPTODISK=y»
значення 'y', grub-mkconfig та grub-install перевірятимуть наявність зашифрованих дисків і генеруватимуть додаткові команди, необхідні для їх доступу під час завантаження (insmod-и ).
має бути подоба

GRUB_DEFAULT = 0
GRUB_TIMEOUT = 1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=«acpi_backlight=vendor»
GRUB_CMDLINE_LINUX=«quiet splash noautomount»
GRUB_ENABLE_CRYPTODISK=y

B4.5.4. Редагування конфігу /etc/cryptsetup-initramfs/conf-hook

nano /etc/cryptsetup-initramfs/conf-hook

перевірте, що рядок закоментована <#>.
В майбутньому (і навіть зараз, цей параметр не матиме ніякого значення, але іноді він заважає оновлювати образ initrd.img).

B4.5.5. Редагування конфігу /etc/cryptsetup-initramfs/conf-hook

nano /etc/cryptsetup-initramfs/conf-hook

додаємо

KEYFILE_PATTERN="/etc/skey"
UMASK=0077

Це запакує секретний ключ «skey» в initrd.img, ключ необхідний для розблокування кореня під час завантаження ОС (якщо немає бажання вводити пароль повторно, авто підставляється ключ "skey").

B4.6. Оновлення /boot/initrd.img [version]Щоб запакувати секретний ключ в initrd.img і застосувати виправлення cryptsetup, оновлюємо образ

update-initramfs -u -k all

при оновленні initrd.img (як говориться "Можливо, але це не точно") з'являться попередження, пов'язані з cryptsetup, або, наприклад, повідомлення про втрату модулів Nvidia - це нормальне явище. Після оновлення файлу, перевіряйте, що він дійсно оновився див. (щодо chroot середовища./boot/initrd.img). Увага! перед [update-initramfs -u -k all] обов'язково перевірити, що cryptsetup open /dev/sda7 sda7_crypt - саме це ім'я має бути, яке фігурує в /etc/crypttab, інакше після reboot-a помилка busybox)
На цьому етапі налаштування конфігураційних файлів завершено.

[C] Встановлення та налаштування GRUB2/Захист

C1. За необхідності відформатуйте виділений розділ для завантажувача (розділу не менше 20мБ)

mkfs.ext4 -v -L GRUB2 /dev/sda6

C2. Монтування /dev/sda6 в /mntТак ми працюємо в chroot, то в корені не буде каталогу /mnt2, а папка /mnt буде порожньою.
монтуємо розділ GRUB2

mount /dev/sda6 /mnt

Якщо у вас встановлена ​​стара версія GRUB2, у каталозі /mnt/boot/grub/i-386-pc (можлива інша платформа, наприклад, не i386-pc) відсутні криптомодулі (коротше, в папці повинні знаходитися модулі, включаючи ці .mod: cryptodisk; luks; gcry_twofish; gcry_sha512; signature_test.mod), у такому разі GRUB2 необхідно струсити.

apt-get update
apt-get install grub2 

Важливо! Під час оновлення пакета GRUB2 з репозиторію, на питання «про вибір» у яке місце встановлювати завантажувач – необхідно відмовитись від інсталяції (причина – спроба встановлення GRUB2 – у «MBR» або на live usb). В іншому випадку ви пошкодите заголовок/завантажувач VeraCrypt. Після оновлення пакетів GRUB2, і скасування установки, завантажувач потрібно інсталювати вручну на логічний диск, а не MBR. Якщо у вашому репозиторії застаріла версія GRUB2, спробуйте апдейтити його з офіційного сайту – не перевіряв (працював зі свіжими завантажувачами GRUB 2.02 ~ BetaX).

C3. Інсталяція GRUB2 у розширений розділ [sda6]У вас має бути змонтований розділ [п.С.2]

grub-install --force --root-directory=/mnt /dev/sda6

опції
* —force -установка завантажувача, минаючи всі попередження, які практично завжди існують і блокують установку (Обов'язковий прапор).
* -root-directory -установка каталогу у корінь sda6.
* /dev/sda6 -ваш sdaХ розділ (не пропустіть <пробіл> між /mnt /dev/sda6).

C4. Створення конфігураційного файлу [grub.cfg]Забудьте про команду «update-grub2» і використовуйте повноцінну команду генерації конфігураційного файлу

grub-mkconfig -o /mnt/boot/grub/grub.cfg

після завершення генерації/оновлення файлу grub.cfg, у терміналі виводу мають бути рядки з знайденими ОС на диску («grub-mkconfig» можливо знайде та підхопить ОС з live usb, якщо у вас мультизавантажувальна флешка з Windows 10 та купою живих дистрибутивів – це нормально). Якщо в терміналі «порожньо», файл «grub.cfg» не згенерований, то це той самий випадок, коли в системі GRUBі баги (і швидше за все завантажувач із тестової гілки репозиторію), перевстановіть GRUB2 із надійних джерел.
Налаштування «проста конфігурація» та налаштування GRUB2 завершено.

C5. Proof-test зашифрованої ОС GNU/LinuxКоректне завершуємо криптомісію. Акуратно залишаємо зашифровану GNU/Linux (Вихід із середовища chroot).

umount -a #размонтирование всех смонтированных разделов шифрованной GNU/Linux
Ctrl+d #выход из среды chroot
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount -a #размонтирование всех смонтированных разделов на live usb
reboot

Після перезавантаження ПК повинен завантажитись завантажувач VeraCrypt.
Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

*Введення пароля для активного розділу — розпочнеться завантаження Windows.
*Натискання клавіші «Esc» передасть керування GRUB2, при виборі зашифрованої GNU/Linux – знадобиться пароль (sda7_crypt) для розблокування /boot/initrd.img (якщо grub2 пише uuid «не знайдено» — це проблема завантажувача grub2, його слід перевстановити, наприклад , з тестової гілки/стабільний та пд).
Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

*Залежно від того, як ви налаштували систему (див. п.B4.4/4.5) після правильного введення пароля для розблокування образу /boot/initrd.img, знадобиться пароль для завантаження ядра/кореня ОС, або автоматично підставиться секретний ключ « skey», позбавляючи повторного введення парольної фрази.
Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження
(Скрін «автоматична підстановка секретного ключа»).

*Далі понесеться знайомий процес завантаження GNU/Linux з автентифікацією обліку користувача.
Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

*Після авторизації користувача та входу до ОС, потрібно повторно оновити /boot/initrd.img (див. В4.6).

update-initramfs -u -k all

А у разі зайвих рядків у меню GRUB2 (З підхоплення ОС-м із live usb) позбутися їх

mount /dev/sda6 /mnt
grub-mkconfig -o /mnt/boot/grub/grub.cfg

Короткий підсумок системного шифрування GNU/Linux:

  • GNU/Linuxinux повністю зашифрований, включаючи /boot/kernel and initrd;
  • секретний ключ упакований у initrd.img;
  • поточна схема авторизації (введення пароля на розблокування initrd; пароль/ключ на завантаження ОС; пароль авторизації обліку Linux).

«Проста конфігурація GRUB2» завершено системне шифрування блокового розділу.

С6. Розширене налаштування GRUB2. Захист завантажувача цифровим підписом + захист автентифікацієюGNU/Linux зашифрований повністю, але завантажувач шифрувати не можна – така умова продиктована BIOS. З цієї причини ланцюжкове зашифроване завантаження GRUB2 неможливе, але можливе/доступне просте ланцюжкове завантаження, з точки зору захисту – не потрібно [див. П. F].
Для «вразливого» GRUB2 розробники реалізували алгоритм захисту завантажувача «підписом/автентифікацією».

  • При захисті завантажувача своїм цифровим підписом зовнішня модифікація файлів, або спроба завантажити в цьому завантажувачі додаткові модулі - приведе процес завантаження до блокування.
  • При захисті завантажувача автентифікацією для вибору завантаження будь-якого дистрибутива, або введення додаткових команд у CLI, потрібно ввести логін та пароль суперкористувача-GRUB2.

С6.1. Захист завантажувача автентифікацієюПеревірте, що ви працюєте в терміналі в зашифрованій ОС

ls /<Tab-Tab> #обнаружить файл-маркер

створіть пароль суперкористувача для авторизації в GRUB2

grub-mkpasswd-pbkdf2 #введите/повторите пароль суперпользователя. 

Отримайте пароль хеш. Щось схоже на це

grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8

монтуємо розділ GRUB

mount /dev/sda6 /mnt 

редагуємо конфіг

nano -$ /mnt/boot/grub/grub.cfg 

перевірте пошук по файлу, що в grub.cfg відсутні де-небудь прапори (unrestricted —user,
додайте в самому кінці (перед рядком ### END /etc/grub.d/41_custom ###)
"set superusers="root"
password_pbkdf2 root хеш».

Має бути приблизно так

# Цей файл дає змогу отримати додаткову адресу menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# рядок 'exec tail' вище.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [-f ${config_directory}/custom.cfg]; then
source ${config_directory}/custom.cfg
elif [-z "${config_directory}" -a -f $prefix/custom.cfg]; then
source $prefix/custom.cfg;
fi
set superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8
### END /etc/grub.d/41_custom ###
#

Якщо ви часто користуєтеся командою "grub-mkconfig -o /mnt/boot/grub/grub.cfg" і не хочете вносити щоразу зміни до grub.cfg, занесіть вищеописані рядки (Логін: Пароль) в скрипт користувача GRUB-а в самий низ

nano /etc/grub.d/41_custom 

cat << EOF
set superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8
EOF

При генерації конфігу "grub-mkconfig -o /mnt/boot/grub/grub.cfg", рядки, що відповідають за автентифікацію, будуть додаватися автоматично в grub.cfg.
На цьому етапі налаштування аутентифікації GRUB2 завершено.

С6.2. Захист завантажувача цифровим підписомПередбачається, що у вас вже є ваш персональний pgp-ключ шифрування (або створіть такий ключ). У системі має бути встановлене криптографічне: gnuPG; kleopatra/GPA; Seahorse. Крипто-ПО суттєво полегшить вам життя у всіх подібних справах. Seahorse – стабільна версія пакету 3.14.0 (версії вище, наприклад, V3.20 – неповноцінна та має суттєві баги).

PGP-ключ потрібно генерувати/запускати/додавати лише у середовищі su!

Згенерувати персональний шифрувальний ключ

gpg - -gen-key

Експортувати свій ключ

gpg --export -o ~/perskey

Змонтуйте логічний диск в ОС, якщо він ще не змонтований

mount /dev/sda6 /mnt #sda6 – раздел GRUB2

очистіть розділ GRUB2

rm -rf /mnt/

Інсталюйте GRUB2 у sda6, поклавши ваш персональний ключ в основний образ GRUB «core.img»

grub-install --force --modules="gcry_sha256 gcry_sha512 signature_test gcry_dsa gcry_rsa" -k ~/perskey --root-directory=/mnt /dev/sda6

опції
* —force -установка завантажувача, минаючи всі попередження, які завжди існують (Обов'язковий прапор).
* —modules=«gcry_sha256 gcry_sha512 signature_test gcry_dsa gcry_rsa» -інструктує GRUB2 на попереднє завантаження необхідних модулів при запуску ПК.
* -k ~/perskey -шлях до «PGP-ключа» (Після упаковки ключа в образ, його можна видалити).
* -root-directory -установка каталогу boot в корінь sda6
/dev/sda6 -ваш sdaХ розділ.

Генеруємо/оновлюємо grub.cfg

grub-mkconfig  -o /mnt/boot/grub/grub.cfg

Додаємо в кінець файлу "grub.cfg" рядок "trust /boot/grub/perskey" (Примусово використовувати pgp-ключ.) Оскільки ми встановили GRUB2 з набором модулів, зокрема і модулем підпису «signature_test.mod», це позбавляє від додавання конфіг команд нібито «set check_signatures=enforce».

Виглядати має приблизно так (кінцеві рядки у файлі grub.cfg)

### BEGIN /etc/grub.d/41_custom ###
if [-f ${config_directory}/custom.cfg]; then
source ${config_directory}/custom.cfg
elif [-z "${config_directory}" -a -f $prefix/custom.cfg]; then
source $prefix/custom.cfg;
fi
trust /boot/grub/perskey
set superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8
### END /etc/grub.d/41_custom ###
#

Шлях до /boot/grub/perskey не потрібно вказувати на конкретний розділ диска, наприклад hd0,6, для себе завантажувача "корінь" є дефолтним шляхом розділу, на який встановлений GRUB2 (Див. set rot = ..).

Підписуємо GRUB2 (Всі файли у всіх директоріях /GRUB) своїм ключем "perskey".
Просте рішення, як підписати (для провідника nautilus/caja): встановлюємо з репозиторію розширення «seahorse» для провідника. Ключ у вас має бути доданий у середу su.
Відкриваєте провідник від sudo "/mnt/boot" - ПКМ - підписати. На скрині це виглядає так

Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

Сам ключ "/mnt/boot/grub/perskey" (Скопіювати в каталог grub) теж має бути підписаний своїм підписом. Переконайтеся, що у каталозі/підкаталогах з'явилися підписи файлів [*.sig].
Вищеописаним способом підписуємо "/boot" (Наші kernel, initrd). Якщо ваш час чогось вартий, то такий метод позбавляє писати bash-скрипт для підпису «безліч файлів».

Щоб видалити всі підписи завантажувача (якщо щось пішло не так)

rm -f $(find /mnt/boot/grub -type f -name '*.sig')

Щоб не підписувати завантажувач після оновлення системи, заморожуємо всі пакети оновлення, що стосуються GRUB2.

apt-mark hold grub-common grub-pc grub-pc-bin grub2 grub2-common

На цьому кроці <захист завантажувача цифровим підписом> розширене налаштування GRUB2 завершено.

C6.3. Proof-test завантажувача GRUB2, захищеного цифровим підписом та автентифікацієюGRUB2. При виборі будь-якого дистрибутива GNU/Linux або вхід до CLI (командний рядок) знадобиться авторизація суперкористувача. Після введення правильного логіну/паролю буде потрібно пароль від initrd

Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження
Скрін, успішна автентифікація GRUB2-суперкористувача.

Якщо підробити будь-який з файлів GRUB2/внести зміни до grub.cfg, або видалити файл/підпис, підвантажити шкідливий модуль.mod, то з'явиться відповідне попередження. Завантаження GRUB2 припиниться.

Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження
Скрін, спроба втрутитися в GRUB2 «з-за».

При "нормальному" завантаженні "без вторгнення", системний статус коду виходу "0". Тому невідомо чи працює захист чи ні (тобто «з захистом завантажувача підписом або без неї» при нормальному завантаженні статус той самий «0» — це погано).

Як перевірити захист цифровим підписом?

Незручний спосіб перевірки: підробити/видалити модуль GRUB2, наприклад, видалити підпис luks.mod.sig і отримати помилку.

Правильний спосіб: зайти в CLI завантажувача та набрати команду

trust_list

У відповідь повинні отримати відбиток «perskey», якщо статус «0», значить захист підписом не працює, перевіряйте ще раз п.C6.2.
На цьому кроці розширене налаштування «Захист GRUB2 цифровим підписом та автентифікацією» закінчено.

Альтернативний метод захисту завантажувача GRUB7 за допомогою хешуванняОписаний вище спосіб "Захист завантажувача ЦП/Аутентифікацією" - це класика. Через недосконалість GRUB2, в параноїдальних умовах той піддається реальній атаці, яку я наведу нижче в п.[F]. Крім того, після оновлення ОС/ядра необхідно перепідписувати завантажувач.

Захист завантажувача GRUB2 за допомогою хешування

Переваги перед класикою:

  • Вищий рівень надійності (хешування/перевірка проходить тільки з зашифрованого локального ресурсу. Контролюється весь виділений розділ під GRUB2 на будь-які зміни, а все інше зашифровано, в класичній схемі із захистом завантажувача ЦП/Аутентифікацією контролюються лише файли, але не вільний простір, в який «що- те зловісне» можна дописати).
  • Зашифроване логування (У схему додається легкочитаний персональний шифрований лог).
  • Швидкість (Захист/перевірка цілого розділу виділеного під GRUB2 відбувається практично миттєво).
  • Автоматизація всіх криптографічних процесів.

Недоліки перед класикою.

  • Підробка підпису (Теоретично, можливе знаходження заданої колізії хеш функції).
  • Підвищений рівень складності (В порівнянні з класикою потрібно трохи більше навичок володіння в ОС GNU/Linux).

Як працює ідея з хешуванням GRUB2/розділу

"Підписується" розділ GRUB2, при завантаженні ОС відбувається перевірка незмінності розділу завантажувача з подальшим логуванням у безпечному середовищі (зашифрованому). У разі компрометації завантажувача або його розділу, на додаток до лога вторгнення запускається така

Штука.Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

Чотири рази на день відбувається аналогічна перевірка, яка не навантажує ресурси системи.
За допомогою команди "-$ проверка_GRUB" відбувається миттєва перевірка в будь-який момент часу без логування, але з виведенням інформації в CLI.
За допомогою команди «-$ sudo підпис_GRUB» відбувається миттєве перепідписання завантажувача GRUB2/розділу та його оновлене логування (необхідно після оновлення ОС/boot), і життя продовжується далі.

Реалізація методу хешування завантажувача та його розділу

0) Підпишемо завантажувач/розділ GRUB, попередньо змонтувавши його в /media/username

-$ hashdeep -c md5 -r /media/username/GRUB > /podpis.txt

1) Створюємо скрипт без розширення в корені зашифрованої ОС ~/podpis, застосовуємо до нього потрібні права 744 сек'юріті та захист від «дурня».

Наповнюємо його вміст

#!/bin/bash

#Проверка всего раздела выделенного под загрузчик GRUB2 на неизменность.
#Ведется лог "о вторжении/успешной проверке каталога", короче говоря ведется полный лог с тройной вербализацией. Внимание! обратить взор на пути: хранить ЦП GRUB2 только на зашифрованном разделе OS GNU/Linux. 
echo -e "******************************************************************n" >> '/var/log/podpis.txt' && date >> '/var/log/podpis.txt' && hashdeep -vvv -a -k '/podpis.txt' -r '/media/username/GRUB' >> '/var/log/podpis.txt'

a=`tail '/var/log/podpis.txt' | grep failed` #не использовать "cat"!! 
b="hashdeep: Audit failed"

#Условие: в случае любых каких-либо изменений в разделе выделенном под GRUB2 к полному логу пишется второй отдельный краткий лог "только о вторжении" и выводится на монитор мигание gif-ки "warning".
if [[ "$a" = "$b" ]] 
then
echo -e "****n" >> '/var/log/vtorjenie.txt' && echo "vtorjenie" >> '/var/log/vtorjenie.txt' && date >> '/var/log/vtorjenie.txt' & sudo -u username DISPLAY=:0 eom '/warning.gif' 
fi

Запускаємо скрипт від su, відбудеться перевірка хешування розділу GRUB та його завантажувача, save лог.

Створимо або скопіюємо, наприклад, "шкідливий файл" [virus.mod] в розділ GRUB2 і запустимо тимчасову перевірку/тестування:

-$ hashdeep -vvv -a -k '/podpis.txt' -r '/media/username/GRUB

У CLI маємо побачити вторгнення в нашу -цитадель-#Урізаний лог в CLI

Ср янв  2 11::41 MSK 2020
/media/username/GRUB/boot/grub/virus.mod: Moved from /media/username/GRUB/1nononoshifr
/media/username/GRUB/boot/grub/i386-pc/mda_text.mod: Ok
/media/username/GRUB/boot/grub/grub.cfg: Ok
hashdeep: Audit failed
   Input files examined: 0
  Known files expecting: 0
          Files matched: 325
Files partially matched: 0
            Files moved: 1
        New files found: 0
  Known files not found: 0

Як бачимо з'явилося "Files moved: 1 і Audit failed" означає, що перевірка не пройшла.
Через особливості тестованого розділу замість "New files found" > "Files moved"

2) Кладемо гіфку сюди > ~/warning.gif, задаємо права 744.

3) Налаштовуємо fstab на автомонтаж розділу GRUB при завантаженні

-$ sudo nano /etc/fstab

LABEL=GRUB /media/username/GRUB ext4 defaults 0 0

4) Проводимо ротацію лога

-$ sudo nano /etc/logrotate.d/podpis 

/var/log/podpis.txt {
щодня
повернути 50
розмір 5M
datetext
стискати
затримка стиснення
olddir /var/log/old
}

/var/log/vtorjenie.txt {
щомісячно
повернути 5
розмір 5M
datetext
olddir /var/log/old
}

5) Додаємо завдання до cron

-$ sudo crontab -e

перезавантажувати '/podpis'
0 */6 * * * '/podpis

6) Створюємо постійні аліаси

-$ sudo su
-$ echo "alias подпись_GRUB='hashdeep -c md5 -r /media/username/GRUB > /podpis.txt'" >> /root/.bashrc && bash
-$ echo "alias проверка_GRUB='hashdeep -vvv -a -k '/podpis.txt' -r /media/username/GRUB'" >> .bashrc && bash

Після оновлення ОС -$ apt-get upgrade перепідписуємо наш розділ GRUB
-$ подпись_GRUB
На цьому кроці захист хешування розділу GRUB завершено.

[D] Зачистка – знищення нешифрованих даних

Видаліть свої особисті файли настільки повністю, що «навіть Бог не може їх прочитати», за словами представника Південної Кароліни Трей Гауді.

Як зазвичай існують різні «міфи і легенди», відновлення даних після їх видалення з жорсткого диска. Якщо ви вірите в кіберчарство, або є прихожанином Dr web спільноти і ніколи не пробували відновлення даних після їх видалення/перезапису (наприклад, відновлення за допомогою R-studio)Тоді запропонований спосіб навряд чи вам підійде, користуйтеся тим, чим вам ближче.

Після успішного перенесення GNU/Linux на зашифрований розділ, стару копію необхідно видалити без відновлення даних. Універсальний спосіб очищення: програмне забезпечення для Windows/Linux вільне GUI ПЗ BleachBit.
швидко форматуємо розділ, дані на якому потрібно знищити (за допомогою Gparted), запускаємо BleachBit, вибираємо «Очищення вільного простору» – вибираємо розділ (Ваш sdaX з минулою копією GNU/Linux), запуститься процес зачистки BleachBit - протирає диск в один прохід - це те, що нам потрібно, Але! так працює тільки теоретично, якщо ви форматували диск і чистили в BB v2.0.

Увага! BB протирає диск, залишаючи метадані, імена файлів при ліквідації даних зберігаються (Ccleaner – не залишає метаданих).

І міф про можливість відновлення даних не зовсім міфом.Bleachbit V2.0-2 колишній пакет unstable OS Debian (і будь-який інший подібний софт: sfill; wipe-Nautilus -теж були помічені в цій брудній справі) насправді мав критичну помилку: функція «вільне очищення простору» працює некоректно на HDD/Флешках (ntfs/ext4). ПЗ подібного роду при очищенні вільного місця перезаписують не весь диск, як багато користувачів думають. І деякі (Багато) видалені дані ОС/ПО вважають ці дані невіддаленими/користувацькими і під час очищення «ОСП» пропускають ці файли. Проблема в тому, що після такого, довгого часу, очищення диска «віддалені файли» можна відновити навіть через 3+ проходу протирання диска.
На GNU/Linux у Bleachbit 2.0-2 надійно працюють функції безповоротного видалення файлів та каталогів, але не очищення вільного простору. Для порівняння: на Windows у CCleaner функція «ОСП для ntfs» працює справно, і Бог дійсно не зможе прочитати видалені дані.

І так, щоб ґрунтовно видалити «компрометуючі» старі нешифровані дані, потрібний прямий доступ Bleachbit до цих даних, Далі, скористатися функцією «видалення файлів/каталогів безповоротно».
Для видалення «віддалених файлів штатними засобами ОС» у Windows використовуйте CCleaner/BB із функцією «ОСП». У GNU/Linux над цією проблемою (видалення видалених файлів) вам необхідно отримати практику самостійно (Видалення даних+самостійна спроба їх відновлення і не варто покладатися на версію ПЗ (якщо не закладка, то баг)), тільки в такому випадку ви зможете зрозуміти механізм цієї проблеми і позбавитися віддалених даних остаточно.

Bleachbit v3.0 не перевіряв, можливо, проблему вже поправили.
Bleachbit v2.0 працює чесно.

На цьому кроці "зачистка диска" завершена.

[E] Універсальне резервне копіювання зашифрованих ОС

Кожен користувача має свій метод резервного копіювання даних, але зашифровані дані «Системних ОС» вимагають трохи іншого підходу до завдання. Уніфіковане ПЗ, як наприклад «Clonezilla» та подібний софт не можуть працювати безпосередньо із зашифрованими даними.

Постановка завдання резервного копіювання зашифрованих блокових пристроїв:

  1. універсальність - однаковий алгоритм/ПЗ резервного копіювання для Windows/Linux;
  2. можливість працювати в консолі з будь-яким live usb GNU/Linux без необхідності додаткового скачування ПЗ (але все ж рекомендую GUI);
  3. безпека резервних копій — «образи», що зберігаються, повинні бути зашифровані/запаролені;
  4. розмір зашифрованих даних повинен відповідати розміру реальних даних, що копіюються;
  5. зручне вилучення потрібних файлів із резервної копії (Відсутність вимоги розшифрувати спочатку весь розділ).

Наприклад, резервна копія/відновлення через утиліту «dd»

dd if=/dev/sda7 of=/путь/sda7.img bs=7M conv=sync,noerror
dd if=/путь/sda7.img of=/dev/sda7 bs=7M conv=sync,noerror

Відповідає майже всім пунктам поставленого завдання, але за п. 4 не витримує критики, оскільки копіює весь розділ диска цілком, у тому числі й вільний простір — не цікаво.

Наприклад, резервна копія GNU/Linux через архіватор [tar] | gpg] зручно, але для бекапу Windows потрібно шукати інше рішення – не цікаво.

E1. Універсальне резервне копіювання Windows/Linux. Зв'язування rsync (Grsync)+VeraCrypt томАлгоритм створення резервної копії:

  1. створення зашифрованого контейнера (том/файл) VeraCrypt для ОС;
  2. перенесення/синхронізація ОС за допомогою ПЗ Rsync у криптоконтейнер VeraCrypt;
  3. за необхідності завантаження тома VeraCrypt у www.

Створення зашифрованого контейнера VeraCrypt має свої особливості:
створення динамічного тому (доступне створення ДП тільки у Windows, використовувати можна і GNU/Linux);
створення звичайного тому, але є вимога «параноїдального характеру» (за словами розробника) - Форматування контейнера.

Динамічний том створюється практично миттєво в ОС Windows, але за копіювання даних з ОС GNU/Linux > VeraCrypt ДТ, загалом продуктивність операції резервного копіювання знижується істотно.

Типовий том Twofish в 70 Гб створюється (Скажімо так, на середній потужності ПК) на HDD ~ за півгодини (перезапис колишніх даних контейнера на один прохід, обумовлено вимогою безпеки). З VeraCrypt Windows/Linux прибрали функцію швидкого форматування тома при його створенні, тому створення контейнера можливе лише через «перезапис в один прохід», або створення динамічного динамічного тома.

Створюємо звичайний том VeraCrypt (не динамічний/ntfs), ніяких проблем виникнути не повинно.

Налаштовуємо/створюємо/відкриваємо контейнер у VeraCrypt GUI > GNU/Linux live usb (Тим буде автомонтований в /media/veracrypt2, тому Windows монтований в /media/veracrypt1). Створюємо зашифровану резервну копію Windows за допомогою GUI rsync (grsync), розставивши галочки.

Повнодискове шифрування Windows Linux встановлених систем. Зашифроване мультизавантаження

Дочекатися закінчення процесу. Після завершення резервного копіювання, ми матимемо один зашифрований файл.

Аналогічно створити резервну копію ОС GNU/Linux, скинувши галочку в GUI rsync «сумісність із Windows».

Увага! контейнер Veracrypt для «бекапу GNU/Linux» створювати у файловій системі ext4. Якщо зробите бекап у контейнері ntfs, то при відновленні такої копії втратите всі права/групи на всі ваші дані.

Провести всі операції можна і терміналі. Основні опції для rsync:
* -g -зберегти групи;
* -P -progress - статус часу роботи над файлом;
* -H -копіювати хардлінки, як є;
* -а -режим архіву (кілька прапорів rlptgoD);
* -v -вербалізація.

Якщо хочеться монтувати «тому Windows VeraCrypt» через консоль у програмне забезпечення cryptsetup, можна створити alias (su)

echo "alias veramount='cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sdaX Windows_crypt && mount /dev/mapper/ Windows_crypt /media/veracrypt1'" >> .bashrc && bash

Тепер за командою «veramount pictures» з'явиться запит на введення парольної фрази, і в ОС підмонтується зашифрований системний том Windows.

Порівняти/змонтувати системний том VeraCrypt у cryptsetup команда

cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sdaX Windows_crypt
mount /dev/mapper/Windows_crypt /mnt

Порівняти/змонтувати розділ/контейнер VeraCrypt у cryptsetup команда

cryptsetup open --veracrypt --type tcrypt /dev/sdaY test_crypt
mount /dev/mapper/test_crypt /mnt

Замість alias-а додамо (скрипт в автозавантаження) системний том з Windows і логічний криптований диск ntfs в автозавантаження GNU/Linux

Створюємо скрипт і зберігаємо його в ~/VeraOpen.sh

printf 'Ym9i' | base64 -d | cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sda3 Windows_crypt && mount /dev/mapper/Windows_crypt /media/Winda7 #декодируем пароль из base64 (bob) и отправляем его на запрос ввода пароля при монтировании системного диска ОС Windows.
printf 'Ym9i' | base64 -d | cryptsetup open --veracrypt --type tcrypt /dev/sda1 ntfscrypt && mount /dev/mapper/ntfscrypt /media/КонтейнерНтфс #аналогично, но монтируем логический диск ntfs.

Роздаємо «вірні» права:

sudo chmod 100 /VeraOpen.sh

Створюємо два однакові файли (однакове ім'я!) в /etc/rc.local та ~/etc/init.d/rc.local
Наповнюємо файли

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will «exit 0» on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sh -c "sleep 1 && '/VeraOpen.sh'" #после загрузки ОС, ждём ~ 1с и только потом монтируем диски.
exit 0

Роздаємо «вірні» права:

sudo chmod 100 /etc/rc.local && sudo chmod 100 /etc/init.d/rc.local 

Тепер при завантаженні GNU/Linux нам не потрібно вводити паролі на монтування зашифрованих дисків ntfs, диски монтуються автоматично.

Нотатка коротко про те, що описано вище в п.E1 по кроках (але тепер для OS GNU/Linux)
1) Створити том у фс ext4 > 4gb (для файлу) Linux у Veracrypt [Криптоящик].
2) Reboot у live usb.
3) ~$ cryptsetup open /dev/sda7 Lunux # зіставлення шифрованого розділу.
4) ~$ mount /dev/mapper/Linux /mnt #монтування шифрованого розділу в /mnt.
5) ~$ mkdir mnt2 #створення каталогу для майбутнього бекапа.
6) ~$ cryptsetup open —veracrypt —type tcrypt ~/Криптоящик Кріптоящик && mount /dev/mapper/Криптоящик /mnt2 #Зіставлення тому Veracrypt з ім'ям «Криптоящик» і монтування Криптоящика в /mnt2.
7) ~$ rsync -avlxhHX -progress /mnt /mnt2/ #операція резервного копіювання шифрованого розділу в шифрований том Veracrypt.

(p/s/ Увага! Якщо ви переносите шифровану GNU/Linux з однієї архітектури/машини на іншу, наприклад, Intel > AMD (тобто розгортаєте бекап з одного шифрованого розділу на інший шифрований розділ Intel > AMD), не забувайте після перенесення шифрованої ОС правити секретний ключ замість пароля, тк. попередній ключ ~/etc/skey - вже не підійде до іншого зашифрованого розділу, а новий ключ "cryptsetup luksAddKey" небажано створювати з-під chroot - можливий глюк, просто в ~/etc/crypttab вкажіть замість "/etc/skey" тимчасово "none », після rebot-а і входу в ОС перестворіть свій секретний ключ, що підставляється заново).

Як ветерани IT незабутнім окремо робити бекапи заголовків зашифрованих розділів ОС Windows/Linux, або шифрування обернеться проти Вас самих.
На цьому етапі резервне копіювання зашифрованих ОС закінчено.

[F] Атака на завантажувач GRUB2

подробиціЯкщо ви захистили свій завантажувач цифровим підписом та/або автентифікацією (див п. C6.), то від фізичного доступу це не захистить. Зашифровані дані будуть, як і раніше, недоступні, але обхід захисту (скидання захисту цифрового підпису) GRUB2 дозволяє кіберзлодії впровадити свій код у завантажувач, не викликаючи підозр (якщо користувач вручну не відстежує стан завантажувача, або не придумає свій міцний довільний-скрипт-код для grub.cfg).

Алгоритм атаки. Зловмисник

* Завантажує ПК із live usb. Будь-яка зміна (порушником) файлів призведе до сповіщення реального господаря ПК про вторгнення в завантажувач. Але проста переустановка GRUB2 із збереженням grub.cfg (І наступною можливістю його редагування) дозволить зловмиснику редагувати будь-які файли (при такому розкладі, при завантаженні GRUB2, сповіщення реальному користувачеві не буде. Статус той самий <0>)
* Монтує незашифрований розділ, зберігає у себе "/mnt/boot/grub/grub.cfg".
* Перевстановлює завантажувач (викидаючи "perskey" з образу core.img)

grub-install --force --root-directory=/mnt /dev/sda6

* Повертає "grub.cfg" > "/mnt/boot/grub/grub.cfg", при необхідності його редагує, наприклад, додаючи свій модуль "keylogger.mod" в папку з модулями завантажувача, в "grub.cfg" > рядок "insmod keylogger". Або, наприклад, якщо ворог підступний, то після переустановки GRUB2 (Усі підписи залишаються на місці) він збирає основний образ GRUB2, використовуючи "grub-mkimage з опцією (-с)." Опція "-с" дозволить завантажувати свій конфіг до завантаження основного "grub.cfg". Конфіг може складатися лише з одного рядка: перенаправлення на будь-який «modern.cfg», змішаний, наприклад, з ~400 файлами (модулі+підписи) у папці "/boot/grub/i386-pc". При цьому порушник може вносити довільний код та підвантажувати модулі, не торкаючись "/boot/grub/grub.cfg", навіть якщо користувач застосував "hashsum" до файлу і тимчасово виводив його на екран.
Зламувати логін/пароль суперкористувача GRUB2 атакуючому не потрібно, потрібно буде просто скопіювати рядки (що відповідають за автентифікацію) "/boot/grub/grub.cfg" у свій "modern.cfg"

set superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8

І для господаря ПК, як і раніше, буде діяти перевірка справжності суперкористувача GRUB2.

Ланцюгове завантаження (завантажувач завантажує інший завантажувач), як писав вище, немає сенсу (Вона призначена для іншої мети). Через BIOS не можна завантажувати зашифрований завантажувач (при ланцюговому завантаженні відбувається перезапуск GRUB2 > зашифрований GRUB2, помилка!). Однак якщо таки скористатися ідеєю від ланцюжкового завантаження, то можна бути впевненим, що завантажується саме зашифрований (не модернізований) "grub.cfg" із зашифрованого розділу. І це теж помилкове почуття безпеки, тому що все, що вказано в зашифрованому «grub.cfg» (підвантаження модулів) складається з модулями, які підвантажуються із незашифрованого GRUB2.

Якщо ви хочете це перевірити, то виділіть/зашифруйте ще один розділ sdaY, скопіюйте на нього GRUB2 (операція grub-install на зашифрований розділ неможлива) та в «grub.cfg» (Незашифрований конфіг) змініть рядки подібні до цих

menuentry 'GRUBx2' —class parrot —class gnu-linux —class gnu —class os $menuentry_id_option 'gnulinux-simple-382111a2-f993-403c-aa2e-292b5eac4780' {
load_video
insmod gzio
if [ x $ grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod cryptodisk
insmod luks
insmod gcry_twofish
insmod gcry_twofish
insmod gcry_sha512
insmod ext2
cryptomount -u 15c47d1c4bd34e5289df77bcf60ee838
set root=’cryptouuid/15c47d1c4bd34e5289df77bcf60ee838′
normal /boot/grub/grub.cfg
}

строки
* insmod -завантаження необхідних модулів для роботи із зашифрованим диском;
* GRUBx2 - назва виведеного рядка в меню завантаження GRUB2;
* cryptomount -u 15c47d1c4bd34e5289df77bcf60ee838 -див. fdisk-l (sda9);
* set root -установка кореня;
* normal /boot/grub/grub.cfg -виконуваний файл конфігурації на зашифрованому розділі.

Впевненість у тому, що завантажується саме зашифрований grub.cfg — це позитивний відгук на введення пароля/розблокування sdaY при виборі рядка GRUBx2 в меню GRUB.

При роботі в CLI, щоб не заплутатися (і перевірити чи спрацювало змінне оточення «set root»), створіть порожні файли маркери, наприклад, у зашифрованому розділі /shifr_grub, в незашифрованому розділі /noshifr_grub. Перевірка у CLI

cat /Tab-Tab

Як було зазначено вище, це не допоможе від завантаження шкідливих модулів, якщо такі модулі будуть на вашому ПК. Наприклад, кейлоггер, який зможе зберігати натискання клавіш у файл і змішуватися з іншими файлами в ~/i386, поки його не скачає атакуючий з фізичним доступом до ПК.

Найпростіший спосіб перевірити, що захист цифрового підпису активно працює (Не скинута), і ніхто не вторгся у завантажувач, у CLI набираємо команду

list_trusted

у відповідь отримуємо зліпок нашого «perskey», або нічого не отримуємо, якщо нас атакували (також необхідно перевірити "set check_signatures=enforce").
Істотний мінус такого кроку, набиватиме команди вручну. Якщо додати цю команду в grub.cfg і захистити цифровим підписом конфіг, то попередній висновок зліпка ключа на екран занадто короткий по таймінгу, і можна не встигнути розглянути висновок, отримавши завантаження GRUB2.
Пред'являти претензії особливо нема до кого: розробник у своїй документації п.18.2 офіційно заявляє

«Довідайте, що все з GRUB password protection, GRUB це не може бути неодноразово деяким з фізичним доступом до машини з іншого, що машина firmware (eg, Coreboot або BIOS) налаштовує до машини до дзвінка з різних (відповідь) GRUB is at best only link in secure boot chain».

GRUB2 — надто перевантажений функціями, які можуть дати почуття хибної безпеки, а його розвиток вже випередив за функціональністю ОС MS-DOS, адже це всього лише завантажувач. Цікаво, що GRUB2 — «завтра» може стати ОС, а віртуальними машинами для нього завантажуються GNU/Linux.

Невеликий ролик про те, як я скинув захист цифровим підписом GRUB2, і заявив про своє вторгнення реальному користувачеві (налякав, а замість того, що показано на ролику – можна написати не невинний довільний код/.mod).

Висновки:

1) Блокове системне шифрування для Windows - реалізувати простіше, а захист одним паролем зручніше, ніж захист кількома паролями при блочному системному шифруванні GNU/Linux, заради справедливості: останнє автоматизовано.

2) Статтю написав, як релевантне, докладне просте керівництво до повнодискового шифрування VeraCrypt/LUKS on one home the machine, яке, на сьогоднішній день, найкраще в рунеті (IMHO). У посібнику > 50k знаків у ньому не розглядалися деякі цікаві глави: про криптографах, які зникають/тримаються в тіні; про те, що у різних книжках GNU/Linux мало/не пишуть про криптографію; про ст.51 конституції РФ; о ліцензування/забороні шифрування в РФ, Про те для чого потрібно шифрувати «корінь/boot». Керівництво вийшло і без того чимало, але докладне (що описує навіть прості кроки), у свою чергу, це заощадить вам купу часу, коли ви займетеся справжнім шифруванням.

3) Повнодискове шифрування проводив на Windows 7; GNU/Linux Parrot 64x; GNU/Debian 4/9.0.

4) Реалізував успішну атаку на свій завантажувач GRUB2.

5) Tutorial створено, щоб допомогти всім параноїкам СНД, де робота із шифруванням дозволена на законодавчому рівні. І насамперед для тих, хто бажає накотити повнодискове шифрування, не зносячи свої налаштовані системи.

6) Переробив та оновив своє керівництво, яке актуальне у 2020 році.

[G] Корисна документація

  1. Посібник користувача TrueCrypt (лютий 2012 UA)
  2. Документація VeraCrypt
  3. /usr/share/doc/cryptsetup(-run) [локальний ресурс] (офіційна докладна документація щодо налаштування шифрування GNU/Linux за допомогою cryptsetup)
  4. Офіційний FAQ cryptsetup (коротка документація щодо налаштування шифрування GNU/Linux за допомогою cryptsetup)
  5. Шифрування пристрою LUKS (archlinux-документація)
  6. Детальний опис синтаксису cryptsetup (сторінка керівництва arch)
  7. Детальний опис crypttab (сторінка керівництва arch)
  8. Офіційна документація GRUB2.

Теги: повне шифрування диска, шифрування розділу, повнодискове шифрування Linux, повне системне шифрування LUKS1.

Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.

Шифруєте?

  • 17,1%Шифрую все, що можливо. У мене параноя.

  • 34,2%Шифрую лише важливі дані.

  • 14,6%Іноді шифрую, іноді забуваю.

  • 34,2%Ні, не шифрую, це незручно і затратно.

Проголосували 82 користувача. Утрималися 22 користувачів.

Джерело: habr.com

Додати коментар або відгук