今後のIntel CPUには [〜#〜] tme [〜#〜] があり、現在のAMDプロセッサには [〜#〜] sme [〜#〜] があります。
これらは フルメモリ暗号化コールドブート攻撃 などの物理的攻撃から保護するための手法です。
どちらも、ブートからRAM=全体を暗号化するため、ソフトウェアを変更してサポートする必要はありません。
フルディスク暗号化と [〜#〜] tpm [〜#〜] との組み合わせ1 (これは ブートキーの問題 を解決し、ユーザー入力なしでディスク暗号化のロックを解除するために変更されていないソフトウェアのブートを保証できます)、これにより、物理的なセキュリティのない完全に信頼されていない環境でマシンを操作して安全にブートできるようになります(ください。これが間違っている場合は私を修正してください)。マシンは、変更されていないソフトウェアを起動するか、起動を拒否する必要があります。フルメモリ暗号化のため、暗号化キーは実行時に抽出できません。
これらのテクニックが DMA攻撃 からどの程度保護するかは、私には不明です。通常、このような攻撃を介して、マシン全体のメモリを直接読み取ることができます。 PCIeポートに接続します。すべてのメモリが暗号化されている場合は、暗号化できない可能性があります。
ありがとう!
1 従来のオンボードTPMは物理的な TPMリセット攻撃 および バススパイ攻撃 の影響を受けやすいが、上記の新しいプロセッサ(AMD EPYCなど)では、TPMは- integratedin the processor die AMDの一部であるため [〜#〜] sps [〜#〜] またはIntel [〜 #〜] me [〜#〜] それぞれなので、「ケーブルをいじる」ことは非常に難しいはずです。
フルメモリ暗号化は、DMA攻撃から保護するようには設計されていません。それがIOMMUの目的です。 IOMMUは、 DMA Remapping またはDMARのACPIテーブルのタイプを使用して構成されます。このテーブルには、 [〜#〜] pch [〜#〜] に接続されている各DMA対応デバイスが使用する領域のリストが含まれています。次に、IOMMUはこれらの領域およびそれらの領域のみへのメモリアクセスを制限します。
DMAに依存するGPUのようなデバイスは、フルメモリ暗号化が存在する場合でもどのように機能しますか?
DMAをサポートするには2つの方法があります。 1つ目は、PCIeを介したメモリアクセスが依然としてPCHを通過するという事実を悪用することです。つまり、チップセットにはDMAバッファを透過的に暗号化および復号化する機会があります。もう1つの手法は、DMAに使用されるページを暗号化されていないものとしてマークすることです。後者の手法はDMA攻撃を防ぎますが、前者が代わりに実装されている可能性があります。後者の手法は、 vCage および HyperCrypt などの実験的なソフトウェアベースのメモリ暗号化でより一般的です。後で説明するように、これはまったく問題ではありません。
指定したTMEリンクによると、暗号化が提供されていない単一の除外範囲がサポートされています。この範囲は、BIOS( コンポーネント が非常に低いアドレス範囲でロードされている)などのために設計されています。 singleの範囲のみがサポートされていることを指定しているため、DMAバッファーは、それらの間で分散されているため、使用できません複数の範囲。
また、TMEはSMEではなく [〜#〜] tsme [〜#〜] と比較する必要があります。通常のSMEは、個々のページのみを暗号化します。一方、TSMEは、ほとんどすべてのシステムメモリを透過的に暗号化することでTMEのように動作し、ソフトウェアが機能を明示的にサポートする必要がなくなります。
このようなデバイスを使用すると、フルメモリ暗号化の利点が損なわれ、物理的なセキュリティなしで安全性が損なわれますか?
どういたしまして!メモリ暗号化が設定されている場合、デバイスが要求すると、データは透過的に復号化され、PCIeバスを介して送信されます。これは、実際にはメモリスクランブリング、つまり [〜#〜] lfsr [〜#〜] と呼ばれるアルゴリズムを使用してメモリを暗号化することによりDRAMチップのdi/dtを削減する手法と同じです。このアルゴリズムは 非常に弱い であるため、機密性のために使用されるのではなく、ハードウェアの信頼性を向上させるためだけに使用されます。 TMEとSMEは、弱いLFSRアルゴリズムではなく、実際の強力な暗号を使用するハードウェアアクセラレーション暗号化を使用して、これを別のレベルに引き上げます。
バスがどんどん速くなるにつれて、1または0の連続したバーストがデバイスに非常にストレスを与えます。これは、深刻な、ロウハンマーのような干渉を引き起こす可能性があります(100万の1のバーストでの単一の0はあまり満足できません)。また、充電されたすべてのコンデンサを64msごとに再充電する必要があるため、電力サージが発生する可能性もあります。メモリスクランブリングは、実際に保存されている論理データに関係なく、平均して、物理DRAMコンデンサに保存される各ビットが1または0になる可能性が等しくなるようにすることで、これが問題になるのを防ぎます。これは、DRAMに固有のものではなく、さまざまな高速バスで採用されています。
従来のオンボードTPMは、物理的なTPMリセット攻撃を受けやすいことに注意してください[...]
マシンに無制限に物理的にアクセスできるようになると、整合性の維持は非常に困難になります。攻撃者は JTAGプローブ を接続するだけで、人形のようにプロセッサを制御できます。
では、不正なPCIeデバイスを接続するとどうなりますか?まず、コンピューターがデバイスを構成します。ドライバーが要求した場合(これは、PCIeデバイスがWiFiカードなどのふりをする場合に通常発生します)、 バスマスター が与えられ、DMA攻撃(この理由から、悪バスターミングとも呼ばれます)。各PCIまたはPCIeデバイスは、いわゆる IOMMUグループ の一部です。少なくともACSがなければ( Intelドキュメント のセクション4.3を参照)、各IOMMUグループには独自の専用メモリ範囲があり、そのグループ内のデバイスには同じ制限が適用されます。
私が尋ねた質問 から取得すると、カーネルログを見て、次のようなものを見ることができます。
DMAR: Setting identity map for device 0000:00:1d.0 [0xa95dc000 - 0xa95e8fff]
...
iommu: Adding device 0000:00:1d.0 to group 11
つまり、0000:00:1d.0
を含むグループ11のデバイスは、アドレス0xa95dc000
から0xa95e8fff
までの物理メモリのみを読み取ることができます。 カーネルが構成されています メモリ領域とデバイス間で共有する必要のあるDMAバッファを探します。
DMAの仕組みと 別の回答 で必要な理由について説明します。関連部分:
DMAが存在する理由とその仕組みを理解しておくと役立ちます。 DMAがサポートされている場合、メモリの専用領域が設定され、コントローラー(ICHまたはPCMCIA)がIDEから読み取ったデータを直接書き込みます。メモリ領域(DMAベースのUDMAまたはMDMAプロトコルを使用)。 CPUの観点からは、データを読み取るコマンドを発行し、独自の処理を実行できます。プロセスが完了するとすぐに、非同期でアラートが発生し、要求されたデータがメモリ内で待機します。 。同様に、IDEで上書きしたい場合は、そのメモリ領域に必要なデータを入力し、コントローラーにそれを取得するように指示するだけです。データを読み取るときと同様に、CPUは転送をマイクロマネージメントする必要なく、自由に起動して独自の処理を実行できます。タスクが完了するとすぐに、割り込みで警告されます。これが、デバイス(GPU、NIC、IDEまたはSATAを使用するストレージデバイスなど)との間のデータ転送を非常に高速にして、実行するCPUをほとんど必要としない理由です。
IOMMUをバイパスするか、その効果を減らすにはいくつかの方法があります。たとえば、VT-d1を使用しているx2apicと割り込みの再マッピングがないIntelの古いIOMMUは vulnerable であり、アドレス変換サービス、またはATS、- 制限をバイパスできる です。ただし、適切に実装されたIOMMUは、DMA攻撃が任意のシステムメモリを読み取ることを完全に防ぎます。これは、メモリ暗号化ではなく、DMA攻撃からの保護に依存するものです。メモリ暗号化は、パッシブバススニッフィングやコールドブート攻撃から保護するように設計されています。
X86でのメモリ管理は非常に複雑であり、その仕様には何千ページもの高密度の技術情報が含まれています。このすべての複雑さは、GPUが IOMMUを再構成する を許可してセキュリティを低下させるなど、奇妙なセキュリティの影響をもたらす可能性があります。理論的には、IOMMUはデバイスが不正なメモリ範囲にアクセスするのを防ぎますが、この技術とこれに伴う潜在的な脆弱性の根底にある 複雑さに終わりはない があります。
これで十分ではなかった場合、IOMMUがデバイスを制限するために使用するDMARテーブルは、コンピューターのOEMによって管理されます。コンピュータにDMARテーブルが壊れて出荷され、DMA攻撃保護を完全に無効にすることは珍しくありません。このため、一部のオペレーティングシステム(Debian GNU/Linuxなど)では、実際にはIOMMUがデフォルトで無効になっています。