Вразливість у cryptsetup, що дозволяє відключити шифрування в розділах LUKS2

У пакеті Cryptsetup, який використовується для шифрування дискових розділів у Linux, виявлено вразливість (CVE-2021-4122), що дозволяє через модифікацію метаданих домогтися відключення шифрування в розділах у форматі LUKS2 (Linux Unified Key Setup). Для експлуатації вразливості атакуючий повинен мати фізичний доступ до зашифрованого носія, тобто. Метод має сенс переважно для атаки на зашифровані зовнішні накопичувачі, такі як Flash-диски, до яких зловмисник має доступ, але не знає пароля для розшифрування даних.

Атака застосовується тільки для формату LUKS2 і пов'язана з маніпуляцією метаданими, що відповідають за активацію розширення «online reencryption», що дозволяє за необхідності зміни ключа доступу ініціювати процес перешифрування даних на льоту без зупинки роботи з розділом. Так як процес розшифровки та шифрування з новим ключем займає багато часу, «online reencryption» дає можливість не переривати роботу з розділом і виконувати перешифрування у фоні, поступово перешифровуючи дані з одного ключа на інший. У тому числі є можливість вибору порожнього цільового ключа, що дозволяє перевести розділ у розшифрований вигляд.

Атакуючий може внести в метадані LUKS2 зміни, що симулюють аварійне переривання виконання операції розшифровки в результаті збою та домогтися розшифрування частини розділу після активації та використання модифікованого накопичувача власником. При цьому користувач, який підключив модифікований накопичувач і розблокував його коректним паролем, не отримує будь-якого попередження про виконання процесу відновлення перешифрування перерваної операції і може дізнатися про хід цієї операції тільки за допомогою команди «luks Dump». Обсяг даних, розшифрування яких може досягти атакуючий, залежить від розміру заголовка LUKS2, але за розміром за замовчуванням (16 MiB) може перевищувати 3 ГБ.

Проблема викликана тим, що незважаючи на те, що перешифрування вимагає розрахунку та перевірки хешів нового та старого ключів, для початку розшифровки хеш не потрібно, якщо новий стан передбачає відсутність ключа для шифрування (plaintext). Крім того, метадані LUKS2, в яких задається алгоритм шифрування, не захищені від модифікації у разі попадання до рук зловмисника. Для блокування вразливості розробники додали до LUKS2 додатковий захист метаданих, котрим тепер перевіряється додатковий хеш, обчислюваний з урахуванням відомих ключів і вмісту метаданих, тобто. атакуючий тепер не може непомітно змінити метадані, не знаючи пароля для розшифровки.

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

Проблема виявлена ​​мейнтейнером проекту cryptsetup та усунена в оновленнях cryptsetup 2.4.3 та 2.3.7. Стан формування оновлень з усуненням проблеми в дистрибутивах можна відстежити на сторінках: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Вразливість проявляється лише з випуску cryptsetup 2.2.0, у якому з'явилася підтримка операції «online reencryption». Як обхідний шлях захисту може використовуватися запуск з опцією «disable-luks2-reencryption».

Джерело: opennet.ru

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