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

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

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

Схема <BIOS/MBR/1HDD без lvm>:

* шифрування не приховане;
* Windows 7 встановлена — шифрування повне системне;
* GNU/Linux встановлена (Debian і похідні дистрибутиви) — шифрування повне системне (/, включаючи /boot; swap);
* незалежні завантажувачі: завантажувач VeraCrypt встановлений в MBR, завантажувач GRUB2 встановлено додатковий розділ;
* встановлення/перевстановлення ОС не вимагається;
* використовується криптографічне: VeraCrypt, Cryptsetup, GnuPG, Seahorse, GRUB2 – вільний/безкоштовне.

Вищеописана схема частково вирішує проблему «виносної boot на флешку», дозволяє насолоджуватися зашифрованими 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 (додаткові розділи) без втрати даних, але все ж з невеликою розплатою за такі дії.

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


Таблиця (№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

спойлер

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

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

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

Якщо встановлено ЗА HashTab, ще простіше: ПКМ (VeraCrypt Setup 1.23.exe)-властивості хеш-суми файлів.

Для перевірки підпису програми у системі має бути встановлено ПО gnuPG; gpg4win.

А2. Встановлення/запуск ПО VeraCrypt з правами адміністратора

А3. Вибір параметрів системного шифрування активного розділу

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

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

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

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

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

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

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

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

А4. Створення рятувального диска VeraCrypt

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

Створення рятувального диска в середовищі 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

Якщо ви щасливий власник потужної тачки з апаратною підтримкою 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 bits, LUKS header hashing: sha256, RNG: /dev/urandom> (залежить від версії cryptsetup).

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

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

Читайте також  Курс молодого бійця PostgreSQL

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 -avH --progress /mnt2/ /mnt

Опції Rsync описані в п. E1.
Перенесення і синхронізація [GNU/Linux > GNU/Linux-зашифрована] на цьому кроці закінчені.

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

Після успішного перенесення ОС /dev/sda4 > /dev/sda7 необхідно увійти в GNU/Linux на зашифрованому розділі, та здійснити подальшу налаштування (без перезавантаження ПК) щодо зашифрованою системи. Тобто перебувати в live usb, але команди виконувати «щодо кореня шифрованого ОС». Симулювати подібну ситуацію буде . Щоб оперативно отримувати інформацію з якої ОС ви в даний момент працюєте (в шифрованого чи ні, так як дані в 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 was on /dev/sda8 during installation
/dev/mapper/swap none swap sw 0 0

/dev/mapper/swap -ім’я , яке поставили в crypttab.
Налаштування розділу підкачки завершена.

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 or 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 

Буде виглядати приблизно так:
(зробіть самі і самі побачите).
/etc/fstab містить описову інформацію про різних файлових системах.

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

# «file system» «mount т» «type» «options» «dump» «pass»
# / was on /dev/sda7 during installation
/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-и <cryptomount/set root>).
повинно бути подобу
GRUB_DEFAULT=0
GRUB_TIMEOUT=10
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

перевірте, що рядок <CRYPTSETUP=y> закоментований <#>.
У майбутньому (і навіть вже зараз, цей параметр не буде мати ніякого значення, але іноді він заважає оновлювати образ 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

при оновленні initrd.img (як кажуть «Можливо, але це не точно») з’являться попередження, пов’язані з cryptsetup, або, наприклад, повідомлення про втрату модулів Nvidia — це нормальне явище. Після оновлення файлу, перевіряйте, що він дійсно оновився див. часу (щодо chroot середовища) /boot/initrd.img.
На це кроці налаштування файлів конфігурації завершена.

[З] Установка і настройка 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»

Читайте також  6 способів заховати дані в Android-додатку

У вас повинен бути змонтований розділ [п. C. 2]

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

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

C4. Створення файлу конфігурації <grub.cfg>

Забудьте про команду «update-grub 2», і використовуйте повноцінну команду генерації файлу конфігурації

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.
*Натискання клавіші «Esc» передасть управління GRUB2, при виборі зашифрованою GNU/Linux – потрібен пароль (sda7_crypt) для розблокування /boot/initrd.img.

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

(скрін «автоматична підстановка секретного ключа»).

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

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

update-initramfs –u

А в разі зайвих рядків меню 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 хеш”.

Має бути приблизно так
# This file provides an easy way to add custom menu entries. Simply the type
# menu entries you want to add after this comment. Be careful not to change
# the ‘exec tail’ line above.
### 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” – ПКМ – підписати. На скріні це виглядає це так

Сам ключ “/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


Скрін, успішна аутентифікація GRUB2-суперкористувача.

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


Скрін, спроба втрутитися в GRUB2 «з поза».

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

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

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

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

trust_list

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

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

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

Як зазвичай існують різні «міфи і легенди», про відновлення даних після їх видалення з жорсткого диска. Якщо ви вірите в киберколдоство, чи є прихожанином Dr web спільноти і ніколи не пробували відновлення даних після їх видалення/перезапису (наприклад, відновлення з допомогою R-studio), тоді запропонований спосіб навряд чи вам підійде, користуйтеся тим, що вам ближче.
Після успішного перенесення GNU/Linux на зашифрований розділ стару копію необхідно видалити без можливості відновлення даних. Універсальний спосіб очищення: софт для Windows/Linux вільний GUI ЗА BleachBit.
Швидко форматуємо розділ, дані на якому потрібно знищити (з допомогою Gparted), запускаємо BleachBit, вибираємо «Очищення вільного простору» – вибираємо розділ (ваш sdaX з минулого копією GNU/Linux), запуститься процес зачистки. BleachBit — протирає диск в один прохід — це те, що «нам потрібно».
На цьому кроці «зачистка диска» завершена.

Читайте також  Думку розробників про Steam: максимум доходів і мінімум відповідальності для Valve

[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»
зручно, але для бекапа Windows потрібно шукати інше рішення. Не цікаво.

E1. Резервне копіювання Windows/Linux. Зв’язка Rsync+VeraCrypt тому

Алгоритм створення резервної копії:

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

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

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

Дочекатися закінчення процесу. Після завершення резервного копіювання, у нас буде один зашифрований файл.
Аналогічно створити резервну копію GNU/Linux, скинувши галочку в GUI rsync «сумісність з Windows».

Провести всі операції можна і в терміналі. Опції для 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/Windows_crypt /mnt

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

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

Незабутній окремо робити бекапи заголовків зашифрованих розділів ОС 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 -назва виведеного рядка меню;
* cryptomount -u 15c47d1c4bd34e5289df77bcf60ee838 -див. fdisk -l (sda9);
* set root -установка кореня;
* normal grub.cfg -файл конфігурації на зашифрованому розділі.

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

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

cat /Tab-клавіша Табуляції

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

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

list_trusted

у відповідь отримуємо зліпок нашого «perskey», або нічого не отримуємо, якщо нас атакували (також необхідно перевірити «set check_signatures=enforce»).
Істотний мінус такого кроку, набивати команди вручну. Якщо додати цю команду в «grub.cfg» і захистити цифровим підписом конфіг, то попередній висновок зліпка ключа на екран занадто короткий за таймингу, і можна не встигнути розгледіти висновок, отримавши завантаження GRUB2.
Пред’являти претензії особливо не до кого: розробник у своїй документації п. 18.2 офіційно заявляє «Note that even with GRUB password protection, GRUB itself cannot prevent someone with physical access to the machine from altering that machine’s firmware (e.g., Coreboot or BIOS) configuration to cause the machine to boot from a different (attacker-controlled) device. GRUB is at best only one link in a secure boot chain».
GRUB2 — занадто перевантажений функціями, які можуть дати почуття удаваної безпеки, а його розвиток вже випередило по функціональності ОС MS-DOS, а адже це всього лише завантажувач. Забавно, що GRUB2 — «завтра» може стати ОС, а завантажувані GNU/Linux віртуальними машинами для нього.

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

https://www.youtube.com/embed/qhmsLeAN2Ag
Висновки:

1) Блочне системне шифрування для Windows — реалізувати простіше, а захист одним паролем зручніше, ніж захист кількома паролями при блочному системному шифруванні GNU/Linux.
2) Статтю написав, як докладний і Просте керівництво до повного системного шифрування Windows, GNU/Linux. Тому в ній не розглядалися деякі цікаві розділи: про криптографах, які зникають/тримаються в тіні, про те, що в різних книжках GNU/Linux не пишуть про шифрування, про ст. 51 конституції РФ, про те для чого потрібно шифрувати корінь/boot. Стаття вийшла і без того чимала, але детальна (описываяющая навіть прості кроки), у свою чергу, це заощадить вам купу часу, коли ви займетеся повним системним шифруванням.
3) Системне шифрування проводив на Windows 7 64; GNU/Linux Parrot 4x; GNU/Debian 9.5.

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

 

  1. Керівництво користувача TrueCrypt (7 лютого 2012 RU)
  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.

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *