1. ホーム
  2. .net

[解決済み] デバッグシンボル(pdbファイル)を本番環境に展開するリスクは?

2023-07-06 12:35:36

質問

私は、例外のスタック トレースを記録するアプリケーションを持っており、実稼働環境にデプロイされたときに、これらのスタック トレースにファイル名と行番号を含めたいと思っていました。 私は、アセンブリとともにデバッグ シンボルを展開する方法を見つけ出したのですが、この問題を研究する過程で この質問 これは、実稼働環境で pdb ファイルをインクルードするのは良いアイデアではないことを示唆しています。 受理された回答へのコメントによると、"...デバッグ情報は機密データを提供し、攻撃のベクトルになる可能性があります。あなたのアプリが何であるかによりますが、"

では、どのような種類の機密データが公開される可能性があるのでしょうか。 デバッグ シンボルは、どのようにアプリケーションを危険にさらすために使用できるのでしょうか? 技術的な詳細については興味がありますが、私が本当に求めているのは、任意のアプリケーションおよび生産環境に対してデバッグ シンボルを含めることのリスクを評価するための実用的な方法なのです。 別の言い方をすれば、起こりうる最悪の事態は何でしょうか?

EDIT。 フォローアップ質問/明確化

これまでのみんなの回答から、この質問は.NETアプリケーションのために少し単純化することができるように思えます。 のこのビットは John Robbins ブログ にリンクされている Michael Maddoxの回答 が目に飛び込んできました。

<ブロッククオート

.NET PDBには2つの情報、ソースファイル名と ソースファイル名と行数 とその行、そしてローカル変数 の名前です。他のすべての情報は .NETメタデータに含まれているため、同じ情報を重複して記述する必要はありません。 PDBファイルに同じ情報を複製する必要はありません。 PDBファイルで同じ情報を複製する必要はありません。

私にとっては、これは他の人が Reflector について言っていることの繰り返しで、本当の問題はアセンブリへのアクセスであるということを暗に示しています。 それが決まれば、PDB に関して行うべき唯一の決定は、ファイル名、行番号、およびローカル変数名 (そもそもエンド ユーザーにスタック トレースを表示しないと仮定して) を公開することを気にするかどうかということです。 あるいは、私はこれをあまりにも単純化しすぎましたか?

どのように解決するのですか?

ここで、もう一つの質問を見てみましょう。

PDB デバッグ ファイルをライブ サーバーに残しておくことにセキュリティ上の問題はないのでしょうか?

PDBファイルについての詳細も。

PDB ファイル。開発者が知っておくべきこと

一般的に、私は常にデプロイメントに pdb ファイルを含めます。

もしあなたがユーザーにスタックトレースを決して公開しないのであれば (そして一般的にはそうすべきではない)、PDB ファイルをデプロイすることによる追加のセキュリティリスクは実際にはありません。

ユーザーが見えるスタックトレースが起こるとき、ユーザーはあなたのファイル名とファイル行番号を含む完全なスタックトレースを見ることができます。 これは、アプリがどのように構築されているかについてのアイデアを与えることができ、ハッキングする際に役立つ可能性があります。

より大きなセキュリティ脅威は、次のようなものです。 リフレクター のようなもので、DLL で使用すると、pdb ファイルの有無にかかわらず、ソースコードを見ることができるようになります。