Shufflecake, una herramienta para la creación de volúmenes ocultos
La empresa de auditoría de seguridad Kudelski Security dio a conocer el conjunto de herramientas Shufflecake, que permite crear sistemas de archivos ocultos que se distribuyen en el espacio libre disponible en las particiones existentes y no se pueden distinguir de los datos residuales aleatorios. Las secciones se crean de tal manera que sin conocer la clave de acceso, es problemático probar su existencia incluso cuando se realiza un análisis forense.
El proyecto se posiciona como una solución más avanzada que Truecrypt y Veracrypt para ocultar datos confidenciales, que tiene soporte nativo para la plataforma Linux y le permite colocar hasta 15 particiones ocultas en el dispositivo, anidadas entre sí para ofuscar el análisis de su existencia.
Las particiones ocultas creadas, a discreción del usuario, se pueden formatear para adaptarse a cualquier sistema de archivos, por ejemplo, ext4, xfs o btrfs. Cada partición se trata como un dispositivo de bloque virtual independiente con su propia clave de desbloqueo.
Para ofuscar los rastros, se propone el modelo de comportamiento de «plausible deniability», cuya esencia es que los datos valiosos se ocultan como capas adicionales en secciones cifradas con datos menos valiosos, formando una especie de jerarquía oculta de secciones. En caso de presión, el propietario del dispositivo puede revelar la clave de la sección encriptada, pero otras secciones (hasta 15 niveles anidados) pueden ocultarse en esta sección, y es problemático determinar su presencia y probar su existencia.
Shufflecake y el módulo del kernel solo se han probado en Debian y Ubuntu con kernels 5.13 y 5.15 (se admite Ubuntu 22.04). Cabe señalar que el proyecto aún debe considerarse como un prototipo de trabajo, que no debe usarse para almacenar datos importantes.
En el futuro, planeamos realizar optimizaciones adicionales para el rendimiento, la confiabilidad y la seguridad, así como brindar la capacidad de iniciar desde particiones Shufflecake.
Sobre Shufflecake
El ocultamiento se logra formando cada partición como un conjunto de segmentos encriptados colocados en posiciones aleatorias en el dispositivo de almacenamiento. Cada segmento se crea dinámicamente cuando la partición necesita espacio de almacenamiento adicional. Para complicar el análisis, se intercalan los cortes de diferentes secciones.
Las secciones de Shufflecake no están vinculadas a regiones contiguas y las porciones de todas las secciones se mezclan. La información sobre las porciones usadas y libres se almacena en el mapa de ubicación adjunto a cada sección, al que hace referencia el encabezado encriptado. Las tarjetas y el encabezado están encriptados y, sin conocer la clave de acceso, son indistinguibles de los datos aleatorios.
El encabezado se divide en espacios, cada uno de los cuales define su propia sección y sus sectores asociados. Las ranuras en el encabezado están apiladas y vinculadas recursivamente: la ranura actual contiene la clave para descifrar los parámetros de la sección anterior en la jerarquía (menos oculta), lo que permite usar una única contraseña para descifrar todas las secciones menos ocultas asociadas con el seleccionado. Cada sección menos oculta trata las porciones de las secciones anidadas como libres.
De forma predeterminada, todas las secciones anidadas de Shufflecake tienen el mismo tamaño visible que la sección de nivel superior. Por ejemplo, si se usan tres particiones en un dispositivo de 1 GB, cada una de ellas será visible para el sistema como una partición de 1 GB y el espacio total disponible en el disco se compartirá entre todas las particiones, si la cantidad de datos guardados en total excede el tamaño real del dispositivo, comenzará a generar un error de E/S.
Las secciones anidadas no abiertas no participan en la asignación de espacio, es decir, intentar llenar una sección de nivel superior sobrescribirá los datos en las secciones anidadas, pero no revelará su presencia a través del análisis del tamaño de los datos que se pueden colocar en la sección antes de que se genere un error (se supone que las secciones superiores contienen datos inmutables) los datos por distracción y nunca por separado no se utilizan, y el trabajo regular siempre se lleva a cabo con la sección anidada más reciente, el esquema en sí implica que lo principal es mantener el secreto de la existencia de datos, incluso a costa de perderlos datos).
La implementación de Shufflecake tiene un rendimiento bastante alto, pero debido a la presencia de costos generales, tiene un rendimiento dos veces menor en comparación con el cifrado de disco basado en el subsistema LUKS. El uso de Shufflecake también genera costos adicionales de RAM y espacio para almacenar datos de servicio en el disco. Los costos de memoria se estiman en 60 MB por partición y el espacio en disco se estima en el 1% del tamaño total. A modo de comparación, la técnica WORAM, de propósito similar, conduce a una ralentización de 5 a 200 veces con una pérdida del 75 % del espacio útil en disco.
El código de las utilidades (shufflecake-userland) y el módulo del kernel de Linux (dm-sflc) está escrito en C y se distribuye bajo la licencia GPLv3, lo que hace imposible incluir el módulo del kernel publicado en el kernel principal de Linux debido a la incompatibilida dbajo la licencia GPLv2 bajo la cual se envía el kernel.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.