web-dev-qa-db-ja.com

ディスク全体の暗号化に対する物理的な攻撃を防ぐことは可能ですか?

私はディスク暗号化キーが盗まれないようにするためにいくつかの方法を調査してきました。私が遭遇したものはTRESORと呼ばれています。このカーネルパッチを使用すると、AESを使用して暗号化されたパーティションを作成でき、キーはRAMではなくCPUキャッシュに保存されます。最初はこれは素晴らしいと思いましたが、さらに質問すると、まだRAMに保存されている復号化されたデータはすべて、物理的なコールドブートダンプに対して脆弱です。潜在的な方法です。これを安全にするには、使用可能なOSのコンテンツを暗号化することですRAM TRESORを使用して暗号化パーティションを作成します。これは、キーが暗号化RAMにあり、RAMのキーがCPUキャッシュにあるためです。これが安全な方法であるかどうか、またはどのように適切かはまだわかりません。ディスク全体の暗号化に対する物理的な攻撃を防ぐことは可能ですか?その場合、どうすればよいですか?

15
Clay Freeman

CPUが実際にデータを処理するには、データはある時点でクリアテキストである必要があります。 [〜#〜] tresor [〜#〜] は、CPUレジスタを使用します。物理的な攻撃者の場合、おそらくRAMよりも読み取りが困難ですが、その範囲は- 暗号化キー:そのキーはレジスターにありますが、暗号化または復号化されたデータはまだRAMにあります。CPUには少数のレジスターしかなく、データを追加する余地はありません。

TRESOR-backed RAM diskを使用すると、RAMであるため)高速アクセスの「暗号化ファイル」がありますが、それらはカーネルとアプリケーションコードの観点ではまだ「ファイル」です。 data willある時点でRAM)で復号化されます.

本当に暗号化したい場合all RAMを常に暗号化する場合、そのような暗号化を実行するためのハードウェアを含むCPUを使用することを選択します(いくつかあります)スマートカードCPU(ただし、私のPCではPCのようなCPUはありません)、または仮想CPUがTRESORのように実装され、メモリアクセスごとに自動暗号化と復号化が行われる完全な仮想マシンを作成します。実際の暗号化モードでは、いくつかの徹底的なランダムアクセスで高速な復号化を可能にしながら、データを安全に暗号化することは容易ではありません。プロトタイプについては知りませんが、理論的には実現可能です。学生にとって素晴らしいプロジェクトです(これは、 PhD)。それはひどく遅いだろう。

8
Thomas Pornin

さて、 Microsoft (私は知っています、最高セキュリティソースではない)からの古い言い回しがあります:

法則3:悪意のあるユーザーがコンピュータに物理的に無制限にアクセスできる場合、それはもはやコンピュータではありません。

そして、なぜそれがあなたのケースに当てはまるのですか?十分な暗号化機能があれば、誰かが盗んだ場合でもハードディスクは安全です。しかし、サーバーの電源がオフになった直後にその人があなたのRAM=チップにアクセスできる場合、彼はあなたが言ったシナリオでキーを回復することを試みることができます。

言ったように、CPUキャッシュにキーを格納することで、キーを最小限に抑えることができますが、暗号化されていないデータは、RAMチップで引き続き利用できます。

そして、あなたが電源を入れる前に彼があなたのコンピュータにアクセスできたらどうでしょう?物理的な保護を検討していますかbefore起動していますか?それ以外の場合は、システム全体が暗号化されていても、悪者は偽のログイン画面を作成してパスワードを取得する可能性があります。または、キーロガーを取り付けることもできます。または、彼はいくつかのデバイスを接続し、RAMチップを最初からクローンします。または、BIOSを変更してそれを行うこともできます。または、... NSAカタログは、潜在的な攻撃のいくつかのアイデアを持っています。

したがって、コンピュータは物理的に安全である必要があります。つまり、物理的なアクセスは困難でなければならない(たとえば、RAMコンテンツが消える)ために十分な時間が与えられる)だけでなく、CPUからの磁気放射をキャプチャできないことも意味しますまたはマザーボードやキーボード、ノイズ、入力中やマウスを動かしているときの写真。

RAMコンピュータからチップを取り出すことが必要であるというレベルのセキュリティが本当に必要な場合は、おそらく予想以上のセキュリティが必要です。

更新

コメントの後:

クライアントのデータが実行中にサーバーから物理的に取得できない、最近電源がオフになっている、またはしばらく電源がオフになっていることがないように、保護が必要です。

この身体的な側面を考えるだけで、私の答えを少し広げることができると思います。

  • サーバーの電源をしばらくオフにした後でデータを保護するには:

暗号化はあなたの友達です。誰かが強力なアルゴリズムと強力なパスワードで暗号化されたHDDを取り出した場合、彼はそれを攻撃するためにブルートフォースを実行し続けることになります。

考慮すべき点:

a)ディスク全体の暗号化では、マウントするときにユーザーまたは何らかのプログラムがパスワードを「入力」する必要があります。それがあなたなら、毎回それをオンにできるようになっていなければなりません。プログラムの場合、キーを保存する場所

b)データ/フォルダのみを暗号化すると、「キーを保存して有効にする場所」という同じ問題が発生します。

  • 最近サーバーの電源を切った後、または実行中にデータを保護するには:

実行中は、HDD間のパスが必要です-RAM-CPUは暗号化されています。ThomasPorninからの回答が説明しているように、CPUを備えたサーバーは認識できません。 PCI、PCI Express、FireWireなどは速度を上げるためにDMA)に依存しているため、一部の周辺機器との互換性について心配する必要があります。したがって、パフォーマンスの問題が発生する可能性があります。 。

これを回避する簡単な方法は、サーバーを物理的に保護することです。安全な部屋のように、サーバーの電源がオフになり、特定の温度に温められます(誰かがあなたのRAM=チップを盗むのを避けるため)。または、制御された爆発または電圧ピークでチップを破壊することさえ。それを作るものすべて誰かが侵入してサーバーの下に立ち去るのは難しいです。

そしてもちろん、これらすべては、物理的な存在なしで、ソフトウェアなどを使用するだけで、多くの攻撃がリモートで実行できることを除外します。

4
woliveirajr

OPがサーバーを構築し、それをコロコロ施設に発送することを想定しています。

物理的なセキュリティには次のものが含まれます。

  • rAM、CPU、および関連回路をPMMA/Al2O3コンポジットに組み込みます(電気絶縁性、熱伝導性、耐久性)
  • オプションで、その核となるCPUとRAMにデッドマン回路を含める
  • 電源と必要なNIC以外のすべての外部コネクタを取り外しますが、外観は変更しません
  • 複数のケースの侵入スイッチを設置し、それぞれがトリガーされたときに電力を停止します(さらに良いのは、それらにCPUを核攻撃させ、RAMリモートで武装解除しない限り))
  • リモート管理機能を無効にする

ソフトウェアのセキュリティには次のものが含まれます。

  • ssh用のdropbearを使用してinitramfsにリモートで起動します。
  • 起動後、LUKSキースロットとヘッダーをランダムビットで上書きします(再起動するまで必要ありません)
  • 再起動時にsshを実行してinitramfsに戻し、LUKSキースロットとヘッダーを復元します
  • 安全なバックアップを頻繁に行う

非常に断固として熟練した敵を除いて、それはそれをするべきです。

1
mirimir

物理ディスクの暗号化は、多くの単純なハックを阻止するのに大いに役立ちます。私はコンピュータサイエンスとサイバーセキュリティを教えていますが、学校システムの非常に制限的なポリシーによって、私はそれらのセキュリティを回避することがあります。学校のシステムはディスク暗号化を使用していないため、物理的なアクセスのおかげで、Windowsマシンのローカル管理者アクセスを5分未満で取得できます。フルディスク暗号化を使用している場合、これを行うことはできません。

1
CSTeach

一部のファイルシステムは、ダイレクトアクセスを表すDAXをサポートしています。これはページキャッシュをバイパスする機能であるため、TRESORで暗号化されたファイルシステムは、暗号化されていないデータを読み取ったり書き込んだりしても、それほどリークしません。 tmpfsにファイルを置き、ループバックデバイスを作成してTRESORで暗号化し、DAXをサポートするファイルシステムでフォーマットすることができます。これは、暗号化されたコールドブートに対応したRAMディスクになります。

また、非常に大きなtmpfsファイルシステムを作成し、そこに巨大なファイルを配置して、メモリの大部分(90または95%)を使用し、システムが非常に低速でメモリがほとんどないため使用できないようにすることもできます。次に、そのメモリ常駐ファイルをTRESORで暗号化し、それをスワップファイルとして使用します。これにより、メモリの大部分を事実上暗号化したままにすることができ、最も頻繁に使用される少量は暗号化されないままになります。私自身もこれを試してみましたが、少なくとも仮想マシンでは、暗号化されていないメモリを約256 MiBまで減らすことができます。カーネルを微調整し、十分な数のsysctlを使用すると、64まで下げることができるはずです。

興味があるかもしれないいくつかのプロジェクト:

CryptKeeper:暗号化されたRAMによるセキュリティの向上

RamCrypt:ユーザーモードプロセス用のカーネルベースのアドレス空間暗号化

信頼できないメインメモリでの安全なPRogram実行のためのバイトコードインタープリター

Nginx、php-fpmなどの個々のプロセスのメモリ空間のみを暗号化する必要がある場合は、RamCryptが最適です。これはTRESORの修正バージョンであり、3.19カーネルで動作します(ただし、新しいヘッダーファイルといくつかの関数の名前の変更を伴ういくつかのリジェクトで、新しいカーネルに移植することは非常に重要です)。許容できるパフォーマンスの影響があります。

DDR3およびDDR4メモリは、「メモリスクランブリング」と呼ばれる機能をサポートしています。これは、過度のdi/dt(バス上の連続する1と0からの干渉)を減らすために使用され、従来のコールドブート攻撃を困難にします。私はそれがどのアルゴリズムを使用しているのか、それが暗号的に安全であるかどうかを知りません。 Intel Management Engineの秘密 の26〜30ページを読んで、リバースエンジニアリングの少なくとも1つのインスタンスがどのように動かなくなっているかを確認してください。

0
forest