Компания Kudelski Security, специализирующаяся на аудите безопасности, публикува инструменти Shufflecake, които позволяват създаването на скрити файлови системи, разпространени в наличното свободно пространство на съществуващите дялове и неразличими от случайни остатъчни данни. Дяловете се създават по такъв начин, че дори и при провеждане на криминалистичен анализ, е трудно да се докаже тяхното съществуване без познаване на достъпния ключ. Кодът на утилитите (shufflecake-userland) и модула на ядрото на Linux (dm-sflc) е написан на езика C и е разпространен под лицензия GPLv3, което прави невъзможно включването на публикувания модул в основния състав на ядрото на Linux поради несъвместимост с лицензия GPLv2, под която се доставя ядрото.
Проектът е позициониран като по-усъвършенствано решение от Truecrypt и Veracrypt за скриване на данни, които изискват защита, с родна поддръжка на платформата Linux, позволяваща създаването на до 15 скрити дяла на устройството, вложени един в друг за объркване на анализа на тяхното съществуване. Ако самото приложение на Shufflecake не представлява тайна, за което може да се съди например по наличието на съответните утилити в системата, то общият брой на създадените скрити дялове е невъзможно да се определи. Създадените скрити дялове по желание на потребителя могат да се форматират за разполагане на всякакви файлови системи, например ext4, xfs или btrfs. Всеки дял се обработва като отделно виртуално блочно устройство със собствен ключ за отключване.
За затрудняване на проследяването се предлага да се използва модел на поведение „правдоподобно отрицание“ (plausible deniability), който се състои в това, че ценните данни се скриват като допълнителни слоеве в криптирани раздели с по-малко ценни данни, образувайки своеобразна скрита йерархия на разделите. При натиск собственикът на устройството може да разкрие ключа за криптирания раздел, но в този раздел могат да се скриват други раздели (до 15 вложени нива), а определянето на тяхното присъствие и доказването на съществуването им е проблематично.
Скритието се осигурява чрез формирането на всяка секция като набор от криптирани слайсове, разпределени на произволни позиции на носителя на данни. Всеки слайс се създава динамично в момента, когато за секцията се изисква допълнително пространство за съхранение. За да се затрудни анализът, слайсовете на различни секции се редуват, т.е. секции Shufflecake не са свързани с непрекъснати области и слайсовете на всички секции се смесват. Информацията за използваните и свободни слайсове се съхранява в картата на местоположението, свързана с всяка секция, на която се позовава криптираният хедър. Картите и хедърът са криптирани и без знание на ключа за достъп не могат да бъдат различени от произволни данни.
Заглавието е разделено на слотове, всеки от които определя своя раздел и свързаните с него слайсове. Слотът в заглавието са разположени в стеков ред и рекурсивно свързани — текущият слот съдържа ключ за декриптиране на параметрите на предишния раздел в йерархията (по-малко скрит), което позволява използването на една парола за декриптиране на всички по-малко скрити раздели, свързани с избрания раздел. Всеки по-малко скрит раздел разглежда слайсовете на вложените раздели като свободни.
По подразбиране всички вложени раздели на Shufflecake имат същия видим размер, какъвто има разделът на най-високо ниво. Например, ако устройството, с размер 1 GB, използва три раздела, всеки от тях ще бъде видим за системата като раздел с размер 1 GB, а общото налично дисково пространство ще се използва съвместно във всички раздели — ако общият размер на запазените данни надвиши действителния размер на устройството, ще започне да се връща грешка при вход/изход.
Неоткрити вложени секции не участват в разпределението на място, т.е. опитът да се запълни секцията на най-високо ниво ще доведе до презаписване на данни във вложените секции, но няма да позволи да се открие съществуването им чрез анализ на размера на данните, които могат да бъдат поставени в секцията преди да се появи грешка (предполага се, че горните секции съдържат неизменяеми данни с цел разсейване на вниманието и никога не се използват поотделно, а нормалната работа се извършва винаги с най-новата вложена секция; самата схема предполага, че е по-важно да се запази тайна за съществуването на данни, отколкото да се загубят тези данни).
Всъщност винаги се създават 15 раздела Shufflecake — към използваните раздели е свързана паролата на потребителя, а неизползваните раздели получават случайно генерирана парола (невъзможно е да се разбере колко наистина раздела се използват). При инициализацията на разделите Shufflecake, диска, раздела или виртуалното блочно устройство, които са определени за тяхното разполагане, се запълва със случайни данни, което не позволява да се определи на общ фон метаданните и данните на Shufflecake.
Реализацията на Shufflecake има достатъчно висока производителност, но поради наличието на разходи от около два пъти отстъпва по пропускна способност в сравнение с криптирането на дисковете, основано на поддържащата система LUKS. Прилагането на Shufflecake също води до допълнителни разходи за оперативна памет и пространство за съхранение на служебни данни на диска. Разходите за паметта се оценяват на 60 MB за всеки раздел, а пространството на диска — на 1% от общия размер. За сравнение, сравнима по предназначение техника WORAM води до забавяне от 5 до 200 пъти с 75% загуба на полезно пространство на диска.
Инструментариумът и модулът на ядрото са тествани само при работа в Debian и Ubuntu с ядра 5.13 и 5.15 (поддържа се работа в Ubuntu 22.04). Отбелязва се, че проектът все още трябва да се разглежда като работен прототип, който не трябва да се използва за съхранение на важни данни. В бъдеще се планира да се проведе допълнителна оптимизация на производителността, надеждността и сигурността, както и да се осигури възможност за зареждане от секции Shufflecake.
Източник: opennet.ru
