web-dev-qa-db-ja.com

パスワードはメモリにありますか?

暗号化されたHDD(dm_crypt)を持っています。そのため、パスワードを単純なテキストファイルに保存します。私は通常、そこからパスワードをコピーして貼り付けます。 OK!
Q:このテキストファイルを開くと、メモリに入ります。したがって、クリアテキスト形式のすべてのパスワードは「そこに」行きます。テキストファイルを閉じると、パスワードはメモリから削除されますか?私が使用しているメモリは、他の人がリアルタイムでアクセスできますか?パスワードをコピー/貼り付けるより良い/より安全な方法はありますか?例えば。それを設定するには、Ctrl + Vを押すと、クリップボードがクリアされますか? Fedora 14.を実行しています。
または「RAMを暗号化」するにはどうすればよいですか?何か方法はありますか?
ありがとうございました!

19
LanceBaynes

はっきり言えば、そうです。それは非常に単純化された答えです。

より複雑な答えは、オペレーティングシステムがメモリを処理する方法を理解する必要があるということです。リング、特権レベルなどの話を聞くかもしれません。簡単に説明しましょう。

  • オペレーティングシステムが起動すると(16ビットのBIOS全体が渡されます)、基本的に動作するメモリ(RAM全体)が山積みになり、特権モードで実行されます。つまり、好きなことをすべて実行できます。メモリの一部。
  • ただし、1980年以降のx86アーキテクチャーは、私が生まれる前の何かがプロテクトモードの概念をサポートしてきました。CPUハードウェアは、オペレーティングシステムがメモリアドレスを分離する方法でアプリケーションを起動できるようにするメカニズムを提供します。
  • したがって、この 保護モード を使用すると、オペレーティングシステムは、各アプリケーションの仮想アドレススペースを作成できます。つまり、アプリケーションのメモリの概念は実際の物理メモリアドレスと同じではなく、アプリケーションにはメモリへの特権アクセスがありません。実際、アプリケーションは、オペレーティングシステムへの明確に定義された要求(syscall)を介してexceptを参照できないため、互いのメモリアドレスを直接変更できません。 2つのプロセスが1つのアドレス空間を共有する共有メモリなどのリクエスト。

(これは単純化であり、簡潔にするために私は巨大なチャンクをスキップしていますが、それは要点です-アプリケーションはOSとハードウェアによって管理されているメモリにアクセスするための要求を持っています)。

理論的には、大丈夫ですよね?技術的には真実ではありません。私が言ったように、オペレーティングシステムは他のプロセスのメモリにアクセスするための明確に定義された方法を提供します。可能性の観点から、いくつかの方法を次に示します。

  • 私が アプリケーションのメモリをダンプする の場合、保存されているパスワードをかなり簡単に解決できます。
  • debugger または適切に設計されたユーザーランドスタイルのルートキットを使用すると、そのメモリへのアクセスを提供できる場合があります。私はそのようなテクニックの専門家ではありませんが、特定の状況下でそれができることを知っています。
  • 最後に、ここではオペレーティングシステムが自己破壊的である可能性があります。アクセスできる仮想メモリには、他にもいくつかの影響があります。オペレーティングシステムは、現在実行中のアプリで十分なRAMが利用可能であることを確認するためにメモリをスワップすることが多いため、仮想システムとして提示します。したがって、興味深い攻撃は、システムをスワップさせてからクラッシュさせることです。あなたのスワップも暗号化されていますか?

最後に、攻撃者がカーネルモジュールを介してカーネルでコードを実行している場合、ASCII文字列をメモリ空間で検索するのを妨げるものは何もないので、ゲームはとにかく終わったことを指摘しておきます。

ただし、現実的には:

  • カーネルがルートキットを介して侵害された場合、キーロガーはおそらく、パスワードを取得するという点でメモリをスキャンするように設計されたものよりも実装が簡単です。
  • デバッグするように設計されていないプログラムを評価するためのデバッガーを含むユーザーランドスタイルのルートキット(つまり、デバッグシンボルなし)は、たとえ理論的には可能であっても、実装するのは簡単ではありません。また、これを悪用するのは簡単ではありません-ユーザー、つまりソーシャルエンジニアリングや物理的なアクセスを意味するデバッガーの下で、エディターをだまして実行する必要があります。

ただし、プレーンテキストのパスワードはどこにも保存しないことをお勧めします。リマインダーが必要な場合は、部分的に不完全なプロンプトを使用することをお勧めします。これは、メモリを揺さぶって、パスワードを推測できるようにしますが、他の人があなたを知っていても、そうすることを合理的に防ぎます。これは理想からはほど遠いですが、プレーンテキストのパスワードよりも優れています。

31
user2213

私はKeepassXを使用します。これは、パスワードとオプションでキーファイルを介して暗号化されたファイルを使用し、これらの理論的な問題を気にしません。

9
Ondřej Mirtes
  • Keepassを使用すると、クリップボードマネージャーをブロックして、クリップボードが変更されたときに通知を受け取らないようにすることもできます(これにより、自動入力で貼り付けられたテキストがクリップボードマネージャーソフトウェアなどに保存されなくなります。これは、この自動入力が有効になっていない場合に発生します)。

  • クリップボードの内容を定期的にチェックできるアプリケーションから保護する 秘密を分割 する関数もあります。

1
liviu