
Актуализирано ръководство относно пълно дисково криптиране в Рунета V0.2.
Ковбойска стратегия:
[A] блоково системно криптиране на Windows 7 инсталирана система;
[B] блоково системно криптиране на GNU/Linux (Debian) инсталирана система (включително /boot);
[C] настройка на GRUB2, защита на зареждача с цифров подпис/автентикация/хеширане;
[D] почистване — унищожаване на некриптирани данни;
[E] универсално резервно копие на криптирани ОС;
[F] атака цел — зареждача GRUB2;
[G] полезна документация.
╭───Схема #стая 40# :
├──╼ Инсталирани Windows 7 — пълно системно криптиране, не скрито;
├──╼ Инсталирани GNU/Linux (Debian и производни дистрибуции) — пълно системно криптиране не скрито(/, включително /boot; swap);
├──╼ независими зареждачи: зареждача VeraCrypt инсталиран в MBR, зареждача GRUB2 инсталиран в разширен дял;
├──╼ инсталирането/переустановяването на ОС не е необходимо;
└──╼ използвано криптографско ПО: VeraCrypt; Cryptsetup; GnuPG; Seahorse; Hashdeep; GRUB2 – свободно/бесплатно.
По-гореописаната схема частично решава проблема с „външен boot на флашка“, позволява да се наслаждавате на криптирани ОС Windows/Linux и да обменяте данни през „криптирано възел“ от една ОС в друга.
Редът на зареждане на ПК (един от вариантите):
- включване на машината;
- зареждане на зареждача VeraCrypt (въвеждането на паролата ще продължи зареждането на Windows 7);
- натискането на клавиша „Esc“ ще зареди зареждача GRUB2;
- зареждача GRUB2 (избор на дистрибуция/ GNU/Linux/CLI), ще поиска автентикация от суперадминистратора на GRUB2 ;
- след успешната автентикация и избора на дистрибуция, ще е необходимо да се въведе парола за отключване на „/boot/initrd.img“;
- след въвеждането на верни пароли в GRUB2 „ще се изисква“ въвеждане на парола (трета по ред, парола на BIOS или парола на потребителския акаунт GNU/Linux – не се счита) за отключване и зареждане на ОС 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
Зареждане от , или от огледалото инсталационната версия на криптографския софтуер VeraCrypt (в момента на публикуване на статията v1.24-Update3, преносимата версия VeraCrypt не подхожда за системно шифроване). Проверете контролното число на заредения софтуер
$ Certutil -hashfile "C:VeraCrypt Setup 1.24.exe" SHA256
и сравнете получения резултат с публикуваното КС на сайта на разработчика VeraCrypt.
Ако е инсталиран софтуерът HashTab, още по-лесно: ПКМ (VeraCrypt Setup 1.24.exe)-свойства-хеш стойности на файловете.
За проверка на подписа на програмата в системата трябва да са инсталирани софтуерът и публичния pgp ключ на разработчика ; .
А2. Инсталиране/стартиране на софтуера VeraCrypt с права на администратор
А3. Избор на параметри за системно шифроване на активния дялVeraCrypt – Система – Шифриране на системния дял/диск – Обычен – Шифриране на системния дял Windows – Мултизагрузка – (предупреждение: «Неопитним пользователям не рекомендуется использовать этот метод» и это правда, соглашаемся «Да») – З boot дял („да“, дори и да не е така, все пак „да“) – Брой системни дискове „2 или повече“ – Няколко системи на един диск „Да“ – Не Windows зареждач „Не“ (по същество „Да“, но зареждачите VeraCrypt/GRUB2 не могат да делят MBR помежду си, по-точно в MBR/стартиращата част се съхранява само най-малката част от кода на зареждача, основната му част се намира в границите на файловата система) – Мултизареждане – Настройки на параметрите за криптиране…
Ако се отклоните от описаните по-горе стъпки (схеми на блоково системно криптиране), VeraCrypt ще изведе предупреждение и няма да позволи криптиране на дяла.
На следващата стъпка, към целенасочената защита на данните, проведете „Тест“ и изберете алгоритъм за криптиране. Ако имате остър CPU, то вероятно най-бързият ще бъде алгоритъмът за криптиране Twofish. Ако CPU-то е мощно, ще забележите разликата: AES — криптиране според резултатите от теста ще бъде многократно по-бързо от своите криптоконкуренти. AES — популярен алгоритъм за криптиране, хардуерната част на съвременните CPU е специално оптимизирана както за „секрет“, така и за „взлом“.
VeraCrypt поддържа възможността да криптира дискове в каскадно AES(Twofish)/и другими комбинациями. На старо-ядерном CPU Intel десятилетней давности (без хардуерна поддръжка на AES, каскадно криптиране A/T) намаляването на производителността е всъщност незабележимо. (при CPU AMD от същата епоха/~параметри — производителността е малко понижена). ОС работи динамично и консумацията на ресурси за прозрачно криптиране е незабележима. За разлика от например забележимото намаляване на производителността поради инсталирана тестова нестабилна работна среда 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 ще предложи да рестартира компютъра и да тества работоспособността на своя зареждач. След рестартирането/стартирането на Windows, VeraCrypt ще се зареди в режим на изчакване, остава само да потвърдите процеса на криптиране — Y.
На последния етап от системното криптиране VeraCrypt ще предложи да създадете резервно копие на заглавката на активния криптиран дял под формата на «veracrypt rescue disk.iso» — това е задължително. в този софтуер такава операция е изискване (в LUKS, като изискване – за съжаление, това е пропуснато, но подчертано в документацията). Спасителният диск ще бъде полезен на всички, а на някого и не един път. Загубата (презаписване на заглавката/MBR) на резервната копия на заглавката завинаги ще лиши достъпа до декриптирания дял с OS Windows.
А4. Създаване на спасителен usb/диск VeraCryptПо подразбиране VeraCrypt предлага да запише «метаданни ~2-3мБ» на компактдиск, но не всеки разполага с дискове или устройства DWD-ROM, а създаването на стартиращ флаш-диск «VeraCrypt Rescue disk» за някои ще се окаже технически изненада: Rufus/GUIdd-ROSA ImageWriter и друг подобен софтуер — няма да могат да се справят с поставената задача, тъй като освен копирането на изместените метаданни на стартиращия флаш-диск, е необходимо извън файлова система на usb-накопителя да се направи copy/paste, накратко, правилно да се копира 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. Ако не разполагате с гол сървър и цените времето си, необходимо е да използвате интерфейс с графична среда, а повечето терминални команди, описани по-долу, ще бъдат изпълнени в „режим Чак-Норис“.
B1. Стартиране на ПК с live USB GNU/Linux
„Провеждане на криптотест за производителност на хардуера“
lscpu && cryptsetup 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, Ключ: 256 бита, хеширане на LUKS заглавие: 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-ключ шифрира/дешифрира всякакви данни на раздела (освен заглавието на раздела) се съхраняват в ~3MB на избрания раздел от твърдия диск.
* -i итерации в милисекунди, вместо 'количество' (забавяне във времето при обработка на паролата, влияе на зареждането на ОС и криптографската устойчивост на ключовете). За запазване на баланса на криптографската устойчивост при проста парола от типа 'russian' е необходимо да се увеличи стойността на -(i), докато при сложна парола от типа '?8dƱob/øfh' стойността може да се намали.
* —use-urandom генератор на случайни числа, генерира ключове и сол.
След сопоставянето на раздела sda7 > sda7_crypt (операцията е бърза, тъй като се създава зашифрено заглавие с метаданни ~3MB и това е всичко), трябва да форматирате и монтирате файловата система 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. Резервно копие на заглавието на диска (метаданни ~3MB)Една от най- важните операции, които трябва да се извършат незабавно — резервно копие на заглавието «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
# и виждаме файла "/шифрованнаяОС"
history
# в изхода на терминала трябва да се появи историята на командите su работещата ОС.B4.3. Създаване/настройка на зашифрен swap, редактиране на crypttab/fstabТъй като файлът за подкачка се форматира при всяко стартиране на ОС, няма смисъл да създаваме и свързваме swap с логическия диск в момента и да въвеждаме команди, както в ч. B2.2. За Swap-а при всяко стартиране ще се генерират нови временни шифровъчни ключове. Жизненият цикъл на ключовете на swap-a: размонтиране/изключване на swap-раздела (+очистване на RAM); или рестартиране на ОС. Настройка на 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.
Алтернативен зашифрен swap
Ако по някаква причина не искате да отделяте цял раздел за файл за подкачка, можете да изберете алтернативен и по-добър начин: създаване на файл за подкачка в файл на зашифрован раздел с ОС.
fallocate -l 3G /swap # създаване на файл с размер 3GB (почти мигновена операция)
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-та парола). Файлът може да бъде с произволно съдържание до 8MB, но данните ще се прочетат <1MB.
#Создание "генерация" случайного файла <секретного ключа> размером 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»
# / 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=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 [версия]За да опаковате секретния ключ в 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)
На тази стъпка конфигурацията на файловете е завършена.
[С] Инсталиране и настройка на GRUB2/Защита
C1. При необходимост форматирайте раздела за загрузчика (разделът трябва да има поне 20мБ)
mkfs.ext4 -v -L GRUB2 /dev/sda6C2. Монтиране на /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 - вашият dял 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 и множество live дистрибуции – това е нормално). Ако в терминала „празно“, файлът „grub.cfg“ не е генериран, то това е случаят, когато в системата има проблеми с GRUB (и най-вероятно зареждачът е от тестова версия на репозитория) преинсталирайте GRUB2 от надеждни източници.
Инсталацията на „опростена конфигурация“ и настройка на GRUB2 е завършена.
C5. Процес на доказателствен тест на криптирана ОС 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 (ако grub2 пише uuid „не е намерен“ – това е проблем на зареждача grub2, трябва да се преинсталира, например от тестова версия/стабилна).

*В зависимост от начина, по който сте настроили системата (вж. п.Б4.4/4.5), след коректно въвеждане на паролата за отключване на образа /boot/initrd.img, ще е необходима парола за зареждане на ядрото/корена на ОС, или автоматично ще се подстави секретният ключ „skey“, освобождавайки ви от повторно въвеждане на паролата.

(екран „автоматично подставяне на секретния ключ“).
*Следва познатият процес на зареждане на GNU/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/Linux е напълно криптиран, включително /boot/kernel и initrd;
- секретният ключ е опакован в initrd.img;
- текущата схема на удостоверяване (въвеждане на парола за отключване на initrd; парола/ключ за зареждане на ОС; парола за удостоверяване на потребителската сметка на Linux).
«Проста конфигурация на GRUB2» системното криптиране на блоковия дял е завършено.
С6. Разширена настройка на GRUB2. Защита на зареждача с цифров подпис + защита с удостоверяванеGNU/Linux е напълно криптиран, но зареждача не може да бъде криптиран – такова условие е наложено от BIOS. Поради тази причина верижното криптирано зареждане на GRUB2 е невъзможно, но е налично просто верижно зареждане; от гледна точка на защита не е необходимо [виж. П. F].
За «уязвимия» GRUB2 разработчиците реализираха алгоритъм за защита на зареждача с «подпис/удостоверяване».
- При защитата на зареждача с «действителния си цифров подпис», външната модификация на файлове или опит да се заредят допълнителни модули в този зареждач – ще доведе до блокиране на зареждането.
- При защитата на зареждача с удостоверяване за избор на зареждане на някакъв дистрибутив или въвеждане на допълнителни команди в CLI, ще е необходимо да се въведе логин и парола на суперпотребителя-GRUB2.
С6.1. Защита на зареждача с удостоверяванеУверете се, че работите в терминал на криптирана ОС
ls / #да откриете файл-маркерсъздайте парола на суперпотребителя за удостоверяване в 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 type the
# 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
ако [ -z «${config_directory}» -a -f $prefix/custom.cfg ]; следователно
източник $prefix/custom.cfg;
фи
настройка 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
настройка 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 (версиите над 3.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
ако [ -z «${config_directory}» -a -f $prefix/custom.cfg ]; следователно
източник $prefix/custom.cfg;
фи
trust /boot/grub/perskey
настройка 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. Доказателствен тест на 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 с цифров подпис и аутентификация“ е завършена.
С7 Алтернативен метод за защита на загрузчика GRUB2 чрез хеширанеОписаният по-горе метод „Защита на загрузчика ЦП/аутентификация“ е класика. Поради несъвършенствата на GRUB2, в параноидални условия е подложен на реална атака, която ще опиша по-долу в п. [F]. Освен това, след обновление на ОС/ядро е необходимо повторно подписване на загрузчика.
Защита на загрузчика GRUB2 чрез хеширане
Предимства пред класиката:
- По-високо ниво на надеждност (хеширане/проверка преминава само с криптиран локален ресурс. Контролира се целият разпределен дял под GRUB2 за всякакви промени, а всичко останало е криптирано; в класическата схема с защита на загрузчици ЦП/аутентификация се контролират само файловете, а не свободното пространство, в което може да се добави „нещо злонамерено“).
- Криптирано логиране (в схемата се добавя удобно четлив персонален криптиран лог).
- Скорост (защита/проверка на целия дял, выделен за GRUB2, става практически мигновено).
- Автоматизация на всички криптографски процеси.
Недостатъци пред класиката.
- Подправка на подписа (теоретично, е възможно намирането на зададена колизия в хеш функция).
- Повишено ниво на сложност (в сравнение с класиката изисква леко повече умения в ОС GNU/Linux).
Как работи идеята с хеширането GRUB2/раздела
„Подписва“ се дял GRUB2, при зареждането на ОС се извършва проверка за неизменност на дяла на загрузчика с последващото логиране в безопасна среда (криптирана). В случай на компрометиране на загрузчика или неговия дял, в допълнение към входа в логовете се активира такава
Необходима система.
Четири пъти на ден се извършва аналогична проверка, която не натоварва ресурсите на системата.
С командата „-$ проверка_GRUB“ се извършва мигновена проверка по всяко време без логиране, но с извеждане на информация в CLI.
С командата „-$ sudo подпись_GRUB“ се извършва мигновено повторно подписване на загрузчика GRUB2/раздела и неговото обновено логиране (необходимо след обновление на ОС/boot) и животът продължава напред.
Реализация метода хеширане на загрузчика и неговия дял
0) Подписваме загрузчика/дяла GRUB, след като го монтираме на /media/username
-$ hashdeep -c md5 -r /media/username/GRUB > /podpis.txt1) Създаваме скрипт без разширение в корена на криптираната ОС ~/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 и неговия загрузчик, запазваме лог.
Създаваме или копираме, например, "зловреден файл" [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: Преместен от /media/username/GRUB/1nononoshifr
/media/username/GRUB/boot/grub/i386-pc/mda_text.mod: Ок
/media/username/GRUB/boot/grub/grub.cfg: Ок
hashdeep: Аудитът не е успешен
Проверени входящи файлове: 0
Очакаващи известни файлове: 0
Открития: 325
Частично съвпаднали файлове: 0
Преместени файлове: 1
Нови файлове намерени: 0
Не намерени познати файлове: 0 #как видим появилось «Files moved: 1 и Audit failed» означает, что проверка не прошла.
Поради особеностите на тествания дял вместо "Нови файлове намерени" > "Преместени файлове"
2) Кладе гифката тук > ~/warning.gif, задаваме права 744.
3) Настройваме fstab за автоматично монтиране на дялат GRUB при зареждане
-$ sudo nano /etc/fstabLABEL=GRUB /media/username/GRUB ext4 по подразбиране 0 0
4) Извършваме ротация на логовете
-$ sudo nano /etc/logrotate.d/podpis /var/log/podpis.txt {
дневно
ротация 50
размер 5M
датаразширение
компрес
отложено компресиране
стара директория /var/log/old
}/var/log/vtorjenie.txt {
месечно
ротация 5
размер 5M
датаразширение
стара директория /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 ПО .
Бързо форматираме дяла, данните на който трябва да бъдат унищожени (с помощта на 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“ и подобен софтуер, не могат да работят директно с криптирани данни.
Определяне на задачата за архивиране на криптирани блокови устройства:
- универсалност — един и същ алгоритъм/софтуер за архивиране за Windows/Linux;
- възможност за работа в конзолата с всяка live usb GNU/Linux без необходимост от допълнително сваляне на софтуер (но все пак препоръчвам GUI);
- сигурност на резервните копия — съхраняваните „образи“ трябва да бъдат криптирани/защитени с парола;
- размерът на криптираните данни трябва да съответства на размера на реално копираните данни;
- удобно извличане на нужните файлове от резервното копие (отсъствието на изискването първо да се разшифрова целият дял).
Например, резервно копие/възстановяване с помощта на утилитата „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 томАлгоритъм за създаване на резервно копие:
- създаване на криптиран контейнер (том/файл) VeraCrypt за ОС;
- прехвърляне/синхронизиране на ОС с помощта на софтуер Rsync в криптоконтейнер VeraCrypt;
- при необходимост зареждане на тома VeraCrypt в www.
Създаването на криптиран контейнер VeraCrypt има свои особености:
създаване на динамичен том (достъпно е създаването на ДТ само в Windows, може да се използва и в GNU/Linux);
създаване на обикновен том, но има изискване с „параноиден характер“ (по думите на разработчика) – форматиране на контейнера.
Динамичният том се създава почти мигновено в ОС Windows, но при копиране на данни от ОС GNU/Linux > VeraCrypt DT, общата производителност на операцията за резервно копие значително намалява.
Обикновеният том Twofish с капацитет 70 ГБ се създава (да кажем, на компютър със средна мощност) на HDD за около половин час (перезаписвайки предишните данни на контейнера на един път, което е изискване за сигурност). От VeraCrypt Windows/Linux е премахната функцията за бързо форматиране на тома при неговото създаване, затова контейнерът може да бъде създаден само чрез "перезапис на един път", или чрез създаване на контейнер с по-ниска производителност.
Създаваме обикновен том VeraCrypt (не динамичен/ntfs), не трябва да възникват проблеми.
Конфигурираме/създаваме/откриваме контейнера в GUI на VeraCrypt > GNU/Linux live usb (томът ще бъде автомонтиран в /media/veracrypt2, а томът на Windows ще бъде монтиран в /media/veracrypt1). Създаваме защитен резервен копие на ОС Windows с помощта на GUI rsync (grsync), отбелязвайки галочките.

Изчакваме края на процеса. След завършване на резервното копие, ще имаме един защитен файл.
По аналогичен начин можем да създадем резервно копие на ОС GNU/Linux, като махнем галочката в GUI rsync "съвместимост с Windows".
Внимание! Контейнерът Veracrypt за "бэкапа на GNU/Linux" трябва да се създава във файлова система ext4. Ако направите резервно копие в контейнер ntfs, при възстановяването на такова копие ще загубите всички права/групи за всичките си данни.
Всички операции могат да се извършат и в терминала. Основни опции за rsync:
* -g - запази групите;
* -P — progress — статус на времето за работа върху файла;
* -H - копиране на твърди линкове, както са;
* -a - архивен режим (няколко флага 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, дисковете се монтират автоматично.
Бележка кратко за това, което е описано по-горе в п.Е1 стъпка по стъпка (но сега за ОС GNU/Linux)
1) Създайте том в fs ext4 > 4gb (за файла) Linux в Veracrypt [Криптоящик].
2) Рестартирайте в 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
ПодробностиАко сте защитили своя зарядно устройство с цифров подпис и/или автентикация (вижте c. C6.), то физическият достъп не предоставя защита. Шифрованите данни остават недостъпни, но обходът на защитата (обиколка на цифровата подпис) GRUB2 позволява на киберпрестъпника да внедри собствения си код в загрузчика без да предизвика подозрения (освен ако потребителят не следи ръчно състоянието на загрузчика или не създаде собствен надежден произволен скрипт код за grub.cfg).
Алгоритъм на атаката. Неправомерното лице
* Стартира компютъра с live usb. Всяка промяна (от нарушителя) в файловете ще уведоми оригиналния собственик на компютъра за нахлуването в загрузчика. Но проста преинсталация на GRUB2 с запазване на grub.cfg (и следваща възможност за редактирование) позволява на нарушителя да редактира всякакви файлове (при такива условия, при зареждане на GRUB2, уведомление на реалния потребител няма да последва. Статусът остава същият )
* Монтира незашифрован дял, запазва "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"
настройка superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8
И за собственика на ПК автентичността на суперпотребителя GRUB2 ще остане в сила.
Цепочна загрузка (загрузчикът зарежда друг загрузчик), както споменах по-горе, няма смисъл (тя е предназначена за друга цел). Поради BIOS не може да стартира криптиран бутloader (при верижното зареждане се извършва рестартиране на 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», докато не бъде изтеглен от атакуващия с физически достъп до компютъра.
Най-простият начин да проверите, че защитата на цифровия подпис активно работи (не нулиран), и никой не е нахлул в бутloadera, в CLI напишете командата
list_trusted в отговор получаваме образ на нашия «perskey», или не получаваме нищо, ако сме били атакувани (необходимо също да проверите «set check_signatures=enforce»).
Основният недостатък на тази стъпка е, че командите трябва да се въвеждат ръчно. Ако добавите тази команда в «grub.cfg» и защитите конфигурацията с цифров подпис, предварителният изглед на ключа на екрана е твърде кратък, за да можете да го видите, и може да пропуснете изхода, получавайки зареждане на GRUB2.
Няма на кого особено да се оплаквате: разработчикът в п.18.2 официално заявява
«Обърнете внимание, че дори и с паролна защита на GRUB, самият GRUB не може да попречи на някой с физически достъп до машината да променя конфигурацията на фърмуера на машината (например, Coreboot или BIOS), за да накара машината да се стартира от различно устройство (контролирано от нападателя). GRUB е най-добре само една връзка в сигурната система за стартиране».
GRUB2 е твърде претоварен с функции, които могат да дадат чувство за фалшива сигурност, а неговото развитие вече е надминало функционалността на ОС MS-DOS, а всъщност е само зареждач. Забавно е, че GRUB2 може да стане ОС утре, а виртуалните машини GNU/Linux, зареждани за него.
Кратко видео за това как премахнах защита с цифров подпис на GRUB2 и обявих за своето проникване на реален потребител. (плашех, а вместо показаното във видеото – можете да напишете не безобиден произволен код/.mod).

Изводи:
1) Блочно системно криптиране за Windows – реализира се по-лесно, а защитата с една парола е по-удобна от защитата с няколко пароли при блочно системно криптиране в GNU/Linux, за справедливост: последното е автоматизирано.
2) Статията е написана като релевантна, подробна простичка наръчник за криптиране на целия диск VeraCrypt/LUKS на една домашна машина, което, към днешна дата, е най-доброто в Рунета (IMHO). Наръчникът съдържа над 50k знака, затова в него не бяха разгледани някои интересни глави: за криптографите, които изчезват/остават в сянка; за това, че в различни книги за GNU/Linux малко/не пишат за криптография; за чл.51 от Конституцията на Руската федерация; за /запрете , за това защо е необходимо да се криптира «корен/boot». Наръчникът се оказа и без това доста обширен, но подробен (описва дори простите стъпки), от своя страна, това ще спести много време, когато започнете с «истинското криптиране».
3) Полнодисково криптиране проведох на Windows 7 64; GNU/Linux Parrot 4x; GNU/Debian 9.0/9.5.
4) Реализирах успешна атака на моят зареждач GRUB2.
5) Ръководството е създадено, за да помогне на всички параноици в СНГ, където работата с криптиране е разрешена на законодателно ниво. Първо, то е за тези, които искат да активират пълно дисково криптиране, без да премахват настройките на своите системи.
6) Преработих и актуализирах ръководството си, което е валидно за 2020 година.
[G] Полезна документация
- (февруари 2012 RU)
- /usr/share/doc/cryptsetup(-run) [локальный ресурс] (официална подробна документация за настройка на криптиране в GNU/Linux с помощта на cryptsetup)
- (кратка документация за настройка на криптиране в GNU/Linux с помощта на cryptsetup)
- (документация на archlinux)
- (страница на ръководството на arch)
- (страница на ръководството на arch)
- .
Тагове: пълно криптиране на диска, криптиране на дял, пълно дисково криптиране на Linux, пълно системно криптиране LUKS1.
Само регистрирани потребители могат да участват в анкетата. , моля.
Криптираш ли?
17,1%Криптирам всичко, което е възможно. Имам параноя.
34,2%Криптирам само важни данни.
14,6%Понякога криптирам, понякога забравям.
34,2%Не, не криптирам, неудобно е и скъпо.
Гласуваха 82 потребители. Въздържаха се 22 потребители.
Източник: habr.com
