Как удалить содержимое зашифрованного диска Kali (а потом вернуть обратно)
Когда для Kali Linux был представлен патч LUKS nuke и добавлен в пакет cryptsetup в Kali Linux, это вызвало большую дискуссию. Следует лучше объяснить эту возможность, а также продемонстрировать некоторые полезные достижения, о которых стоит знать.
LUKS Nuke в Nutshell
Когда создаётся зашифрованный LUKS контейнер, генерируется рандомный мастер-ключ. В свою очередь ключевая фраза тогда используется для шифрования мастер ключа. Этот процесс означает, что ключевая фраза не прямо соответствует данным. То есть, если два набора идентичных данных шифруются и используется одна и та же ключевая фраза, мастер-ключ остаётся уникальным для каждого набора и не может быть заменён. Это означаете, что независимо от используемой ключевой фразы, если мастер-ключ потерян, восстановление данных невозможно. Этот процесс обычно используется для стирания дисков посредством уничтожения ключей.
Пример использования LUKS Nuke
Наша главная цель в представлении этой функции в Kali Linux, это упрощения процесса безопасного путешествия с конфиденциальной клиентской информацией. Хотя при “LUKS Nuking” (стирания диска LUKS) результатом станет недоступность диска, возможно заранее сделать резервную копию ваших мастер-ключей (keyslots) и восстановить их после факта. Нам это позволяет «окирпичить» наш чувствительный ноутбук перед путешествием, отделить себя от ключей восстановления (которые мы шифруем) а затем «восстановить» их в машине после возвращения в безопасное место. При таком способе, если наше железо потеряно или к нему получен доступ во время нашего путешествия, никто не будет способен восстановить данные на нём, включая нас самих.
Есть и другой способ удалить мастер-ключи (keyslots), как бы там ни было, преимущества варианта Nuke — это его быстрота, простота и отсутствие требований полного входа в вашу Kali. Если вы поддерживаете резервную копию ваших заголовков, вы можете уничтожить мастер-ключи в любое время, когда вы почувствовали себя не комфортно. А потом произведите восстановление, когда вернётся чувство безопасности.
Попробуйте это сами
Давайте пройдёмся по всем этапам шифрования, резервного копирования, уничтожения и последующего восстановления ваших данных с использованием Kali Linux. Начнём с загрузки и установки Kali Linux с полным шифрованием диска. Когда это сделано, вы можете верифицировать вашу информацию следующих образом:
root@kali-crypto:~# cryptsetup luksDump /dev/sda5
LUKS header information for /dev/sda5
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha1
Payload offset: 4096
MK bits: 512
MK digest: 04 cd d0 51 bf 57 10 f5 87 08 07 d5 c8 2a 34 24 7a 89 3b db
MK salt: 27 42 e5 a6 b2 53 7f de 00 26 d3 f8 66 fb 9e 48
16 a2 b0 a9 2c bb cc f6 ea 66 e6 b1 79 08 69 17
MK iterations: 65750
UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
Key Slot 0: ENABLED
Iterations: 223775
Salt: 7b ee 18 9e 46 77 60 2a f6 e2 a6 13 9f 59 0a 88
7b b2 db 84 25 98 f3 ae 61 36 3a 7d 96 08 a4 49
Key material offset: 8
AF stripes: 4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
As you can see, we have slot 0 enabled with slots 1 to 7 unused. At this point, we will add our nuke key.
root@kali-crypto:~# cryptsetup luksAddNuke /dev/sda5
Enter any existing passphrase:
Enter new passphrase for key slot:
Again, we will dump our LUKS header and see what is changed.
root@kali-crypto:~# cryptsetup luksDump /dev/sda5
LUKS header information for /dev/sda5
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha1
Payload offset: 4096
MK bits: 512
MK digest: 04 cd d0 51 bf 57 10 f5 87 08 07 d5 c8 2a 34 24 7a 89 3b db
MK salt: 27 42 e5 a6 b2 53 7f de 00 26 d3 f8 66 fb 9e 48
16 a2 b0 a9 2c bb cc f6 ea 66 e6 b1 79 08 69 17
MK iterations: 65750
UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
Key Slot 0: ENABLED
Iterations: 223775
Salt: 7b ee 18 9e 46 77 60 2a f6 e2 a6 13 9f 59 0a 88
7b b2 db 84 25 98 f3 ae 61 36 3a 7d 96 08 a4 49
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 267782
Salt: 8c e5 a2 31 60 2a f5 39 41 e9 52 94 eb 82 b8 c2
b7 a6 6e 4a 7a 0e b1 85 c2 3a 75 d6 a7 6a 76 b3
Key material offset: 512
AF stripes: 4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Великолепно. Здесь мы видим, что мы имеет slot 1, который используется для нашего ключа самоуничтожения. Сейчас нам нужно вернуться назад к данным. Это может быть сделано просто с опцией “luksHeaderBackup”.
root@kali-crypto:~# cryptsetup luksHeaderBackup --header-backup-file luksheader.back /dev/sda5
root@kali-crypto:~# file luksheader.back
luksheader.back: LUKS encrypted file, ver 1 [aes, xts-plain64, sha1] UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
root@kali-crypto:~#
Итак, в нашем случае мы хотели бы зашифровать эти данные для сохранности. Есть много способов это сделать, как бы там ни было мы будет использовать openssl, чтобы сделать процесс быстрым и простым, используя инструменты уже встроенные в Kali.
root@kali-crypto:~# openssl enc -aes-256-cbc -salt -in luksheader.back -out luksheader.back.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
root@kali-crypto:~# ls -lh luksheader.back*
-r-------- 1 root root 2.0M Jan 9 13:42 luksheader.back
-rw-r--r-- 1 root root 2.0M Jan 9 15:50 luksheader.back.enc
root@kali-crypto:~# file luksheader.back*
luksheader.back: LUKS encrypted file, ver 1 [aes, xts-plain64, sha1] UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
luksheader.back.enc: data
Отлично, сейчас у нас есть зашифрованный заголовок, готовый для резервного копирования. В этом случая, нам бы хотелось разместить заголовок где-нибудь, где он будет легко доступным. Это может быть, например, хороший USB диск, который будет храниться в безопасном месте. На этом этапе давайте используем ключ Nuke (ключ самоуничтожения) и посмотрим, как Kali поведёт себя.
Итак, мы использовали ключ самоуничтожения, и, как и ожидалось, мы больше не можем загрузиться в Kali. Давайте посмотрим, что случилось на реальном диске, загрузимся с Kali live CD и снова сделаем дамп заголовков LUKS.
root@kali:~# cryptsetup luksDump /dev/sda5
LUKS header information for /dev/sda5
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha1
Payload offset: 4096
MK bits: 512
MK digest: 04 cd d0 51 bf 57 10 f5 87 08 07 d5 c8 2a 34 24 7a 89 3b db
MK salt: 27 42 e5 a6 b2 53 7f de 00 26 d3 f8 66 fb 9e 48
16 a2 b0 a9 2c bb cc f6 ea 66 e6 b1 79 08 69 17
MK iterations: 65750
UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
Key Slot 0: DISABLED
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Как мы можем видеть, нет мастер-ключей для использования. Nuke (самоуничтожитель) отработал как и ожидалось. Восстановление на место заголовка, это просто вопрос получения зашифрованного заголовка с вашего диска USB. Когда они у вас появились, вы можете расшифровать их и произвести наше восстановление:
root@kali:~# openssl enc -d -aes-256-cbc -in luksheader.back.enc -out luksheader.back
enter aes-256-cbc decryption password:
root@kali:~# cryptsetup luksHeaderRestore --header-backup-file luksheader.back /dev/sda5
WARNING!
=======
Device /dev/sda5 already contains LUKS header. Replacing header will destroy existing keyslots.
Are you sure? (Type uppercase yes): YES
root@kali:~# cryptsetup luksDump /dev/sda5
LUKS header information for /dev/sda5
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha1
Payload offset: 4096
MK bits: 512
MK digest: 04 cd d0 51 bf 57 10 f5 87 08 07 d5 c8 2a 34 24 7a 89 3b db
MK salt: 27 42 e5 a6 b2 53 7f de 00 26 d3 f8 66 fb 9e 48
16 a2 b0 a9 2c bb cc f6 ea 66 e6 b1 79 08 69 17
MK iterations: 65750
UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
Key Slot 0: ENABLED
Iterations: 223775
Salt: 7b ee 18 9e 46 77 60 2a f6 e2 a6 13 9f 59 0a 88
7b b2 db 84 25 98 f3 ae 61 36 3a 7d 96 08 a4 49
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 267782
Salt: 8c e5 a2 31 60 2a f5 39 41 e9 52 94 eb 82 b8 c2
b7 a6 6e 4a 7a 0e b1 85 c2 3a 75 d6 a7 6a 76 b3
Key material offset: 512
AF stripes: 4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Наш слот теперь восстановлен. Всё, что нам нужно сделать — это перезагрузить и ввести наш нормальный пароль LUKS, и система снова вернулась в своё исходное состояние.