8

厳密な名前 (.snk ファイルに格納されたキーペア) による署名は、(他の用途の中でも)アセンブリの偽造から保護することを目的としています。

例: 厳密な名前で署名されたアセンブリを出荷した後、他の開発者が私のアセンブリを使用したため、そのアセンブリには私のキーペアの公開キーに言及している私のアセンブリへの参照が含まれています。一部のユーザーは、その開発者アセンブリと私のアセンブリをインストールし、その開発者のコ​​ードを喜んで使用します。他の誰かが私のバージョンのように見えるアセンブリを作成しようとし、それが「インストールする価値のある更新」であることをユーザーに納得させた場合、私は自分のキーペアを制御しており、偽造されたアセンブリは同じキーペアで署名されていないため、偽造されたアセンブリは読み込まれません。 . わかりました。

しかし、悪意のある当事者が私のアセンブリと他の開発者の依存アセンブリの両方を偽造し、それらの両方を「出荷」することを防ぐのは何ですか? 彼らは私のアセンブリとその開発者のアセンブリを取得し、両方を改ざんし、私のアセンブリの偽造バージョンに任意のキーで署名し、それへの参照を依存アセンブリの偽造バージョンに追加し、署名してから両方を出荷します。つまり、悪意を持って 2 つのアセンブリを「出荷」することは、1 つのアセンブリを「出荷」するよりもはるかに難しくないはずです。

厳密な名前で署名すると、複数のアセンブリの偽造からどのように保護されますか?

4

2 に答える 2

6

アセンブリに厳密な名前を付けることは、実際には署名されたアセンブリを保護することを意味するものではありません。署名されたアセンブリをロードしている他のアセンブリを保護するためです。

たとえば、EXEが信頼されており、既知の場所(GAC、ネットワーク共有、インターネットなど)から既知のDLLをロードする場合は、ある程度の信頼性を持って強力な名前を使用してロードできます。アセンブリは改ざんされていません。

ただし、アセンブリのセット全体を分解してから再アセンブルして再署名すると、そうです。残りのアセンブリをロードするコード行を書き直して、アセンブリがロードされるようにすることができます。新しい(偽の)キー。

しかし、この種の改ざんは明らかです。言い換えれば、強力な名前の署名は、改ざんの明確な証拠を提供しますが、すべての場合にそれを防ぐわけではありません。それに加えて、ローカル管理者が(「開発」の目的で)厳密な名前の検証を完全に無効にできるという事実と、強力な名前の署名が防弾セキュリティメカニズムではないことは明らかです。

ただし、Authenticodeとドライバーの署名についても同じことが言えます。「セキュリティ警告を無視する」ようにユーザーに指示する製品を目にしたことがあります。これは基本的に、厳密な名前の検証が無効になっている場合、またはアセンブリのセット全体の署名が削除されている場合にEXEが実行することであり、警告を無視します。

于 2011-02-01T07:32:43.750 に答える
0

強力なネーミングとは、「ネーミング」です。ここから引用します: Using Strong Name Signatures

「厳密な名前は、.NET Framework アセンブリに一意の ID を与えるための強力なメカニズムを提供します。」

このメカニズムから得られるのはそれだけです。これは、あなたのアセンブリとそれが参照するすべてのアセンブリを偽造できることを意味しますが、「あなたがやった」というふりをすることはできません。あなたがこれらのアセンブリの発行者であるふりをすることはできません。

于 2011-02-01T07:48:31.093 に答える