3

私は最近、次のSOの質問を読みました。

パスワードまたは秘密鍵を Web ホストに保存する最良の方法は何ですか?

この記事の執筆時点では、暗号化された接続文字列 (ASP.NET アプリで使用するため) またはデータ保護 API (DPAPI) の使用について言及しています。どちらも、このユーザーの特定のユース ケースに適したソリューションのようです。

ただし、従来から、パスワードや接続文字列などの機密性の高い構成値は、それらが使用されているサーバーのユーザー環境変数に常に保存してきました。これらは (IT の観点から) 定義、変更、読み取りが容易です。また、使用するフレームワークや言語に関係なく、簡単にアクセスできます。

問題は、機密データを Windows ユーザー環境変数に保存することは適切な方法ですか? そうでない場合、その理由は何ですか?

編集:

Ken のコメントに基づいて、前提条件の質問は次のとおりです。Windows レジストリの内容は暗号化されていますか?

4

2 に答える 2

7

ユーザー環境またはシステム環境に保存するものはすべて、NTUSER.DAT および SYSTEM レジストリ ファイルにクリア テキスト (暗号化されていない) で保存されます。これらは、16 進エディタだけでなく、単純なテキスト エディタや grep を使用しても読み取ることができます。多くのツールの 1 つを使用してレジストリ ファイルからデータを解析/抽出すると、さらに簡単に読み取ることができます。

例 (Windows 2008 Server、RIP Linux でダンプを実行):

これは環境変数ダイアログです。ユーザー変数 (MySecretPassword=NobodyCanReadThis) とシステム変数 (MySystemSecret=NobodyCanReadThisEither) を設定しました。 1 人のユーザーと 1 つのシステム変数を含む Windows 環境変数ダイアログ

これは、Windows NTFS パーティションをマウントし、管理者ディレクトリで NTUSER.DAT ファイルを探した後、Linux から hexedit でどのように見えるかです。ユーザー環境変数名は簡単に検索でき、その内容は平文で見つかります。 NTUSER.DAT の 16 進ダンプ

これは、Windows\System32\Config ディレクトリの SYSTEM レジストリ ファイルです。ここでも、変数名を簡単に検索できます。この場合、変数の値は変数名の後に数バイトありましたが、非常に簡単に見つけることができました。 SYSTEM の 16 進ダンプ

于 2012-06-28T00:45:22.913 に答える
1

上記の回答に加えて、別のユーザーとしてログインし、Sysinternals Process Explorer などのツールを使用して、実行中のプロセスを確認できます。タブの 1 つには、プロセスが実行されている環境変数が一覧表示されます。これには、あまり秘密ではないユーザー環境変数が含まれます。

これを見てショックを受け、プロセスを実行しているユーザーのみがアクセスできる安全なファイルを使用するように変更しました。

于 2015-06-26T09:40:59.903 に答える