多くの記事で、署名の遅延とアセンブリの厳密な名前により、ハイジャックを防止できると書かれているのを見てきました。
どういう意味ですか?
私が知っている唯一のことは、厳密な名前がないと、GAC にアセンブリをインストールできないことです。厳密な名前のないアセンブリがあるとします。ハイジャックされる可能性はありますか?
誰かが私の疑問を明確にしてください。
多くの記事で、署名の遅延とアセンブリの厳密な名前により、ハイジャックを防止できると書かれているのを見てきました。
どういう意味ですか?
私が知っている唯一のことは、厳密な名前がないと、GAC にアセンブリをインストールできないことです。厳密な名前のないアセンブリがあるとします。ハイジャックされる可能性はありますか?
誰かが私の疑問を明確にしてください。
これに関する情報は MSDN にたくさんあります。例: Strong NamingとDelay Signing
基本的な考え方を要約すると、次のようになります。
厳密な名前付けは、展開後に変更されていないことを検証するために後で使用できる単純な識別マークをアセンブリにスタンプする方法です。厳密な名前は、基本的に、アセンブリの名前、バージョン、および開発者に固有の "厳密な名前のキー" のハッシュです。厳密な名前のアセンブリへの参照は、厳密な名前のないアセンブリへの参照よりも厳密な検証を受けます。特に、厳密な名前の参照はバージョン番号と一致する必要があり、厳密な名前のハッシュは一致する必要があります。
これにより、プログラムの潜在的なセキュリティ脆弱性の 2 つの一般的な原因を回避できます。
厳密な名前のデータが一致しないため、厳密な名前のプロセスはこれらの両方のアクションを拒否します。これが、GAC のアセンブリに厳密な名前を付ける必要がある理由です。アセンブリは非常に遍在的に使用されているため、そうでなければ、この種のハイジャックの主要なターゲットになります。
ただし、厳密な名前は発行者の身元を確認するためにまったく何もしないことに注意してください。誰でも Microsoft であると主張する厳密な名前のアセンブリを公開できますが、厳密な名前にはその主張に反論するものは何もありません。身元の確認は、Authenticode デジタル署名の仕事であり、厳密な名前付けとは異なります。この 2 つは一緒に使用されることがよくありますが、直交する概念です。
遅延署名は、ビルド プロセス外でアセンブリに署名するための手法です。ここでの考え方は、ビルド時に厳密な名前のキーを使用できないようにするポリシーを会社が持っている可能性があるということです (おそらく、それらはオフラインに保持されているか、パスワードの背後で保護されています)。遅延署名されたアセンブリは、空白の strong- name key: 基本的に、許可されたユーザーが後でキーを追加するためのスペースを予約します。それまでの間、部分的な厳密な名前のキーが含まれています。これは、他のアセンブリが厳密な参照を作成するのに十分な情報ですが、変更や変更を検出するには十分ではありません。