非表示の暗号化ディスク パーティションを作成するためのツールキットである Shufflecake を公開

セキュリティ監査会社 Kudelski Security は、既存のパーティション上の利用可能な空き領域に散在し、ランダムな残留データと区別できない隠しファイル システムを作成できる Shufflecake と呼ばれるツールを公開しました。 パーティションは、アクセス キーが分からない場合、フォレンジック分析を行う場合でもその存在を証明することが困難な方法で作成されます。 ユーティリティ (shufflecake-userland) と Linux カーネル モジュール (dm-sflc) のコードは C で書かれ、GPLv3 ライセンスに基づいて配布されています。そのため、公開されているカーネル モジュールをメインの Linux カーネルに含めることは、Linux カーネルとの互換性がないため不可能です。カーネルが提供される GPLv2 ライセンス。

このプロジェクトは、保護が必要なデータを隠すための Truecrypt や Veracrypt よりも高度なソリューションとして位置付けられており、Linux プラットフォームをネイティブでサポートしており、デバイス上に最大 15 個の隠しパーティションを配置し、互いに入れ子にして解析を混乱させることができます。彼らの存在について。 Shufflecake の使用自体が秘密ではない場合 (たとえば、システム内の対応するユーティリティの存在によって判断できる)、作成された隠しパーティションの総数を決定することはできません。 作成された隠しパーティションは、ext4、xfs、btrfs などの任意のファイル システムに対応するようにユーザーの裁量でフォーマットできます。 各パーティションは、独自のロック解除キーを持つ個別の仮想ブロック デバイスとして扱われます。

トレースを混乱させるために、「もっともらしい否認」動作モデルを使用することが提案されています。その本質は、貴重なデータが、価値の低いデータを持つ暗号化セクションの追加層として隠蔽され、一種のセクションの隠された階層を形成することです。 圧力がかかった場合、デバイスの所有者は暗号化されたパーティションのキーを公開できますが、他のパーティション (最大 15 のネストされたレベル) がこのパーティションに隠されている可能性があり、その存在を判断してその存在を証明するのは問題があります。

隠蔽は、ストレージ デバイス上のランダムな位置に配置された暗号化されたスライスのセットとして各パーティションを構築することによって実現されます。 パーティション内に追加の記憶領域が必要な場合、各スライスは動的に作成されます。 分析をより困難にするために、異なるセクションのスライスが交互に配置されます。 Shufflecake セクションは連続した領域にリンクされておらず、すべてのセクションのスライスが混合されます。 使用済みスライスと空きスライスに関する情報は、各パーティションに関連付けられたロケーション マップに保存され、暗号化されたヘッダーによって参照されます。 カードとヘッダーは暗号化されており、アクセス キーが分からなければランダム データと区別できません。

ヘッダーはスロットに分割され、それぞれが独自のセクションと関連するスライスを定義します。 ヘッダー内のスロットはスタックされ、再帰的にリンクされます。現在のスロットには、階層内の前のセクション (隠蔽度の低いセクション) のパラメータを復号化するためのキーが含まれており、XNUMX つのパスワードを使用して、関連する非隠蔽度の低いセクションをすべて復号化できます。選択したセクション。 非表示の少ない各パーティションは、ネストされたパーティションのスライスを空きとして扱います。

デフォルトでは、Shufflecake のすべてのサブセクションの表示サイズはトップレベルのセクションと同じです。 たとえば、1 GB デバイス上に 1 つのパーティションがある場合、システムではそれぞれが XNUMX GB のパーティションとして認識され、保存されたデータの合計サイズが超過した場合、利用可能なディスク容量の合計がすべてのパーティションで共有されます。デバイスの実際のサイズを変更すると、I/O エラーがスローされます。

開いていないネストされたセクションはスペース割り当てに参加しません。 最上位のパーティションを埋めようとすると、ネストされたパーティションでデータが細断されますが、エラーが発生する前にパーティションに配置できるデータのサイズを分析しても、その存在を明らかにすることはできません (上部のパーティションには注意をそらすための不変データが含まれており、個別に使用されないことはなく、通常の作業は常に最新のネストされたセクションで実行されると想定されており、スキーム自体は、の存在の秘密を維持することがより重要であることを暗示しています。このデータを失うよりも、データを削除する必要があります)。

実際、15 個の Shufflecake パーティションが常に作成されます。使用済みのパーティションにはユーザー パスワードが付加され、未使用のパーティションにはランダムに生成されたパスワードが提供されます (実際に使用されているパーティションの数を理解することは不可能です)。 Shufflecake パーティションが初期化されると、その配置に割り当てられたディスク、パーティション、または仮想ブロック デバイスがランダム データで満たされるため、一般的な背景から Shufflecake のメタデータとデータを識別することができなくなります。

Shufflecake の実装はかなり高いパフォーマンスを持っていますが、オーバーヘッドの存在により、LUKS サブシステムに基づくディスク暗号化と比較してスループットが約 60 倍遅くなります。 Shufflecake を使用すると、サービス データを保存するための RAM とディスク容量の追加コストも発生します。 メモリ消費量はパーティションあたり 1 MB、ディスク容量は合計サイズの 5% と推​​定されます。 比較のために、目的が似ている WORAM 技術では、200 ~ 75 倍の速度低下が発生し、使用可能なディスク領域が XNUMX% 失われます。

ツールキットとカーネル モジュールは、カーネル 5.13 および 5.15 (Ubuntu 22.04 でサポート) を備えた Debian および Ubuntu でのみテストされています。 このプロジェクトは依然として動作するプロトタイプとして考慮されるべきであり、重要なデータを保存するために使用されるべきではないことに注意してください。 将来的には、パフォーマンス、信頼性、セキュリティをさらに最適化し、Shufflecake パーティションから起動する機能を提供する予定です。

出所: オープンネット.ru

コメントを追加します