Codeby web-security - новый курс от Codeby Security School

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...


Когда для 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”.


Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


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, и система снова вернулась в своё исходное состояние.


Codeby Market от Сodeby

Мы запустили свой магазин CodebyMarket Equipment for InfoSec. Уже добавили RaspberryAlfa Long-RangeOrange PiArduino и многое другое. Купить Pentesting Devices